summaryrefslogtreecommitdiffstats
path: root/openssl/doc/apps/sess_id.pod
Commit message (Expand)AuthorAgeFilesLines
='search'/>
path: root/src/3rdparty
diff options
context:
space:
mode:
authoraxis <qt-info@nokia.com>2009-04-24 11:34:15 (GMT)
committeraxis <qt-info@nokia.com>2009-04-24 11:34:15 (GMT)
commit8f427b2b914d5b575a4a7c0ed65d2fb8f45acc76 (patch)
treea17e1a767a89542ab59907462206d7dcf2e504b2 /src/3rdparty
downloadQt-8f427b2b914d5b575a4a7c0ed65d2fb8f45acc76.zip
Qt-8f427b2b914d5b575a4a7c0ed65d2fb8f45acc76.tar.gz
Qt-8f427b2b914d5b575a4a7c0ed65d2fb8f45acc76.tar.bz2
Long live Qt for S60!
Diffstat (limited to 'src/3rdparty')
-rw-r--r--src/3rdparty/.gitattributes19
-rw-r--r--src/3rdparty/Makefile9
-rw-r--r--src/3rdparty/README22
-rw-r--r--src/3rdparty/clucene/APACHE.license201
-rw-r--r--src/3rdparty/clucene/AUTHORS22
-rw-r--r--src/3rdparty/clucene/COPYING30
-rw-r--r--src/3rdparty/clucene/ChangeLog0
-rw-r--r--src/3rdparty/clucene/LGPL.license475
-rw-r--r--src/3rdparty/clucene/README92
-rw-r--r--src/3rdparty/clucene/src/CLucene.h38
-rw-r--r--src/3rdparty/clucene/src/CLucene/CLBackwards.h87
-rw-r--r--src/3rdparty/clucene/src/CLucene/CLConfig.h304
-rw-r--r--src/3rdparty/clucene/src/CLucene/CLMonolithic.cpp115
-rw-r--r--src/3rdparty/clucene/src/CLucene/LuceneThreads.h72
-rw-r--r--src/3rdparty/clucene/src/CLucene/StdHeader.cpp132
-rw-r--r--src/3rdparty/clucene/src/CLucene/StdHeader.h491
-rw-r--r--src/3rdparty/clucene/src/CLucene/analysis/AnalysisHeader.cpp200
-rw-r--r--src/3rdparty/clucene/src/CLucene/analysis/AnalysisHeader.h234
-rw-r--r--src/3rdparty/clucene/src/CLucene/analysis/Analyzers.cpp389
-rw-r--r--src/3rdparty/clucene/src/CLucene/analysis/Analyzers.h309
-rw-r--r--src/3rdparty/clucene/src/CLucene/analysis/standard/StandardAnalyzer.cpp46
-rw-r--r--src/3rdparty/clucene/src/CLucene/analysis/standard/StandardAnalyzer.h47
-rw-r--r--src/3rdparty/clucene/src/CLucene/analysis/standard/StandardFilter.cpp58
-rw-r--r--src/3rdparty/clucene/src/CLucene/analysis/standard/StandardFilter.h37
-rw-r--r--src/3rdparty/clucene/src/CLucene/analysis/standard/StandardTokenizer.cpp446
-rw-r--r--src/3rdparty/clucene/src/CLucene/analysis/standard/StandardTokenizer.h88
-rw-r--r--src/3rdparty/clucene/src/CLucene/analysis/standard/StandardTokenizerConstants.h30
-rw-r--r--src/3rdparty/clucene/src/CLucene/config/CompilerAcc.h166
-rw-r--r--src/3rdparty/clucene/src/CLucene/config/CompilerBcb.h68
-rw-r--r--src/3rdparty/clucene/src/CLucene/config/CompilerGcc.h175
-rw-r--r--src/3rdparty/clucene/src/CLucene/config/CompilerMsvc.h134
-rw-r--r--src/3rdparty/clucene/src/CLucene/config/PlatformMac.h19
-rw-r--r--src/3rdparty/clucene/src/CLucene/config/PlatformUnix.h12
-rw-r--r--src/3rdparty/clucene/src/CLucene/config/PlatformWin32.h11
-rw-r--r--src/3rdparty/clucene/src/CLucene/config/compiler.h259
-rw-r--r--src/3rdparty/clucene/src/CLucene/config/define_std.h110
-rw-r--r--src/3rdparty/clucene/src/CLucene/config/gunichartables.cpp386
-rw-r--r--src/3rdparty/clucene/src/CLucene/config/gunichartables.h11264
-rw-r--r--src/3rdparty/clucene/src/CLucene/config/repl_lltot.cpp47
-rw-r--r--src/3rdparty/clucene/src/CLucene/config/repl_tchar.h106
-rw-r--r--src/3rdparty/clucene/src/CLucene/config/repl_tcscasecmp.cpp21
-rw-r--r--src/3rdparty/clucene/src/CLucene/config/repl_tcslwr.cpp15
-rw-r--r--src/3rdparty/clucene/src/CLucene/config/repl_tcstod.cpp23
-rw-r--r--src/3rdparty/clucene/src/CLucene/config/repl_tcstoll.cpp46
-rw-r--r--src/3rdparty/clucene/src/CLucene/config/repl_tprintf.cpp149
-rw-r--r--src/3rdparty/clucene/src/CLucene/config/repl_wchar.h121
-rw-r--r--src/3rdparty/clucene/src/CLucene/config/threadCSection.h71
-rw-r--r--src/3rdparty/clucene/src/CLucene/config/threadPthread.h59
-rw-r--r--src/3rdparty/clucene/src/CLucene/config/threads.cpp162
-rw-r--r--src/3rdparty/clucene/src/CLucene/config/utf8.cpp237
-rw-r--r--src/3rdparty/clucene/src/CLucene/debug/condition.cpp80
-rw-r--r--src/3rdparty/clucene/src/CLucene/debug/condition.h64
-rw-r--r--src/3rdparty/clucene/src/CLucene/debug/error.cpp73
-rw-r--r--src/3rdparty/clucene/src/CLucene/debug/error.h74
-rw-r--r--src/3rdparty/clucene/src/CLucene/debug/lucenebase.h75
-rw-r--r--src/3rdparty/clucene/src/CLucene/debug/mem.h130
-rw-r--r--src/3rdparty/clucene/src/CLucene/debug/memtracking.cpp371
-rw-r--r--src/3rdparty/clucene/src/CLucene/document/DateField.cpp60
-rw-r--r--src/3rdparty/clucene/src/CLucene/document/DateField.h64
-rw-r--r--src/3rdparty/clucene/src/CLucene/document/Document.cpp237
-rw-r--r--src/3rdparty/clucene/src/CLucene/document/Document.h158
-rw-r--r--src/3rdparty/clucene/src/CLucene/document/Field.cpp315
-rw-r--r--src/3rdparty/clucene/src/CLucene/document/Field.h261
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/CompoundFile.cpp380
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/CompoundFile.h219
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/DocumentWriter.cpp571
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/DocumentWriter.h107
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/FieldInfo.h16
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/FieldInfos.cpp236
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/FieldInfos.h171
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/FieldsReader.cpp231
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/FieldsReader.h60
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/FieldsWriter.cpp186
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/FieldsWriter.h49
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/IndexModifier.cpp254
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/IndexModifier.h316
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/IndexReader.cpp668
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/IndexReader.h485
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/IndexWriter.cpp697
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/IndexWriter.h425
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/MultiReader.cpp722
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/MultiReader.h202
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/SegmentHeader.h314
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/SegmentInfos.cpp259
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/SegmentInfos.h128
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/SegmentMergeInfo.cpp104
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/SegmentMergeInfo.h47
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/SegmentMergeQueue.cpp74
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/SegmentMergeQueue.h38
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/SegmentMerger.cpp723
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/SegmentMerger.h169
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/SegmentReader.cpp816
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/SegmentTermDocs.cpp212
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/SegmentTermEnum.cpp389
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/SegmentTermEnum.h138
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/SegmentTermPositions.cpp101
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/SegmentTermVector.cpp188
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/Term.cpp179
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/Term.h146
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/TermInfo.cpp53
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/TermInfo.h61
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/TermInfosReader.cpp443
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/TermInfosReader.h106
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/TermInfosWriter.cpp185
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/TermInfosWriter.h89
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/TermVector.h418
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/TermVectorReader.cpp393
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/TermVectorWriter.cpp349
-rw-r--r--src/3rdparty/clucene/src/CLucene/index/Terms.h174
-rw-r--r--src/3rdparty/clucene/src/CLucene/queryParser/Lexer.cpp371
-rw-r--r--src/3rdparty/clucene/src/CLucene/queryParser/Lexer.h67
-rw-r--r--src/3rdparty/clucene/src/CLucene/queryParser/MultiFieldQueryParser.cpp204
-rw-r--r--src/3rdparty/clucene/src/CLucene/queryParser/MultiFieldQueryParser.h136
-rw-r--r--src/3rdparty/clucene/src/CLucene/queryParser/QueryParser.cpp509
-rw-r--r--src/3rdparty/clucene/src/CLucene/queryParser/QueryParser.h165
-rw-r--r--src/3rdparty/clucene/src/CLucene/queryParser/QueryParserBase.cpp369
-rw-r--r--src/3rdparty/clucene/src/CLucene/queryParser/QueryParserBase.h204
-rw-r--r--src/3rdparty/clucene/src/CLucene/queryParser/QueryToken.cpp73
-rw-r--r--src/3rdparty/clucene/src/CLucene/queryParser/QueryToken.h76
-rw-r--r--src/3rdparty/clucene/src/CLucene/queryParser/TokenList.cpp79
-rw-r--r--src/3rdparty/clucene/src/CLucene/queryParser/TokenList.h38
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/BooleanClause.h90
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/BooleanQuery.cpp363
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/BooleanQuery.h126
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/BooleanScorer.cpp248
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/BooleanScorer.h99
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/CachingWrapperFilter.cpp86
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/CachingWrapperFilter.h80
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/ChainedFilter.cpp213
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/ChainedFilter.h86
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/Compare.h161
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/ConjunctionScorer.cpp144
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/ConjunctionScorer.h50
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/DateFilter.cpp93
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/DateFilter.h59
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/ExactPhraseScorer.cpp85
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/ExactPhraseScorer.h31
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/Explanation.cpp133
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/Explanation.h66
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/FieldCache.cpp55
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/FieldCache.h182
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/FieldCacheImpl.cpp529
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/FieldCacheImpl.h144
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/FieldDoc.h70
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/FieldDocSortedHitQueue.cpp171
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/FieldDocSortedHitQueue.h159
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/FieldSortedHitQueue.cpp212
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/FieldSortedHitQueue.h216
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/Filter.h46
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/FilteredTermEnum.cpp136
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/FilteredTermEnum.h61
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/FuzzyQuery.cpp357
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/FuzzyQuery.h156
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/HitQueue.cpp107
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/HitQueue.h55
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/Hits.cpp174
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/IndexSearcher.cpp362
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/IndexSearcher.h73
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/MultiSearcher.cpp227
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/MultiSearcher.h95
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/MultiTermQuery.cpp98
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/MultiTermQuery.h62
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/PhrasePositions.cpp116
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/PhrasePositions.h41
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/PhraseQuery.cpp463
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/PhraseQuery.h127
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/PhraseQueue.h36
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/PhraseScorer.cpp225
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/PhraseScorer.h65
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/PrefixQuery.cpp273
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/PrefixQuery.h75
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/QueryFilter.cpp73
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/QueryFilter.h44
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/RangeFilter.cpp150
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/RangeFilter.h51
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/RangeQuery.cpp204
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/RangeQuery.h71
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/Scorer.h80
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/SearchHeader.cpp141
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/SearchHeader.h456
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/Similarity.cpp233
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/Similarity.h268
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/SloppyPhraseScorer.cpp106
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/SloppyPhraseScorer.h34
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/Sort.cpp345
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/Sort.h356
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/TermQuery.cpp213
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/TermQuery.h81
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/TermScorer.cpp120
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/TermScorer.h53
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/WildcardQuery.cpp147
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/WildcardQuery.h69
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/WildcardTermEnum.cpp150
-rw-r--r--src/3rdparty/clucene/src/CLucene/search/WildcardTermEnum.h67
-rw-r--r--src/3rdparty/clucene/src/CLucene/store/Directory.h108
-rw-r--r--src/3rdparty/clucene/src/CLucene/store/FSDirectory.cpp637
-rw-r--r--src/3rdparty/clucene/src/CLucene/store/FSDirectory.h216
-rw-r--r--src/3rdparty/clucene/src/CLucene/store/IndexInput.cpp233
-rw-r--r--src/3rdparty/clucene/src/CLucene/store/IndexInput.h190
-rw-r--r--src/3rdparty/clucene/src/CLucene/store/IndexOutput.cpp163
-rw-r--r--src/3rdparty/clucene/src/CLucene/store/IndexOutput.h152
-rw-r--r--src/3rdparty/clucene/src/CLucene/store/InputStream.h21
-rw-r--r--src/3rdparty/clucene/src/CLucene/store/Lock.cpp27
-rw-r--r--src/3rdparty/clucene/src/CLucene/store/Lock.h106
-rw-r--r--src/3rdparty/clucene/src/CLucene/store/MMapInput.cpp203
-rw-r--r--src/3rdparty/clucene/src/CLucene/store/OutputStream.h23
-rw-r--r--src/3rdparty/clucene/src/CLucene/store/RAMDirectory.cpp446
-rw-r--r--src/3rdparty/clucene/src/CLucene/store/RAMDirectory.h195
-rw-r--r--src/3rdparty/clucene/src/CLucene/store/TransactionalRAMDirectory.cpp212
-rw-r--r--src/3rdparty/clucene/src/CLucene/store/TransactionalRAMDirectory.h76
-rw-r--r--src/3rdparty/clucene/src/CLucene/util/Arrays.h164
-rw-r--r--src/3rdparty/clucene/src/CLucene/util/BitSet.cpp119
-rw-r--r--src/3rdparty/clucene/src/CLucene/util/BitSet.h62
-rw-r--r--src/3rdparty/clucene/src/CLucene/util/Equators.cpp180
-rw-r--r--src/3rdparty/clucene/src/CLucene/util/Equators.h274
-rw-r--r--src/3rdparty/clucene/src/CLucene/util/FastCharStream.cpp107
-rw-r--r--src/3rdparty/clucene/src/CLucene/util/FastCharStream.h55
-rw-r--r--src/3rdparty/clucene/src/CLucene/util/Misc.cpp288
-rw-r--r--src/3rdparty/clucene/src/CLucene/util/Misc.h75
-rw-r--r--src/3rdparty/clucene/src/CLucene/util/PriorityQueue.h177
-rw-r--r--src/3rdparty/clucene/src/CLucene/util/Reader.cpp186
-rw-r--r--src/3rdparty/clucene/src/CLucene/util/Reader.h138
-rw-r--r--src/3rdparty/clucene/src/CLucene/util/StringBuffer.cpp335
-rw-r--r--src/3rdparty/clucene/src/CLucene/util/StringBuffer.h77
-rw-r--r--src/3rdparty/clucene/src/CLucene/util/StringIntern.cpp158
-rw-r--r--src/3rdparty/clucene/src/CLucene/util/StringIntern.h61
-rw-r--r--src/3rdparty/clucene/src/CLucene/util/ThreadLocal.cpp55
-rw-r--r--src/3rdparty/clucene/src/CLucene/util/ThreadLocal.h143
-rw-r--r--src/3rdparty/clucene/src/CLucene/util/VoidList.h175
-rw-r--r--src/3rdparty/clucene/src/CLucene/util/VoidMap.h270
-rw-r--r--src/3rdparty/clucene/src/CLucene/util/bufferedstream.h155
-rw-r--r--src/3rdparty/clucene/src/CLucene/util/dirent.cpp221
-rw-r--r--src/3rdparty/clucene/src/CLucene/util/dirent.h105
-rw-r--r--src/3rdparty/clucene/src/CLucene/util/fileinputstream.cpp98
-rw-r--r--src/3rdparty/clucene/src/CLucene/util/fileinputstream.h38
-rw-r--r--src/3rdparty/clucene/src/CLucene/util/inputstreambuffer.h126
-rw-r--r--src/3rdparty/clucene/src/CLucene/util/jstreamsconfig.h9
-rw-r--r--src/3rdparty/clucene/src/CLucene/util/streambase.h148
-rw-r--r--src/3rdparty/clucene/src/CLucene/util/stringreader.h124
-rw-r--r--src/3rdparty/clucene/src/CLucene/util/subinputstream.h141
-rw-r--r--src/3rdparty/des/des.cpp602
-rw-r--r--src/3rdparty/freetype/ChangeLog3368
-rw-r--r--src/3rdparty/freetype/ChangeLog.202613
-rw-r--r--src/3rdparty/freetype/ChangeLog.219439
-rw-r--r--src/3rdparty/freetype/ChangeLog.222837
-rw-r--r--src/3rdparty/freetype/Jamfile203
-rw-r--r--src/3rdparty/freetype/Jamrules71
-rw-r--r--src/3rdparty/freetype/Makefile34
-rw-r--r--src/3rdparty/freetype/README64
-rw-r--r--src/3rdparty/freetype/README.CVS50
-rw-r--r--src/3rdparty/freetype/autogen.sh61
-rw-r--r--src/3rdparty/freetype/builds/amiga/README110
-rw-r--r--src/3rdparty/freetype/builds/amiga/include/freetype/config/ftconfig.h55
-rw-r--r--src/3rdparty/freetype/builds/amiga/include/freetype/config/ftmodule.h160
-rw-r--r--src/3rdparty/freetype/builds/amiga/makefile284
-rw-r--r--src/3rdparty/freetype/builds/amiga/makefile.os4287
-rw-r--r--src/3rdparty/freetype/builds/amiga/smakefile291
-rw-r--r--src/3rdparty/freetype/builds/amiga/src/base/ftdebug.c279
-rw-r--r--src/3rdparty/freetype/builds/amiga/src/base/ftsystem.c522
-rw-r--r--src/3rdparty/freetype/builds/ansi/ansi-def.mk74
-rw-r--r--src/3rdparty/freetype/builds/ansi/ansi.mk21
-rw-r--r--src/3rdparty/freetype/builds/atari/ATARI.H16
-rw-r--r--src/3rdparty/freetype/builds/atari/FNames.SIC37
-rw-r--r--src/3rdparty/freetype/builds/atari/FREETYPE.PRJ32
-rw-r--r--src/3rdparty/freetype/builds/atari/README.TXT51
-rw-r--r--src/3rdparty/freetype/builds/beos/beos-def.mk76
-rw-r--r--src/3rdparty/freetype/builds/beos/beos.mk19
-rw-r--r--src/3rdparty/freetype/builds/beos/detect.mk41
-rw-r--r--src/3rdparty/freetype/builds/compiler/ansi-cc.mk80
-rw-r--r--src/3rdparty/freetype/builds/compiler/bcc-dev.mk78
-rw-r--r--src/3rdparty/freetype/builds/compiler/bcc.mk78
-rw-r--r--src/3rdparty/freetype/builds/compiler/emx.mk77
-rw-r--r--src/3rdparty/freetype/builds/compiler/gcc-dev.mk95
-rw-r--r--src/3rdparty/freetype/builds/compiler/gcc.mk77
-rw-r--r--src/3rdparty/freetype/builds/compiler/intelc.mk85
-rw-r--r--src/3rdparty/freetype/builds/compiler/unix-lcc.mk83
-rw-r--r--src/3rdparty/freetype/builds/compiler/visualage.mk76
-rw-r--r--src/3rdparty/freetype/builds/compiler/visualc.mk82
-rw-r--r--src/3rdparty/freetype/builds/compiler/watcom.mk81
-rw-r--r--src/3rdparty/freetype/builds/compiler/win-lcc.mk81
-rw-r--r--src/3rdparty/freetype/builds/detect.mk154
-rw-r--r--src/3rdparty/freetype/builds/dos/detect.mk142
-rw-r--r--src/3rdparty/freetype/builds/dos/dos-def.mk45
-rw-r--r--src/3rdparty/freetype/builds/dos/dos-emx.mk21
-rw-r--r--src/3rdparty/freetype/builds/dos/dos-gcc.mk21
-rw-r--r--src/3rdparty/freetype/builds/dos/dos-wat.mk20
-rw-r--r--src/3rdparty/freetype/builds/exports.mk76
-rw-r--r--src/3rdparty/freetype/builds/freetype.mk361
-rw-r--r--src/3rdparty/freetype/builds/link_dos.mk42
-rw-r--r--src/3rdparty/freetype/builds/link_std.mk42
-rw-r--r--src/3rdparty/freetype/builds/mac/FreeType.m68k_cfm.make.txt202
-rw-r--r--src/3rdparty/freetype/builds/mac/FreeType.m68k_far.make.txt201
-rw-r--r--src/3rdparty/freetype/builds/mac/FreeType.ppc_carbon.make.txt202
-rw-r--r--src/3rdparty/freetype/builds/mac/FreeType.ppc_classic.make.txt203
-rw-r--r--src/3rdparty/freetype/builds/mac/README403
-rwxr-xr-xsrc/3rdparty/freetype/builds/mac/ascii2mpw.py24
-rw-r--r--src/3rdparty/freetype/builds/mac/ftlib.prj.xml1194
-rw-r--r--src/3rdparty/freetype/builds/mac/ftmac.c1600
-rw-r--r--src/3rdparty/freetype/builds/modules.mk79
-rw-r--r--src/3rdparty/freetype/builds/newline1
-rw-r--r--src/3rdparty/freetype/builds/os2/detect.mk73
-rw-r--r--src/3rdparty/freetype/builds/os2/os2-def.mk44
-rw-r--r--src/3rdparty/freetype/builds/os2/os2-dev.mk30
-rw-r--r--src/3rdparty/freetype/builds/os2/os2-gcc.mk26
-rw-r--r--src/3rdparty/freetype/builds/symbian/bld.inf66
-rw-r--r--src/3rdparty/freetype/builds/symbian/freetype.mmp136
-rw-r--r--src/3rdparty/freetype/builds/toplevel.mk245
-rw-r--r--src/3rdparty/freetype/builds/unix/aclocal.m47912
-rwxr-xr-xsrc/3rdparty/freetype/builds/unix/config.guess1526
-rwxr-xr-xsrc/3rdparty/freetype/builds/unix/config.sub1669
-rwxr-xr-xsrc/3rdparty/freetype/builds/unix/configure15767
-rw-r--r--src/3rdparty/freetype/builds/unix/configure.ac540
-rw-r--r--src/3rdparty/freetype/builds/unix/configure.raw540
-rw-r--r--src/3rdparty/freetype/builds/unix/detect.mk91
-rw-r--r--src/3rdparty/freetype/builds/unix/freetype-config.in157
-rw-r--r--src/3rdparty/freetype/builds/unix/freetype2.in11
-rw-r--r--src/3rdparty/freetype/builds/unix/freetype2.m4192
-rw-r--r--src/3rdparty/freetype/builds/unix/ft-munmap.m432
-rw-r--r--src/3rdparty/freetype/builds/unix/ft2unix.h61
-rw-r--r--src/3rdparty/freetype/builds/unix/ftconfig.h262
-rw-r--r--src/3rdparty/freetype/builds/unix/ftconfig.in349
-rw-r--r--src/3rdparty/freetype/builds/unix/ftsystem.c414
-rwxr-xr-xsrc/3rdparty/freetype/builds/unix/install-sh519
-rw-r--r--src/3rdparty/freetype/builds/unix/install.mk97
-rwxr-xr-xsrc/3rdparty/freetype/builds/unix/ltmain.sh7874
-rwxr-xr-xsrc/3rdparty/freetype/builds/unix/mkinstalldirs161
-rw-r--r--src/3rdparty/freetype/builds/unix/unix-cc.in113
-rw-r--r--src/3rdparty/freetype/builds/unix/unix-def.in81
-rw-r--r--src/3rdparty/freetype/builds/unix/unix-dev.mk26
-rw-r--r--src/3rdparty/freetype/builds/unix/unix-lcc.mk24
-rw-r--r--src/3rdparty/freetype/builds/unix/unix.mk62
-rw-r--r--src/3rdparty/freetype/builds/unix/unixddef.mk45
-rw-r--r--src/3rdparty/freetype/builds/vms/ftconfig.h338
-rw-r--r--src/3rdparty/freetype/builds/vms/ftsystem.c321
-rw-r--r--src/3rdparty/freetype/builds/win32/detect.mk183
-rw-r--r--src/3rdparty/freetype/builds/win32/ftdebug.c248
-rw-r--r--src/3rdparty/freetype/builds/win32/visualc/freetype.dsp396
-rw-r--r--src/3rdparty/freetype/builds/win32/visualc/freetype.dsw29
-rw-r--r--src/3rdparty/freetype/builds/win32/visualc/freetype.sln31
-rw-r--r--src/3rdparty/freetype/builds/win32/visualc/freetype.vcproj2155
-rw-r--r--src/3rdparty/freetype/builds/win32/visualc/index.html37
-rw-r--r--src/3rdparty/freetype/builds/win32/visualce/freetype.dsp396
-rw-r--r--src/3rdparty/freetype/builds/win32/visualce/freetype.dsw29
-rw-r--r--src/3rdparty/freetype/builds/win32/visualce/freetype.vcproj13861
-rw-r--r--src/3rdparty/freetype/builds/win32/visualce/index.html47
-rw-r--r--src/3rdparty/freetype/builds/win32/w32-bcc.mk28
-rw-r--r--src/3rdparty/freetype/builds/win32/w32-bccd.mk26
-rw-r--r--src/3rdparty/freetype/builds/win32/w32-dev.mk32
-rw-r--r--src/3rdparty/freetype/builds/win32/w32-gcc.mk31
-rw-r--r--src/3rdparty/freetype/builds/win32/w32-icc.mk28
-rw-r--r--src/3rdparty/freetype/builds/win32/w32-intl.mk28
-rw-r--r--src/3rdparty/freetype/builds/win32/w32-lcc.mk24
-rw-r--r--src/3rdparty/freetype/builds/win32/w32-mingw32.mk33
-rw-r--r--src/3rdparty/freetype/builds/win32/w32-vcc.mk28
-rw-r--r--src/3rdparty/freetype/builds/win32/w32-wat.mk28
-rw-r--r--src/3rdparty/freetype/builds/win32/win32-def.mk46
-rwxr-xr-xsrc/3rdparty/freetype/configure100
-rw-r--r--src/3rdparty/freetype/devel/ft2build.h41
-rw-r--r--src/3rdparty/freetype/devel/ftoption.h672
-rw-r--r--src/3rdparty/freetype/docs/CHANGES3148
-rw-r--r--src/3rdparty/freetype/docs/CUSTOMIZE150
-rw-r--r--src/3rdparty/freetype/docs/DEBUG199
-rw-r--r--src/3rdparty/freetype/docs/FTL.TXT169
-rw-r--r--src/3rdparty/freetype/docs/GPL.TXT340
-rw-r--r--src/3rdparty/freetype/docs/INSTALL89
-rw-r--r--src/3rdparty/freetype/docs/INSTALL.ANY139
-rw-r--r--src/3rdparty/freetype/docs/INSTALL.CROSS135
-rw-r--r--src/3rdparty/freetype/docs/INSTALL.GNU159
-rw-r--r--src/3rdparty/freetype/docs/INSTALL.MAC32
-rw-r--r--src/3rdparty/freetype/docs/INSTALL.UNIX96
-rw-r--r--src/3rdparty/freetype/docs/INSTALL.VMS62
-rw-r--r--src/3rdparty/freetype/docs/LICENSE.TXT28
-rw-r--r--src/3rdparty/freetype/docs/MAKEPP5
-rw-r--r--src/3rdparty/freetype/docs/PATENTS27
-rw-r--r--src/3rdparty/freetype/docs/PROBLEMS77
-rw-r--r--src/3rdparty/freetype/docs/TODO40
-rw-r--r--src/3rdparty/freetype/docs/TRUETYPE40
-rw-r--r--src/3rdparty/freetype/docs/UPGRADE.UNIX137
-rw-r--r--src/3rdparty/freetype/docs/VERSION.DLL132
-rw-r--r--src/3rdparty/freetype/docs/formats.txt154
-rw-r--r--src/3rdparty/freetype/docs/raster.txt635
-rw-r--r--src/3rdparty/freetype/docs/reference/README5
-rw-r--r--src/3rdparty/freetype/docs/reference/ft2-base_interface.html3425
-rw-r--r--src/3rdparty/freetype/docs/reference/ft2-basic_types.html1160
-rw-r--r--src/3rdparty/freetype/docs/reference/ft2-bdf_fonts.html254
-rw-r--r--src/3rdparty/freetype/docs/reference/ft2-bitmap_handling.html264
-rw-r--r--src/3rdparty/freetype/docs/reference/ft2-cache_subsystem.html1165
-rw-r--r--src/3rdparty/freetype/docs/reference/ft2-cid_fonts.html102
-rw-r--r--src/3rdparty/freetype/docs/reference/ft2-computations.html828
-rw-r--r--src/3rdparty/freetype/docs/reference/ft2-font_formats.html79
-rw-r--r--src/3rdparty/freetype/docs/reference/ft2-gasp_table.html137
-rw-r--r--src/3rdparty/freetype/docs/reference/ft2-glyph_management.html633
-rw-r--r--src/3rdparty/freetype/docs/reference/ft2-glyph_stroker.html924
-rw-r--r--src/3rdparty/freetype/docs/reference/ft2-glyph_variants.html263
-rw-r--r--src/3rdparty/freetype/docs/reference/ft2-gx_validation.html352
-rw-r--r--src/3rdparty/freetype/docs/reference/ft2-gzip.html90
-rw-r--r--src/3rdparty/freetype/docs/reference/ft2-header_file_macros.html816
-rw-r--r--src/3rdparty/freetype/docs/reference/ft2-incremental.html393
-rw-r--r--src/3rdparty/freetype/docs/reference/ft2-index.html279
-rw-r--r--src/3rdparty/freetype/docs/reference/ft2-lcd_filtering.html145
-rw-r--r--src/3rdparty/freetype/docs/reference/ft2-list_processing.html479
-rw-r--r--src/3rdparty/freetype/docs/reference/ft2-lzw.html90
-rw-r--r--src/3rdparty/freetype/docs/reference/ft2-mac_specific.html364
-rw-r--r--src/3rdparty/freetype/docs/reference/ft2-module_management.html622
-rw-r--r--src/3rdparty/freetype/docs/reference/ft2-multiple_masters.html507
-rw-r--r--src/3rdparty/freetype/docs/reference/ft2-ot_validation.html204
-rw-r--r--src/3rdparty/freetype/docs/reference/ft2-outline_processing.html1086
-rw-r--r--src/3rdparty/freetype/docs/reference/ft2-pfr_fonts.html202
-rw-r--r--src/3rdparty/freetype/docs/reference/ft2-raster.html602
-rw-r--r--src/3rdparty/freetype/docs/reference/ft2-sfnt_names.html186
-rw-r--r--src/3rdparty/freetype/docs/reference/ft2-sizes_management.html160
-rw-r--r--src/3rdparty/freetype/docs/reference/ft2-system_interface.html411
-rw-r--r--src/3rdparty/freetype/docs/reference/ft2-toc.html203
-rw-r--r--src/3rdparty/freetype/docs/reference/ft2-truetype_engine.html128
-rw-r--r--src/3rdparty/freetype/docs/reference/ft2-truetype_tables.html1213
-rw-r--r--src/3rdparty/freetype/docs/reference/ft2-type1_tables.html518
-rw-r--r--src/3rdparty/freetype/docs/reference/ft2-user_allocation.html43
-rw-r--r--src/3rdparty/freetype/docs/reference/ft2-version.html209
-rw-r--r--src/3rdparty/freetype/docs/reference/ft2-winfnt_fonts.html274
-rw-r--r--src/3rdparty/freetype/docs/release166
-rw-r--r--src/3rdparty/freetype/include/freetype/config/ftconfig.h415
-rw-r--r--src/3rdparty/freetype/include/freetype/config/ftheader.h768
-rw-r--r--src/3rdparty/freetype/include/freetype/config/ftmodule.h32
-rw-r--r--src/3rdparty/freetype/include/freetype/config/ftoption.h671
-rw-r--r--src/3rdparty/freetype/include/freetype/config/ftstdlib.h180
-rw-r--r--src/3rdparty/freetype/include/freetype/freetype.h3706
-rw-r--r--src/3rdparty/freetype/include/freetype/ftbbox.h94
-rw-r--r--src/3rdparty/freetype/include/freetype/ftbdf.h200
-rw-r--r--src/3rdparty/freetype/include/freetype/ftbitmap.h206
-rw-r--r--src/3rdparty/freetype/include/freetype/ftcache.h1121
-rw-r--r--src/3rdparty/freetype/include/freetype/ftchapters.h102
-rw-r--r--src/3rdparty/freetype/include/freetype/ftcid.h98
-rw-r--r--src/3rdparty/freetype/include/freetype/fterrdef.h239
-rw-r--r--src/3rdparty/freetype/include/freetype/fterrors.h206
-rw-r--r--src/3rdparty/freetype/include/freetype/ftgasp.h113
-rw-r--r--src/3rdparty/freetype/include/freetype/ftglyph.h575
-rw-r--r--src/3rdparty/freetype/include/freetype/ftgxval.h358
-rw-r--r--src/3rdparty/freetype/include/freetype/ftgzip.h102
-rw-r--r--src/3rdparty/freetype/include/freetype/ftimage.h1246
-rw-r--r--src/3rdparty/freetype/include/freetype/ftincrem.h349
-rw-r--r--src/3rdparty/freetype/include/freetype/ftlcdfil.h166
-rw-r--r--src/3rdparty/freetype/include/freetype/ftlist.h273
-rw-r--r--src/3rdparty/freetype/include/freetype/ftlzw.h99
-rw-r--r--src/3rdparty/freetype/include/freetype/ftmac.h274
-rw-r--r--src/3rdparty/freetype/include/freetype/ftmm.h378
-rw-r--r--src/3rdparty/freetype/include/freetype/ftmodapi.h441
-rw-r--r--src/3rdparty/freetype/include/freetype/ftmoderr.h155
-rw-r--r--src/3rdparty/freetype/include/freetype/ftotval.h203
-rw-r--r--src/3rdparty/freetype/include/freetype/ftoutln.h526
-rw-r--r--src/3rdparty/freetype/include/freetype/ftpfr.h172
-rw-r--r--src/3rdparty/freetype/include/freetype/ftrender.h234
-rw-r--r--src/3rdparty/freetype/include/freetype/ftsizes.h159
-rw-r--r--src/3rdparty/freetype/include/freetype/ftsnames.h170
-rw-r--r--src/3rdparty/freetype/include/freetype/ftstroke.h716
-rw-r--r--src/3rdparty/freetype/include/freetype/ftsynth.h73
-rw-r--r--src/3rdparty/freetype/include/freetype/ftsystem.h346
-rw-r--r--src/3rdparty/freetype/include/freetype/fttrigon.h350
-rw-r--r--src/3rdparty/freetype/include/freetype/fttypes.h587
-rw-r--r--src/3rdparty/freetype/include/freetype/ftwinfnt.h274
-rw-r--r--src/3rdparty/freetype/include/freetype/ftxf86.h80
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/autohint.h205
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/ftcalc.h178
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/ftdebug.h250
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/ftdriver.h248
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/ftgloadr.h168
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/ftmemory.h368
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/ftobjs.h875
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/ftrfork.h196
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/ftserv.h328
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/ftstream.h539
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/fttrace.h134
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/ftvalid.h150
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/internal.h50
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/pcftypes.h56
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/psaux.h871
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/pshints.h687
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svbdf.h57
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svcid.h49
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svgldict.h60
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svgxval.h72
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svkern.h51
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svmm.h79
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svotval.h55
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svpfr.h66
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svpostnm.h58
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svpscmap.h129
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svpsinfo.h60
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svsfnt.h80
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svttcmap.h78
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svtteng.h53
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svttglyf.h48
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svwinfnt.h50
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/services/svxf86nm.h55
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/sfnt.h762
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/t1types.h252
-rw-r--r--src/3rdparty/freetype/include/freetype/internal/tttypes.h1543
-rw-r--r--src/3rdparty/freetype/include/freetype/t1tables.h504
-rw-r--r--src/3rdparty/freetype/include/freetype/ttnameid.h1146
-rw-r--r--src/3rdparty/freetype/include/freetype/tttables.h756
-rw-r--r--src/3rdparty/freetype/include/freetype/tttags.h100
-rw-r--r--src/3rdparty/freetype/include/freetype/ttunpat.h59
-rw-r--r--src/3rdparty/freetype/include/ft2build.h39
-rw-r--r--src/3rdparty/freetype/modules.cfg245
-rw-r--r--src/3rdparty/freetype/objs/README2
-rw-r--r--src/3rdparty/freetype/src/Jamfile25
-rw-r--r--src/3rdparty/freetype/src/autofit/Jamfile39
-rw-r--r--src/3rdparty/freetype/src/autofit/afangles.c292
-rw-r--r--src/3rdparty/freetype/src/autofit/afangles.h7
-rw-r--r--src/3rdparty/freetype/src/autofit/afcjk.c1508
-rw-r--r--src/3rdparty/freetype/src/autofit/afcjk.h58
-rw-r--r--src/3rdparty/freetype/src/autofit/afdummy.c62
-rw-r--r--src/3rdparty/freetype/src/autofit/afdummy.h43
-rw-r--r--src/3rdparty/freetype/src/autofit/aferrors.h40
-rw-r--r--src/3rdparty/freetype/src/autofit/afglobal.c289
-rw-r--r--src/3rdparty/freetype/src/autofit/afglobal.h67
-rw-r--r--src/3rdparty/freetype/src/autofit/afhints.c1264
-rw-r--r--src/3rdparty/freetype/src/autofit/afhints.h333
-rw-r--r--src/3rdparty/freetype/src/autofit/afindic.c134
-rw-r--r--src/3rdparty/freetype/src/autofit/afindic.h41
-rw-r--r--src/3rdparty/freetype/src/autofit/aflatin.c2168
-rw-r--r--src/3rdparty/freetype/src/autofit/aflatin.h209
-rw-r--r--src/3rdparty/freetype/src/autofit/aflatin2.c2286
-rw-r--r--src/3rdparty/freetype/src/autofit/aflatin2.h40
-rw-r--r--src/3rdparty/freetype/src/autofit/afloader.c535
-rw-r--r--src/3rdparty/freetype/src/autofit/afloader.h73
-rw-r--r--src/3rdparty/freetype/src/autofit/afmodule.c97
-rw-r--r--src/3rdparty/freetype/src/autofit/afmodule.h37
-rw-r--r--src/3rdparty/freetype/src/autofit/aftypes.h349
-rw-r--r--src/3rdparty/freetype/src/autofit/afwarp.c338
-rw-r--r--src/3rdparty/freetype/src/autofit/afwarp.h64
-rw-r--r--src/3rdparty/freetype/src/autofit/autofit.c40
-rw-r--r--src/3rdparty/freetype/src/autofit/module.mk23
-rw-r--r--src/3rdparty/freetype/src/autofit/rules.mk78
-rw-r--r--src/3rdparty/freetype/src/base/Jamfile50
-rw-r--r--src/3rdparty/freetype/src/base/ftapi.c121
-rw-r--r--src/3rdparty/freetype/src/base/ftbase.c38
-rw-r--r--src/3rdparty/freetype/src/base/ftbbox.c659
-rw-r--r--src/3rdparty/freetype/src/base/ftbdf.c88
-rw-r--r--src/3rdparty/freetype/src/base/ftbitmap.c630
-rw-r--r--src/3rdparty/freetype/src/base/ftcalc.c873
-rw-r--r--src/3rdparty/freetype/src/base/ftcid.c63
-rw-r--r--src/3rdparty/freetype/src/base/ftdbgmem.c998
-rw-r--r--src/3rdparty/freetype/src/base/ftdebug.c246
-rw-r--r--src/3rdparty/freetype/src/base/ftgasp.c61
-rw-r--r--src/3rdparty/freetype/src/base/ftgloadr.c394
-rw-r--r--src/3rdparty/freetype/src/base/ftglyph.c688
-rw-r--r--src/3rdparty/freetype/src/base/ftgxval.c129
-rw-r--r--src/3rdparty/freetype/src/base/ftinit.c163
-rw-r--r--src/3rdparty/freetype/src/base/ftlcdfil.c351
-rw-r--r--src/3rdparty/freetype/src/base/ftmac.c1130
-rw-r--r--src/3rdparty/freetype/src/base/ftmm.c202
-rw-r--r--src/3rdparty/freetype/src/base/ftnames.c94
-rw-r--r--src/3rdparty/freetype/src/base/ftobjs.c4198
-rw-r--r--src/3rdparty/freetype/src/base/ftotval.c83
-rw-r--r--src/3rdparty/freetype/src/base/ftoutln.c1090
-rw-r--r--src/3rdparty/freetype/src/base/ftpatent.c281
-rw-r--r--src/3rdparty/freetype/src/base/ftpfr.c132
-rw-r--r--src/3rdparty/freetype/src/base/ftrfork.c811
-rw-r--r--src/3rdparty/freetype/src/base/ftstream.c845
-rw-r--r--src/3rdparty/freetype/src/base/ftstroke.c2010
-rw-r--r--src/3rdparty/freetype/src/base/ftsynth.c159
-rw-r--r--src/3rdparty/freetype/src/base/ftsystem.c301
-rw-r--r--src/3rdparty/freetype/src/base/fttrigon.c546
-rw-r--r--src/3rdparty/freetype/src/base/fttype1.c94
-rw-r--r--src/3rdparty/freetype/src/base/ftutil.c501
-rw-r--r--src/3rdparty/freetype/src/base/ftwinfnt.c51
-rw-r--r--src/3rdparty/freetype/src/base/ftxf86.c40
-rw-r--r--src/3rdparty/freetype/src/base/rules.mk90
-rw-r--r--src/3rdparty/freetype/src/bdf/Jamfile29
-rw-r--r--src/3rdparty/freetype/src/bdf/README148
-rw-r--r--src/3rdparty/freetype/src/bdf/bdf.c34
-rw-r--r--src/3rdparty/freetype/src/bdf/bdf.h295
-rw-r--r--src/3rdparty/freetype/src/bdf/bdfdrivr.c850
-rw-r--r--src/3rdparty/freetype/src/bdf/bdfdrivr.h76
-rw-r--r--src/3rdparty/freetype/src/bdf/bdferror.h44
-rw-r--r--src/3rdparty/freetype/src/bdf/bdflib.c2472
-rw-r--r--src/3rdparty/freetype/src/bdf/module.mk34
-rw-r--r--src/3rdparty/freetype/src/bdf/rules.mk80
-rw-r--r--src/3rdparty/freetype/src/cache/Jamfile43
-rw-r--r--src/3rdparty/freetype/src/cache/ftcache.c31
-rw-r--r--src/3rdparty/freetype/src/cache/ftcbasic.c811
-rw-r--r--src/3rdparty/freetype/src/cache/ftccache.c592
-rw-r--r--src/3rdparty/freetype/src/cache/ftccache.h317
-rw-r--r--src/3rdparty/freetype/src/cache/ftccback.h90
-rw-r--r--src/3rdparty/freetype/src/cache/ftccmap.c413
-rw-r--r--src/3rdparty/freetype/src/cache/ftcerror.h40
-rw-r--r--src/3rdparty/freetype/src/cache/ftcglyph.c211
-rw-r--r--src/3rdparty/freetype/src/cache/ftcglyph.h322
-rw-r--r--src/3rdparty/freetype/src/cache/ftcimage.c163
-rw-r--r--src/3rdparty/freetype/src/cache/ftcimage.h107
-rw-r--r--src/3rdparty/freetype/src/cache/ftcmanag.c732
-rw-r--r--src/3rdparty/freetype/src/cache/ftcmanag.h175
-rw-r--r--src/3rdparty/freetype/src/cache/ftcmru.c357
-rw-r--r--src/3rdparty/freetype/src/cache/ftcmru.h247
-rw-r--r--src/3rdparty/freetype/src/cache/ftcsbits.c401
-rw-r--r--src/3rdparty/freetype/src/cache/ftcsbits.h98
-rw-r--r--src/3rdparty/freetype/src/cache/rules.mk78
-rw-r--r--src/3rdparty/freetype/src/cff/Jamfile29
-rw-r--r--src/3rdparty/freetype/src/cff/cff.c29
-rw-r--r--src/3rdparty/freetype/src/cff/cffcmap.c224
-rw-r--r--src/3rdparty/freetype/src/cff/cffcmap.h69
-rw-r--r--src/3rdparty/freetype/src/cff/cffdrivr.c585
-rw-r--r--src/3rdparty/freetype/src/cff/cffdrivr.h39
-rw-r--r--src/3rdparty/freetype/src/cff/cfferrs.h41
-rw-r--r--src/3rdparty/freetype/src/cff/cffgload.c2701
-rw-r--r--src/3rdparty/freetype/src/cff/cffgload.h202
-rw-r--r--src/3rdparty/freetype/src/cff/cffload.c1605
-rw-r--r--src/3rdparty/freetype/src/cff/cffload.h79
-rw-r--r--src/3rdparty/freetype/src/cff/cffobjs.c962
-rw-r--r--src/3rdparty/freetype/src/cff/cffobjs.h181
-rw-r--r--src/3rdparty/freetype/src/cff/cffparse.c843
-rw-r--r--src/3rdparty/freetype/src/cff/cffparse.h69
-rw-r--r--src/3rdparty/freetype/src/cff/cfftoken.h97
-rw-r--r--src/3rdparty/freetype/src/cff/cfftypes.h274
-rw-r--r--src/3rdparty/freetype/src/cff/module.mk23
-rw-r--r--src/3rdparty/freetype/src/cff/rules.mk72
-rw-r--r--src/3rdparty/freetype/src/cid/Jamfile29
-rw-r--r--src/3rdparty/freetype/src/cid/ciderrs.h40
-rw-r--r--src/3rdparty/freetype/src/cid/cidgload.c433
-rw-r--r--src/3rdparty/freetype/src/cid/cidgload.h51
-rw-r--r--src/3rdparty/freetype/src/cid/cidload.c644
-rw-r--r--src/3rdparty/freetype/src/cid/cidload.h53
-rw-r--r--src/3rdparty/freetype/src/cid/cidobjs.c480
-rw-r--r--src/3rdparty/freetype/src/cid/cidobjs.h154
-rw-r--r--src/3rdparty/freetype/src/cid/cidparse.c226
-rw-r--r--src/3rdparty/freetype/src/cid/cidparse.h123
-rw-r--r--src/3rdparty/freetype/src/cid/cidriver.c198
-rw-r--r--src/3rdparty/freetype/src/cid/cidriver.h39
-rw-r--r--src/3rdparty/freetype/src/cid/cidtoken.h103
-rw-r--r--src/3rdparty/freetype/src/cid/module.mk23
-rw-r--r--src/3rdparty/freetype/src/cid/rules.mk70
-rw-r--r--src/3rdparty/freetype/src/cid/type1cid.c29
-rw-r--r--src/3rdparty/freetype/src/gxvalid/Jamfile33
-rw-r--r--src/3rdparty/freetype/src/gxvalid/README532
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvalid.c46
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvalid.h107
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvbsln.c333
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvcommn.c1758
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvcommn.h560
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxverror.h51
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvfeat.c344
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvfeat.h172
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvfgen.c482
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvjust.c630
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvkern.c876
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvlcar.c223
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmod.c285
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmod.h46
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmort.c285
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmort.h93
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmort0.c137
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmort1.c258
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmort2.c282
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmort4.c125
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmort5.c226
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmorx.c183
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmorx.h67
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmorx0.c103
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmorx1.c274
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmorx2.c285
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmorx4.c55
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvmorx5.c217
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvopbd.c217
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvprop.c301
-rw-r--r--src/3rdparty/freetype/src/gxvalid/gxvtrak.c277
-rw-r--r--src/3rdparty/freetype/src/gxvalid/module.mk23
-rw-r--r--src/3rdparty/freetype/src/gxvalid/rules.mk94
-rw-r--r--src/3rdparty/freetype/src/gzip/Jamfile16
-rw-r--r--src/3rdparty/freetype/src/gzip/adler32.c48
-rw-r--r--src/3rdparty/freetype/src/gzip/ftgzip.c682
-rw-r--r--src/3rdparty/freetype/src/gzip/infblock.c387
-rw-r--r--src/3rdparty/freetype/src/gzip/infblock.h36
-rw-r--r--src/3rdparty/freetype/src/gzip/infcodes.c250
-rw-r--r--src/3rdparty/freetype/src/gzip/infcodes.h31
-rw-r--r--src/3rdparty/freetype/src/gzip/inffixed.h151
-rw-r--r--src/3rdparty/freetype/src/gzip/inflate.c273
-rw-r--r--src/3rdparty/freetype/src/gzip/inftrees.c465
-rw-r--r--src/3rdparty/freetype/src/gzip/inftrees.h63
-rw-r--r--src/3rdparty/freetype/src/gzip/infutil.c86
-rw-r--r--src/3rdparty/freetype/src/gzip/infutil.h98
-rw-r--r--src/3rdparty/freetype/src/gzip/rules.mk75
-rw-r--r--src/3rdparty/freetype/src/gzip/zconf.h285
-rw-r--r--src/3rdparty/freetype/src/gzip/zlib.h837
-rw-r--r--src/3rdparty/freetype/src/gzip/zutil.c181
-rw-r--r--src/3rdparty/freetype/src/gzip/zutil.h215
-rw-r--r--src/3rdparty/freetype/src/lzw/Jamfile16
-rw-r--r--src/3rdparty/freetype/src/lzw/ftlzw.c413
-rw-r--r--src/3rdparty/freetype/src/lzw/ftzopen.c398
-rw-r--r--src/3rdparty/freetype/src/lzw/ftzopen.h171
-rw-r--r--src/3rdparty/freetype/src/lzw/rules.mk70
-rw-r--r--src/3rdparty/freetype/src/otvalid/Jamfile29
-rw-r--r--src/3rdparty/freetype/src/otvalid/module.mk23
-rw-r--r--src/3rdparty/freetype/src/otvalid/otvalid.c31
-rw-r--r--src/3rdparty/freetype/src/otvalid/otvalid.h77
-rw-r--r--src/3rdparty/freetype/src/otvalid/otvbase.c318
-rw-r--r--src/3rdparty/freetype/src/otvalid/otvcommn.c1086
-rw-r--r--src/3rdparty/freetype/src/otvalid/otvcommn.h437
-rw-r--r--src/3rdparty/freetype/src/otvalid/otverror.h43
-rw-r--r--src/3rdparty/freetype/src/otvalid/otvgdef.c219
-rw-r--r--src/3rdparty/freetype/src/otvalid/otvgpos.c1013
-rw-r--r--src/3rdparty/freetype/src/otvalid/otvgpos.h36
-rw-r--r--src/3rdparty/freetype/src/otvalid/otvgsub.c584
-rw-r--r--src/3rdparty/freetype/src/otvalid/otvjstf.c258
-rw-r--r--src/3rdparty/freetype/src/otvalid/otvmath.c450
-rw-r--r--src/3rdparty/freetype/src/otvalid/otvmod.c267
-rw-r--r--src/3rdparty/freetype/src/otvalid/otvmod.h39
-rw-r--r--src/3rdparty/freetype/src/otvalid/rules.mk78
-rw-r--r--src/3rdparty/freetype/src/pcf/Jamfile29
-rw-r--r--src/3rdparty/freetype/src/pcf/README114
-rw-r--r--src/3rdparty/freetype/src/pcf/module.mk34
-rw-r--r--src/3rdparty/freetype/src/pcf/pcf.c36
-rw-r--r--src/3rdparty/freetype/src/pcf/pcf.h237
-rw-r--r--src/3rdparty/freetype/src/pcf/pcfdrivr.c674
-rw-r--r--src/3rdparty/freetype/src/pcf/pcfdrivr.h44
-rw-r--r--src/3rdparty/freetype/src/pcf/pcferror.h40
-rw-r--r--src/3rdparty/freetype/src/pcf/pcfread.c1267
-rw-r--r--src/3rdparty/freetype/src/pcf/pcfread.h45
-rw-r--r--src/3rdparty/freetype/src/pcf/pcfutil.c104
-rw-r--r--src/3rdparty/freetype/src/pcf/pcfutil.h55
-rw-r--r--src/3rdparty/freetype/src/pcf/rules.mk80
-rw-r--r--src/3rdparty/freetype/src/pfr/Jamfile29
-rw-r--r--src/3rdparty/freetype/src/pfr/module.mk23
-rw-r--r--src/3rdparty/freetype/src/pfr/pfr.c29
-rw-r--r--src/3rdparty/freetype/src/pfr/pfrcmap.c167
-rw-r--r--src/3rdparty/freetype/src/pfr/pfrcmap.h46
-rw-r--r--src/3rdparty/freetype/src/pfr/pfrdrivr.c207
-rw-r--r--src/3rdparty/freetype/src/pfr/pfrdrivr.h39
-rw-r--r--src/3rdparty/freetype/src/pfr/pfrerror.h40
-rw-r--r--src/3rdparty/freetype/src/pfr/pfrgload.c828
-rw-r--r--src/3rdparty/freetype/src/pfr/pfrgload.h49
-rw-r--r--src/3rdparty/freetype/src/pfr/pfrload.c938
-rw-r--r--src/3rdparty/freetype/src/pfr/pfrload.h118
-rw-r--r--src/3rdparty/freetype/src/pfr/pfrobjs.c576
-rw-r--r--src/3rdparty/freetype/src/pfr/pfrobjs.h96
-rw-r--r--src/3rdparty/freetype/src/pfr/pfrsbit.c680
-rw-r--r--src/3rdparty/freetype/src/pfr/pfrsbit.h36
-rw-r--r--src/3rdparty/freetype/src/pfr/pfrtypes.h362
-rw-r--r--src/3rdparty/freetype/src/pfr/rules.mk73
-rw-r--r--src/3rdparty/freetype/src/psaux/Jamfile31
-rw-r--r--src/3rdparty/freetype/src/psaux/afmparse.c960
-rw-r--r--src/3rdparty/freetype/src/psaux/afmparse.h87
-rw-r--r--src/3rdparty/freetype/src/psaux/module.mk23
-rw-r--r--src/3rdparty/freetype/src/psaux/psaux.c34
-rw-r--r--src/3rdparty/freetype/src/psaux/psauxerr.h41
-rw-r--r--src/3rdparty/freetype/src/psaux/psauxmod.c139
-rw-r--r--src/3rdparty/freetype/src/psaux/psauxmod.h38
-rw-r--r--src/3rdparty/freetype/src/psaux/psconv.c474
-rw-r--r--src/3rdparty/freetype/src/psaux/psconv.h71
-rw-r--r--src/3rdparty/freetype/src/psaux/psobjs.c1692
-rw-r--r--src/3rdparty/freetype/src/psaux/psobjs.h212
-rw-r--r--src/3rdparty/freetype/src/psaux/rules.mk73
-rw-r--r--src/3rdparty/freetype/src/psaux/t1cmap.c341
-rw-r--r--src/3rdparty/freetype/src/psaux/t1cmap.h105
-rw-r--r--src/3rdparty/freetype/src/psaux/t1decode.c1475
-rw-r--r--src/3rdparty/freetype/src/psaux/t1decode.h64
-rw-r--r--src/3rdparty/freetype/src/pshinter/Jamfile29
-rw-r--r--src/3rdparty/freetype/src/pshinter/module.mk23
-rw-r--r--src/3rdparty/freetype/src/pshinter/pshalgo.c2302
-rw-r--r--src/3rdparty/freetype/src/pshinter/pshalgo.h255
-rw-r--r--src/3rdparty/freetype/src/pshinter/pshglob.c750
-rw-r--r--src/3rdparty/freetype/src/pshinter/pshglob.h196
-rw-r--r--src/3rdparty/freetype/src/pshinter/pshinter.c28
-rw-r--r--src/3rdparty/freetype/src/pshinter/pshmod.c121
-rw-r--r--src/3rdparty/freetype/src/pshinter/pshmod.h39
-rw-r--r--src/3rdparty/freetype/src/pshinter/pshnterr.h40
-rw-r--r--src/3rdparty/freetype/src/pshinter/pshrec.c1215
-rw-r--r--src/3rdparty/freetype/src/pshinter/pshrec.h176
-rw-r--r--src/3rdparty/freetype/src/pshinter/rules.mk72
-rw-r--r--src/3rdparty/freetype/src/psnames/Jamfile29
-rw-r--r--src/3rdparty/freetype/src/psnames/module.mk23
-rw-r--r--src/3rdparty/freetype/src/psnames/psmodule.c565
-rw-r--r--src/3rdparty/freetype/src/psnames/psmodule.h38
-rw-r--r--src/3rdparty/freetype/src/psnames/psnamerr.h41
-rw-r--r--src/3rdparty/freetype/src/psnames/psnames.c25
-rw-r--r--src/3rdparty/freetype/src/psnames/pstables.h4090
-rw-r--r--src/3rdparty/freetype/src/psnames/rules.mk70
-rw-r--r--src/3rdparty/freetype/src/raster/Jamfile29
-rw-r--r--src/3rdparty/freetype/src/raster/ftmisc.h83
-rw-r--r--src/3rdparty/freetype/src/raster/ftraster.c3382
-rw-r--r--src/3rdparty/freetype/src/raster/ftraster.h46
-rw-r--r--src/3rdparty/freetype/src/raster/ftrend1.c273
-rw-r--r--src/3rdparty/freetype/src/raster/ftrend1.h44
-rw-r--r--src/3rdparty/freetype/src/raster/module.mk23
-rw-r--r--src/3rdparty/freetype/src/raster/raster.c26
-rw-r--r--src/3rdparty/freetype/src/raster/rasterrs.h41
-rw-r--r--src/3rdparty/freetype/src/raster/rules.mk69
-rw-r--r--src/3rdparty/freetype/src/sfnt/Jamfile29
-rw-r--r--src/3rdparty/freetype/src/sfnt/module.mk23
-rw-r--r--src/3rdparty/freetype/src/sfnt/rules.mk76
-rw-r--r--src/3rdparty/freetype/src/sfnt/sfdriver.c618
-rw-r--r--src/3rdparty/freetype/src/sfnt/sfdriver.h38
-rw-r--r--src/3rdparty/freetype/src/sfnt/sferrors.h41
-rw-r--r--src/3rdparty/freetype/src/sfnt/sfnt.c41
-rw-r--r--src/3rdparty/freetype/src/sfnt/sfobjs.c1116
-rw-r--r--src/3rdparty/freetype/src/sfnt/sfobjs.h54
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttbdf.c250
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttbdf.h46
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttcmap.c3123
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttcmap.h85
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttkern.c292
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttkern.h52
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttload.c1185
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttload.h112
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttmtx.c466
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttmtx.h55
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttpost.c521
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttpost.h46
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttsbit.c1502
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttsbit.h79
-rw-r--r--src/3rdparty/freetype/src/sfnt/ttsbit0.c996
-rw-r--r--src/3rdparty/freetype/src/smooth/Jamfile29
-rw-r--r--src/3rdparty/freetype/src/smooth/ftgrays.c1986
-rw-r--r--src/3rdparty/freetype/src/smooth/ftgrays.h57
-rw-r--r--src/3rdparty/freetype/src/smooth/ftsmerrs.h41
-rw-r--r--src/3rdparty/freetype/src/smooth/ftsmooth.c467
-rw-r--r--src/3rdparty/freetype/src/smooth/ftsmooth.h49
-rw-r--r--src/3rdparty/freetype/src/smooth/module.mk27
-rw-r--r--src/3rdparty/freetype/src/smooth/rules.mk69
-rw-r--r--src/3rdparty/freetype/src/smooth/smooth.c26
-rw-r--r--src/3rdparty/freetype/src/tools/Jamfile5
-rw-r--r--src/3rdparty/freetype/src/tools/apinames.c443
-rw-r--r--src/3rdparty/freetype/src/tools/cordic.py79
-rw-r--r--src/3rdparty/freetype/src/tools/docmaker/content.py582
-rw-r--r--src/3rdparty/freetype/src/tools/docmaker/docbeauty.py113
-rw-r--r--src/3rdparty/freetype/src/tools/docmaker/docmaker.py106
-rw-r--r--src/3rdparty/freetype/src/tools/docmaker/formatter.py188
-rw-r--r--src/3rdparty/freetype/src/tools/docmaker/sources.py347
-rw-r--r--src/3rdparty/freetype/src/tools/docmaker/tohtml.py527
-rw-r--r--src/3rdparty/freetype/src/tools/docmaker/utils.py132
-rw-r--r--src/3rdparty/freetype/src/tools/ftrandom/Makefile35
-rw-r--r--src/3rdparty/freetype/src/tools/ftrandom/README48
-rw-r--r--src/3rdparty/freetype/src/tools/ftrandom/ftrandom.c659
-rw-r--r--src/3rdparty/freetype/src/tools/glnames.py5282
-rw-r--r--src/3rdparty/freetype/src/tools/test_afm.c157
-rw-r--r--src/3rdparty/freetype/src/tools/test_bbox.c160
-rw-r--r--src/3rdparty/freetype/src/tools/test_trig.c236
-rw-r--r--src/3rdparty/freetype/src/truetype/Jamfile29
-rw-r--r--src/3rdparty/freetype/src/truetype/module.mk23
-rw-r--r--src/3rdparty/freetype/src/truetype/rules.mk72
-rw-r--r--src/3rdparty/freetype/src/truetype/truetype.c36
-rw-r--r--src/3rdparty/freetype/src/truetype/ttdriver.c418
-rw-r--r--src/3rdparty/freetype/src/truetype/ttdriver.h38
-rw-r--r--src/3rdparty/freetype/src/truetype/tterrors.h40
-rw-r--r--src/3rdparty/freetype/src/truetype/ttgload.c1976
-rw-r--r--src/3rdparty/freetype/src/truetype/ttgload.h49
-rw-r--r--src/3rdparty/freetype/src/truetype/ttgxvar.c1539
-rw-r--r--src/3rdparty/freetype/src/truetype/ttgxvar.h182
-rw-r--r--src/3rdparty/freetype/src/truetype/ttinterp.c7837
-rw-r--r--src/3rdparty/freetype/src/truetype/ttinterp.h311
-rw-r--r--src/3rdparty/freetype/src/truetype/ttobjs.c943
-rw-r--r--src/3rdparty/freetype/src/truetype/ttobjs.h459
-rw-r--r--src/3rdparty/freetype/src/truetype/ttpload.c523
-rw-r--r--src/3rdparty/freetype/src/truetype/ttpload.h75
-rw-r--r--src/3rdparty/freetype/src/type1/Jamfile29
-rw-r--r--src/3rdparty/freetype/src/type1/module.mk23
-rw-r--r--src/3rdparty/freetype/src/type1/rules.mk73
-rw-r--r--src/3rdparty/freetype/src/type1/t1afm.c385
-rw-r--r--src/3rdparty/freetype/src/type1/t1afm.h54
-rw-r--r--src/3rdparty/freetype/src/type1/t1driver.c313
-rw-r--r--src/3rdparty/freetype/src/type1/t1driver.h38
-rw-r--r--src/3rdparty/freetype/src/type1/t1errors.h40
-rw-r--r--src/3rdparty/freetype/src/type1/t1gload.c422
-rw-r--r--src/3rdparty/freetype/src/type1/t1gload.h46
-rw-r--r--src/3rdparty/freetype/src/type1/t1load.c2233
-rw-r--r--src/3rdparty/freetype/src/type1/t1load.h102
-rw-r--r--src/3rdparty/freetype/src/type1/t1objs.c568
-rw-r--r--src/3rdparty/freetype/src/type1/t1objs.h171
-rw-r--r--src/3rdparty/freetype/src/type1/t1parse.c484
-rw-r--r--src/3rdparty/freetype/src/type1/t1parse.h135
-rw-r--r--src/3rdparty/freetype/src/type1/t1tokens.h134
-rw-r--r--src/3rdparty/freetype/src/type1/type1.c33
-rw-r--r--src/3rdparty/freetype/src/type42/Jamfile29
-rw-r--r--src/3rdparty/freetype/src/type42/module.mk23
-rw-r--r--src/3rdparty/freetype/src/type42/rules.mk69
-rw-r--r--src/3rdparty/freetype/src/type42/t42drivr.c232
-rw-r--r--src/3rdparty/freetype/src/type42/t42drivr.h38
-rw-r--r--src/3rdparty/freetype/src/type42/t42error.h40
-rw-r--r--src/3rdparty/freetype/src/type42/t42objs.c647
-rw-r--r--src/3rdparty/freetype/src/type42/t42objs.h124
-rw-r--r--src/3rdparty/freetype/src/type42/t42parse.c1167
-rw-r--r--src/3rdparty/freetype/src/type42/t42parse.h90
-rw-r--r--src/3rdparty/freetype/src/type42/t42types.h54
-rw-r--r--src/3rdparty/freetype/src/type42/type42.c25
-rw-r--r--src/3rdparty/freetype/src/winfonts/Jamfile16
-rw-r--r--src/3rdparty/freetype/src/winfonts/fnterrs.h41
-rw-r--r--src/3rdparty/freetype/src/winfonts/module.mk23
-rw-r--r--src/3rdparty/freetype/src/winfonts/rules.mk65
-rw-r--r--src/3rdparty/freetype/src/winfonts/winfnt.c1130
-rw-r--r--src/3rdparty/freetype/src/winfonts/winfnt.h167
-rw-r--r--src/3rdparty/freetype/version.sed5
-rw-r--r--src/3rdparty/freetype/vms_make.com1286
-rw-r--r--src/3rdparty/harfbuzz/.gitignore20
-rw-r--r--src/3rdparty/harfbuzz/AUTHORS6
-rw-r--r--src/3rdparty/harfbuzz/COPYING24
-rw-r--r--src/3rdparty/harfbuzz/ChangeLog0
-rw-r--r--src/3rdparty/harfbuzz/Makefile.am2
-rw-r--r--src/3rdparty/harfbuzz/NEWS0
-rw-r--r--src/3rdparty/harfbuzz/README7
-rwxr-xr-xsrc/3rdparty/harfbuzz/autogen.sh116
-rw-r--r--src/3rdparty/harfbuzz/configure.ac54
-rw-r--r--src/3rdparty/harfbuzz/src/.gitignore7
-rw-r--r--src/3rdparty/harfbuzz/src/Makefile.am68
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-arabic.c1090
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-buffer-private.h107
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-buffer.c383
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-buffer.h94
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-dump-main.c97
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-dump.c765
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-dump.h41
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-external.h157
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-gdef-private.h124
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-gdef.c1159
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-gdef.h135
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-global.h124
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-gpos-private.h712
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-gpos.c6053
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-gpos.h149
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-gsub-private.h476
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-gsub.c4329
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-gsub.h141
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-hangul.c268
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-hebrew.c188
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-impl.c84
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-impl.h131
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-indic.cpp1852
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-khmer.c667
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-myanmar.c542
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-open-private.h102
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-open.c1414
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-open.h282
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-shape.h199
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-shaper-all.cpp36
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-shaper-private.h167
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp1312
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-shaper.h271
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-stream-private.h81
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-stream.c114
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-stream.h45
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-thai.c87
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-tibetan.c274
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz.c32
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz.h38
-rw-r--r--src/3rdparty/harfbuzz/tests/Makefile.am7
-rw-r--r--src/3rdparty/harfbuzz/tests/linebreaking/.gitignore4
-rw-r--r--src/3rdparty/harfbuzz/tests/linebreaking/Makefile.am12
-rw-r--r--src/3rdparty/harfbuzz/tests/linebreaking/harfbuzz-qt.cpp108
-rw-r--r--src/3rdparty/harfbuzz/tests/linebreaking/main.cpp230
-rw-r--r--src/3rdparty/harfbuzz/tests/shaping/.gitignore2
-rw-r--r--src/3rdparty/harfbuzz/tests/shaping/Makefile.am14
-rw-r--r--src/3rdparty/harfbuzz/tests/shaping/README9
-rw-r--r--src/3rdparty/harfbuzz/tests/shaping/main.cpp1035
-rw-r--r--src/3rdparty/libjpeg/README385
-rw-r--r--src/3rdparty/libjpeg/change.log217
-rw-r--r--src/3rdparty/libjpeg/coderules.doc118
-rw-r--r--src/3rdparty/libjpeg/filelist.doc210
-rw-r--r--src/3rdparty/libjpeg/install.doc1063
-rw-r--r--src/3rdparty/libjpeg/jcapimin.c280
-rw-r--r--src/3rdparty/libjpeg/jcapistd.c161
-rw-r--r--src/3rdparty/libjpeg/jccoefct.c449
-rw-r--r--src/3rdparty/libjpeg/jccolor.c459
-rw-r--r--src/3rdparty/libjpeg/jcdctmgr.c387
-rw-r--r--src/3rdparty/libjpeg/jchuff.c909
-rw-r--r--src/3rdparty/libjpeg/jchuff.h47
-rw-r--r--src/3rdparty/libjpeg/jcinit.c72
-rw-r--r--src/3rdparty/libjpeg/jcmainct.c293
-rw-r--r--src/3rdparty/libjpeg/jcmarker.c664
-rw-r--r--src/3rdparty/libjpeg/jcmaster.c590
-rw-r--r--src/3rdparty/libjpeg/jcomapi.c106
-rw-r--r--src/3rdparty/libjpeg/jconfig.bcc48
-rw-r--r--src/3rdparty/libjpeg/jconfig.cfg44
-rw-r--r--src/3rdparty/libjpeg/jconfig.dj38
-rw-r--r--src/3rdparty/libjpeg/jconfig.doc155
-rw-r--r--src/3rdparty/libjpeg/jconfig.h47
-rw-r--r--src/3rdparty/libjpeg/jconfig.mac43
-rw-r--r--src/3rdparty/libjpeg/jconfig.manx43
-rw-r--r--src/3rdparty/libjpeg/jconfig.mc652
-rw-r--r--src/3rdparty/libjpeg/jconfig.sas43
-rw-r--r--src/3rdparty/libjpeg/jconfig.st42
-rw-r--r--src/3rdparty/libjpeg/jconfig.vc45
-rw-r--r--src/3rdparty/libjpeg/jconfig.vms37
-rw-r--r--src/3rdparty/libjpeg/jconfig.wat38
-rw-r--r--src/3rdparty/libjpeg/jcparam.c610
-rw-r--r--src/3rdparty/libjpeg/jcphuff.c833
-rw-r--r--src/3rdparty/libjpeg/jcprepct.c354
-rw-r--r--src/3rdparty/libjpeg/jcsample.c519
-rw-r--r--src/3rdparty/libjpeg/jctrans.c388
-rw-r--r--src/3rdparty/libjpeg/jdapimin.c395
-rw-r--r--src/3rdparty/libjpeg/jdapistd.c275
-rw-r--r--src/3rdparty/libjpeg/jdatadst.c151
-rw-r--r--src/3rdparty/libjpeg/jdatasrc.c212
-rw-r--r--src/3rdparty/libjpeg/jdcoefct.c736
-rw-r--r--src/3rdparty/libjpeg/jdcolor.c396
-rw-r--r--src/3rdparty/libjpeg/jdct.h176
-rw-r--r--src/3rdparty/libjpeg/jddctmgr.c269
-rw-r--r--src/3rdparty/libjpeg/jdhuff.c651
-rw-r--r--src/3rdparty/libjpeg/jdhuff.h201
-rw-r--r--src/3rdparty/libjpeg/jdinput.c381
-rw-r--r--src/3rdparty/libjpeg/jdmainct.c512
-rw-r--r--src/3rdparty/libjpeg/jdmarker.c1360
-rw-r--r--src/3rdparty/libjpeg/jdmaster.c557
-rw-r--r--src/3rdparty/libjpeg/jdmerge.c400
-rw-r--r--src/3rdparty/libjpeg/jdphuff.c668
-rw-r--r--src/3rdparty/libjpeg/jdpostct.c290
-rw-r--r--src/3rdparty/libjpeg/jdsample.c478
-rw-r--r--src/3rdparty/libjpeg/jdtrans.c143
-rw-r--r--src/3rdparty/libjpeg/jerror.c252
-rw-r--r--src/3rdparty/libjpeg/jerror.h291
-rw-r--r--src/3rdparty/libjpeg/jfdctflt.c168
-rw-r--r--src/3rdparty/libjpeg/jfdctfst.c224
-rw-r--r--src/3rdparty/libjpeg/jfdctint.c283
-rw-r--r--src/3rdparty/libjpeg/jidctflt.c242
-rw-r--r--src/3rdparty/libjpeg/jidctfst.c368
-rw-r--r--src/3rdparty/libjpeg/jidctint.c389
-rw-r--r--src/3rdparty/libjpeg/jidctred.c398
-rw-r--r--src/3rdparty/libjpeg/jinclude.h96
-rw-r--r--src/3rdparty/libjpeg/jmemmgr.c1118
-rw-r--r--src/3rdparty/libjpeg/jmemnobs.c109
-rw-r--r--src/3rdparty/libjpeg/jmemsys.h198
-rw-r--r--src/3rdparty/libjpeg/jmorecfg.h363
-rw-r--r--src/3rdparty/libjpeg/jpegint.h392
-rw-r--r--src/3rdparty/libjpeg/jpeglib.h1096
-rw-r--r--src/3rdparty/libjpeg/jquant1.c856
-rw-r--r--src/3rdparty/libjpeg/jquant2.c1310
-rw-r--r--src/3rdparty/libjpeg/jutils.c179
-rw-r--r--src/3rdparty/libjpeg/jversion.h14
-rw-r--r--src/3rdparty/libjpeg/libjpeg.doc3006
-rw-r--r--src/3rdparty/libjpeg/makefile.ansi214
-rw-r--r--src/3rdparty/libjpeg/makefile.bcc285
-rw-r--r--src/3rdparty/libjpeg/makefile.cfg319
-rw-r--r--src/3rdparty/libjpeg/makefile.dj220
-rw-r--r--src/3rdparty/libjpeg/makefile.manx214
-rw-r--r--src/3rdparty/libjpeg/makefile.mc6249
-rw-r--r--src/3rdparty/libjpeg/makefile.mms218
-rw-r--r--src/3rdparty/libjpeg/makefile.sas252
-rw-r--r--src/3rdparty/libjpeg/makefile.unix228
-rw-r--r--src/3rdparty/libjpeg/makefile.vc211
-rw-r--r--src/3rdparty/libjpeg/makefile.vms142
-rw-r--r--src/3rdparty/libjpeg/makefile.wat233
-rw-r--r--src/3rdparty/libjpeg/structure.doc948
-rw-r--r--src/3rdparty/libjpeg/usage.doc562
-rw-r--r--src/3rdparty/libjpeg/wizard.doc211
-rw-r--r--src/3rdparty/libmng/CHANGES1447
-rw-r--r--src/3rdparty/libmng/LICENSE57
-rw-r--r--src/3rdparty/libmng/README36
-rw-r--r--src/3rdparty/libmng/README.autoconf213
-rw-r--r--src/3rdparty/libmng/README.config104
-rw-r--r--src/3rdparty/libmng/README.contrib95
-rw-r--r--src/3rdparty/libmng/README.dll41
-rw-r--r--src/3rdparty/libmng/README.examples48
-rw-r--r--src/3rdparty/libmng/README.footprint46
-rw-r--r--src/3rdparty/libmng/README.packaging24
-rw-r--r--src/3rdparty/libmng/doc/Plan1.pngbin0 -> 9058 bytes
-rw-r--r--src/3rdparty/libmng/doc/Plan2.pngbin0 -> 8849 bytes
-rw-r--r--src/3rdparty/libmng/doc/doc.readme19
-rw-r--r--src/3rdparty/libmng/doc/libmng.txt1107
-rw-r--r--src/3rdparty/libmng/doc/man/jng.537
-rw-r--r--src/3rdparty/libmng/doc/man/libmng.31146
-rw-r--r--src/3rdparty/libmng/doc/man/mng.542
-rw-r--r--src/3rdparty/libmng/doc/misc/magic.dif30
-rw-r--r--src/3rdparty/libmng/doc/rpm/libmng-1.0.10-rhconf.patch38
-rw-r--r--src/3rdparty/libmng/doc/rpm/libmng.spec116
-rw-r--r--src/3rdparty/libmng/libmng.h2932
-rw-r--r--src/3rdparty/libmng/libmng_callback_xs.c1239
-rw-r--r--src/3rdparty/libmng/libmng_chunk_descr.c6090
-rw-r--r--src/3rdparty/libmng/libmng_chunk_descr.h146
-rw-r--r--src/3rdparty/libmng/libmng_chunk_io.c10740
-rw-r--r--src/3rdparty/libmng/libmng_chunk_io.h415
-rw-r--r--src/3rdparty/libmng/libmng_chunk_prc.c4452
-rw-r--r--src/3rdparty/libmng/libmng_chunk_prc.h381
-rw-r--r--src/3rdparty/libmng/libmng_chunk_xs.c7016
-rw-r--r--src/3rdparty/libmng/libmng_chunks.h1026
-rw-r--r--src/3rdparty/libmng/libmng_cms.c758
-rw-r--r--src/3rdparty/libmng/libmng_cms.h92
-rw-r--r--src/3rdparty/libmng/libmng_conf.h295
-rw-r--r--src/3rdparty/libmng/libmng_data.h1032
-rw-r--r--src/3rdparty/libmng/libmng_display.c7140
-rw-r--r--src/3rdparty/libmng/libmng_display.h343
-rw-r--r--src/3rdparty/libmng/libmng_dither.c58
-rw-r--r--src/3rdparty/libmng/libmng_dither.h45
-rw-r--r--src/3rdparty/libmng/libmng_error.c326
-rw-r--r--src/3rdparty/libmng/libmng_error.h119
-rw-r--r--src/3rdparty/libmng/libmng_filter.c978
-rw-r--r--src/3rdparty/libmng/libmng_filter.h69
-rw-r--r--src/3rdparty/libmng/libmng_hlapi.c3001
-rw-r--r--src/3rdparty/libmng/libmng_jpeg.c1088
-rw-r--r--src/3rdparty/libmng/libmng_jpeg.h57
-rw-r--r--src/3rdparty/libmng/libmng_memory.h64
-rw-r--r--src/3rdparty/libmng/libmng_object_prc.c6998
-rw-r--r--src/3rdparty/libmng/libmng_object_prc.h690
-rw-r--r--src/3rdparty/libmng/libmng_objects.h635
-rw-r--r--src/3rdparty/libmng/libmng_pixels.c24610
-rw-r--r--src/3rdparty/libmng/libmng_pixels.h1147
-rw-r--r--src/3rdparty/libmng/libmng_prop_xs.c2799
-rw-r--r--src/3rdparty/libmng/libmng_read.c1369
-rw-r--r--src/3rdparty/libmng/libmng_read.h53
-rw-r--r--src/3rdparty/libmng/libmng_trace.c1683
-rw-r--r--src/3rdparty/libmng/libmng_trace.h1474
-rw-r--r--src/3rdparty/libmng/libmng_types.h579
-rw-r--r--src/3rdparty/libmng/libmng_write.c198
-rw-r--r--src/3rdparty/libmng/libmng_write.h49
-rw-r--r--src/3rdparty/libmng/libmng_zlib.c607
-rw-r--r--src/3rdparty/libmng/libmng_zlib.h60
-rw-r--r--src/3rdparty/libmng/makefiles/Makefile.am29
-rw-r--r--src/3rdparty/libmng/makefiles/README27
-rw-r--r--src/3rdparty/libmng/makefiles/configure.in193
-rw-r--r--src/3rdparty/libmng/makefiles/makefile.bcb3108
-rw-r--r--src/3rdparty/libmng/makefiles/makefile.dj155
-rw-r--r--src/3rdparty/libmng/makefiles/makefile.linux180
-rw-r--r--src/3rdparty/libmng/makefiles/makefile.mingw164
-rw-r--r--src/3rdparty/libmng/makefiles/makefile.mingwdll158
-rw-r--r--src/3rdparty/libmng/makefiles/makefile.qnx160
-rw-r--r--src/3rdparty/libmng/makefiles/makefile.unix67
-rw-r--r--src/3rdparty/libmng/makefiles/makefile.vcwin3299
-rwxr-xr-xsrc/3rdparty/libmng/unmaintained/autogen.sh50
-rw-r--r--src/3rdparty/libpng/ANNOUNCE61
-rw-r--r--src/3rdparty/libpng/CHANGES2173
-rw-r--r--src/3rdparty/libpng/INSTALL199
-rw-r--r--src/3rdparty/libpng/KNOWNBUG22
-rw-r--r--src/3rdparty/libpng/LICENSE109
-rw-r--r--src/3rdparty/libpng/README264
-rw-r--r--src/3rdparty/libpng/TODO24
-rw-r--r--src/3rdparty/libpng/Y2KINFO55
-rwxr-xr-xsrc/3rdparty/libpng/configure13
-rw-r--r--src/3rdparty/libpng/example.c814
-rw-r--r--src/3rdparty/libpng/libpng-1.2.29.txt2906
-rw-r--r--src/3rdparty/libpng/libpng.33680
-rw-r--r--src/3rdparty/libpng/libpngpf.3274
-rw-r--r--src/3rdparty/libpng/png.574
-rw-r--r--src/3rdparty/libpng/png.c798
-rw-r--r--src/3rdparty/libpng/png.h3569
-rw-r--r--src/3rdparty/libpng/pngbar.jpgbin0 -> 2498 bytes
-rw-r--r--src/3rdparty/libpng/pngbar.pngbin0 -> 2399 bytes
-rw-r--r--src/3rdparty/libpng/pngconf.h1499
-rw-r--r--src/3rdparty/libpng/pngerror.c343
-rw-r--r--src/3rdparty/libpng/pnggccrd.c103
-rw-r--r--src/3rdparty/libpng/pngget.c901
-rw-r--r--src/3rdparty/libpng/pngmem.c608
-rw-r--r--src/3rdparty/libpng/pngnow.pngbin0 -> 2069 bytes
-rw-r--r--src/3rdparty/libpng/pngpread.c1598
-rw-r--r--src/3rdparty/libpng/pngread.c1479
-rw-r--r--src/3rdparty/libpng/pngrio.c167
-rw-r--r--src/3rdparty/libpng/pngrtran.c4292
-rw-r--r--src/3rdparty/libpng/pngrutil.c3183
-rw-r--r--src/3rdparty/libpng/pngset.c1268
-rw-r--r--src/3rdparty/libpng/pngtest.c1563
-rw-r--r--src/3rdparty/libpng/pngtest.pngbin0 -> 8574 bytes
-rw-r--r--src/3rdparty/libpng/pngtrans.c662
-rw-r--r--src/3rdparty/libpng/pngvcrd.c1
-rw-r--r--src/3rdparty/libpng/pngwio.c234
-rw-r--r--src/3rdparty/libpng/pngwrite.c1532
-rw-r--r--src/3rdparty/libpng/pngwtran.c572
-rw-r--r--src/3rdparty/libpng/pngwutil.c2802
-rw-r--r--src/3rdparty/libpng/projects/beos/x86-shared.projbin0 -> 17031 bytes
-rw-r--r--src/3rdparty/libpng/projects/beos/x86-shared.txt22
-rw-r--r--src/3rdparty/libpng/projects/beos/x86-static.projbin0 -> 16706 bytes
-rw-r--r--src/3rdparty/libpng/projects/beos/x86-static.txt22
-rw-r--r--src/3rdparty/libpng/projects/cbuilder5/libpng.bpf22
-rw-r--r--src/3rdparty/libpng/projects/cbuilder5/libpng.bpg25
-rw-r--r--src/3rdparty/libpng/projects/cbuilder5/libpng.bpr157
-rw-r--r--src/3rdparty/libpng/projects/cbuilder5/libpng.cpp29
-rw-r--r--src/3rdparty/libpng/projects/cbuilder5/libpng.readme.txt25
-rw-r--r--src/3rdparty/libpng/projects/cbuilder5/libpngstat.bpf22
-rw-r--r--src/3rdparty/libpng/projects/cbuilder5/libpngstat.bpr109
-rw-r--r--src/3rdparty/libpng/projects/cbuilder5/zlib.readme.txt14
-rw-r--r--src/3rdparty/libpng/projects/netware.txt6
-rw-r--r--src/3rdparty/libpng/projects/visualc6/README.txt57
-rw-r--r--src/3rdparty/libpng/projects/visualc6/libpng.dsp472
-rw-r--r--src/3rdparty/libpng/projects/visualc6/libpng.dsw59
-rw-r--r--src/3rdparty/libpng/projects/visualc6/pngtest.dsp314
-rw-r--r--src/3rdparty/libpng/projects/visualc71/PRJ0041.mak21
-rw-r--r--src/3rdparty/libpng/projects/visualc71/README.txt57
-rw-r--r--src/3rdparty/libpng/projects/visualc71/README_zlib.txt44
-rw-r--r--src/3rdparty/libpng/projects/visualc71/libpng.sln88
-rw-r--r--src/3rdparty/libpng/projects/visualc71/libpng.vcproj702
-rw-r--r--src/3rdparty/libpng/projects/visualc71/pngtest.vcproj459
-rw-r--r--src/3rdparty/libpng/projects/visualc71/zlib.vcproj670
-rw-r--r--src/3rdparty/libpng/projects/wince.txt6
-rw-r--r--src/3rdparty/libpng/scripts/CMakeLists.txt210
-rw-r--r--src/3rdparty/libpng/scripts/SCOPTIONS.ppc7
-rw-r--r--src/3rdparty/libpng/scripts/descrip.mms52
-rwxr-xr-xsrc/3rdparty/libpng/scripts/libpng-config-body.in96
-rwxr-xr-xsrc/3rdparty/libpng/scripts/libpng-config-head.in21
-rwxr-xr-xsrc/3rdparty/libpng/scripts/libpng-config.in124
-rw-r--r--src/3rdparty/libpng/scripts/libpng.icc44
-rw-r--r--src/3rdparty/libpng/scripts/libpng.pc-configure.in10
-rw-r--r--src/3rdparty/libpng/scripts/libpng.pc.in10
-rw-r--r--src/3rdparty/libpng/scripts/makefile.32sunu254
-rw-r--r--src/3rdparty/libpng/scripts/makefile.64sunu254
-rw-r--r--src/3rdparty/libpng/scripts/makefile.acorn51
-rw-r--r--src/3rdparty/libpng/scripts/makefile.aix113
-rw-r--r--src/3rdparty/libpng/scripts/makefile.amiga48
-rw-r--r--src/3rdparty/libpng/scripts/makefile.atari51
-rw-r--r--src/3rdparty/libpng/scripts/makefile.bc32152
-rw-r--r--src/3rdparty/libpng/scripts/makefile.beos226
-rw-r--r--src/3rdparty/libpng/scripts/makefile.bor162
-rw-r--r--src/3rdparty/libpng/scripts/makefile.cygwin299
-rw-r--r--src/3rdparty/libpng/scripts/makefile.darwin234
-rw-r--r--src/3rdparty/libpng/scripts/makefile.dec214
-rw-r--r--src/3rdparty/libpng/scripts/makefile.dj255
-rw-r--r--src/3rdparty/libpng/scripts/makefile.elf275
-rw-r--r--src/3rdparty/libpng/scripts/makefile.freebsd48
-rw-r--r--src/3rdparty/libpng/scripts/makefile.gcc79
-rw-r--r--src/3rdparty/libpng/scripts/makefile.gcmmx271
-rw-r--r--src/3rdparty/libpng/scripts/makefile.hp64235
-rw-r--r--src/3rdparty/libpng/scripts/makefile.hpgcc245
-rw-r--r--src/3rdparty/libpng/scripts/makefile.hpux232
-rw-r--r--src/3rdparty/libpng/scripts/makefile.ibmc71
-rw-r--r--src/3rdparty/libpng/scripts/makefile.intel102
-rw-r--r--src/3rdparty/libpng/scripts/makefile.knr99
-rw-r--r--src/3rdparty/libpng/scripts/makefile.linux249
-rw-r--r--src/3rdparty/libpng/scripts/makefile.mingw289
-rw-r--r--src/3rdparty/libpng/scripts/makefile.mips83
-rw-r--r--src/3rdparty/libpng/scripts/makefile.msc86
-rw-r--r--src/3rdparty/libpng/scripts/makefile.ne12bsd45
-rw-r--r--src/3rdparty/libpng/scripts/makefile.netbsd45
-rw-r--r--src/3rdparty/libpng/scripts/makefile.nommx252
-rw-r--r--src/3rdparty/libpng/scripts/makefile.openbsd73
-rw-r--r--src/3rdparty/libpng/scripts/makefile.os269
-rw-r--r--src/3rdparty/libpng/scripts/makefile.sco229
-rw-r--r--src/3rdparty/libpng/scripts/makefile.sggcc242
-rw-r--r--src/3rdparty/libpng/scripts/makefile.sgi245
-rw-r--r--src/3rdparty/libpng/scripts/makefile.so9251
-rw-r--r--src/3rdparty/libpng/scripts/makefile.solaris249
-rw-r--r--src/3rdparty/libpng/scripts/makefile.solaris-x86248
-rw-r--r--src/3rdparty/libpng/scripts/makefile.std92
-rw-r--r--src/3rdparty/libpng/scripts/makefile.sunos97
-rw-r--r--src/3rdparty/libpng/scripts/makefile.tc389
-rw-r--r--src/3rdparty/libpng/scripts/makefile.vcawin3299
-rw-r--r--src/3rdparty/libpng/scripts/makefile.vcwin3299
-rw-r--r--src/3rdparty/libpng/scripts/makefile.watcom109
-rw-r--r--src/3rdparty/libpng/scripts/makevms.com144
-rw-r--r--src/3rdparty/libpng/scripts/pngos2.def257
-rw-r--r--src/3rdparty/libpng/scripts/pngw32.def238
-rw-r--r--src/3rdparty/libpng/scripts/pngw32.rc112
-rw-r--r--src/3rdparty/libpng/scripts/smakefile.ppc30
-rw-r--r--src/3rdparty/libtiff/COPYRIGHT21
-rw-r--r--src/3rdparty/libtiff/ChangeLog3698
-rw-r--r--src/3rdparty/libtiff/HOWTO-RELEASE57
-rw-r--r--src/3rdparty/libtiff/Makefile.am54
-rw-r--r--src/3rdparty/libtiff/Makefile.in724
-rw-r--r--src/3rdparty/libtiff/Makefile.vc59
-rw-r--r--src/3rdparty/libtiff/README59
-rw-r--r--src/3rdparty/libtiff/RELEASE-DATE1
-rw-r--r--src/3rdparty/libtiff/SConstruct169
-rw-r--r--src/3rdparty/libtiff/TODO12
-rw-r--r--src/3rdparty/libtiff/VERSION1
-rw-r--r--src/3rdparty/libtiff/aclocal.m47281
-rwxr-xr-xsrc/3rdparty/libtiff/autogen.sh8
-rwxr-xr-xsrc/3rdparty/libtiff/config/compile142
-rwxr-xr-xsrc/3rdparty/libtiff/config/config.guess1497
-rwxr-xr-xsrc/3rdparty/libtiff/config/config.sub1608
-rwxr-xr-xsrc/3rdparty/libtiff/config/depcomp530
-rwxr-xr-xsrc/3rdparty/libtiff/config/install-sh323
-rwxr-xr-xsrc/3rdparty/libtiff/config/ltmain.sh7339
-rwxr-xr-xsrc/3rdparty/libtiff/config/missing360
-rwxr-xr-xsrc/3rdparty/libtiff/config/mkinstalldirs150
-rwxr-xr-xsrc/3rdparty/libtiff/configure22598
-rw-r--r--src/3rdparty/libtiff/configure.ac568
-rw-r--r--src/3rdparty/libtiff/html/Makefile.am81
-rw-r--r--src/3rdparty/libtiff/html/Makefile.in626
-rw-r--r--src/3rdparty/libtiff/html/TIFFTechNote2.html707
-rw-r--r--src/3rdparty/libtiff/html/addingtags.html292
-rw-r--r--src/3rdparty/libtiff/html/bugs.html53
-rw-r--r--src/3rdparty/libtiff/html/build.html880
-rw-r--r--src/3rdparty/libtiff/html/contrib.html209
-rw-r--r--src/3rdparty/libtiff/html/document.html52
-rw-r--r--src/3rdparty/libtiff/html/images.html41
-rw-r--r--src/3rdparty/libtiff/html/images/Makefile.am46
-rw-r--r--src/3rdparty/libtiff/html/images/Makefile.in436
-rw-r--r--src/3rdparty/libtiff/html/images/back.gifbin0 -> 1000 bytes
-rw-r--r--src/3rdparty/libtiff/html/images/bali.jpgbin0 -> 26152 bytes
-rw-r--r--src/3rdparty/libtiff/html/images/cat.gifbin0 -> 12477 bytes
-rw-r--r--src/3rdparty/libtiff/html/images/cover.jpgbin0 -> 20189 bytes
-rw-r--r--src/3rdparty/libtiff/html/images/cramps.gifbin0 -> 13137 bytes
-rw-r--r--src/3rdparty/libtiff/html/images/dave.gifbin0 -> 8220 bytes
-rw-r--r--src/3rdparty/libtiff/html/images/info.gifbin0 -> 131 bytes
-rw-r--r--src/3rdparty/libtiff/html/images/jello.jpgbin0 -> 13744 bytes
-rw-r--r--src/3rdparty/libtiff/html/images/jim.gifbin0 -> 14493 bytes
-rw-r--r--src/3rdparty/libtiff/html/images/note.gifbin0 -> 264 bytes
-rw-r--r--src/3rdparty/libtiff/html/images/oxford.gifbin0 -> 6069 bytes
-rw-r--r--src/3rdparty/libtiff/html/images/quad.jpgbin0 -> 23904 bytes
-rw-r--r--src/3rdparty/libtiff/html/images/ring.gifbin0 -> 4275 bytes
-rw-r--r--src/3rdparty/libtiff/html/images/smallliz.jpgbin0 -> 16463 bytes
-rw-r--r--src/3rdparty/libtiff/html/images/strike.gifbin0 -> 5610 bytes
-rw-r--r--src/3rdparty/libtiff/html/images/warning.gifbin0 -> 287 bytes
-rw-r--r--src/3rdparty/libtiff/html/index.html121
-rw-r--r--src/3rdparty/libtiff/html/internals.html572
-rw-r--r--src/3rdparty/libtiff/html/intro.html68
-rw-r--r--src/3rdparty/libtiff/html/libtiff.html747
-rw-r--r--src/3rdparty/libtiff/html/man/Makefile.am118
-rw-r--r--src/3rdparty/libtiff/html/man/Makefile.in504
-rw-r--r--src/3rdparty/libtiff/html/man/TIFFClose.3tiff.html87
-rw-r--r--src/3rdparty/libtiff/html/man/TIFFDataWidth.3tiff.html98
-rw-r--r--src/3rdparty/libtiff/html/man/TIFFError.3tiff.html106
-rw-r--r--src/3rdparty/libtiff/html/man/TIFFFlush.3tiff.html113
-rw-r--r--src/3rdparty/libtiff/html/man/TIFFGetField.3tiff.html1446
-rw-r--r--src/3rdparty/libtiff/html/man/TIFFOpen.3tiff.html421
-rw-r--r--src/3rdparty/libtiff/html/man/TIFFPrintDirectory.3tiff.html225
-rw-r--r--src/3rdparty/libtiff/html/man/TIFFRGBAImage.3tiff.html319
-rw-r--r--src/3rdparty/libtiff/html/man/TIFFReadDirectory.3tiff.html218
-rw-r--r--src/3rdparty/libtiff/html/man/TIFFReadEncodedStrip.3tiff.html133
-rw-r--r--src/3rdparty/libtiff/html/man/TIFFReadEncodedTile.3tiff.html130
-rw-r--r--src/3rdparty/libtiff/html/man/TIFFReadRGBAImage.3tiff.html301
-rw-r--r--src/3rdparty/libtiff/html/man/TIFFReadRGBAStrip.3tiff.html208
-rw-r--r--src/3rdparty/libtiff/html/man/TIFFReadRGBATile.3tiff.html261
-rw-r--r--src/3rdparty/libtiff/html/man/TIFFReadRawStrip.3tiff.html109
-rw-r--r--src/3rdparty/libtiff/html/man/TIFFReadRawTile.3tiff.html111
-rw-r--r--src/3rdparty/libtiff/html/man/TIFFReadScanline.3tiff.html157
-rw-r--r--src/3rdparty/libtiff/html/man/TIFFReadTile.3tiff.html133
-rw-r--r--src/3rdparty/libtiff/html/man/TIFFSetDirectory.3tiff.html122
-rw-r--r--src/3rdparty/libtiff/html/man/TIFFSetField.3tiff.html1362
-rw-r--r--src/3rdparty/libtiff/html/man/TIFFWarning.3tiff.html108
-rw-r--r--src/3rdparty/libtiff/html/man/TIFFWriteDirectory.3tiff.html176
-rw-r--r--src/3rdparty/libtiff/html/man/TIFFWriteEncodedStrip.3tiff.html153
-rw-r--r--src/3rdparty/libtiff/html/man/TIFFWriteEncodedTile.3tiff.html147
-rw-r--r--src/3rdparty/libtiff/html/man/TIFFWriteRawStrip.3tiff.html144
-rw-r--r--src/3rdparty/libtiff/html/man/TIFFWriteRawTile.3tiff.html128
-rw-r--r--src/3rdparty/libtiff/html/man/TIFFWriteScanline.3tiff.html206
-rw-r--r--src/3rdparty/libtiff/html/man/TIFFWriteTile.3tiff.html115
-rw-r--r--src/3rdparty/libtiff/html/man/TIFFbuffer.3tiff.html116
-rw-r--r--src/3rdparty/libtiff/html/man/TIFFcodec.3tiff.html116
-rw-r--r--src/3rdparty/libtiff/html/man/TIFFcolor.3tiff.html975
-rw-r--r--src/3rdparty/libtiff/html/man/TIFFmemory.3tiff.html110
-rw-r--r--src/3rdparty/libtiff/html/man/TIFFquery.3tiff.html148
-rw-r--r--src/3rdparty/libtiff/html/man/TIFFsize.3tiff.html95
-rw-r--r--src/3rdparty/libtiff/html/man/TIFFstrip.3tiff.html129
-rw-r--r--src/3rdparty/libtiff/html/man/TIFFswab.3tiff.html110
-rw-r--r--src/3rdparty/libtiff/html/man/TIFFtile.3tiff.html141
-rw-r--r--src/3rdparty/libtiff/html/man/fax2ps.1.html254
-rw-r--r--src/3rdparty/libtiff/html/man/fax2tiff.1.html607
-rw-r--r--src/3rdparty/libtiff/html/man/gif2tiff.1.html141
-rw-r--r--src/3rdparty/libtiff/html/man/index.html64
-rw-r--r--src/3rdparty/libtiff/html/man/libtiff.3tiff.html3137
-rw-r--r--src/3rdparty/libtiff/html/man/pal2rgb.1.html189
-rw-r--r--src/3rdparty/libtiff/html/man/ppm2tiff.1.html141
-rw-r--r--src/3rdparty/libtiff/html/man/ras2tiff.1.html139
-rw-r--r--src/3rdparty/libtiff/html/man/raw2tiff.1.html553
-rw-r--r--src/3rdparty/libtiff/html/man/rgb2ycbcr.1.html154
-rw-r--r--src/3rdparty/libtiff/html/man/sgi2tiff.1.html147
-rw-r--r--src/3rdparty/libtiff/html/man/thumbnail.1.html148
-rw-r--r--src/3rdparty/libtiff/html/man/tiff2bw.1.html160
-rw-r--r--src/3rdparty/libtiff/html/man/tiff2pdf.1.html599
-rw-r--r--src/3rdparty/libtiff/html/man/tiff2ps.1.html536
-rw-r--r--src/3rdparty/libtiff/html/man/tiff2rgba.1.html161
-rw-r--r--src/3rdparty/libtiff/html/man/tiffcmp.1.html156
-rw-r--r--src/3rdparty/libtiff/html/man/tiffcp.1.html484
-rw-r--r--src/3rdparty/libtiff/html/man/tiffdither.1.html182
-rw-r--r--src/3rdparty/libtiff/html/man/tiffdump.1.html145
-rw-r--r--src/3rdparty/libtiff/html/man/tiffgt.1.html551
-rw-r--r--src/3rdparty/libtiff/html/man/tiffinfo.1.html196
-rw-r--r--src/3rdparty/libtiff/html/man/tiffmedian.1.html183
-rw-r--r--src/3rdparty/libtiff/html/man/tiffset.1.html174
-rw-r--r--src/3rdparty/libtiff/html/man/tiffsplit.1.html102
-rw-r--r--src/3rdparty/libtiff/html/man/tiffsv.1.html207
-rw-r--r--src/3rdparty/libtiff/html/misc.html112
-rw-r--r--src/3rdparty/libtiff/html/support.html655
-rw-r--r--src/3rdparty/libtiff/html/tools.html155
-rw-r--r--src/3rdparty/libtiff/html/v3.4beta007.html112
-rw-r--r--src/3rdparty/libtiff/html/v3.4beta016.html122
-rw-r--r--src/3rdparty/libtiff/html/v3.4beta018.html84
-rw-r--r--src/3rdparty/libtiff/html/v3.4beta024.html139
-rw-r--r--src/3rdparty/libtiff/html/v3.4beta028.html146
-rw-r--r--src/3rdparty/libtiff/html/v3.4beta029.html86
-rw-r--r--src/3rdparty/libtiff/html/v3.4beta031.html94
-rw-r--r--src/3rdparty/libtiff/html/v3.4beta032.html90
-rw-r--r--src/3rdparty/libtiff/html/v3.4beta033.html82
-rw-r--r--src/3rdparty/libtiff/html/v3.4beta034.html68
-rw-r--r--src/3rdparty/libtiff/html/v3.4beta035.html63
-rw-r--r--src/3rdparty/libtiff/html/v3.4beta036.html117
-rw-r--r--src/3rdparty/libtiff/html/v3.5.1.html75
-rw-r--r--src/3rdparty/libtiff/html/v3.5.2.html108
-rw-r--r--src/3rdparty/libtiff/html/v3.5.3.html132
-rw-r--r--src/3rdparty/libtiff/html/v3.5.4.html88
-rw-r--r--src/3rdparty/libtiff/html/v3.5.5.html155
-rw-r--r--src/3rdparty/libtiff/html/v3.5.6-beta.html185
-rw-r--r--src/3rdparty/libtiff/html/v3.5.7.html259
-rw-r--r--src/3rdparty/libtiff/html/v3.6.0.html434
-rw-r--r--src/3rdparty/libtiff/html/v3.6.1.html199
-rw-r--r--src/3rdparty/libtiff/html/v3.7.0.html144
-rw-r--r--src/3rdparty/libtiff/html/v3.7.0alpha.html249
-rw-r--r--src/3rdparty/libtiff/html/v3.7.0beta.html162
-rw-r--r--src/3rdparty/libtiff/html/v3.7.0beta2.html131
-rw-r--r--src/3rdparty/libtiff/html/v3.7.1.html233
-rw-r--r--src/3rdparty/libtiff/html/v3.7.2.html222
-rw-r--r--src/3rdparty/libtiff/html/v3.7.3.html230
-rw-r--r--src/3rdparty/libtiff/html/v3.7.4.html133
-rw-r--r--src/3rdparty/libtiff/html/v3.8.0.html199
-rw-r--r--src/3rdparty/libtiff/html/v3.8.1.html217
-rw-r--r--src/3rdparty/libtiff/html/v3.8.2.html137
-rw-r--r--src/3rdparty/libtiff/libtiff/Makefile.am138
-rw-r--r--src/3rdparty/libtiff/libtiff/Makefile.in763
-rw-r--r--src/3rdparty/libtiff/libtiff/Makefile.vc98
-rw-r--r--src/3rdparty/libtiff/libtiff/SConstruct71
-rw-r--r--src/3rdparty/libtiff/libtiff/libtiff.def140
-rw-r--r--src/3rdparty/libtiff/libtiff/mkg3states.c440
-rw-r--r--src/3rdparty/libtiff/libtiff/t4.h285
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_acorn.c519
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_apple.c274
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_atari.c243
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_aux.c267
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_close.c119
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_codec.c150
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_color.c275
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_compress.c286
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_config.h296
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_config.h.in260
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_config.h.vc44
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_dir.c1350
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_dir.h199
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_dirinfo.c846
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_dirread.c1789
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_dirwrite.c1243
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_dumpmode.c117
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_error.c73
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_extension.c111
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_fax3.c1566
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_fax3.h525
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_fax3sm.c1253
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_flush.c67
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_getimage.c2598
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_jpeg.c1942
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_luv.c1606
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_lzw.c1084
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_msdos.c179
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_next.c144
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_ojpeg.c2629
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_open.c683
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_packbits.c293
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_pixarlog.c1342
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_predict.c626
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_predict.h64
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_print.c639
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_read.c650
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_stream.cxx289
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_strip.c294
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_swab.c235
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_thunder.c158
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_tile.c273
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_unix.c298
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_version.c33
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_warning.c74
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_win3.c225
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_win32.c393
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_write.c725
-rw-r--r--src/3rdparty/libtiff/libtiff/tif_zip.c378
-rw-r--r--src/3rdparty/libtiff/libtiff/tiff.h647
-rw-r--r--src/3rdparty/libtiff/libtiff/tiffconf.h110
-rw-r--r--src/3rdparty/libtiff/libtiff/tiffconf.h.in100
-rw-r--r--src/3rdparty/libtiff/libtiff/tiffconf.h.vc97
-rw-r--r--src/3rdparty/libtiff/libtiff/tiffio.h520
-rw-r--r--src/3rdparty/libtiff/libtiff/tiffio.hxx42
-rw-r--r--src/3rdparty/libtiff/libtiff/tiffiop.h328
-rw-r--r--src/3rdparty/libtiff/libtiff/tiffvers.h9
-rw-r--r--src/3rdparty/libtiff/libtiff/uvcode.h173
-rw-r--r--src/3rdparty/libtiff/m4/acinclude.m4669
-rw-r--r--src/3rdparty/libtiff/m4/libtool.m46883
-rw-r--r--src/3rdparty/libtiff/m4/ltoptions.m4380
-rw-r--r--src/3rdparty/libtiff/m4/ltsugar.m4111
-rw-r--r--src/3rdparty/libtiff/m4/ltversion.m423
-rw-r--r--src/3rdparty/libtiff/nmake.opt214
-rw-r--r--src/3rdparty/libtiff/port/Makefile.am31
-rw-r--r--src/3rdparty/libtiff/port/Makefile.in501
-rw-r--r--src/3rdparty/libtiff/port/Makefile.vc43
-rw-r--r--src/3rdparty/libtiff/port/dummy.c12
-rw-r--r--src/3rdparty/libtiff/port/getopt.c124
-rw-r--r--src/3rdparty/libtiff/port/lfind.c58
-rw-r--r--src/3rdparty/libtiff/port/strcasecmp.c50
-rw-r--r--src/3rdparty/libtiff/port/strtoul.c109
-rw-r--r--src/3rdparty/libtiff/test/Makefile.am44
-rw-r--r--src/3rdparty/libtiff/test/Makefile.in607
-rw-r--r--src/3rdparty/libtiff/test/ascii_tag.c170
-rw-r--r--src/3rdparty/libtiff/test/check_tag.c72
-rw-r--r--src/3rdparty/libtiff/test/long_tag.c154
-rw-r--r--src/3rdparty/libtiff/test/short_tag.c179
-rw-r--r--src/3rdparty/libtiff/test/strip.c289
-rw-r--r--src/3rdparty/libtiff/test/strip_rw.c155
-rw-r--r--src/3rdparty/libtiff/test/test_arrays.c829
-rw-r--r--src/3rdparty/libtiff/test/test_arrays.h63
-rw-r--r--src/3rdparty/md4/md4.cpp265
-rw-r--r--src/3rdparty/md4/md4.h31
-rw-r--r--src/3rdparty/md5/md5.cpp246
-rw-r--r--src/3rdparty/md5/md5.h48
-rw-r--r--src/3rdparty/patches/freetype-2.3.5-config.patch265
-rw-r--r--src/3rdparty/patches/freetype-2.3.6-ascii.patch174
-rw-r--r--src/3rdparty/patches/libjpeg-6b-config.patch50
-rw-r--r--src/3rdparty/patches/libmng-1.0.10-endless-loop.patch65
-rw-r--r--src/3rdparty/patches/libpng-1.2.20-elf-visibility.patch17
-rw-r--r--src/3rdparty/patches/libtiff-3.8.2-config.patch374
-rw-r--r--src/3rdparty/patches/sqlite-3.5.6-config.patch38
-rw-r--r--src/3rdparty/patches/sqlite-3.5.6-wince.patch19
-rw-r--r--src/3rdparty/patches/zlib-1.2.3-elf-visibility.patch433
-rw-r--r--src/3rdparty/phonon/CMakeLists.txt272
-rw-r--r--src/3rdparty/phonon/COPYING.LIB510
-rw-r--r--src/3rdparty/phonon/ds9/CMakeLists.txt53
-rw-r--r--src/3rdparty/phonon/ds9/ConfigureChecks.cmake44
-rw-r--r--src/3rdparty/phonon/ds9/abstractvideorenderer.cpp118
-rw-r--r--src/3rdparty/phonon/ds9/abstractvideorenderer.h73
-rw-r--r--src/3rdparty/phonon/ds9/audiooutput.cpp111
-rw-r--r--src/3rdparty/phonon/ds9/audiooutput.h68
-rw-r--r--src/3rdparty/phonon/ds9/backend.cpp343
-rw-r--r--src/3rdparty/phonon/ds9/backend.h83
-rw-r--r--src/3rdparty/phonon/ds9/backendnode.cpp115
-rw-r--r--src/3rdparty/phonon/ds9/backendnode.h73
-rw-r--r--src/3rdparty/phonon/ds9/compointer.h114
-rw-r--r--src/3rdparty/phonon/ds9/ds9.desktop51
-rw-r--r--src/3rdparty/phonon/ds9/effect.cpp153
-rw-r--r--src/3rdparty/phonon/ds9/effect.h59
-rw-r--r--src/3rdparty/phonon/ds9/fakesource.cpp166
-rw-r--r--src/3rdparty/phonon/ds9/fakesource.h54
-rw-r--r--src/3rdparty/phonon/ds9/iodevicereader.cpp228
-rw-r--r--src/3rdparty/phonon/ds9/iodevicereader.h57
-rw-r--r--src/3rdparty/phonon/ds9/lgpl-2.1.txt504
-rw-r--r--src/3rdparty/phonon/ds9/lgpl-3.txt165
-rw-r--r--src/3rdparty/phonon/ds9/mediagraph.cpp1099
-rw-r--r--src/3rdparty/phonon/ds9/mediagraph.h148
-rw-r--r--src/3rdparty/phonon/ds9/mediaobject.cpp1208
-rw-r--r--src/3rdparty/phonon/ds9/mediaobject.h313
-rw-r--r--src/3rdparty/phonon/ds9/phononds9_namespace.h33
-rw-r--r--src/3rdparty/phonon/ds9/qasyncreader.cpp198
-rw-r--r--src/3rdparty/phonon/ds9/qasyncreader.h77
-rw-r--r--src/3rdparty/phonon/ds9/qaudiocdreader.cpp332
-rw-r--r--src/3rdparty/phonon/ds9/qaudiocdreader.h58
-rw-r--r--src/3rdparty/phonon/ds9/qbasefilter.cpp831
-rw-r--r--src/3rdparty/phonon/ds9/qbasefilter.h136
-rw-r--r--src/3rdparty/phonon/ds9/qmeminputpin.cpp357
-rw-r--r--src/3rdparty/phonon/ds9/qmeminputpin.h82
-rw-r--r--src/3rdparty/phonon/ds9/qpin.cpp653
-rw-r--r--src/3rdparty/phonon/ds9/qpin.h121
-rw-r--r--src/3rdparty/phonon/ds9/videorenderer_soft.cpp1011
-rw-r--r--src/3rdparty/phonon/ds9/videorenderer_soft.h68
-rw-r--r--src/3rdparty/phonon/ds9/videorenderer_vmr9.cpp333
-rw-r--r--src/3rdparty/phonon/ds9/videorenderer_vmr9.h56
-rw-r--r--src/3rdparty/phonon/ds9/videowidget.cpp397
-rw-r--r--src/3rdparty/phonon/ds9/videowidget.h96
-rw-r--r--src/3rdparty/phonon/ds9/volumeeffect.cpp296
-rw-r--r--src/3rdparty/phonon/ds9/volumeeffect.h71
-rw-r--r--src/3rdparty/phonon/gstreamer/CMakeLists.txt72
-rw-r--r--src/3rdparty/phonon/gstreamer/ConfigureChecks.cmake37
-rw-r--r--src/3rdparty/phonon/gstreamer/Messages.sh5
-rw-r--r--src/3rdparty/phonon/gstreamer/abstractrenderer.cpp56
-rw-r--r--src/3rdparty/phonon/gstreamer/abstractrenderer.h62
-rw-r--r--src/3rdparty/phonon/gstreamer/alsasink2.c1756
-rw-r--r--src/3rdparty/phonon/gstreamer/alsasink2.h87
-rw-r--r--src/3rdparty/phonon/gstreamer/artssink.cpp277
-rw-r--r--src/3rdparty/phonon/gstreamer/artssink.h91
-rw-r--r--src/3rdparty/phonon/gstreamer/audioeffect.cpp78
-rw-r--r--src/3rdparty/phonon/gstreamer/audioeffect.h55
-rw-r--r--src/3rdparty/phonon/gstreamer/audiooutput.cpp257
-rw-r--r--src/3rdparty/phonon/gstreamer/audiooutput.h82
-rw-r--r--src/3rdparty/phonon/gstreamer/backend.cpp455
-rw-r--r--src/3rdparty/phonon/gstreamer/backend.h101
-rw-r--r--src/3rdparty/phonon/gstreamer/common.h51
-rw-r--r--src/3rdparty/phonon/gstreamer/devicemanager.cpp357
-rw-r--r--src/3rdparty/phonon/gstreamer/devicemanager.h80
-rw-r--r--src/3rdparty/phonon/gstreamer/effect.cpp246
-rw-r--r--src/3rdparty/phonon/gstreamer/effect.h64
-rw-r--r--src/3rdparty/phonon/gstreamer/effectmanager.cpp105
-rw-r--r--src/3rdparty/phonon/gstreamer/effectmanager.h91
-rw-r--r--src/3rdparty/phonon/gstreamer/glrenderer.cpp339
-rw-r--r--src/3rdparty/phonon/gstreamer/glrenderer.h101
-rw-r--r--src/3rdparty/phonon/gstreamer/gsthelper.cpp170
-rw-r--r--src/3rdparty/phonon/gstreamer/gsthelper.h49
-rw-r--r--src/3rdparty/phonon/gstreamer/gstreamer.desktop51
-rw-r--r--src/3rdparty/phonon/gstreamer/lgpl-2.1.txt504
-rw-r--r--src/3rdparty/phonon/gstreamer/lgpl-3.txt165
-rw-r--r--src/3rdparty/phonon/gstreamer/medianode.cpp456
-rw-r--r--src/3rdparty/phonon/gstreamer/medianode.h128
-rw-r--r--src/3rdparty/phonon/gstreamer/medianodeevent.cpp38
-rw-r--r--src/3rdparty/phonon/gstreamer/medianodeevent.h70
-rw-r--r--src/3rdparty/phonon/gstreamer/mediaobject.cpp1479
-rw-r--r--src/3rdparty/phonon/gstreamer/mediaobject.h294
-rw-r--r--src/3rdparty/phonon/gstreamer/message.cpp75
-rw-r--r--src/3rdparty/phonon/gstreamer/message.h58
-rw-r--r--src/3rdparty/phonon/gstreamer/phononsrc.cpp257
-rw-r--r--src/3rdparty/phonon/gstreamer/phononsrc.h69
-rw-r--r--src/3rdparty/phonon/gstreamer/qwidgetvideosink.cpp221
-rw-r--r--src/3rdparty/phonon/gstreamer/qwidgetvideosink.h97
-rw-r--r--src/3rdparty/phonon/gstreamer/streamreader.cpp53
-rw-r--r--src/3rdparty/phonon/gstreamer/streamreader.h96
-rw-r--r--src/3rdparty/phonon/gstreamer/videowidget.cpp387
-rw-r--r--src/3rdparty/phonon/gstreamer/videowidget.h106
-rw-r--r--src/3rdparty/phonon/gstreamer/volumefadereffect.cpp162
-rw-r--r--src/3rdparty/phonon/gstreamer/volumefadereffect.h70
-rw-r--r--src/3rdparty/phonon/gstreamer/widgetrenderer.cpp150
-rw-r--r--src/3rdparty/phonon/gstreamer/widgetrenderer.h63
-rw-r--r--src/3rdparty/phonon/gstreamer/x11renderer.cpp194
-rw-r--r--src/3rdparty/phonon/gstreamer/x11renderer.h68
-rw-r--r--src/3rdparty/phonon/includes/CMakeLists.txt49
-rw-r--r--src/3rdparty/phonon/includes/Phonon/AbstractAudioOutput1
-rw-r--r--src/3rdparty/phonon/includes/Phonon/AbstractMediaStream1
-rw-r--r--src/3rdparty/phonon/includes/Phonon/AbstractVideoOutput1
-rw-r--r--src/3rdparty/phonon/includes/Phonon/AddonInterface1
-rw-r--r--src/3rdparty/phonon/includes/Phonon/AudioDevice1
-rw-r--r--src/3rdparty/phonon/includes/Phonon/AudioDeviceEnumerator1
-rw-r--r--src/3rdparty/phonon/includes/Phonon/AudioOutput1
-rw-r--r--src/3rdparty/phonon/includes/Phonon/AudioOutputDevice1
-rw-r--r--src/3rdparty/phonon/includes/Phonon/AudioOutputDeviceModel1
-rw-r--r--src/3rdparty/phonon/includes/Phonon/AudioOutputInterface1
-rw-r--r--src/3rdparty/phonon/includes/Phonon/BackendCapabilities1
-rw-r--r--src/3rdparty/phonon/includes/Phonon/BackendInterface1
-rw-r--r--src/3rdparty/phonon/includes/Phonon/Effect1
-rw-r--r--src/3rdparty/phonon/includes/Phonon/EffectDescription1
-rw-r--r--src/3rdparty/phonon/includes/Phonon/EffectDescriptionModel1
-rw-r--r--src/3rdparty/phonon/includes/Phonon/EffectInterface1
-rw-r--r--src/3rdparty/phonon/includes/Phonon/EffectParameter1
-rw-r--r--src/3rdparty/phonon/includes/Phonon/EffectWidget1
-rw-r--r--src/3rdparty/phonon/includes/Phonon/Experimental/AbstractVideoDataOutput1
-rw-r--r--src/3rdparty/phonon/includes/Phonon/Experimental/AudioDataOutput1
-rw-r--r--src/3rdparty/phonon/includes/Phonon/Experimental/SnapshotInterface1
-rw-r--r--src/3rdparty/phonon/includes/Phonon/Experimental/VideoDataOutput1
-rw-r--r--src/3rdparty/phonon/includes/Phonon/Experimental/VideoDataOutputInterface1
-rw-r--r--src/3rdparty/phonon/includes/Phonon/Experimental/VideoFrame1
-rw-r--r--src/3rdparty/phonon/includes/Phonon/Experimental/VideoFrame21
-rw-r--r--src/3rdparty/phonon/includes/Phonon/Experimental/Visualization1
-rw-r--r--src/3rdparty/phonon/includes/Phonon/Global1
-rw-r--r--src/3rdparty/phonon/includes/Phonon/MediaController1
-rw-r--r--src/3rdparty/phonon/includes/Phonon/MediaNode1
-rw-r--r--src/3rdparty/phonon/includes/Phonon/MediaObject1
-rw-r--r--src/3rdparty/phonon/includes/Phonon/MediaObjectInterface1
-rw-r--r--src/3rdparty/phonon/includes/Phonon/MediaSource1
-rw-r--r--src/3rdparty/phonon/includes/Phonon/ObjectDescription1
-rw-r--r--src/3rdparty/phonon/includes/Phonon/ObjectDescriptionModel1
-rw-r--r--src/3rdparty/phonon/includes/Phonon/Path1
-rw-r--r--src/3rdparty/phonon/includes/Phonon/PlatformPlugin1
-rw-r--r--src/3rdparty/phonon/includes/Phonon/SeekSlider1
-rw-r--r--src/3rdparty/phonon/includes/Phonon/StreamInterface1
-rw-r--r--src/3rdparty/phonon/includes/Phonon/VideoPlayer1
-rw-r--r--src/3rdparty/phonon/includes/Phonon/VideoWidget1
-rw-r--r--src/3rdparty/phonon/includes/Phonon/VideoWidgetInterface1
-rw-r--r--src/3rdparty/phonon/includes/Phonon/VolumeFaderEffect1
-rw-r--r--src/3rdparty/phonon/includes/Phonon/VolumeFaderInterface1
-rw-r--r--src/3rdparty/phonon/includes/Phonon/VolumeSlider1
-rw-r--r--src/3rdparty/phonon/phonon.pc.cmake11
-rw-r--r--src/3rdparty/phonon/phonon/.krazy2
-rw-r--r--src/3rdparty/phonon/phonon/BUGS9
-rw-r--r--src/3rdparty/phonon/phonon/CMakeLists.txt104
-rw-r--r--src/3rdparty/phonon/phonon/IDEAS70
-rw-r--r--src/3rdparty/phonon/phonon/Messages.sh6
-rw-r--r--src/3rdparty/phonon/phonon/TODO31
-rw-r--r--src/3rdparty/phonon/phonon/abstractaudiooutput.cpp50
-rw-r--r--src/3rdparty/phonon/phonon/abstractaudiooutput.h57
-rw-r--r--src/3rdparty/phonon/phonon/abstractaudiooutput_p.cpp44
-rw-r--r--src/3rdparty/phonon/phonon/abstractaudiooutput_p.h50
-rw-r--r--src/3rdparty/phonon/phonon/abstractmediastream.cpp198
-rw-r--r--src/3rdparty/phonon/phonon/abstractmediastream.h227
-rw-r--r--src/3rdparty/phonon/phonon/abstractmediastream_p.h83
-rw-r--r--src/3rdparty/phonon/phonon/abstractvideooutput.cpp41
-rw-r--r--src/3rdparty/phonon/phonon/abstractvideooutput.h74
-rw-r--r--src/3rdparty/phonon/phonon/abstractvideooutput_p.cpp41
-rw-r--r--src/3rdparty/phonon/phonon/abstractvideooutput_p.h48
-rw-r--r--src/3rdparty/phonon/phonon/addoninterface.h103
-rw-r--r--src/3rdparty/phonon/phonon/audiooutput.cpp418
-rw-r--r--src/3rdparty/phonon/phonon/audiooutput.h179
-rw-r--r--src/3rdparty/phonon/phonon/audiooutput_p.h95
-rw-r--r--src/3rdparty/phonon/phonon/audiooutputadaptor.cpp101
-rw-r--r--src/3rdparty/phonon/phonon/audiooutputadaptor_p.h109
-rw-r--r--src/3rdparty/phonon/phonon/audiooutputinterface.cpp40
-rw-r--r--src/3rdparty/phonon/phonon/audiooutputinterface.h151
-rw-r--r--src/3rdparty/phonon/phonon/backend.dox107
-rw-r--r--src/3rdparty/phonon/phonon/backendcapabilities.cpp121
-rw-r--r--src/3rdparty/phonon/phonon/backendcapabilities.h213
-rw-r--r--src/3rdparty/phonon/phonon/backendcapabilities_p.h50
-rw-r--r--src/3rdparty/phonon/phonon/backendinterface.h287
-rw-r--r--src/3rdparty/phonon/phonon/effect.cpp136
-rw-r--r--src/3rdparty/phonon/phonon/effect.h119
-rw-r--r--src/3rdparty/phonon/phonon/effect_p.h61
-rw-r--r--src/3rdparty/phonon/phonon/effectinterface.h68
-rw-r--r--src/3rdparty/phonon/phonon/effectparameter.cpp142
-rw-r--r--src/3rdparty/phonon/phonon/effectparameter.h237
-rw-r--r--src/3rdparty/phonon/phonon/effectparameter_p.h56
-rw-r--r--src/3rdparty/phonon/phonon/effectwidget.cpp254
-rw-r--r--src/3rdparty/phonon/phonon/effectwidget.h76
-rw-r--r--src/3rdparty/phonon/phonon/effectwidget_p.h64
-rwxr-xr-xsrc/3rdparty/phonon/phonon/extractmethodcalls.rb527
-rw-r--r--src/3rdparty/phonon/phonon/factory.cpp457
-rw-r--r--src/3rdparty/phonon/phonon/factory_p.h196
-rw-r--r--src/3rdparty/phonon/phonon/frontendinterface_p.h68
-rw-r--r--src/3rdparty/phonon/phonon/globalconfig.cpp243
-rw-r--r--src/3rdparty/phonon/phonon/globalconfig_p.h65
-rw-r--r--src/3rdparty/phonon/phonon/globalstatic_p.h293
-rw-r--r--src/3rdparty/phonon/phonon/iodevicestream.cpp100
-rw-r--r--src/3rdparty/phonon/phonon/iodevicestream_p.h58
-rw-r--r--src/3rdparty/phonon/phonon/mediacontroller.cpp239
-rw-r--r--src/3rdparty/phonon/phonon/mediacontroller.h188
-rw-r--r--src/3rdparty/phonon/phonon/medianode.cpp130
-rw-r--r--src/3rdparty/phonon/phonon/medianode.h69
-rw-r--r--src/3rdparty/phonon/phonon/medianode_p.h145
-rw-r--r--src/3rdparty/phonon/phonon/medianodedestructionhandler_p.h62
-rw-r--r--src/3rdparty/phonon/phonon/mediaobject.cpp572
-rw-r--r--src/3rdparty/phonon/phonon/mediaobject.dox71
-rw-r--r--src/3rdparty/phonon/phonon/mediaobject.h625
-rw-r--r--src/3rdparty/phonon/phonon/mediaobject_p.h113
-rw-r--r--src/3rdparty/phonon/phonon/mediaobjectinterface.h242
-rw-r--r--src/3rdparty/phonon/phonon/mediasource.cpp232
-rw-r--r--src/3rdparty/phonon/phonon/mediasource.h279
-rw-r--r--src/3rdparty/phonon/phonon/mediasource_p.h89
-rw-r--r--src/3rdparty/phonon/phonon/objectdescription.cpp140
-rw-r--r--src/3rdparty/phonon/phonon/objectdescription.h342
-rw-r--r--src/3rdparty/phonon/phonon/objectdescription_p.h64
-rw-r--r--src/3rdparty/phonon/phonon/objectdescriptionmodel.cpp392
-rw-r--r--src/3rdparty/phonon/phonon/objectdescriptionmodel.h380
-rw-r--r--src/3rdparty/phonon/phonon/objectdescriptionmodel_p.h65
-rw-r--r--src/3rdparty/phonon/phonon/org.kde.Phonon.AudioOutput.xml32
-rw-r--r--src/3rdparty/phonon/phonon/path.cpp472
-rw-r--r--src/3rdparty/phonon/phonon/path.h243
-rw-r--r--src/3rdparty/phonon/phonon/path_p.h79
-rw-r--r--src/3rdparty/phonon/phonon/phonon_export.h58
-rw-r--r--src/3rdparty/phonon/phonon/phonondefs.h144
-rw-r--r--src/3rdparty/phonon/phonon/phonondefs_p.h369
-rw-r--r--src/3rdparty/phonon/phonon/phononnamespace.cpp92
-rw-r--r--src/3rdparty/phonon/phonon/phononnamespace.h306
-rw-r--r--src/3rdparty/phonon/phonon/phononnamespace.h.in306
-rw-r--r--src/3rdparty/phonon/phonon/phononnamespace_p.h38
-rw-r--r--src/3rdparty/phonon/phonon/platform.cpp144
-rw-r--r--src/3rdparty/phonon/phonon/platform_p.h62
-rw-r--r--src/3rdparty/phonon/phonon/platformplugin.h118
-rwxr-xr-xsrc/3rdparty/phonon/phonon/preprocessandextract.sh39
-rw-r--r--src/3rdparty/phonon/phonon/qsettingsgroup_p.h91
-rw-r--r--src/3rdparty/phonon/phonon/seekslider.cpp263
-rw-r--r--src/3rdparty/phonon/phonon/seekslider.h157
-rw-r--r--src/3rdparty/phonon/phonon/seekslider_p.h101
-rw-r--r--src/3rdparty/phonon/phonon/stream-thoughts72
-rw-r--r--src/3rdparty/phonon/phonon/streaminterface.cpp114
-rw-r--r--src/3rdparty/phonon/phonon/streaminterface.h123
-rw-r--r--src/3rdparty/phonon/phonon/streaminterface_p.h59
-rw-r--r--src/3rdparty/phonon/phonon/videoplayer.cpp184
-rw-r--r--src/3rdparty/phonon/phonon/videoplayer.h207
-rw-r--r--src/3rdparty/phonon/phonon/videowidget.cpp183
-rw-r--r--src/3rdparty/phonon/phonon/videowidget.h219
-rw-r--r--src/3rdparty/phonon/phonon/videowidget_p.h84
-rw-r--r--src/3rdparty/phonon/phonon/videowidgetinterface.h65
-rw-r--r--src/3rdparty/phonon/phonon/volumefadereffect.cpp108
-rw-r--r--src/3rdparty/phonon/phonon/volumefadereffect.h178
-rw-r--r--src/3rdparty/phonon/phonon/volumefadereffect_p.h58
-rw-r--r--src/3rdparty/phonon/phonon/volumefaderinterface.h58
-rw-r--r--src/3rdparty/phonon/phonon/volumeslider.cpp262
-rw-r--r--src/3rdparty/phonon/phonon/volumeslider.h155
-rw-r--r--src/3rdparty/phonon/phonon/volumeslider_p.h101
-rw-r--r--src/3rdparty/phonon/qt7/CMakeLists.txt58
-rw-r--r--src/3rdparty/phonon/qt7/ConfigureChecks.cmake16
-rw-r--r--src/3rdparty/phonon/qt7/audioconnection.h84
-rw-r--r--src/3rdparty/phonon/qt7/audioconnection.mm152
-rw-r--r--src/3rdparty/phonon/qt7/audiodevice.h52
-rw-r--r--src/3rdparty/phonon/qt7/audiodevice.mm177
-rw-r--r--src/3rdparty/phonon/qt7/audioeffects.h80
-rw-r--r--src/3rdparty/phonon/qt7/audioeffects.mm254
-rw-r--r--src/3rdparty/phonon/qt7/audiograph.h86
-rw-r--r--src/3rdparty/phonon/qt7/audiograph.mm320
-rw-r--r--src/3rdparty/phonon/qt7/audiomixer.h91
-rw-r--r--src/3rdparty/phonon/qt7/audiomixer.mm181
-rw-r--r--src/3rdparty/phonon/qt7/audionode.h86
-rw-r--r--src/3rdparty/phonon/qt7/audionode.mm240
-rw-r--r--src/3rdparty/phonon/qt7/audiooutput.h88
-rw-r--r--src/3rdparty/phonon/qt7/audiooutput.mm168
-rw-r--r--src/3rdparty/phonon/qt7/audiopartoutput.h47
-rw-r--r--src/3rdparty/phonon/qt7/audiopartoutput.mm69
-rw-r--r--src/3rdparty/phonon/qt7/audiosplitter.h50
-rw-r--r--src/3rdparty/phonon/qt7/audiosplitter.mm52
-rw-r--r--src/3rdparty/phonon/qt7/backend.h61
-rw-r--r--src/3rdparty/phonon/qt7/backend.mm276
-rw-r--r--src/3rdparty/phonon/qt7/backendheader.h184
-rw-r--r--src/3rdparty/phonon/qt7/backendheader.mm127
-rw-r--r--src/3rdparty/phonon/qt7/backendinfo.h48
-rw-r--r--src/3rdparty/phonon/qt7/backendinfo.mm311
-rw-r--r--src/3rdparty/phonon/qt7/lgpl-2.1.txt504
-rw-r--r--src/3rdparty/phonon/qt7/lgpl-3.txt165
-rw-r--r--src/3rdparty/phonon/qt7/medianode.h85
-rw-r--r--src/3rdparty/phonon/qt7/medianode.mm261
-rw-r--r--src/3rdparty/phonon/qt7/medianodeevent.h71
-rw-r--r--src/3rdparty/phonon/qt7/medianodeevent.mm37
-rw-r--r--src/3rdparty/phonon/qt7/medianodevideopart.h42
-rw-r--r--src/3rdparty/phonon/qt7/medianodevideopart.mm37
-rw-r--r--src/3rdparty/phonon/qt7/mediaobject.h171
-rw-r--r--src/3rdparty/phonon/qt7/mediaobject.mm852
-rw-r--r--src/3rdparty/phonon/qt7/mediaobjectaudionode.h75
-rw-r--r--src/3rdparty/phonon/qt7/mediaobjectaudionode.mm207
-rw-r--r--src/3rdparty/phonon/qt7/quicktimeaudioplayer.h112
-rw-r--r--src/3rdparty/phonon/qt7/quicktimeaudioplayer.mm491
-rw-r--r--src/3rdparty/phonon/qt7/quicktimemetadata.h67
-rw-r--r--src/3rdparty/phonon/qt7/quicktimemetadata.mm185
-rw-r--r--src/3rdparty/phonon/qt7/quicktimestreamreader.h71
-rw-r--r--src/3rdparty/phonon/qt7/quicktimestreamreader.mm137
-rw-r--r--src/3rdparty/phonon/qt7/quicktimevideoplayer.h167
-rw-r--r--src/3rdparty/phonon/qt7/quicktimevideoplayer.mm955
-rw-r--r--src/3rdparty/phonon/qt7/videoeffect.h63
-rw-r--r--src/3rdparty/phonon/qt7/videoeffect.mm76
-rw-r--r--src/3rdparty/phonon/qt7/videoframe.h98
-rw-r--r--src/3rdparty/phonon/qt7/videoframe.mm378
-rw-r--r--src/3rdparty/phonon/qt7/videowidget.h71
-rw-r--r--src/3rdparty/phonon/qt7/videowidget.mm883
-rw-r--r--src/3rdparty/phonon/waveout/audiooutput.cpp78
-rw-r--r--src/3rdparty/phonon/waveout/audiooutput.h65
-rw-r--r--src/3rdparty/phonon/waveout/backend.cpp131
-rw-r--r--src/3rdparty/phonon/waveout/backend.h69
-rw-r--r--src/3rdparty/phonon/waveout/mediaobject.cpp686
-rw-r--r--src/3rdparty/phonon/waveout/mediaobject.h162
-rw-r--r--src/3rdparty/ptmalloc/COPYRIGHT19
-rw-r--r--src/3rdparty/ptmalloc/ChangeLog33
-rw-r--r--src/3rdparty/ptmalloc/Makefile211
-rw-r--r--src/3rdparty/ptmalloc/README186
-rw-r--r--src/3rdparty/ptmalloc/lran2.h51
-rw-r--r--src/3rdparty/ptmalloc/malloc-2.8.3.h534
-rw-r--r--src/3rdparty/ptmalloc/malloc-private.h170
-rw-r--r--src/3rdparty/ptmalloc/malloc.c5515
-rw-r--r--src/3rdparty/ptmalloc/ptmalloc3.c1135
-rw-r--r--src/3rdparty/ptmalloc/sysdeps/generic/atomic.h1
-rw-r--r--src/3rdparty/ptmalloc/sysdeps/generic/malloc-machine.h68
-rw-r--r--src/3rdparty/ptmalloc/sysdeps/generic/thread-st.h48
-rw-r--r--src/3rdparty/ptmalloc/sysdeps/pthread/malloc-machine.h131
-rw-r--r--src/3rdparty/ptmalloc/sysdeps/pthread/thread-st.h111
-rw-r--r--src/3rdparty/ptmalloc/sysdeps/solaris/malloc-machine.h51
-rw-r--r--src/3rdparty/ptmalloc/sysdeps/solaris/thread-st.h72
-rw-r--r--src/3rdparty/ptmalloc/sysdeps/sproc/malloc-machine.h51
-rw-r--r--src/3rdparty/ptmalloc/sysdeps/sproc/thread-st.h85
-rw-r--r--src/3rdparty/sha1/sha1.cpp263
-rw-r--r--src/3rdparty/sqlite/shell.c2093
-rw-r--r--src/3rdparty/sqlite/sqlite3.c87017
-rw-r--r--src/3rdparty/sqlite/sqlite3.h5638
-rw-r--r--src/3rdparty/webkit/ChangeLog3103
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/API/APICast.h119
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/API/JSBase.cpp116
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/API/JSBase.h130
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/API/JSBasePrivate.h52
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/API/JSCallbackConstructor.cpp79
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/API/JSCallbackConstructor.h57
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/API/JSCallbackFunction.cpp70
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/API/JSCallbackFunction.h58
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/API/JSCallbackObject.cpp41
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/API/JSCallbackObject.h114
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/API/JSCallbackObjectFunctions.h496
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/API/JSClassRef.cpp244
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/API/JSClassRef.h122
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/API/JSContextRef.cpp152
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/API/JSContextRef.h132
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/API/JSObjectRef.cpp507
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/API/JSObjectRef.h694
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/API/JSProfilerPrivate.cpp46
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/API/JSProfilerPrivate.h63
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/API/JSRetainPtr.h173
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/API/JSStringRef.cpp109
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/API/JSStringRef.h144
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/API/JSStringRefBSTR.cpp42
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/API/JSStringRefBSTR.h62
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/API/JSStringRefCF.cpp52
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/API/JSStringRefCF.h60
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/API/JSValueRef.cpp270
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/API/JSValueRef.h278
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/API/JavaScript.h36
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/API/JavaScriptCore.h32
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/API/OpaqueJSString.cpp55
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/API/OpaqueJSString.h81
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/API/WebKitAvailability.h763
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/AUTHORS2
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/COPYING.LIB488
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/ChangeLog26053
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/ChangeLog-2002-12-032271
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/ChangeLog-2003-10-251483
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/ChangeLog-2007-10-1426221
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/ChangeLog-2008-08-1031482
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/DerivedSources.make75
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/ForwardingHeaders/JavaScriptCore/APICast.h1
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/ForwardingHeaders/JavaScriptCore/JSBase.h1
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/ForwardingHeaders/JavaScriptCore/JSContextRef.h1
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/ForwardingHeaders/JavaScriptCore/JSObjectRef.h1
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/ForwardingHeaders/JavaScriptCore/JSRetainPtr.h1
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/ForwardingHeaders/JavaScriptCore/JSStringRef.h1
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/ForwardingHeaders/JavaScriptCore/JSStringRefCF.h1
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/ForwardingHeaders/JavaScriptCore/JSValueRef.h1
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/ForwardingHeaders/JavaScriptCore/JavaScript.h1
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/ForwardingHeaders/JavaScriptCore/JavaScriptCore.h1
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/ForwardingHeaders/JavaScriptCore/OpaqueJSString.h1
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/ForwardingHeaders/JavaScriptCore/WebKitAvailability.h1
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/Info.plist24
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.order1526
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pri215
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pro72
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/JavaScriptCorePrefix.h44
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/THANKS8
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/assembler/AssemblerBuffer.h160
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/assembler/MacroAssembler.h1929
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/assembler/X86Assembler.h1675
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/bytecode/CodeBlock.cpp1605
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/bytecode/CodeBlock.h553
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/bytecode/EvalCodeCache.h80
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/bytecode/Instruction.h146
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/bytecode/JumpTable.cpp45
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/bytecode/JumpTable.h102
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/bytecode/Opcode.cpp186
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/bytecode/Opcode.h231
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/bytecode/SamplingTool.cpp300
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/bytecode/SamplingTool.h214
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/bytecode/StructureStubInfo.cpp80
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/bytecode/StructureStubInfo.h156
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp1778
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/bytecompiler/BytecodeGenerator.h479
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/bytecompiler/Label.h92
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/bytecompiler/LabelScope.h79
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/bytecompiler/RegisterID.h121
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/bytecompiler/SegmentedVector.h170
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/config.h66
-rwxr-xr-xsrc/3rdparty/webkit/JavaScriptCore/create_hash_table278
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/debugger/Debugger.cpp54
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/debugger/Debugger.h59
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/debugger/DebuggerCallFrame.cpp81
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/debugger/DebuggerCallFrame.h67
-rwxr-xr-xsrc/3rdparty/webkit/JavaScriptCore/docs/make-bytecode-docs.pl42
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/generated/ArrayPrototype.lut.h37
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/generated/DatePrototype.lut.h62
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/generated/Grammar.cpp5106
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/generated/Grammar.h232
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/generated/Lexer.lut.h54
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/generated/MathObject.lut.h36
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/generated/NumberConstructor.lut.h23
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/generated/RegExpConstructor.lut.h39
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/generated/RegExpObject.lut.h23
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/generated/StringPrototype.lut.h50
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/generated/chartables.c96
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/headers.pri9
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/interpreter/CallFrame.cpp38
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/interpreter/CallFrame.h147
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/interpreter/Interpreter.cpp6108
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/interpreter/Interpreter.h375
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/interpreter/Register.h299
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/interpreter/RegisterFile.cpp45
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/interpreter/RegisterFile.h222
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/jit/ExecutableAllocator.cpp38
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/jit/ExecutableAllocator.h179
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/jit/ExecutableAllocatorPosix.cpp56
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/jit/ExecutableAllocatorWin.cpp56
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/jit/JIT.cpp1907
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/jit/JIT.h530
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/jit/JITArithmetic.cpp769
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/jit/JITCall.cpp353
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/jit/JITInlineMethods.h406
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/jit/JITPropertyAccess.cpp704
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/jsc.cpp490
-rwxr-xr-xsrc/3rdparty/webkit/JavaScriptCore/make-generated-sources.sh11
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/os-win32/stdbool.h45
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/os-win32/stdint.h66
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/os-wince/ce_time.cpp677
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/os-wince/ce_time.h16
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/parser/Grammar.y2084
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/parser/Keywords.table72
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/parser/Lexer.cpp900
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/parser/Lexer.h171
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/parser/NodeInfo.h63
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/parser/Nodes.cpp2721
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/parser/Nodes.h2418
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/parser/Parser.cpp104
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/parser/Parser.h123
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/parser/ResultType.h159
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/parser/SourceCode.h91
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/parser/SourceProvider.h79
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/pcre/AUTHORS12
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/pcre/COPYING35
-rwxr-xr-xsrc/3rdparty/webkit/JavaScriptCore/pcre/dftables272
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/pcre/pcre.h68
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/pcre/pcre.pri35
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/pcre/pcre_compile.cpp2699
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/pcre/pcre_exec.cpp2176
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/pcre/pcre_internal.h423
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/pcre/pcre_tables.cpp72
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/pcre/pcre_ucp_searchfuncs.cpp99
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/pcre/pcre_xclass.cpp115
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/pcre/ucpinternal.h126
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/pcre/ucptable.cpp2968
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/profiler/CallIdentifier.h95
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/profiler/HeavyProfile.cpp115
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/profiler/HeavyProfile.h63
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/profiler/Profile.cpp137
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/profiler/Profile.h83
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/profiler/ProfileGenerator.cpp169
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/profiler/ProfileGenerator.h76
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/profiler/ProfileNode.cpp352
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/profiler/ProfileNode.h178
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/profiler/Profiler.cpp153
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/profiler/Profiler.h75
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/profiler/ProfilerServer.h35
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/profiler/ProfilerServer.mm106
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/profiler/TreeProfile.cpp51
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/profiler/TreeProfile.h51
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/ArgList.cpp84
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/ArgList.h161
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/Arguments.cpp232
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/Arguments.h227
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/ArrayConstructor.cpp84
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/ArrayConstructor.h40
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/ArrayPrototype.cpp794
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/ArrayPrototype.h41
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/BatchedTransitionOptimizer.h55
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/BooleanConstructor.cpp78
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/BooleanConstructor.h44
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/BooleanObject.cpp35
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/BooleanObject.h46
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/BooleanPrototype.cpp82
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/BooleanPrototype.h35
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/ByteArray.cpp38
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/ByteArray.h70
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/CallData.cpp42
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/CallData.h63
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/ClassInfo.h62
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/Collector.cpp1223
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/Collector.h287
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/CollectorHeapIterator.h90
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/CommonIdentifiers.cpp38
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/CommonIdentifiers.h87
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/Completion.cpp77
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/Completion.h63
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/ConstructData.cpp42
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/ConstructData.h63
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/DateConstructor.cpp175
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/DateConstructor.h43
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/DateInstance.cpp116
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/DateInstance.h65
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/DateMath.cpp1067
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/DateMath.h191
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/DatePrototype.cpp1056
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/DatePrototype.h47
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/Error.cpp127
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/Error.h65
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/ErrorConstructor.cpp73
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/ErrorConstructor.h44
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/ErrorInstance.cpp33
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/ErrorInstance.h38
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/ErrorPrototype.cpp67
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/ErrorPrototype.h37
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/ExceptionHelpers.cpp234
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/ExceptionHelpers.h57
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/FunctionConstructor.cpp128
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/FunctionConstructor.h44
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/FunctionPrototype.cpp136
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/FunctionPrototype.h44
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/GetterSetter.cpp84
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/GetterSetter.h75
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/GlobalEvalFunction.cpp49
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/GlobalEvalFunction.h46
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/Identifier.cpp268
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/Identifier.h144
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/InitializeThreading.cpp72
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/InitializeThreading.h40
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/InternalFunction.cpp51
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/InternalFunction.h64
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/JSActivation.cpp184
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/JSActivation.h96
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/JSArray.cpp1005
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/JSArray.h126
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/JSByteArray.cpp95
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/JSByteArray.h111
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/JSCell.cpp223
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/JSCell.h311
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/JSFunction.cpp174
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/JSFunction.h103
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/JSGlobalData.cpp188
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/JSGlobalData.h138
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/JSGlobalObject.cpp460
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/JSGlobalObject.h380
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp432
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/JSGlobalObjectFunctions.h58
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/JSImmediate.cpp96
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/JSImmediate.h601
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/JSLock.cpp200
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/JSLock.h102
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/JSNotAnObject.cpp125
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/JSNotAnObject.h97
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/JSNumberCell.cpp124
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/JSNumberCell.h262
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/JSObject.cpp518
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/JSObject.h554
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/JSPropertyNameIterator.cpp90
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/JSPropertyNameIterator.h116
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/JSStaticScopeObject.cpp84
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/JSStaticScopeObject.h69
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/JSString.cpp152
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/JSString.h214
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/JSType.h42
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/JSValue.cpp104
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/JSValue.h223
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/JSVariableObject.cpp70
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/JSVariableObject.h164
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/JSWrapperObject.cpp36
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/JSWrapperObject.h60
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/Lookup.cpp98
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/Lookup.h276
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/MathObject.cpp240
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/MathObject.h45
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/NativeErrorConstructor.cpp73
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/NativeErrorConstructor.h51
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/NativeErrorPrototype.cpp39
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/NativeErrorPrototype.h35
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/NumberConstructor.cpp123
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/NumberConstructor.h55
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/NumberObject.cpp58
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/NumberObject.h47
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/NumberPrototype.cpp441
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/NumberPrototype.h35
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/ObjectConstructor.cpp72
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/ObjectConstructor.h41
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/ObjectPrototype.cpp134
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/ObjectPrototype.h37
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/Operations.cpp75
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/Operations.h137
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/PropertyMapHashTable.h87
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/PropertyNameArray.cpp50
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/PropertyNameArray.h112
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/PropertySlot.cpp45
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/PropertySlot.h213
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/Protect.h217
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/PrototypeFunction.cpp57
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/PrototypeFunction.h45
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/PutPropertySlot.h81
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/RegExp.cpp181
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/RegExp.h78
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/RegExpConstructor.cpp385
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/RegExpConstructor.h82
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/RegExpMatchesArray.h87
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/RegExpObject.cpp167
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/RegExpObject.h83
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/RegExpPrototype.cpp118
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/RegExpPrototype.h38
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/ScopeChain.cpp68
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/ScopeChain.h225
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/ScopeChainMark.h39
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/SmallStrings.cpp112
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/SmallStrings.h72
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/StringConstructor.cpp90
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/StringConstructor.h40
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/StringObject.cpp101
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/StringObject.h72
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/StringObjectThatMasqueradesAsUndefined.h55
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/StringPrototype.cpp779
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/StringPrototype.h42
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/Structure.cpp1047
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/Structure.h228
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/StructureChain.cpp73
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/StructureChain.h54
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/StructureTransitionTable.h72
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/SymbolTable.h126
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/Tracing.d40
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/Tracing.h50
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/TypeInfo.h63
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/UString.cpp1638
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/UString.h385
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wrec/CharacterClass.cpp140
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wrec/CharacterClass.h68
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wrec/CharacterClassConstructor.cpp257
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wrec/CharacterClassConstructor.h99
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wrec/Escapes.h150
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wrec/Quantifier.h66
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wrec/WREC.cpp89
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wrec/WREC.h54
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wrec/WRECFunctors.cpp80
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wrec/WRECFunctors.h109
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wrec/WRECGenerator.cpp665
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wrec/WRECGenerator.h112
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wrec/WRECParser.cpp637
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wrec/WRECParser.h214
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/ASCIICType.h152
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/AVLTree.h959
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/AlwaysInline.h55
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/Assertions.cpp186
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/Assertions.h245
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/Deque.h592
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/DisallowCType.h74
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/FastMalloc.cpp3851
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/FastMalloc.h97
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/Forward.h43
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/GOwnPtr.cpp59
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/GOwnPtr.h97
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/GetPtr.h33
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/HashCountedSet.h204
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/HashFunctions.h186
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/HashIterators.h216
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/HashMap.h334
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/HashSet.h271
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/HashTable.cpp69
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/HashTable.h1158
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/HashTraits.h156
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/ListHashSet.h616
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/ListRefPtr.h61
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/Locker.h47
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/MainThread.cpp142
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/MainThread.h57
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/MallocZoneSupport.h65
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/MathExtras.h180
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/MessageQueue.h136
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/Noncopyable.h41
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/NotFound.h35
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/OwnArrayPtr.h71
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/OwnPtr.h129
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/OwnPtrWin.cpp69
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/PassRefPtr.h195
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/Platform.h505
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/RandomNumber.cpp87
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/RandomNumber.h36
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/RandomNumberSeed.h66
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/RefCounted.h107
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/RefCountedLeakCounter.cpp100
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/RefCountedLeakCounter.h48
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/RefPtr.h205
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/RefPtrHashMap.h336
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/RetainPtr.h210
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/StdLibExtras.h38
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/StringExtras.h84
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/TCPackedCache.h234
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/TCPageMap.h289
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/TCSpinLock.h239
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/TCSystemAlloc.cpp437
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/TCSystemAlloc.h71
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/ThreadSpecific.h229
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/ThreadSpecificWin.cpp45
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/Threading.cpp81
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/Threading.h276
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/ThreadingGtk.cpp244
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/ThreadingNone.cpp58
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/ThreadingPthreads.cpp275
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/ThreadingQt.cpp257
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/ThreadingWin.cpp472
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/UnusedParam.h29
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/Vector.h950
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/VectorTraits.h119
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/dtoa.cpp2439
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/dtoa.h38
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/qt/MainThreadQt.cpp69
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/unicode/Collator.h67
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/unicode/CollatorDefault.cpp75
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/unicode/UTF8.cpp303
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/unicode/UTF8.h75
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/unicode/Unicode.h37
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/unicode/icu/CollatorICU.cpp144
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/unicode/icu/UnicodeIcu.h219
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/unicode/qt4/UnicodeQt4.h526
-rw-r--r--src/3rdparty/webkit/VERSION11
-rw-r--r--src/3rdparty/webkit/WebCore/ChangeLog41598
-rw-r--r--src/3rdparty/webkit/WebCore/ChangeLog-2002-12-0317943
-rw-r--r--src/3rdparty/webkit/WebCore/ChangeLog-2003-10-2518662
-rw-r--r--src/3rdparty/webkit/WebCore/ChangeLog-2005-08-2358892
-rw-r--r--src/3rdparty/webkit/WebCore/ChangeLog-2005-12-1927451
-rw-r--r--src/3rdparty/webkit/WebCore/ChangeLog-2006-05-1039107
-rw-r--r--src/3rdparty/webkit/WebCore/ChangeLog-2006-12-3156037
-rw-r--r--src/3rdparty/webkit/WebCore/ChangeLog-2007-10-1470865
-rw-r--r--src/3rdparty/webkit/WebCore/ChangeLog-2008-08-1082205
-rw-r--r--src/3rdparty/webkit/WebCore/DerivedSources.cpp338
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/debugger/Debugger.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/debugger/DebuggerCallFrame.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/interpreter/CallFrame.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/interpreter/Interpreter.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/masm/X86Assembler.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/parser/Parser.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/parser/SourceCode.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/parser/SourceProvider.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/pcre/pcre.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/profiler/Profile.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/profiler/ProfileNode.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/profiler/Profiler.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/ArgList.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/ArrayPrototype.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/BooleanObject.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/ByteArray.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/CallData.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/Collector.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/CollectorHeapIterator.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/Completion.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/ConstructData.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/DateInstance.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/Error.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/FunctionConstructor.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/FunctionPrototype.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/Identifier.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/InitializeThreading.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/InternalFunction.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/JSArray.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/JSByteArray.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/JSFunction.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/JSGlobalData.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/JSGlobalObject.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/JSLock.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/JSNumberCell.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/JSObject.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/JSString.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/JSValue.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/Lookup.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/ObjectPrototype.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/Operations.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/PropertyMap.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/PropertyNameArray.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/Protect.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/PrototypeFunction.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/StringObject.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/StringObjectThatMasqueradesAsUndefined.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/StringPrototype.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/Structure.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/SymbolTable.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/UString.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wrec/WREC.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/ASCIICType.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/AlwaysInline.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/Assertions.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/Deque.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/DisallowCType.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/FastMalloc.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/Forward.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/GetPtr.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/HashCountedSet.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/HashFunctions.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/HashMap.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/HashSet.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/HashTable.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/HashTraits.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/ListHashSet.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/ListRefPtr.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/Locker.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/MainThread.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/MathExtras.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/MessageQueue.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/Noncopyable.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/NotFound.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/OwnArrayPtr.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/OwnPtr.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/PassRefPtr.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/Platform.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/RandomNumber.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/RefCounted.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/RefCountedLeakCounter.h2
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/RefPtr.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/RetainPtr.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/StdLibExtras.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/StringExtras.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/ThreadSpecific.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/Threading.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/UnusedParam.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/Vector.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/VectorTraits.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/dtoa.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/unicode/Collator.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/unicode/UTF8.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/unicode/Unicode.h1
-rw-r--r--src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/unicode/icu/UnicodeIcu.h1
-rw-r--r--src/3rdparty/webkit/WebCore/Info.plist24
-rw-r--r--src/3rdparty/webkit/WebCore/LICENSE-APPLE22
-rw-r--r--src/3rdparty/webkit/WebCore/LICENSE-LGPL-2481
-rw-r--r--src/3rdparty/webkit/WebCore/LICENSE-LGPL-2.1502
-rw-r--r--src/3rdparty/webkit/WebCore/Resources/aliasCursor.pngbin0 -> 752 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/Resources/cellCursor.pngbin0 -> 183 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/Resources/contextMenuCursor.pngbin0 -> 523 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/Resources/copyCursor.pngbin0 -> 1652 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/Resources/crossHairCursor.pngbin0 -> 319 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/Resources/deleteButton.pngbin0 -> 2230 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/Resources/deleteButton.tiffbin0 -> 2546 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/Resources/deleteButtonPressed.pngbin0 -> 2319 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/Resources/deleteButtonPressed.tiffbin0 -> 2550 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/Resources/eastResizeCursor.pngbin0 -> 123 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/Resources/eastWestResizeCursor.pngbin0 -> 126 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/Resources/helpCursor.pngbin0 -> 239 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/Resources/linkCursor.pngbin0 -> 341 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/Resources/missingImage.pngbin0 -> 411 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/Resources/missingImage.tiffbin0 -> 654 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/Resources/moveCursor.pngbin0 -> 175 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/Resources/noDropCursor.pngbin0 -> 1455 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/Resources/noneCursor.pngbin0 -> 90 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/Resources/northEastResizeCursor.pngbin0 -> 209 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/Resources/northEastSouthWestResizeCursor.pngbin0 -> 212 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/Resources/northResizeCursor.pngbin0 -> 125 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/Resources/northSouthResizeCursor.pngbin0 -> 144 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/Resources/northWestResizeCursor.pngbin0 -> 174 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/Resources/northWestSouthEastResizeCursor.pngbin0 -> 193 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/Resources/notAllowedCursor.pngbin0 -> 1101 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/Resources/nullPlugin.pngbin0 -> 1286 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/Resources/progressCursor.pngbin0 -> 1791 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/Resources/southEastResizeCursor.pngbin0 -> 166 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/Resources/southResizeCursor.pngbin0 -> 128 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/Resources/southWestResizeCursor.pngbin0 -> 177 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/Resources/textAreaResizeCorner.pngbin0 -> 146 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/Resources/textAreaResizeCorner.tiffbin0 -> 254 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/Resources/urlIcon.pngbin0 -> 819 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/Resources/verticalTextCursor.pngbin0 -> 120 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/Resources/waitCursor.pngbin0 -> 125 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/Resources/westResizeCursor.pngbin0 -> 122 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/Resources/zoomInCursor.pngbin0 -> 199 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/Resources/zoomOutCursor.pngbin0 -> 182 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/WebCore.DashboardSupport.exp3
-rw-r--r--src/3rdparty/webkit/WebCore/WebCore.JNI.exp10
-rw-r--r--src/3rdparty/webkit/WebCore/WebCore.LP64.exp3
-rw-r--r--src/3rdparty/webkit/WebCore/WebCore.NPAPI.exp23
-rw-r--r--src/3rdparty/webkit/WebCore/WebCore.SVG.Animation.exp2
-rw-r--r--src/3rdparty/webkit/WebCore/WebCore.SVG.Filters.exp24
-rw-r--r--src/3rdparty/webkit/WebCore/WebCore.SVG.ForeignObject.exp1
-rw-r--r--src/3rdparty/webkit/WebCore/WebCore.SVG.exp95
-rw-r--r--src/3rdparty/webkit/WebCore/WebCore.Tiger.exp13
-rw-r--r--src/3rdparty/webkit/WebCore/WebCore.order14111
-rw-r--r--src/3rdparty/webkit/WebCore/WebCore.pro2038
-rw-r--r--src/3rdparty/webkit/WebCore/WebCore.qrc19
-rw-r--r--src/3rdparty/webkit/WebCore/WebCorePrefix.cpp27
-rw-r--r--src/3rdparty/webkit/WebCore/WebCorePrefix.h126
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/CachedScriptSourceProvider.h67
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/DOMTimer.cpp177
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/DOMTimer.h68
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/GCController.cpp94
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/GCController.h55
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSAttrCustom.cpp61
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSAudioConstructor.cpp80
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSAudioConstructor.h58
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSCSSRuleCustom.cpp97
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSCSSStyleDeclarationCustom.cpp175
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSCSSStyleDeclarationCustom.h31
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSCSSValueCustom.cpp75
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSCanvasRenderingContext2DCustom.cpp389
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSClipboardCustom.cpp142
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSConsoleCustom.cpp51
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSCustomPositionCallback.cpp86
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSCustomPositionCallback.h58
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSCustomPositionErrorCallback.cpp84
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSCustomPositionErrorCallback.h58
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSCustomSQLStatementCallback.cpp94
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSCustomSQLStatementCallback.h62
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSCustomSQLStatementErrorCallback.cpp106
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSCustomSQLStatementErrorCallback.h63
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSCustomSQLTransactionCallback.cpp139
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSCustomSQLTransactionCallback.h63
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSCustomSQLTransactionErrorCallback.cpp92
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSCustomSQLTransactionErrorCallback.h62
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSCustomVoidCallback.cpp102
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSCustomVoidCallback.h62
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSCustomXPathNSResolver.cpp121
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSCustomXPathNSResolver.h64
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSDOMApplicationCacheCustom.cpp146
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSDOMBinding.cpp538
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSDOMBinding.h188
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSDOMGlobalObject.cpp175
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSDOMGlobalObject.h125
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSDOMStringListCustom.cpp49
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSDOMWindowBase.cpp875
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSDOMWindowBase.h130
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSDOMWindowCustom.cpp325
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSDOMWindowCustom.h202
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSDOMWindowShell.cpp177
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSDOMWindowShell.h92
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSDatabaseCustom.cpp128
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSDocumentCustom.cpp110
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSDocumentFragmentCustom.cpp40
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSElementCustom.cpp151
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSEventCustom.cpp132
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSEventListener.cpp340
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSEventListener.h125
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSEventTarget.cpp90
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSEventTarget.h43
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSEventTargetBase.h92
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSEventTargetNodeCustom.cpp71
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSGeolocationCustom.cpp143
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSHTMLAllCollection.cpp35
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSHTMLAllCollection.h56
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSHTMLAppletElementCustom.cpp61
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSHTMLAppletElementCustom.h31
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSHTMLCollectionCustom.cpp151
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSHTMLDocumentCustom.cpp156
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSHTMLElementCustom.cpp51
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSHTMLEmbedElementCustom.cpp61
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSHTMLEmbedElementCustom.h31
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSHTMLFormElementCustom.cpp58
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSHTMLFrameElementCustom.cpp74
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSHTMLFrameSetElementCustom.cpp63
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSHTMLIFrameElementCustom.cpp55
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSHTMLInputElementCustom.cpp72
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSHTMLInputElementCustom.h31
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSHTMLObjectElementCustom.cpp61
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSHTMLObjectElementCustom.h31
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSHTMLOptionsCollectionCustom.cpp98
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSHTMLSelectElementCustom.cpp69
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSHTMLSelectElementCustom.h40
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSHistoryCustom.cpp119
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSHistoryCustom.h33
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSImageConstructor.cpp86
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSImageConstructor.h45
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSImageDataCustom.cpp58
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSInspectedObjectWrapper.cpp127
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSInspectedObjectWrapper.h59
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSInspectorCallbackWrapper.cpp107
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSInspectorCallbackWrapper.h53
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSJavaScriptCallFrameCustom.cpp86
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSLocationCustom.cpp309
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSLocationCustom.h33
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSMessageChannelConstructor.cpp79
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSMessageChannelConstructor.h55
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSMessageChannelCustom.cpp52
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSMessagePortCustom.cpp100
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSMimeTypeArrayCustom.cpp42
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSNamedNodeMapCustom.cpp50
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSNamedNodesCollection.cpp92
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSNamedNodesCollection.h66
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSNavigatorCustom.cpp125
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSNodeCustom.cpp241
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSNodeFilterCondition.cpp79
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSNodeFilterCondition.h49
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSNodeFilterCustom.cpp57
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSNodeIteratorCustom.cpp70
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSNodeListCustom.cpp65
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSOptionConstructor.cpp87
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSOptionConstructor.h46
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSPluginArrayCustom.cpp42
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSPluginCustom.cpp41
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSPluginElementFunctions.cpp122
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSPluginElementFunctions.h41
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSQuarantinedObjectWrapper.cpp278
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSQuarantinedObjectWrapper.h101
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSRGBColor.cpp85
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSRGBColor.h59
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSSQLResultSetRowListCustom.cpp81
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSSQLTransactionCustom.cpp114
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSSVGElementInstanceCustom.cpp69
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSSVGLengthCustom.cpp48
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSSVGMatrixCustom.cpp132
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSSVGPODTypeWrapper.h411
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSSVGPathSegCustom.cpp119
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSSVGPathSegListCustom.cpp166
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSSVGPointListCustom.cpp153
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSSVGTransformListCustom.cpp153
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSStorageCustom.cpp103
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSStorageCustom.h31
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSStyleSheetCustom.cpp71
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSStyleSheetListCustom.cpp51
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSTextCustom.cpp43
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSTreeWalkerCustom.cpp96
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSWorkerConstructor.cpp76
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSWorkerConstructor.h51
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSWorkerContextBase.cpp86
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSWorkerContextBase.h59
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSWorkerContextCustom.cpp98
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSWorkerCustom.cpp87
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSXMLHttpRequestConstructor.cpp63
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSXMLHttpRequestConstructor.h44
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSXMLHttpRequestCustom.cpp208
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSXMLHttpRequestUploadCustom.cpp104
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSXSLTProcessorConstructor.cpp63
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSXSLTProcessorConstructor.h49
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSXSLTProcessorCustom.cpp121
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/ScheduledAction.cpp105
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/ScheduledAction.h56
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/ScriptCachedPageData.cpp93
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/ScriptCachedPageData.h56
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/ScriptCallFrame.cpp61
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/ScriptCallFrame.h74
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/ScriptCallStack.cpp103
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/ScriptCallStack.h67
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/ScriptController.cpp355
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/ScriptController.h166
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/ScriptControllerGtk.cpp48
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/ScriptControllerMac.mm172
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/ScriptControllerQt.cpp63
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/ScriptControllerWin.cpp45
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/ScriptControllerWx.cpp44
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/ScriptInstance.h44
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/ScriptSourceCode.h62
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/ScriptState.h49
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/ScriptString.h86
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/ScriptValue.cpp67
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/ScriptValue.h55
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/StringSourceProvider.h61
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/WorkerScriptController.cpp115
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/WorkerScriptController.h83
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/scripts/CodeGenerator.pm393
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/scripts/CodeGeneratorCOM.pm1313
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/scripts/CodeGeneratorJS.pm2044
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/scripts/CodeGeneratorObjC.pm1731
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/scripts/IDLParser.pm416
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/scripts/IDLStructure.pm107
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/scripts/InFilesParser.pm140
-rwxr-xr-xsrc/3rdparty/webkit/WebCore/bindings/scripts/generate-bindings.pl69
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/NP_jsobject.cpp460
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/NP_jsobject.h55
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/c/c_class.cpp124
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/c/c_class.h61
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/c/c_instance.cpp234
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/c/c_instance.h86
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/c/c_runtime.cpp97
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/c/c_runtime.h67
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/c/c_utility.cpp152
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/c/c_utility.h76
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/jni/jni_class.cpp143
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/jni/jni_class.h66
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/jni/jni_instance.cpp330
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/jni/jni_instance.h110
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/jni/jni_jsobject.h129
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/jni/jni_jsobject.mm720
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/jni/jni_objc.mm83
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/jni/jni_runtime.cpp547
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/jni/jni_runtime.h191
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/jni/jni_utility.cpp584
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/jni/jni_utility.h288
-rwxr-xr-xsrc/3rdparty/webkit/WebCore/bridge/make_testbindings2
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/npapi.h830
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/npruntime.cpp226
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/npruntime.h357
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/npruntime_impl.h66
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/npruntime_internal.h51
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/npruntime_priv.h41
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/qt/qt_class.cpp217
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/qt/qt_class.h60
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/qt/qt_instance.cpp372
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/qt/qt_instance.h90
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/qt/qt_runtime.cpp1772
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/qt/qt_runtime.h231
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/runtime.cpp121
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/runtime.h166
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/runtime_array.cpp123
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/runtime_array.h73
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/runtime_method.cpp110
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/runtime_method.h63
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/runtime_object.cpp270
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/runtime_object.h82
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/runtime_root.cpp174
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/runtime_root.h89
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/test.js19
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/testC.js21
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/testM.js29
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/testbindings.cpp421
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/testbindings.mm289
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/testqtbindings.cpp142
-rwxr-xr-xsrc/3rdparty/webkit/WebCore/combine-javascript-resources79
-rw-r--r--src/3rdparty/webkit/WebCore/config.h159
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSBorderImageValue.cpp66
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSBorderImageValue.h62
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSCanvasValue.cpp89
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSCanvasValue.h68
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSCharsetRule.cpp41
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSCharsetRule.h57
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSCharsetRule.idl37
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSComputedStyleDeclaration.cpp1381
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSComputedStyleDeclaration.h79
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSCursorImageValue.cpp132
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSCursorImageValue.h63
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSFontFace.cpp114
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSFontFace.h96
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSFontFaceRule.cpp58
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSFontFaceRule.h67
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSFontFaceRule.idl32
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSFontFaceSource.cpp193
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSFontFaceSource.h83
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSFontFaceSrcValue.cpp79
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSFontFaceSrcValue.h92
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSFontSelector.cpp537
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSFontSelector.h77
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSFunctionValue.cpp64
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSFunctionValue.h58
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSGradientValue.cpp164
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSGradientValue.h112
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSGrammar.y1501
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSHelper.cpp87
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSHelper.h42
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSImageGeneratorValue.cpp97
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSImageGeneratorValue.h73
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSImageValue.cpp93
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSImageValue.h59
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSImportRule.cpp132
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSImportRule.h77
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSImportRule.idl34
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSInheritedValue.cpp40
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSInheritedValue.h45
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSInitialValue.cpp40
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSInitialValue.h58
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSMediaRule.cpp133
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSMediaRule.h69
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSMediaRule.idl39
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSMutableStyleDeclaration.cpp951
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSMutableStyleDeclaration.h222
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSNamespace.h59
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSPageRule.cpp55
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSPageRule.h60
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSPageRule.idl37
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSParser.cpp4849
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSParser.h306
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSParserValues.cpp82
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSParserValues.h100
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSPrimitiveValue.cpp955
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSPrimitiveValue.h212
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSPrimitiveValue.idl79
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSPrimitiveValueMappings.h2204
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSProperty.cpp43
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSProperty.h81
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSPropertyNames.in240
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSQuirkPrimitiveValue.h50
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSReflectValue.cpp68
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSReflectValue.h70
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSReflectionDirection.h35
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSRule.cpp48
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSRule.h72
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSRule.idl53
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSRuleList.cpp112
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSRuleList.h68
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSRuleList.idl39
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSSegmentedFontFace.cpp135
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSSegmentedFontFace.h70
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSSelector.cpp555
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSSelector.h259
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSSelectorList.cpp79
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSSelectorList.h55
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSStyleDeclaration.cpp158
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSStyleDeclaration.h78
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSStyleDeclaration.idl54
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSStyleRule.cpp85
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSStyleRule.h75
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSStyleRule.idl37
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSStyleSelector.cpp5894
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSStyleSelector.h327
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSStyleSheet.cpp236
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSStyleSheet.h113
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSStyleSheet.idl49
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSTimingFunctionValue.cpp47
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSTimingFunctionValue.h67
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSUnicodeRangeValue.cpp44
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSUnicodeRangeValue.h62
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSUnknownRule.h36
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSUnknownRule.idl30
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSValue.h78
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSValue.idl43
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSValueKeywords.in601
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSValueList.cpp109
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSValueList.h77
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSValueList.idl39
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSVariableDependentValue.cpp49
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSVariableDependentValue.h57
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSVariablesDeclaration.cpp175
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSVariablesDeclaration.h82
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSVariablesDeclaration.idl45
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSVariablesRule.cpp61
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSVariablesRule.h70
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSVariablesRule.idl35
-rw-r--r--src/3rdparty/webkit/WebCore/css/Counter.h61
-rw-r--r--src/3rdparty/webkit/WebCore/css/Counter.idl33
-rw-r--r--src/3rdparty/webkit/WebCore/css/DashboardRegion.h48
-rw-r--r--src/3rdparty/webkit/WebCore/css/DashboardSupportCSSPropertyNames.in1
-rw-r--r--src/3rdparty/webkit/WebCore/css/FontFamilyValue.cpp107
-rw-r--r--src/3rdparty/webkit/WebCore/css/FontFamilyValue.h50
-rw-r--r--src/3rdparty/webkit/WebCore/css/FontValue.cpp69
-rw-r--r--src/3rdparty/webkit/WebCore/css/FontValue.h57
-rw-r--r--src/3rdparty/webkit/WebCore/css/MediaFeatureNames.cpp55
-rw-r--r--src/3rdparty/webkit/WebCore/css/MediaFeatureNames.h73
-rw-r--r--src/3rdparty/webkit/WebCore/css/MediaList.cpp258
-rw-r--r--src/3rdparty/webkit/WebCore/css/MediaList.h92
-rw-r--r--src/3rdparty/webkit/WebCore/css/MediaList.idl48
-rw-r--r--src/3rdparty/webkit/WebCore/css/MediaQuery.cpp97
-rw-r--r--src/3rdparty/webkit/WebCore/css/MediaQuery.h62
-rw-r--r--src/3rdparty/webkit/WebCore/css/MediaQueryEvaluator.cpp455
-rw-r--r--src/3rdparty/webkit/WebCore/css/MediaQueryEvaluator.h91
-rw-r--r--src/3rdparty/webkit/WebCore/css/MediaQueryExp.cpp83
-rw-r--r--src/3rdparty/webkit/WebCore/css/MediaQueryExp.h68
-rw-r--r--src/3rdparty/webkit/WebCore/css/Pair.h65
-rw-r--r--src/3rdparty/webkit/WebCore/css/RGBColor.idl44
-rw-r--r--src/3rdparty/webkit/WebCore/css/Rect.h62
-rw-r--r--src/3rdparty/webkit/WebCore/css/Rect.idl33
-rw-r--r--src/3rdparty/webkit/WebCore/css/SVGCSSComputedStyleDeclaration.cpp188
-rw-r--r--src/3rdparty/webkit/WebCore/css/SVGCSSParser.cpp359
-rw-r--r--src/3rdparty/webkit/WebCore/css/SVGCSSPropertyNames.in48
-rw-r--r--src/3rdparty/webkit/WebCore/css/SVGCSSStyleSelector.cpp608
-rw-r--r--src/3rdparty/webkit/WebCore/css/SVGCSSValueKeywords.in287
-rw-r--r--src/3rdparty/webkit/WebCore/css/ShadowValue.cpp67
-rw-r--r--src/3rdparty/webkit/WebCore/css/ShadowValue.h59
-rw-r--r--src/3rdparty/webkit/WebCore/css/StyleBase.cpp68
-rw-r--r--src/3rdparty/webkit/WebCore/css/StyleBase.h86
-rw-r--r--src/3rdparty/webkit/WebCore/css/StyleList.cpp55
-rw-r--r--src/3rdparty/webkit/WebCore/css/StyleList.h49
-rw-r--r--src/3rdparty/webkit/WebCore/css/StyleSheet.cpp84
-rw-r--r--src/3rdparty/webkit/WebCore/css/StyleSheet.h77
-rw-r--r--src/3rdparty/webkit/WebCore/css/StyleSheet.idl40
-rw-r--r--src/3rdparty/webkit/WebCore/css/StyleSheetList.cpp77
-rw-r--r--src/3rdparty/webkit/WebCore/css/StyleSheetList.h63
-rw-r--r--src/3rdparty/webkit/WebCore/css/StyleSheetList.idl35
-rw-r--r--src/3rdparty/webkit/WebCore/css/WebKitCSSKeyframeRule.cpp98
-rw-r--r--src/3rdparty/webkit/WebCore/css/WebKitCSSKeyframeRule.h85
-rw-r--r--src/3rdparty/webkit/WebCore/css/WebKitCSSKeyframeRule.idl43
-rw-r--r--src/3rdparty/webkit/WebCore/css/WebKitCSSKeyframesRule.cpp138
-rw-r--r--src/3rdparty/webkit/WebCore/css/WebKitCSSKeyframesRule.h95
-rw-r--r--src/3rdparty/webkit/WebCore/css/WebKitCSSKeyframesRule.idl47
-rw-r--r--src/3rdparty/webkit/WebCore/css/WebKitCSSTransformValue.cpp92
-rw-r--r--src/3rdparty/webkit/WebCore/css/WebKitCSSTransformValue.h74
-rw-r--r--src/3rdparty/webkit/WebCore/css/WebKitCSSTransformValue.idl55
-rw-r--r--src/3rdparty/webkit/WebCore/css/html4.css596
-rwxr-xr-xsrc/3rdparty/webkit/WebCore/css/make-css-file-arrays.pl88
-rw-r--r--src/3rdparty/webkit/WebCore/css/makegrammar.pl55
-rw-r--r--src/3rdparty/webkit/WebCore/css/makeprop.pl119
-rw-r--r--src/3rdparty/webkit/WebCore/css/maketokenizer128
-rw-r--r--src/3rdparty/webkit/WebCore/css/makevalues.pl108
-rw-r--r--src/3rdparty/webkit/WebCore/css/mediaControls.css102
-rw-r--r--src/3rdparty/webkit/WebCore/css/qt/mediaControls-extras.css101
-rw-r--r--src/3rdparty/webkit/WebCore/css/quirks.css54
-rw-r--r--src/3rdparty/webkit/WebCore/css/svg.css65
-rw-r--r--src/3rdparty/webkit/WebCore/css/themeWin.css94
-rw-r--r--src/3rdparty/webkit/WebCore/css/themeWinQuirks.css38
-rw-r--r--src/3rdparty/webkit/WebCore/css/tokenizer.flex110
-rw-r--r--src/3rdparty/webkit/WebCore/css/view-source.css158
-rw-r--r--src/3rdparty/webkit/WebCore/css/wml.css249
-rw-r--r--src/3rdparty/webkit/WebCore/dom/ActiveDOMObject.cpp87
-rw-r--r--src/3rdparty/webkit/WebCore/dom/ActiveDOMObject.h80
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Attr.cpp160
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Attr.h96
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Attr.idl47
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Attribute.cpp47
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Attribute.h91
-rw-r--r--src/3rdparty/webkit/WebCore/dom/BeforeTextInsertedEvent.cpp38
-rw-r--r--src/3rdparty/webkit/WebCore/dom/BeforeTextInsertedEvent.h53
-rw-r--r--src/3rdparty/webkit/WebCore/dom/BeforeUnloadEvent.cpp47
-rw-r--r--src/3rdparty/webkit/WebCore/dom/BeforeUnloadEvent.h53
-rw-r--r--src/3rdparty/webkit/WebCore/dom/CDATASection.cpp65
-rw-r--r--src/3rdparty/webkit/WebCore/dom/CDATASection.h48
-rw-r--r--src/3rdparty/webkit/WebCore/dom/CDATASection.idl29
-rw-r--r--src/3rdparty/webkit/WebCore/dom/CSSMappedAttributeDeclaration.cpp38
-rw-r--r--src/3rdparty/webkit/WebCore/dom/CSSMappedAttributeDeclaration.h65
-rw-r--r--src/3rdparty/webkit/WebCore/dom/CharacterData.cpp236
-rw-r--r--src/3rdparty/webkit/WebCore/dom/CharacterData.h75
-rw-r--r--src/3rdparty/webkit/WebCore/dom/CharacterData.idl55
-rw-r--r--src/3rdparty/webkit/WebCore/dom/ChildNodeList.cpp109
-rw-r--r--src/3rdparty/webkit/WebCore/dom/ChildNodeList.h50
-rw-r--r--src/3rdparty/webkit/WebCore/dom/ClassNames.cpp92
-rw-r--r--src/3rdparty/webkit/WebCore/dom/ClassNames.h89
-rw-r--r--src/3rdparty/webkit/WebCore/dom/ClassNodeList.cpp54
-rw-r--r--src/3rdparty/webkit/WebCore/dom/ClassNodeList.h55
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Clipboard.cpp142
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Clipboard.h100
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Clipboard.idl48
-rw-r--r--src/3rdparty/webkit/WebCore/dom/ClipboardAccessPolicy.h37
-rw-r--r--src/3rdparty/webkit/WebCore/dom/ClipboardEvent.cpp42
-rw-r--r--src/3rdparty/webkit/WebCore/dom/ClipboardEvent.h56
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Comment.cpp66
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Comment.h51
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Comment.idl29
-rw-r--r--src/3rdparty/webkit/WebCore/dom/ContainerNode.cpp935
-rw-r--r--src/3rdparty/webkit/WebCore/dom/ContainerNode.h126
-rw-r--r--src/3rdparty/webkit/WebCore/dom/ContainerNodeAlgorithms.h149
-rw-r--r--src/3rdparty/webkit/WebCore/dom/DOMCoreException.h52
-rw-r--r--src/3rdparty/webkit/WebCore/dom/DOMCoreException.idl71
-rw-r--r--src/3rdparty/webkit/WebCore/dom/DOMImplementation.cpp377
-rw-r--r--src/3rdparty/webkit/WebCore/dom/DOMImplementation.h72
-rw-r--r--src/3rdparty/webkit/WebCore/dom/DOMImplementation.idl58
-rw-r--r--src/3rdparty/webkit/WebCore/dom/DOMStringList.cpp35
-rw-r--r--src/3rdparty/webkit/WebCore/dom/DOMStringList.h46
-rw-r--r--src/3rdparty/webkit/WebCore/dom/DOMStringList.idl41
-rw-r--r--src/3rdparty/webkit/WebCore/dom/DocPtr.h114
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Document.cpp4388
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Document.h1121
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Document.idl248
-rw-r--r--src/3rdparty/webkit/WebCore/dom/DocumentFragment.cpp69
-rw-r--r--src/3rdparty/webkit/WebCore/dom/DocumentFragment.h46
-rw-r--r--src/3rdparty/webkit/WebCore/dom/DocumentFragment.idl35
-rw-r--r--src/3rdparty/webkit/WebCore/dom/DocumentMarker.h60
-rw-r--r--src/3rdparty/webkit/WebCore/dom/DocumentType.cpp79
-rw-r--r--src/3rdparty/webkit/WebCore/dom/DocumentType.h70
-rw-r--r--src/3rdparty/webkit/WebCore/dom/DocumentType.idl43
-rw-r--r--src/3rdparty/webkit/WebCore/dom/DynamicNodeList.cpp172
-rw-r--r--src/3rdparty/webkit/WebCore/dom/DynamicNodeList.h81
-rw-r--r--src/3rdparty/webkit/WebCore/dom/EditingText.cpp52
-rw-r--r--src/3rdparty/webkit/WebCore/dom/EditingText.h44
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Element.cpp1241
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Element.h250
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Element.idl128
-rw-r--r--src/3rdparty/webkit/WebCore/dom/ElementRareData.h60
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Entity.cpp1
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Entity.h43
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Entity.idl32
-rw-r--r--src/3rdparty/webkit/WebCore/dom/EntityReference.cpp47
-rw-r--r--src/3rdparty/webkit/WebCore/dom/EntityReference.h43
-rw-r--r--src/3rdparty/webkit/WebCore/dom/EntityReference.idl29
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Event.cpp190
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Event.h170
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Event.idl83
-rw-r--r--src/3rdparty/webkit/WebCore/dom/EventException.h59
-rw-r--r--src/3rdparty/webkit/WebCore/dom/EventException.idl50
-rw-r--r--src/3rdparty/webkit/WebCore/dom/EventListener.h40
-rw-r--r--src/3rdparty/webkit/WebCore/dom/EventListener.idl32
-rw-r--r--src/3rdparty/webkit/WebCore/dom/EventNames.cpp36
-rw-r--r--src/3rdparty/webkit/WebCore/dom/EventNames.h149
-rw-r--r--src/3rdparty/webkit/WebCore/dom/EventTarget.cpp111
-rw-r--r--src/3rdparty/webkit/WebCore/dom/EventTarget.h105
-rw-r--r--src/3rdparty/webkit/WebCore/dom/EventTarget.idl39
-rw-r--r--src/3rdparty/webkit/WebCore/dom/EventTargetNode.cpp1166
-rw-r--r--src/3rdparty/webkit/WebCore/dom/EventTargetNode.h206
-rw-r--r--src/3rdparty/webkit/WebCore/dom/EventTargetNode.idl84
-rw-r--r--src/3rdparty/webkit/WebCore/dom/ExceptionBase.cpp49
-rw-r--r--src/3rdparty/webkit/WebCore/dom/ExceptionBase.h57
-rw-r--r--src/3rdparty/webkit/WebCore/dom/ExceptionCode.cpp161
-rw-r--r--src/3rdparty/webkit/WebCore/dom/ExceptionCode.h81
-rw-r--r--src/3rdparty/webkit/WebCore/dom/FormControlElement.h39
-rw-r--r--src/3rdparty/webkit/WebCore/dom/KeyboardEvent.cpp164
-rw-r--r--src/3rdparty/webkit/WebCore/dom/KeyboardEvent.h116
-rw-r--r--src/3rdparty/webkit/WebCore/dom/KeyboardEvent.idl80
-rw-r--r--src/3rdparty/webkit/WebCore/dom/MappedAttribute.cpp34
-rw-r--r--src/3rdparty/webkit/WebCore/dom/MappedAttribute.h68
-rw-r--r--src/3rdparty/webkit/WebCore/dom/MappedAttributeEntry.h55
-rw-r--r--src/3rdparty/webkit/WebCore/dom/MessageChannel.cpp45
-rw-r--r--src/3rdparty/webkit/WebCore/dom/MessageChannel.h56
-rw-r--r--src/3rdparty/webkit/WebCore/dom/MessageChannel.idl36
-rw-r--r--src/3rdparty/webkit/WebCore/dom/MessageEvent.cpp73
-rw-r--r--src/3rdparty/webkit/WebCore/dom/MessageEvent.h73
-rw-r--r--src/3rdparty/webkit/WebCore/dom/MessageEvent.idl44
-rw-r--r--src/3rdparty/webkit/WebCore/dom/MessagePort.cpp344
-rw-r--r--src/3rdparty/webkit/WebCore/dom/MessagePort.h136
-rw-r--r--src/3rdparty/webkit/WebCore/dom/MessagePort.idl60
-rw-r--r--src/3rdparty/webkit/WebCore/dom/MouseEvent.cpp118
-rw-r--r--src/3rdparty/webkit/WebCore/dom/MouseEvent.h87
-rw-r--r--src/3rdparty/webkit/WebCore/dom/MouseEvent.idl66
-rw-r--r--src/3rdparty/webkit/WebCore/dom/MouseRelatedEvent.cpp184
-rw-r--r--src/3rdparty/webkit/WebCore/dom/MouseRelatedEvent.h78
-rw-r--r--src/3rdparty/webkit/WebCore/dom/MutationEvent.cpp66
-rw-r--r--src/3rdparty/webkit/WebCore/dom/MutationEvent.h77
-rw-r--r--src/3rdparty/webkit/WebCore/dom/MutationEvent.idl49
-rw-r--r--src/3rdparty/webkit/WebCore/dom/NameNodeList.cpp45
-rw-r--r--src/3rdparty/webkit/WebCore/dom/NameNodeList.h52
-rw-r--r--src/3rdparty/webkit/WebCore/dom/NamedAttrMap.cpp313
-rw-r--r--src/3rdparty/webkit/WebCore/dom/NamedAttrMap.h110
-rw-r--r--src/3rdparty/webkit/WebCore/dom/NamedMappedAttrMap.cpp86
-rw-r--r--src/3rdparty/webkit/WebCore/dom/NamedMappedAttrMap.h62
-rw-r--r--src/3rdparty/webkit/WebCore/dom/NamedNodeMap.h64
-rw-r--r--src/3rdparty/webkit/WebCore/dom/NamedNodeMap.idl60
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Node.cpp2125
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Node.h580
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Node.idl136
-rw-r--r--src/3rdparty/webkit/WebCore/dom/NodeFilter.cpp38
-rw-r--r--src/3rdparty/webkit/WebCore/dom/NodeFilter.h88
-rw-r--r--src/3rdparty/webkit/WebCore/dom/NodeFilter.idl50
-rw-r--r--src/3rdparty/webkit/WebCore/dom/NodeFilterCondition.cpp37
-rw-r--r--src/3rdparty/webkit/WebCore/dom/NodeFilterCondition.h44
-rw-r--r--src/3rdparty/webkit/WebCore/dom/NodeIterator.cpp228
-rw-r--r--src/3rdparty/webkit/WebCore/dom/NodeIterator.h82
-rw-r--r--src/3rdparty/webkit/WebCore/dom/NodeIterator.idl42
-rw-r--r--src/3rdparty/webkit/WebCore/dom/NodeList.h46
-rw-r--r--src/3rdparty/webkit/WebCore/dom/NodeList.idl38
-rw-r--r--src/3rdparty/webkit/WebCore/dom/NodeRareData.h118
-rw-r--r--src/3rdparty/webkit/WebCore/dom/NodeRenderStyle.h40
-rw-r--r--src/3rdparty/webkit/WebCore/dom/NodeWithIndex.h64
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Notation.cpp61
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Notation.h55
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Notation.idl31
-rw-r--r--src/3rdparty/webkit/WebCore/dom/OverflowEvent.cpp71
-rw-r--r--src/3rdparty/webkit/WebCore/dom/OverflowEvent.h69
-rw-r--r--src/3rdparty/webkit/WebCore/dom/OverflowEvent.idl43
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Position.cpp1002
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Position.h135
-rw-r--r--src/3rdparty/webkit/WebCore/dom/PositionIterator.cpp160
-rw-r--r--src/3rdparty/webkit/WebCore/dom/PositionIterator.h74
-rw-r--r--src/3rdparty/webkit/WebCore/dom/ProcessingInstruction.cpp275
-rw-r--r--src/3rdparty/webkit/WebCore/dom/ProcessingInstruction.h100
-rw-r--r--src/3rdparty/webkit/WebCore/dom/ProcessingInstruction.idl42
-rw-r--r--src/3rdparty/webkit/WebCore/dom/ProgressEvent.cpp63
-rw-r--r--src/3rdparty/webkit/WebCore/dom/ProgressEvent.h69
-rw-r--r--src/3rdparty/webkit/WebCore/dom/ProgressEvent.idl42
-rw-r--r--src/3rdparty/webkit/WebCore/dom/QualifiedName.cpp131
-rw-r--r--src/3rdparty/webkit/WebCore/dom/QualifiedName.h169
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Range.cpp1800
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Range.h145
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Range.idl120
-rw-r--r--src/3rdparty/webkit/WebCore/dom/RangeBoundaryPoint.h182
-rw-r--r--src/3rdparty/webkit/WebCore/dom/RangeException.h58
-rw-r--r--src/3rdparty/webkit/WebCore/dom/RangeException.idl40
-rw-r--r--src/3rdparty/webkit/WebCore/dom/RegisteredEventListener.cpp38
-rw-r--r--src/3rdparty/webkit/WebCore/dom/RegisteredEventListener.h58
-rw-r--r--src/3rdparty/webkit/WebCore/dom/ScriptElement.cpp272
-rw-r--r--src/3rdparty/webkit/WebCore/dom/ScriptElement.h98
-rw-r--r--src/3rdparty/webkit/WebCore/dom/ScriptExecutionContext.cpp182
-rw-r--r--src/3rdparty/webkit/WebCore/dom/ScriptExecutionContext.h111
-rw-r--r--src/3rdparty/webkit/WebCore/dom/SelectorNodeList.cpp74
-rw-r--r--src/3rdparty/webkit/WebCore/dom/SelectorNodeList.h42
-rw-r--r--src/3rdparty/webkit/WebCore/dom/StaticNodeList.cpp60
-rw-r--r--src/3rdparty/webkit/WebCore/dom/StaticNodeList.h63
-rw-r--r--src/3rdparty/webkit/WebCore/dom/StaticStringList.cpp67
-rw-r--r--src/3rdparty/webkit/WebCore/dom/StaticStringList.h61
-rw-r--r--src/3rdparty/webkit/WebCore/dom/StyleElement.cpp103
-rw-r--r--src/3rdparty/webkit/WebCore/dom/StyleElement.h56
-rw-r--r--src/3rdparty/webkit/WebCore/dom/StyledElement.cpp505
-rw-r--r--src/3rdparty/webkit/WebCore/dom/StyledElement.h96
-rw-r--r--src/3rdparty/webkit/WebCore/dom/TagNodeList.cpp48
-rw-r--r--src/3rdparty/webkit/WebCore/dom/TagNodeList.h51
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Text.cpp351
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Text.h77
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Text.idl39
-rw-r--r--src/3rdparty/webkit/WebCore/dom/TextEvent.cpp67
-rw-r--r--src/3rdparty/webkit/WebCore/dom/TextEvent.h71
-rw-r--r--src/3rdparty/webkit/WebCore/dom/TextEvent.idl43
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Tokenizer.h78
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Traversal.cpp54
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Traversal.h57
-rw-r--r--src/3rdparty/webkit/WebCore/dom/TreeWalker.cpp277
-rw-r--r--src/3rdparty/webkit/WebCore/dom/TreeWalker.h75
-rw-r--r--src/3rdparty/webkit/WebCore/dom/TreeWalker.idl44
-rw-r--r--src/3rdparty/webkit/WebCore/dom/UIEvent.cpp97
-rw-r--r--src/3rdparty/webkit/WebCore/dom/UIEvent.h75
-rw-r--r--src/3rdparty/webkit/WebCore/dom/UIEvent.idl45
-rw-r--r--src/3rdparty/webkit/WebCore/dom/UIEventWithKeyState.cpp34
-rw-r--r--src/3rdparty/webkit/WebCore/dom/UIEventWithKeyState.h68
-rw-r--r--src/3rdparty/webkit/WebCore/dom/WebKitAnimationEvent.cpp74
-rw-r--r--src/3rdparty/webkit/WebCore/dom/WebKitAnimationEvent.h67
-rw-r--r--src/3rdparty/webkit/WebCore/dom/WebKitAnimationEvent.idl40
-rw-r--r--src/3rdparty/webkit/WebCore/dom/WebKitTransitionEvent.cpp75
-rw-r--r--src/3rdparty/webkit/WebCore/dom/WebKitTransitionEvent.h67
-rw-r--r--src/3rdparty/webkit/WebCore/dom/WebKitTransitionEvent.idl40
-rw-r--r--src/3rdparty/webkit/WebCore/dom/WheelEvent.cpp80
-rw-r--r--src/3rdparty/webkit/WebCore/dom/WheelEvent.h71
-rw-r--r--src/3rdparty/webkit/WebCore/dom/WheelEvent.idl64
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Worker.cpp202
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Worker.h113
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Worker.idl48
-rw-r--r--src/3rdparty/webkit/WebCore/dom/WorkerContext.cpp195
-rw-r--r--src/3rdparty/webkit/WebCore/dom/WorkerContext.h122
-rw-r--r--src/3rdparty/webkit/WebCore/dom/WorkerContext.idl61
-rw-r--r--src/3rdparty/webkit/WebCore/dom/WorkerLocation.cpp85
-rw-r--r--src/3rdparty/webkit/WebCore/dom/WorkerLocation.h73
-rw-r--r--src/3rdparty/webkit/WebCore/dom/WorkerLocation.idl48
-rw-r--r--src/3rdparty/webkit/WebCore/dom/WorkerMessagingProxy.cpp311
-rw-r--r--src/3rdparty/webkit/WebCore/dom/WorkerMessagingProxy.h93
-rw-r--r--src/3rdparty/webkit/WebCore/dom/WorkerTask.cpp41
-rw-r--r--src/3rdparty/webkit/WebCore/dom/WorkerTask.h48
-rw-r--r--src/3rdparty/webkit/WebCore/dom/WorkerThread.cpp154
-rw-r--r--src/3rdparty/webkit/WebCore/dom/WorkerThread.h79
-rw-r--r--src/3rdparty/webkit/WebCore/dom/XMLTokenizer.cpp348
-rw-r--r--src/3rdparty/webkit/WebCore/dom/XMLTokenizer.h187
-rw-r--r--src/3rdparty/webkit/WebCore/dom/XMLTokenizerLibxml2.cpp1349
-rw-r--r--src/3rdparty/webkit/WebCore/dom/XMLTokenizerQt.cpp763
-rwxr-xr-xsrc/3rdparty/webkit/WebCore/dom/make_names.pl842
-rw-r--r--src/3rdparty/webkit/WebCore/editing/AppendNodeCommand.cpp57
-rw-r--r--src/3rdparty/webkit/WebCore/editing/AppendNodeCommand.h52
-rw-r--r--src/3rdparty/webkit/WebCore/editing/ApplyStyleCommand.cpp1608
-rw-r--r--src/3rdparty/webkit/WebCore/editing/ApplyStyleCommand.h121
-rw-r--r--src/3rdparty/webkit/WebCore/editing/BreakBlockquoteCommand.cpp175
-rw-r--r--src/3rdparty/webkit/WebCore/editing/BreakBlockquoteCommand.h47
-rw-r--r--src/3rdparty/webkit/WebCore/editing/CompositeEditCommand.cpp1041
-rw-r--r--src/3rdparty/webkit/WebCore/editing/CompositeEditCommand.h120
-rw-r--r--src/3rdparty/webkit/WebCore/editing/CreateLinkCommand.cpp60
-rw-r--r--src/3rdparty/webkit/WebCore/editing/CreateLinkCommand.h51
-rw-r--r--src/3rdparty/webkit/WebCore/editing/DeleteButton.cpp56
-rw-r--r--src/3rdparty/webkit/WebCore/editing/DeleteButton.h42
-rw-r--r--src/3rdparty/webkit/WebCore/editing/DeleteButtonController.cpp308
-rw-r--r--src/3rdparty/webkit/WebCore/editing/DeleteButtonController.h77
-rw-r--r--src/3rdparty/webkit/WebCore/editing/DeleteFromTextNodeCommand.cpp64
-rw-r--r--src/3rdparty/webkit/WebCore/editing/DeleteFromTextNodeCommand.h56
-rw-r--r--src/3rdparty/webkit/WebCore/editing/DeleteSelectionCommand.cpp801
-rw-r--r--src/3rdparty/webkit/WebCore/editing/DeleteSelectionCommand.h97
-rw-r--r--src/3rdparty/webkit/WebCore/editing/EditAction.h71
-rw-r--r--src/3rdparty/webkit/WebCore/editing/EditCommand.cpp230
-rw-r--r--src/3rdparty/webkit/WebCore/editing/EditCommand.h96
-rw-r--r--src/3rdparty/webkit/WebCore/editing/Editor.cpp2187
-rw-r--r--src/3rdparty/webkit/WebCore/editing/Editor.h307
-rw-r--r--src/3rdparty/webkit/WebCore/editing/EditorCommand.cpp1474
-rw-r--r--src/3rdparty/webkit/WebCore/editing/EditorDeleteAction.h40
-rw-r--r--src/3rdparty/webkit/WebCore/editing/EditorInsertAction.h40
-rw-r--r--src/3rdparty/webkit/WebCore/editing/FormatBlockCommand.cpp134
-rw-r--r--src/3rdparty/webkit/WebCore/editing/FormatBlockCommand.h52
-rw-r--r--src/3rdparty/webkit/WebCore/editing/HTMLInterchange.cpp112
-rw-r--r--src/3rdparty/webkit/WebCore/editing/HTMLInterchange.h46
-rw-r--r--src/3rdparty/webkit/WebCore/editing/IndentOutdentCommand.cpp301
-rw-r--r--src/3rdparty/webkit/WebCore/editing/IndentOutdentCommand.h60
-rw-r--r--src/3rdparty/webkit/WebCore/editing/InsertIntoTextNodeCommand.cpp56
-rw-r--r--src/3rdparty/webkit/WebCore/editing/InsertIntoTextNodeCommand.h55
-rw-r--r--src/3rdparty/webkit/WebCore/editing/InsertLineBreakCommand.cpp187
-rw-r--r--src/3rdparty/webkit/WebCore/editing/InsertLineBreakCommand.h54
-rw-r--r--src/3rdparty/webkit/WebCore/editing/InsertListCommand.cpp265
-rw-r--r--src/3rdparty/webkit/WebCore/editing/InsertListCommand.h64
-rw-r--r--src/3rdparty/webkit/WebCore/editing/InsertNodeBeforeCommand.cpp62
-rw-r--r--src/3rdparty/webkit/WebCore/editing/InsertNodeBeforeCommand.h52
-rw-r--r--src/3rdparty/webkit/WebCore/editing/InsertParagraphSeparatorCommand.cpp338
-rw-r--r--src/3rdparty/webkit/WebCore/editing/InsertParagraphSeparatorCommand.h59
-rw-r--r--src/3rdparty/webkit/WebCore/editing/InsertTextCommand.cpp248
-rw-r--r--src/3rdparty/webkit/WebCore/editing/InsertTextCommand.h61
-rw-r--r--src/3rdparty/webkit/WebCore/editing/JoinTextNodesCommand.cpp74
-rw-r--r--src/3rdparty/webkit/WebCore/editing/JoinTextNodesCommand.h54
-rw-r--r--src/3rdparty/webkit/WebCore/editing/MergeIdenticalElementsCommand.cpp89
-rw-r--r--src/3rdparty/webkit/WebCore/editing/MergeIdenticalElementsCommand.h53
-rw-r--r--src/3rdparty/webkit/WebCore/editing/ModifySelectionListLevel.cpp295
-rw-r--r--src/3rdparty/webkit/WebCore/editing/ModifySelectionListLevel.h80
-rw-r--r--src/3rdparty/webkit/WebCore/editing/MoveSelectionCommand.cpp81
-rw-r--r--src/3rdparty/webkit/WebCore/editing/MoveSelectionCommand.h55
-rw-r--r--src/3rdparty/webkit/WebCore/editing/RemoveCSSPropertyCommand.cpp55
-rw-r--r--src/3rdparty/webkit/WebCore/editing/RemoveCSSPropertyCommand.h55
-rw-r--r--src/3rdparty/webkit/WebCore/editing/RemoveFormatCommand.cpp81
-rw-r--r--src/3rdparty/webkit/WebCore/editing/RemoveFormatCommand.h49
-rw-r--r--src/3rdparty/webkit/WebCore/editing/RemoveNodeAttributeCommand.cpp1
-rw-r--r--src/3rdparty/webkit/WebCore/editing/RemoveNodeAttributeCommand.h1
-rw-r--r--src/3rdparty/webkit/WebCore/editing/RemoveNodeCommand.cpp66
-rw-r--r--src/3rdparty/webkit/WebCore/editing/RemoveNodeCommand.h53
-rw-r--r--src/3rdparty/webkit/WebCore/editing/RemoveNodePreservingChildrenCommand.cpp55
-rw-r--r--src/3rdparty/webkit/WebCore/editing/RemoveNodePreservingChildrenCommand.h50
-rw-r--r--src/3rdparty/webkit/WebCore/editing/ReplaceSelectionCommand.cpp1058
-rw-r--r--src/3rdparty/webkit/WebCore/editing/ReplaceSelectionCommand.h93
-rw-r--r--src/3rdparty/webkit/WebCore/editing/Selection.cpp605
-rw-r--r--src/3rdparty/webkit/WebCore/editing/Selection.h136
-rw-r--r--src/3rdparty/webkit/WebCore/editing/SelectionController.cpp1238
-rw-r--r--src/3rdparty/webkit/WebCore/editing/SelectionController.h189
-rw-r--r--src/3rdparty/webkit/WebCore/editing/SetNodeAttributeCommand.cpp57
-rw-r--r--src/3rdparty/webkit/WebCore/editing/SetNodeAttributeCommand.h55
-rw-r--r--src/3rdparty/webkit/WebCore/editing/SmartReplace.cpp43
-rw-r--r--src/3rdparty/webkit/WebCore/editing/SmartReplace.h35
-rw-r--r--src/3rdparty/webkit/WebCore/editing/SmartReplaceCF.cpp72
-rw-r--r--src/3rdparty/webkit/WebCore/editing/SmartReplaceICU.cpp99
-rw-r--r--src/3rdparty/webkit/WebCore/editing/SplitElementCommand.cpp91
-rw-r--r--src/3rdparty/webkit/WebCore/editing/SplitElementCommand.h53
-rw-r--r--src/3rdparty/webkit/WebCore/editing/SplitTextNodeCommand.cpp92
-rw-r--r--src/3rdparty/webkit/WebCore/editing/SplitTextNodeCommand.h55
-rw-r--r--src/3rdparty/webkit/WebCore/editing/SplitTextNodeContainingElementCommand.cpp66
-rw-r--r--src/3rdparty/webkit/WebCore/editing/SplitTextNodeContainingElementCommand.h51
-rw-r--r--src/3rdparty/webkit/WebCore/editing/TextAffinity.h57
-rw-r--r--src/3rdparty/webkit/WebCore/editing/TextGranularity.h47
-rw-r--r--src/3rdparty/webkit/WebCore/editing/TextIterator.cpp1677
-rw-r--r--src/3rdparty/webkit/WebCore/editing/TextIterator.h253
-rw-r--r--src/3rdparty/webkit/WebCore/editing/TypingCommand.cpp562
-rw-r--r--src/3rdparty/webkit/WebCore/editing/TypingCommand.h104
-rw-r--r--src/3rdparty/webkit/WebCore/editing/UnlinkCommand.cpp50
-rw-r--r--src/3rdparty/webkit/WebCore/editing/UnlinkCommand.h49
-rw-r--r--src/3rdparty/webkit/WebCore/editing/VisiblePosition.cpp680
-rw-r--r--src/3rdparty/webkit/WebCore/editing/VisiblePosition.h147
-rw-r--r--src/3rdparty/webkit/WebCore/editing/WrapContentsInDummySpanCommand.cpp81
-rw-r--r--src/3rdparty/webkit/WebCore/editing/WrapContentsInDummySpanCommand.h54
-rw-r--r--src/3rdparty/webkit/WebCore/editing/htmlediting.cpp1011
-rw-r--r--src/3rdparty/webkit/WebCore/editing/htmlediting.h137
-rw-r--r--src/3rdparty/webkit/WebCore/editing/markup.cpp1224
-rw-r--r--src/3rdparty/webkit/WebCore/editing/markup.h56
-rw-r--r--src/3rdparty/webkit/WebCore/editing/qt/EditorQt.cpp47
-rw-r--r--src/3rdparty/webkit/WebCore/editing/visible_units.cpp958
-rw-r--r--src/3rdparty/webkit/WebCore/editing/visible_units.h91
-rw-r--r--src/3rdparty/webkit/WebCore/generated/ArrayPrototype.lut.h37
-rw-r--r--src/3rdparty/webkit/WebCore/generated/CSSGrammar.cpp4081
-rw-r--r--src/3rdparty/webkit/WebCore/generated/CSSGrammar.h211
-rw-r--r--src/3rdparty/webkit/WebCore/generated/CSSPropertyNames.cpp1262
-rw-r--r--src/3rdparty/webkit/WebCore/generated/CSSPropertyNames.h286
-rw-r--r--src/3rdparty/webkit/WebCore/generated/CSSValueKeywords.c2359
-rw-r--r--src/3rdparty/webkit/WebCore/generated/CSSValueKeywords.h543
-rw-r--r--src/3rdparty/webkit/WebCore/generated/ColorData.c441
-rw-r--r--src/3rdparty/webkit/WebCore/generated/DatePrototype.lut.h62
-rw-r--r--src/3rdparty/webkit/WebCore/generated/DocTypeStrings.cpp1083
-rw-r--r--src/3rdparty/webkit/WebCore/generated/Grammar.cpp5106
-rw-r--r--src/3rdparty/webkit/WebCore/generated/Grammar.h232
-rw-r--r--src/3rdparty/webkit/WebCore/generated/HTMLEntityNames.c549
-rw-r--r--src/3rdparty/webkit/WebCore/generated/HTMLNames.cpp1313
-rw-r--r--src/3rdparty/webkit/WebCore/generated/HTMLNames.h364
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSAttr.cpp193
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSAttr.h77
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSBarInfo.cpp111
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSBarInfo.h70
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSCDATASection.cpp138
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSCDATASection.h62
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSCSSCharsetRule.cpp159
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSCSSCharsetRule.h65
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSCSSFontFaceRule.cpp148
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSCSSFontFaceRule.h63
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSCSSImportRule.cpp164
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSCSSImportRule.h65
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSCSSMediaRule.cpp194
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSCSSMediaRule.h73
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSCSSPageRule.cpp169
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSCSSPageRule.h66
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSCSSPrimitiveValue.cpp450
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSCSSPrimitiveValue.h105
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSCSSRule.cpp271
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSCSSRule.h94
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSCSSRuleList.cpp216
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSCSSRuleList.h83
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSCSSStyleDeclaration.cpp357
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSCSSStyleDeclaration.h98
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSCSSStyleRule.cpp169
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSCSSStyleRule.h66
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSCSSStyleSheet.cpp243
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSCSSStyleSheet.h76
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSCSSValue.cpp212
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSCSSValue.h86
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSCSSValueList.cpp201
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSCSSValueList.h74
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSCSSVariablesDeclaration.cpp289
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSCSSVariablesDeclaration.h90
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSCSSVariablesRule.cpp156
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSCSSVariablesRule.h64
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSCanvasGradient.cpp108
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSCanvasGradient.h69
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSCanvasPattern.cpp85
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSCanvasPattern.h61
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSCanvasRenderingContext2D.cpp968
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSCanvasRenderingContext2D.h172
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSCharacterData.cpp283
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSCharacterData.h78
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSClipboard.cpp233
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSClipboard.h97
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSComment.cpp138
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSComment.h62
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSConsole.cpp328
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSConsole.h96
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSCounter.cpp176
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSCounter.h74
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSDOMApplicationCache.cpp404
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSDOMApplicationCache.h122
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSDOMCoreException.cpp316
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSDOMCoreException.h101
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSDOMImplementation.cpp250
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSDOMImplementation.h83
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSDOMParser.cpp186
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSDOMParser.h79
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSDOMSelection.cpp407
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSDOMSelection.h102
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSDOMStringList.cpp212
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSDOMStringList.h87
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSDOMWindow.cpp4435
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSDOMWindow.h570
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSDOMWindowBase.lut.h31
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSDatabase.cpp137
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSDatabase.h83
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSDocument.cpp1049
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSDocument.h165
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSDocumentFragment.cpp181
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSDocumentFragment.h71
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSDocumentType.cpp189
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSDocumentType.h73
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSElement.cpp660
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSElement.h136
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSEntity.cpp160
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSEntity.h65
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSEntityReference.cpp138
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSEntityReference.h62
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSEvent.cpp434
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSEvent.h119
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSEventException.cpp204
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSEventException.h85
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSEventTargetNode.cpp944
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSEventTargetNode.h162
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSFile.cpp169
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSFile.h73
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSFileList.cpp221
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSFileList.h83
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSGeolocation.cpp150
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSGeolocation.h84
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSGeoposition.cpp182
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSGeoposition.h85
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLAnchorElement.cpp363
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLAnchorElement.h101
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLAppletElement.cpp298
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLAppletElement.h93
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLAreaElement.cpp285
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLAreaElement.h84
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLAudioElement.cpp143
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLAudioElement.h67
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLBRElement.cpp158
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLBRElement.h65
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLBaseElement.cpp171
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLBaseElement.h67
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLBaseFontElement.cpp184
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLBaseFontElement.h69
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLBlockquoteElement.cpp158
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLBlockquoteElement.h65
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLBodyElement.cpp263
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLBodyElement.h81
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLButtonElement.cpp251
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLButtonElement.h84
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLCanvasElement.cpp208
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLCanvasElement.h76
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLCollection.cpp242
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLCollection.h95
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLDListElement.cpp156
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLDListElement.h65
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLDirectoryElement.cpp156
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLDirectoryElement.h65
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLDivElement.cpp158
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLDivElement.h65
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLDocument.cpp399
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLDocument.h113
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLElement.cpp397
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLElement.h106
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLElementWrapperFactory.cpp572
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLElementWrapperFactory.h48
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLEmbedElement.cpp259
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLEmbedElement.h91
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLFieldSetElement.cpp154
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLFieldSetElement.h64
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLFontElement.cpp184
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLFontElement.h69
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLFormElement.cpp312
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLFormElement.h93
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLFrameElement.cpp318
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLFrameElement.h97
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLFrameSetElement.cpp176
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLFrameSetElement.h70
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLHRElement.cpp197
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLHRElement.h71
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLHeadElement.cpp158
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLHeadElement.h65
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLHeadingElement.cpp158
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLHeadingElement.h65
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLHtmlElement.cpp158
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLHtmlElement.h65
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLIFrameElement.cpp318
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLIFrameElement.h96
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLImageElement.cpp349
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLImageElement.h94
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLInputElement.cpp474
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLInputElement.h121
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLIsIndexElement.cpp167
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLIsIndexElement.h66
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLLIElement.cpp171
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLLIElement.h67
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLLabelElement.cpp180
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLLabelElement.h68
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLLegendElement.cpp180
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLLegendElement.h68
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLLinkElement.cpp271
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLLinkElement.h82
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLMapElement.cpp167
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLMapElement.h66
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLMarqueeElement.cpp168
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLMarqueeElement.h71
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLMediaElement.cpp543
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLMediaElement.h129
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLMenuElement.cpp156
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLMenuElement.h65
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLMetaElement.cpp197
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLMetaElement.h71
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLModElement.cpp171
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLModElement.h67
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLOListElement.cpp184
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLOListElement.h69
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLObjectElement.cpp407
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLObjectElement.h113
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLOptGroupElement.cpp171
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLOptGroupElement.h67
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLOptionElement.cpp245
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLOptionElement.h82
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLOptionsCollection.cpp159
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLOptionsCollection.h89
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLParagraphElement.cpp158
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLParagraphElement.h65
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLParamElement.cpp197
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLParamElement.h71
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLPreElement.cpp169
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLPreElement.h67
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLQuoteElement.cpp158
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLQuoteElement.h65
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLScriptElement.cpp236
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLScriptElement.h77
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLSelectElement.cpp396
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLSelectElement.h102
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLSourceElement.cpp189
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLSourceElement.h74
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLStyleElement.cpp193
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLStyleElement.h70
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLTableCaptionElement.cpp162
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLTableCaptionElement.h70
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLTableCellElement.cpp334
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLTableCellElement.h92
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLTableColElement.cpp223
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLTableColElement.h75
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLTableElement.cpp441
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLTableElement.h104
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLTableRowElement.cpp272
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLTableRowElement.h85
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLTableSectionElement.cpp249
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLTableSectionElement.h86
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLTextAreaElement.cpp343
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLTextAreaElement.h97
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLTitleElement.cpp158
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLTitleElement.h65
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLUListElement.cpp171
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLUListElement.h67
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLVideoElement.cpp203
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHTMLVideoElement.h76
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHistory.cpp172
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSHistory.h86
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSImageData.cpp163
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSImageData.h73
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSJavaScriptCallFrame.cpp169
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSJavaScriptCallFrame.h92
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSKeyboardEvent.cpp219
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSKeyboardEvent.h77
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSLocation.cpp261
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSLocation.h118
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSMediaError.cpp193
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSMediaError.h87
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSMediaList.cpp265
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSMediaList.h88
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSMessageChannel.cpp128
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSMessageChannel.h73
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSMessageEvent.cpp213
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSMessageEvent.h75
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSMessagePort.cpp318
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSMessagePort.h98
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSMimeType.cpp185
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSMimeType.h75
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSMimeTypeArray.cpp235
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSMimeTypeArray.h87
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSMouseEvent.cpp298
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSMouseEvent.h87
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSMutationEvent.cpp226
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSMutationEvent.h80
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSNamedNodeMap.cpp319
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSNamedNodeMap.h92
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSNavigator.cpp226
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSNavigator.h96
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSNode.cpp623
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSNode.h152
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSNodeFilter.cpp278
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSNodeFilter.h102
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSNodeIterator.cpp235
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSNodeIterator.h93
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSNodeList.cpp226
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSNodeList.h89
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSNotation.cpp153
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSNotation.h64
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSOverflowEvent.cpp203
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSOverflowEvent.h78
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSPlugin.cpp258
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSPlugin.h90
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSPluginArray.cpp248
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSPluginArray.h88
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSPositionError.cpp204
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSPositionError.h84
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSProcessingInstruction.cpp175
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSProcessingInstruction.h67
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSProgressEvent.cpp183
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSProgressEvent.h73
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSRGBColor.lut.h21
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSRange.cpp638
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSRange.h117
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSRangeException.cpp211
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSRangeException.h86
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSRect.cpp183
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSRect.h75
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSQLError.cpp121
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSQLError.h71
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSQLResultSet.cpp131
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSQLResultSet.h72
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSQLResultSetRowList.cpp127
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSQLResultSetRowList.h81
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSQLTransaction.cpp100
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSQLTransaction.h72
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGAElement.cpp313
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGAElement.h94
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGAltGlyphElement.cpp141
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGAltGlyphElement.h71
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGAngle.cpp289
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGAngle.h102
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGAnimateColorElement.cpp76
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGAnimateColorElement.h57
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGAnimateElement.cpp76
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGAnimateElement.h57
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGAnimateTransformElement.cpp76
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGAnimateTransformElement.h57
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGAnimatedAngle.cpp126
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGAnimatedAngle.h76
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGAnimatedBoolean.cpp137
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGAnimatedBoolean.h78
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGAnimatedEnumeration.cpp138
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGAnimatedEnumeration.h78
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGAnimatedInteger.cpp138
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGAnimatedInteger.h78
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGAnimatedLength.cpp125
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGAnimatedLength.h76
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGAnimatedLengthList.cpp126
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGAnimatedLengthList.h76
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGAnimatedNumber.cpp138
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGAnimatedNumber.h78
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGAnimatedNumberList.cpp126
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGAnimatedNumberList.h76
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGAnimatedPreserveAspectRatio.cpp126
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGAnimatedPreserveAspectRatio.h76
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGAnimatedRect.cpp126
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGAnimatedRect.h76
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGAnimatedString.cpp140
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGAnimatedString.h78
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGAnimatedTransformList.cpp126
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGAnimatedTransformList.h76
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGAnimationElement.cpp260
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGAnimationElement.h85
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGCircleElement.cpp322
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGCircleElement.h95
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGClipPathElement.cpp306
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGClipPathElement.h93
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGColor.cpp243
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGColor.h85
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGComponentTransferFunctionElement.cpp252
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGComponentTransferFunctionElement.h87
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGCursorElement.cpp173
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGCursorElement.h80
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGDefinitionSrcElement.cpp76
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGDefinitionSrcElement.h57
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGDefsElement.cpp297
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGDefsElement.h92
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGDescElement.cpp169
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGDescElement.h80
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGDocument.cpp128
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGDocument.h74
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGElement.cpp153
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGElement.h77
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGElementInstance.cpp1024
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGElementInstance.h179
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGElementInstanceList.cpp140
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGElementInstanceList.h83
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGElementWrapperFactory.cpp634
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGElementWrapperFactory.h51
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGEllipseElement.cpp330
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGEllipseElement.h96
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGException.cpp225
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGException.h94
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFEBlendElement.cpp295
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFEBlendElement.h93
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFEColorMatrixElement.cpp289
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFEColorMatrixElement.h92
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFEComponentTransferElement.cpp185
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFEComponentTransferElement.h81
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFECompositeElement.cpp335
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFECompositeElement.h98
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFEDiffuseLightingElement.cpp218
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFEDiffuseLightingElement.h85
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFEDisplacementMapElement.cpp305
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFEDisplacementMapElement.h94
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFEDistantLightElement.cpp112
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFEDistantLightElement.h67
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFEFloodElement.cpp177
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFEFloodElement.h80
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFEFuncAElement.cpp76
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFEFuncAElement.h57
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFEFuncBElement.cpp76
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFEFuncBElement.h57
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFEFuncGElement.cpp76
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFEFuncGElement.h57
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFEFuncRElement.cpp76
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFEFuncRElement.h57
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFEGaussianBlurElement.cpp216
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFEGaussianBlurElement.h84
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFEImageElement.cpp227
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFEImageElement.h87
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFEMergeElement.cpp177
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFEMergeElement.h80
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFEMergeNodeElement.cpp104
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFEMergeNodeElement.h66
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFEOffsetElement.cpp202
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFEOffsetElement.h83
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFEPointLightElement.cpp120
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFEPointLightElement.h68
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFESpecularLightingElement.cpp210
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFESpecularLightingElement.h84
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFESpotLightElement.cpp160
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFESpotLightElement.h73
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFETileElement.cpp185
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFETileElement.h81
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFETurbulenceElement.cpp321
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFETurbulenceElement.h96
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFilterElement.cpp267
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFilterElement.h91
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFontElement.cpp76
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFontElement.h57
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFontFaceElement.cpp76
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFontFaceElement.h57
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFontFaceFormatElement.cpp76
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFontFaceFormatElement.h57
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFontFaceNameElement.cpp76
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFontFaceNameElement.h57
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFontFaceSrcElement.cpp76
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFontFaceSrcElement.h57
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFontFaceUriElement.cpp76
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGFontFaceUriElement.h57
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGForeignObjectElement.cpp330
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGForeignObjectElement.h96
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGGElement.cpp297
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGGElement.h92
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGGlyphElement.cpp76
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGGlyphElement.h57
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGGradientElement.cpp258
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGGradientElement.h88
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGHKernElement.cpp76
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGHKernElement.h57
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGImageElement.cpp347
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGImageElement.h98
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGLength.cpp326
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGLength.h114
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGLengthList.cpp239
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGLengthList.h91
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGLineElement.cpp330
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGLineElement.h96
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGLinearGradientElement.cpp128
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGLinearGradientElement.h69
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGMarkerElement.cpp374
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGMarkerElement.h102
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGMaskElement.cpp265
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGMaskElement.h91
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGMatrix.cpp305
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGMatrix.h120
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGMetadataElement.cpp76
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGMetadataElement.h57
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGMissingGlyphElement.cpp76
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGMissingGlyphElement.h57
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGNumber.cpp130
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGNumber.h78
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGNumberList.cpp238
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGNumberList.h91
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPaint.cpp269
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPaint.h90
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathElement.cpp713
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathElement.h119
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathSeg.cpp319
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathSeg.h107
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathSegArcAbs.cpp206
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathSegArcAbs.h80
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathSegArcRel.cpp206
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathSegArcRel.h80
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathSegClosePath.cpp76
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathSegClosePath.h57
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathSegCurvetoCubicAbs.cpp191
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathSegCurvetoCubicAbs.h78
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathSegCurvetoCubicRel.cpp191
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathSegCurvetoCubicRel.h78
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathSegCurvetoCubicSmoothAbs.cpp161
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathSegCurvetoCubicSmoothAbs.h74
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathSegCurvetoCubicSmoothRel.cpp161
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathSegCurvetoCubicSmoothRel.h74
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathSegCurvetoQuadraticAbs.cpp161
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathSegCurvetoQuadraticAbs.h74
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathSegCurvetoQuadraticRel.cpp161
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathSegCurvetoQuadraticRel.h74
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathSegCurvetoQuadraticSmoothAbs.cpp131
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathSegCurvetoQuadraticSmoothAbs.h70
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathSegCurvetoQuadraticSmoothRel.cpp131
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathSegCurvetoQuadraticSmoothRel.h70
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathSegLinetoAbs.cpp131
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathSegLinetoAbs.h70
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathSegLinetoHorizontalAbs.cpp116
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathSegLinetoHorizontalAbs.h68
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathSegLinetoHorizontalRel.cpp116
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathSegLinetoHorizontalRel.h68
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathSegLinetoRel.cpp131
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathSegLinetoRel.h70
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathSegLinetoVerticalAbs.cpp116
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathSegLinetoVerticalAbs.h68
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathSegLinetoVerticalRel.cpp116
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathSegLinetoVerticalRel.h68
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathSegList.cpp189
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathSegList.h100
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathSegMovetoAbs.cpp131
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathSegMovetoAbs.h70
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathSegMovetoRel.cpp131
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPathSegMovetoRel.h70
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPatternElement.cpp300
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPatternElement.h95
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPoint.cpp168
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPoint.h89
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPointList.cpp188
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPointList.h100
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPolygonElement.cpp313
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPolygonElement.h94
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPolylineElement.cpp313
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPolylineElement.h94
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPreserveAspectRatio.cpp300
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGPreserveAspectRatio.h104
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGRadialGradientElement.cpp136
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGRadialGradientElement.h70
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGRect.cpp173
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGRect.h85
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGRectElement.cpp346
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGRectElement.h98
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGRenderingIntent.cpp209
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGRenderingIntent.h91
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGSVGElement.cpp772
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGSVGElement.h140
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGScriptElement.cpp133
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGScriptElement.h70
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGSetElement.cpp76
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGSetElement.h57
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGStopElement.cpp145
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGStopElement.h76
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGStringList.cpp239
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGStringList.h91
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGStyleElement.cpp162
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGStyleElement.h74
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGSwitchElement.cpp297
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGSwitchElement.h92
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGSymbolElement.cpp196
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGSymbolElement.h83
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGTRefElement.cpp104
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGTRefElement.h66
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGTSpanElement.cpp76
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGTSpanElement.h57
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGTextContentElement.cpp445
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGTextContentElement.h103
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGTextElement.cpp183
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGTextElement.h79
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGTextPathElement.cpp228
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGTextPathElement.h84
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGTextPositioningElement.cpp137
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGTextPositioningElement.h70
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGTitleElement.cpp169
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGTitleElement.h80
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGTransform.cpp333
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGTransform.h103
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGTransformList.cpp218
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGTransformList.h102
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGUnitTypes.cpp188
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGUnitTypes.h88
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGUseElement.cpp354
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGUseElement.h99
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGViewElement.cpp175
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGViewElement.h82
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGZoomEvent.cpp133
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSSVGZoomEvent.h70
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSScreen.cpp161
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSScreen.h77
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSStorage.cpp264
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSStorage.h92
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSStorageEvent.cpp203
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSStorageEvent.h75
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSStyleSheet.cpp215
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSStyleSheet.h82
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSStyleSheetList.cpp221
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSStyleSheetList.h86
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSText.cpp191
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSText.h72
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSTextEvent.cpp171
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSTextEvent.h71
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSTextMetrics.cpp160
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSTextMetrics.h72
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSTimeRanges.cpp150
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSTimeRanges.h79
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSTreeWalker.cpp274
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSTreeWalker.h103
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSUIEvent.cpp226
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSUIEvent.h79
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSVoidCallback.cpp99
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSVoidCallback.h69
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSWebKitAnimationEvent.cpp177
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSWebKitAnimationEvent.h72
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSWebKitCSSKeyframeRule.cpp168
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSWebKitCSSKeyframeRule.h66
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSWebKitCSSKeyframesRule.cpp248
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSWebKitCSSKeyframesRule.h79
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSWebKitCSSTransformValue.cpp229
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSWebKitCSSTransformValue.h81
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSWebKitTransitionEvent.cpp177
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSWebKitTransitionEvent.h72
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSWheelEvent.cpp243
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSWheelEvent.h77
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSWorker.cpp225
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSWorker.h97
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSWorkerContext.cpp243
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSWorkerContext.h99
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSWorkerContextBase.lut.h18
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSWorkerLocation.cpp243
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSWorkerLocation.h92
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSWorkerNavigator.cpp154
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSWorkerNavigator.h79
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSXMLHttpRequest.cpp433
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSXMLHttpRequest.h126
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSXMLHttpRequestException.cpp211
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSXMLHttpRequestException.h86
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSXMLHttpRequestProgressEvent.cpp152
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSXMLHttpRequestProgressEvent.h64
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSXMLHttpRequestUpload.cpp304
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSXMLHttpRequestUpload.h98
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSXMLSerializer.cpp187
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSXMLSerializer.h79
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSXPathEvaluator.cpp247
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSXPathEvaluator.h86
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSXPathException.cpp216
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSXPathException.h91
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSXPathExpression.cpp185
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSXPathExpression.h84
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSXPathNSResolver.cpp113
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSXPathNSResolver.h74
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSXPathResult.cpp335
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSXPathResult.h104
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSXSLTProcessor.cpp177
-rw-r--r--src/3rdparty/webkit/WebCore/generated/JSXSLTProcessor.h89
-rw-r--r--src/3rdparty/webkit/WebCore/generated/Lexer.lut.h54
-rw-r--r--src/3rdparty/webkit/WebCore/generated/MathObject.lut.h36
-rw-r--r--src/3rdparty/webkit/WebCore/generated/NumberConstructor.lut.h23
-rw-r--r--src/3rdparty/webkit/WebCore/generated/RegExpConstructor.lut.h39
-rw-r--r--src/3rdparty/webkit/WebCore/generated/RegExpObject.lut.h23
-rw-r--r--src/3rdparty/webkit/WebCore/generated/SVGElementFactory.cpp607
-rw-r--r--src/3rdparty/webkit/WebCore/generated/SVGElementFactory.h56
-rw-r--r--src/3rdparty/webkit/WebCore/generated/SVGNames.cpp1377
-rw-r--r--src/3rdparty/webkit/WebCore/generated/SVGNames.h700
-rw-r--r--src/3rdparty/webkit/WebCore/generated/StringPrototype.lut.h50
-rw-r--r--src/3rdparty/webkit/WebCore/generated/UserAgentStyleSheets.h8
-rw-r--r--src/3rdparty/webkit/WebCore/generated/UserAgentStyleSheetsData.cpp985
-rw-r--r--src/3rdparty/webkit/WebCore/generated/XLinkNames.cpp108
-rw-r--r--src/3rdparty/webkit/WebCore/generated/XLinkNames.h68
-rw-r--r--src/3rdparty/webkit/WebCore/generated/XMLNames.cpp92
-rw-r--r--src/3rdparty/webkit/WebCore/generated/XMLNames.h57
-rw-r--r--src/3rdparty/webkit/WebCore/generated/XPathGrammar.cpp2150
-rw-r--r--src/3rdparty/webkit/WebCore/generated/XPathGrammar.h109
-rw-r--r--src/3rdparty/webkit/WebCore/generated/chartables.c96
-rw-r--r--src/3rdparty/webkit/WebCore/generated/tokenizer.cpp2200
-rw-r--r--src/3rdparty/webkit/WebCore/history/BackForwardList.cpp282
-rw-r--r--src/3rdparty/webkit/WebCore/history/BackForwardList.h95
-rw-r--r--src/3rdparty/webkit/WebCore/history/CachedPage.cpp191
-rw-r--r--src/3rdparty/webkit/WebCore/history/CachedPage.h84
-rw-r--r--src/3rdparty/webkit/WebCore/history/CachedPagePlatformData.h45
-rw-r--r--src/3rdparty/webkit/WebCore/history/HistoryItem.cpp435
-rw-r--r--src/3rdparty/webkit/WebCore/history/HistoryItem.h219
-rw-r--r--src/3rdparty/webkit/WebCore/history/PageCache.cpp183
-rw-r--r--src/3rdparty/webkit/WebCore/history/PageCache.h83
-rw-r--r--src/3rdparty/webkit/WebCore/html/CanvasGradient.cpp61
-rw-r--r--src/3rdparty/webkit/WebCore/html/CanvasGradient.h66
-rw-r--r--src/3rdparty/webkit/WebCore/html/CanvasGradient.idl39
-rw-r--r--src/3rdparty/webkit/WebCore/html/CanvasPattern.cpp66
-rw-r--r--src/3rdparty/webkit/WebCore/html/CanvasPattern.h62
-rw-r--r--src/3rdparty/webkit/WebCore/html/CanvasPattern.idl36
-rw-r--r--src/3rdparty/webkit/WebCore/html/CanvasRenderingContext2D.cpp1470
-rw-r--r--src/3rdparty/webkit/WebCore/html/CanvasRenderingContext2D.h263
-rw-r--r--src/3rdparty/webkit/WebCore/html/CanvasRenderingContext2D.idl123
-rw-r--r--src/3rdparty/webkit/WebCore/html/CanvasStyle.cpp222
-rw-r--r--src/3rdparty/webkit/WebCore/html/CanvasStyle.h89
-rw-r--r--src/3rdparty/webkit/WebCore/html/DocTypeStrings.gperf89
-rw-r--r--src/3rdparty/webkit/WebCore/html/File.cpp51
-rw-r--r--src/3rdparty/webkit/WebCore/html/File.h56
-rw-r--r--src/3rdparty/webkit/WebCore/html/File.idl35
-rw-r--r--src/3rdparty/webkit/WebCore/html/FileList.cpp44
-rw-r--r--src/3rdparty/webkit/WebCore/html/FileList.h59
-rw-r--r--src/3rdparty/webkit/WebCore/html/FileList.idl36
-rw-r--r--src/3rdparty/webkit/WebCore/html/FormDataList.cpp91
-rw-r--r--src/3rdparty/webkit/WebCore/html/FormDataList.h69
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLAnchorElement.cpp507
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLAnchorElement.h107
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLAnchorElement.idl60
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLAppletElement.cpp230
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLAppletElement.h81
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLAppletElement.idl53
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLAreaElement.cpp228
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLAreaElement.h85
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLAreaElement.idl51
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLAttributeNames.in203
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLAudioElement.cpp44
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLAudioElement.h46
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLAudioElement.idl30
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLBRElement.cpp87
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLBRElement.h51
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLBRElement.idl30
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLBaseElement.cpp99
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLBaseElement.h57
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLBaseElement.idl31
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLBaseFontElement.cpp66
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLBaseFontElement.h49
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLBaseFontElement.idl35
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLBlockquoteElement.cpp51
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLBlockquoteElement.h43
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLBlockquoteElement.idl30
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLBodyElement.cpp306
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLBodyElement.h81
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLBodyElement.idl42
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLButtonElement.cpp194
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLButtonElement.h71
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLButtonElement.idl39
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLCanvasElement.cpp288
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLCanvasElement.h131
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLCanvasElement.idl46
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLCollection.cpp458
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLCollection.h159
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLCollection.idl40
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLDListElement.cpp46
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLDListElement.h43
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLDListElement.idl30
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLDirectoryElement.cpp46
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLDirectoryElement.h43
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLDirectoryElement.idl30
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLDivElement.cpp78
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLDivElement.h46
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLDivElement.idl30
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLDocument.cpp425
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLDocument.h112
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLDocument.idl67
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLElement.cpp1022
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLElement.h119
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLElement.idl72
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLElementFactory.cpp509
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLElementFactory.h47
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLEmbedElement.cpp258
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLEmbedElement.h71
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLEmbedElement.idl55
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLEntityNames.gperf296
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLFieldSetElement.cpp67
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLFieldSetElement.h56
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLFieldSetElement.idl31
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLFontElement.cpp176
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLFontElement.h53
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLFontElement.idl32
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLFormCollection.cpp245
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLFormCollection.h66
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLFormControlElement.cpp291
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLFormControlElement.h132
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLFormElement.cpp641
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLFormElement.h161
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLFormElement.idl43
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLFrameElement.cpp85
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLFrameElement.h60
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLFrameElement.idl57
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLFrameElementBase.cpp326
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLFrameElementBase.h109
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLFrameOwnerElement.cpp80
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLFrameOwnerElement.h68
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLFrameSetElement.cpp216
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLFrameSetElement.h91
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLFrameSetElement.idl35
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLHRElement.cpp141
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLHRElement.h55
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLHRElement.idl33
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLHeadElement.cpp70
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLHeadElement.h50
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLHeadElement.idl30
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLHeadingElement.cpp58
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLHeadingElement.h45
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLHeadingElement.idl30
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLHtmlElement.cpp82
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLHtmlElement.h53
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLHtmlElement.idl32
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLIFrameElement.cpp158
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLIFrameElement.h66
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLIFrameElement.idl55
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLImageElement.cpp437
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLImageElement.h130
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLImageElement.idl56
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLImageLoader.cpp65
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLImageLoader.h45
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLInputElement.cpp1692
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLInputElement.h258
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLInputElement.idl76
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLIsIndexElement.cpp60
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLIsIndexElement.h49
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLIsIndexElement.idl31
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLKeygenElement.cpp86
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLKeygenElement.h48
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLLIElement.cpp128
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLLIElement.h53
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLLIElement.idl31
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLLabelElement.cpp164
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLLabelElement.h65
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLLabelElement.idl33
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLLegendElement.cpp124
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLLegendElement.h57
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLLegendElement.idl33
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLLinkElement.cpp403
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLLinkElement.h119
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLLinkElement.idl49
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLMapElement.cpp112
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLMapElement.h59
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLMapElement.idl32
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLMarqueeElement.cpp122
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLMarqueeElement.h53
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLMarqueeElement.idl33
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLMediaElement.cpp1073
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLMediaElement.h212
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLMediaElement.idl88
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLMenuElement.cpp46
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLMenuElement.h43
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLMenuElement.idl30
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLMetaElement.cpp110
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLMetaElement.h64
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLMetaElement.idl33
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLModElement.cpp58
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLModElement.h50
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLModElement.idl31
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLNameCollection.cpp96
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLNameCollection.h50
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLOListElement.cpp99
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLOListElement.h56
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLOListElement.idl32
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLObjectElement.cpp449
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLObjectElement.h119
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLObjectElement.idl66
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLOptGroupElement.cpp191
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLOptGroupElement.h70
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLOptGroupElement.idl31
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLOptionElement.cpp262
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLOptionElement.h92
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLOptionElement.idl44
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLOptionsCollection.cpp92
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLOptionsCollection.h55
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLOptionsCollection.idl45
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLParagraphElement.cpp80
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLParagraphElement.h46
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLParagraphElement.idl30
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLParamElement.cpp114
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLParamElement.h66
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLParamElement.idl33
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLParser.cpp1603
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLParser.h184
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLParserErrorCodes.cpp70
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLParserErrorCodes.h60
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLPlugInElement.cpp200
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLPlugInElement.h84
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLPlugInImageElement.cpp54
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLPlugInImageElement.h49
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLPreElement.cpp83
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLPreElement.h50
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLPreElement.idl36
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLQuoteElement.cpp47
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLQuoteElement.h45
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLQuoteElement.idl29
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLScriptElement.cpp226
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLScriptElement.h93
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLScriptElement.idl35
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLSelectElement.cpp1124
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLSelectElement.h184
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLSelectElement.idl72
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLSourceElement.cpp92
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLSourceElement.h59
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLSourceElement.idl32
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLStyleElement.cpp145
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLStyleElement.h74
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLStyleElement.idl38
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLTableCaptionElement.cpp69
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLTableCaptionElement.h50
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLTableCaptionElement.idl34
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLTableCellElement.cpp271
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLTableCellElement.h118
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLTableCellElement.idl47
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLTableColElement.cpp156
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLTableColElement.h77
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLTableColElement.idl38
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLTableElement.cpp758
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLTableElement.h131
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLTableElement.idl67
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLTablePartElement.cpp100
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLTablePartElement.h47
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLTableRowElement.cpp229
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLTableRowElement.h72
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLTableRowElement.idl45
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLTableRowsCollection.cpp167
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLTableRowsCollection.h54
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLTableSectionElement.cpp173
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLTableSectionElement.h66
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLTableSectionElement.idl43
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLTagNames.in111
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLTextAreaElement.cpp389
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLTextAreaElement.h109
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLTextAreaElement.idl50
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLTitleElement.cpp94
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLTitleElement.h52
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLTitleElement.idl30
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLTokenizer.cpp2043
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLTokenizer.h422
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLUListElement.cpp75
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLUListElement.h49
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLUListElement.idl31
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLVideoElement.cpp175
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLVideoElement.h74
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLVideoElement.idl34
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLViewSourceDocument.cpp294
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLViewSourceDocument.h65
-rw-r--r--src/3rdparty/webkit/WebCore/html/ImageData.cpp47
-rw-r--r--src/3rdparty/webkit/WebCore/html/ImageData.h55
-rw-r--r--src/3rdparty/webkit/WebCore/html/ImageData.idl39
-rw-r--r--src/3rdparty/webkit/WebCore/html/MediaError.h52
-rw-r--r--src/3rdparty/webkit/WebCore/html/MediaError.idl33
-rw-r--r--src/3rdparty/webkit/WebCore/html/PreloadScanner.cpp853
-rw-r--r--src/3rdparty/webkit/WebCore/html/PreloadScanner.h144
-rw-r--r--src/3rdparty/webkit/WebCore/html/TextMetrics.h50
-rw-r--r--src/3rdparty/webkit/WebCore/html/TextMetrics.idl34
-rw-r--r--src/3rdparty/webkit/WebCore/html/TimeRanges.cpp69
-rw-r--r--src/3rdparty/webkit/WebCore/html/TimeRanges.h74
-rw-r--r--src/3rdparty/webkit/WebCore/html/TimeRanges.idl36
-rw-r--r--src/3rdparty/webkit/WebCore/html/VoidCallback.h45
-rw-r--r--src/3rdparty/webkit/WebCore/html/VoidCallback.idl30
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/InspectorClient.h67
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/InspectorController.cpp2928
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/InspectorController.h328
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/JavaScriptCallFrame.cpp101
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/JavaScriptCallFrame.h78
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/JavaScriptCallFrame.idl40
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/JavaScriptDebugListener.h54
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/JavaScriptDebugServer.cpp615
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/JavaScriptDebugServer.h130
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/JavaScriptProfile.cpp294
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/JavaScriptProfile.h42
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/JavaScriptProfileNode.cpp243
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/JavaScriptProfileNode.h44
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Breakpoint.js54
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/BreakpointsSidebarPane.js85
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/CallStackSidebarPane.js110
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Console.js949
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/DataGrid.js844
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Database.js95
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/DatabaseQueryView.js199
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/DatabaseTableView.js82
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/DatabasesPanel.js357
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/ElementsPanel.js1206
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/ElementsTreeOutline.js626
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/FontView.js104
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/ImageView.js74
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/back.pngbin0 -> 4205 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/checker.pngbin0 -> 3471 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/clearConsoleButtons.pngbin0 -> 5224 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/closeButtons.pngbin0 -> 4355 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/consoleButtons.pngbin0 -> 5197 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/database.pngbin0 -> 2329 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/databaseTable.pngbin0 -> 4325 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/databasesIcon.pngbin0 -> 7148 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/debuggerContinue.pngbin0 -> 4190 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/debuggerPause.pngbin0 -> 4081 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/debuggerStepInto.pngbin0 -> 4282 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/debuggerStepOut.pngbin0 -> 4271 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/debuggerStepOver.pngbin0 -> 4366 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/disclosureTriangleSmallDown.pngbin0 -> 3919 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/disclosureTriangleSmallDownBlack.pngbin0 -> 3802 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/disclosureTriangleSmallDownWhite.pngbin0 -> 3820 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/disclosureTriangleSmallRight.pngbin0 -> 3898 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/disclosureTriangleSmallRightBlack.pngbin0 -> 3807 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/disclosureTriangleSmallRightDown.pngbin0 -> 3953 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/disclosureTriangleSmallRightDownBlack.pngbin0 -> 3816 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/disclosureTriangleSmallRightDownWhite.pngbin0 -> 3838 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/disclosureTriangleSmallRightWhite.pngbin0 -> 3818 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/dockButtons.pngbin0 -> 1274 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/elementsIcon.pngbin0 -> 6639 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/enableButtons.pngbin0 -> 5543 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/errorIcon.pngbin0 -> 4337 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/errorMediumIcon.pngbin0 -> 4059 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/excludeButtons.pngbin0 -> 4562 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/focusButtons.pngbin0 -> 4919 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/forward.pngbin0 -> 4202 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/glossyHeader.pngbin0 -> 3720 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/glossyHeaderPressed.pngbin0 -> 3721 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/glossyHeaderSelected.pngbin0 -> 3738 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/glossyHeaderSelectedPressed.pngbin0 -> 3739 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/goArrow.pngbin0 -> 3591 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/graphLabelCalloutLeft.pngbin0 -> 3790 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/graphLabelCalloutRight.pngbin0 -> 3789 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/largerResourcesButtons.pngbin0 -> 1596 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/nodeSearchButtons.pngbin0 -> 5708 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/paneBottomGrow.pngbin0 -> 3457 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/paneBottomGrowActive.pngbin0 -> 3457 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/paneGrowHandleLine.pngbin0 -> 3443 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/pauseOnExceptionButtons.pngbin0 -> 2305 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/percentButtons.pngbin0 -> 5771 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/profileGroupIcon.pngbin0 -> 5126 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/profileIcon.pngbin0 -> 4953 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/profileSmallIcon.pngbin0 -> 579 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/profilesIcon.pngbin0 -> 4158 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/profilesSilhouette.pngbin0 -> 48600 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/recordButtons.pngbin0 -> 5716 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/reloadButtons.pngbin0 -> 4544 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/resourceCSSIcon.pngbin0 -> 1066 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/resourceDocumentIcon.pngbin0 -> 4959 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/resourceDocumentIconSmall.pngbin0 -> 787 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/resourceJSIcon.pngbin0 -> 879 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/resourcePlainIcon.pngbin0 -> 4321 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/resourcePlainIconSmall.pngbin0 -> 731 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/resourcesIcon.pngbin0 -> 6431 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/resourcesSizeGraphIcon.pngbin0 -> 5606 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/resourcesTimeGraphIcon.pngbin0 -> 5743 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/scriptsIcon.pngbin0 -> 7428 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/scriptsSilhouette.pngbin0 -> 49028 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/searchSmallBlue.pngbin0 -> 3968 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/searchSmallBrightBlue.pngbin0 -> 3966 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/searchSmallGray.pngbin0 -> 3936 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/searchSmallWhite.pngbin0 -> 3844 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/segment.pngbin0 -> 4349 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/segmentEnd.pngbin0 -> 4070 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/segmentHover.pngbin0 -> 4310 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/segmentHoverEnd.pngbin0 -> 4074 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/segmentSelected.pngbin0 -> 4302 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/segmentSelectedEnd.pngbin0 -> 4070 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/splitviewDimple.pngbin0 -> 216 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/splitviewDividerBackground.pngbin0 -> 149 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/statusbarBackground.pngbin0 -> 4024 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/statusbarBottomBackground.pngbin0 -> 4021 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/statusbarButtons.pngbin0 -> 4175 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/statusbarMenuButton.pngbin0 -> 4293 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/statusbarMenuButtonSelected.pngbin0 -> 4291 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/statusbarResizerHorizontal.pngbin0 -> 4026 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/statusbarResizerVertical.pngbin0 -> 4036 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/timelineHollowPillBlue.pngbin0 -> 3450 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/timelineHollowPillGray.pngbin0 -> 3392 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/timelineHollowPillGreen.pngbin0 -> 3452 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/timelineHollowPillOrange.pngbin0 -> 3452 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/timelineHollowPillPurple.pngbin0 -> 3453 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/timelineHollowPillRed.pngbin0 -> 3460 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/timelineHollowPillYellow.pngbin0 -> 3444 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/timelinePillBlue.pngbin0 -> 3346 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/timelinePillGray.pngbin0 -> 3297 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/timelinePillGreen.pngbin0 -> 3350 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/timelinePillOrange.pngbin0 -> 3352 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/timelinePillPurple.pngbin0 -> 3353 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/timelinePillRed.pngbin0 -> 3343 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/timelinePillYellow.pngbin0 -> 3336 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/tipBalloon.pngbin0 -> 3689 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/tipBalloonBottom.pngbin0 -> 3139 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/tipIcon.pngbin0 -> 1212 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/tipIconPressed.pngbin0 -> 1224 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/toolbarItemSelected.pngbin0 -> 4197 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/treeDownTriangleBlack.pngbin0 -> 3570 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/treeDownTriangleWhite.pngbin0 -> 3531 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/treeRightTriangleBlack.pngbin0 -> 3561 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/treeRightTriangleWhite.pngbin0 -> 3535 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/treeUpTriangleBlack.pngbin0 -> 3584 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/treeUpTriangleWhite.pngbin0 -> 3558 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/userInputIcon.pngbin0 -> 777 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/userInputPreviousIcon.pngbin0 -> 765 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/warningIcon.pngbin0 -> 4244 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/warningMediumIcon.pngbin0 -> 3833 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Images/warningsErrors.pngbin0 -> 5192 bytes
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/MetricsSidebarPane.js195
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Object.js82
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/ObjectPropertiesSection.js276
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Panel.js273
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/PanelEnablerView.js76
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Placard.js106
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/ProfileView.js642
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/ProfilesPanel.js504
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/PropertiesSection.js145
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/PropertiesSidebarPane.js54
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Resource.js625
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/ResourceCategory.js68
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/ResourceView.js140
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/ResourcesPanel.js1649
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/ScopeChainSidebarPane.js156
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/Script.js37
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/ScriptView.js103
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/ScriptsPanel.js810
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/SidebarPane.js125
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/SidebarTreeElement.js201
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/SourceFrame.js699
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/SourceView.js303
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/StylesSidebarPane.js927
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/TextPrompt.js312
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/View.js74
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/WebKit.qrc158
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/inspector.css2996
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/inspector.html91
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/inspector.js1267
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/treeoutline.js846
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/front-end/utilities.js1098
-rw-r--r--src/3rdparty/webkit/WebCore/loader/Cache.cpp753
-rw-r--r--src/3rdparty/webkit/WebCore/loader/Cache.h210
-rw-r--r--src/3rdparty/webkit/WebCore/loader/CachePolicy.h40
-rw-r--r--src/3rdparty/webkit/WebCore/loader/CachedCSSStyleSheet.cpp148
-rw-r--r--src/3rdparty/webkit/WebCore/loader/CachedCSSStyleSheet.h68
-rw-r--r--src/3rdparty/webkit/WebCore/loader/CachedFont.cpp203
-rw-r--r--src/3rdparty/webkit/WebCore/loader/CachedFont.h89
-rw-r--r--src/3rdparty/webkit/WebCore/loader/CachedImage.cpp382
-rw-r--r--src/3rdparty/webkit/WebCore/loader/CachedImage.h103
-rw-r--r--src/3rdparty/webkit/WebCore/loader/CachedResource.cpp397
-rw-r--r--src/3rdparty/webkit/WebCore/loader/CachedResource.h250
-rw-r--r--src/3rdparty/webkit/WebCore/loader/CachedResourceClient.h80
-rw-r--r--src/3rdparty/webkit/WebCore/loader/CachedResourceClientWalker.cpp53
-rw-r--r--src/3rdparty/webkit/WebCore/loader/CachedResourceClientWalker.h49
-rw-r--r--src/3rdparty/webkit/WebCore/loader/CachedResourceHandle.cpp42
-rw-r--r--src/3rdparty/webkit/WebCore/loader/CachedResourceHandle.h92
-rw-r--r--src/3rdparty/webkit/WebCore/loader/CachedScript.cpp131
-rw-r--r--src/3rdparty/webkit/WebCore/loader/CachedScript.h67
-rw-r--r--src/3rdparty/webkit/WebCore/loader/CachedXBLDocument.cpp110
-rw-r--r--src/3rdparty/webkit/WebCore/loader/CachedXBLDocument.h67
-rw-r--r--src/3rdparty/webkit/WebCore/loader/CachedXSLStyleSheet.cpp101
-rw-r--r--src/3rdparty/webkit/WebCore/loader/CachedXSLStyleSheet.h64
-rw-r--r--src/3rdparty/webkit/WebCore/loader/DocLoader.cpp429
-rw-r--r--src/3rdparty/webkit/WebCore/loader/DocLoader.h138
-rw-r--r--src/3rdparty/webkit/WebCore/loader/DocumentLoader.cpp945
-rw-r--r--src/3rdparty/webkit/WebCore/loader/DocumentLoader.h317
-rw-r--r--src/3rdparty/webkit/WebCore/loader/EmptyClients.h413
-rw-r--r--src/3rdparty/webkit/WebCore/loader/FTPDirectoryDocument.cpp496
-rw-r--r--src/3rdparty/webkit/WebCore/loader/FTPDirectoryDocument.h48
-rw-r--r--src/3rdparty/webkit/WebCore/loader/FTPDirectoryParser.cpp1624
-rw-r--r--src/3rdparty/webkit/WebCore/loader/FTPDirectoryParser.h157
-rw-r--r--src/3rdparty/webkit/WebCore/loader/FormState.cpp49
-rw-r--r--src/3rdparty/webkit/WebCore/loader/FormState.h59
-rw-r--r--src/3rdparty/webkit/WebCore/loader/FrameLoader.cpp5310
-rw-r--r--src/3rdparty/webkit/WebCore/loader/FrameLoader.h688
-rw-r--r--src/3rdparty/webkit/WebCore/loader/FrameLoaderClient.cpp92
-rw-r--r--src/3rdparty/webkit/WebCore/loader/FrameLoaderClient.h222
-rw-r--r--src/3rdparty/webkit/WebCore/loader/FrameLoaderTypes.h79
-rw-r--r--src/3rdparty/webkit/WebCore/loader/ImageDocument.cpp371
-rw-r--r--src/3rdparty/webkit/WebCore/loader/ImageDocument.h76
-rw-r--r--src/3rdparty/webkit/WebCore/loader/ImageLoader.cpp153
-rw-r--r--src/3rdparty/webkit/WebCore/loader/ImageLoader.h77
-rw-r--r--src/3rdparty/webkit/WebCore/loader/MainResourceLoader.cpp519
-rw-r--r--src/3rdparty/webkit/WebCore/loader/MainResourceLoader.h104
-rw-r--r--src/3rdparty/webkit/WebCore/loader/MediaDocument.cpp169
-rw-r--r--src/3rdparty/webkit/WebCore/loader/MediaDocument.h54
-rw-r--r--src/3rdparty/webkit/WebCore/loader/NavigationAction.cpp83
-rw-r--r--src/3rdparty/webkit/WebCore/loader/NavigationAction.h61
-rw-r--r--src/3rdparty/webkit/WebCore/loader/NetscapePlugInStreamLoader.cpp130
-rw-r--r--src/3rdparty/webkit/WebCore/loader/NetscapePlugInStreamLoader.h70
-rw-r--r--src/3rdparty/webkit/WebCore/loader/PluginDocument.cpp151
-rw-r--r--src/3rdparty/webkit/WebCore/loader/PluginDocument.h48
-rw-r--r--src/3rdparty/webkit/WebCore/loader/ProgressTracker.cpp253
-rw-r--r--src/3rdparty/webkit/WebCore/loader/ProgressTracker.h80
-rw-r--r--src/3rdparty/webkit/WebCore/loader/Request.cpp47
-rw-r--r--src/3rdparty/webkit/WebCore/loader/Request.h63
-rw-r--r--src/3rdparty/webkit/WebCore/loader/ResourceLoader.cpp480
-rw-r--r--src/3rdparty/webkit/WebCore/loader/ResourceLoader.h157
-rw-r--r--src/3rdparty/webkit/WebCore/loader/SubresourceLoader.cpp268
-rw-r--r--src/3rdparty/webkit/WebCore/loader/SubresourceLoader.h66
-rw-r--r--src/3rdparty/webkit/WebCore/loader/SubresourceLoaderClient.h61
-rw-r--r--src/3rdparty/webkit/WebCore/loader/SubstituteData.h69
-rw-r--r--src/3rdparty/webkit/WebCore/loader/SubstituteResource.h64
-rw-r--r--src/3rdparty/webkit/WebCore/loader/TextDocument.cpp187
-rw-r--r--src/3rdparty/webkit/WebCore/loader/TextDocument.h51
-rw-r--r--src/3rdparty/webkit/WebCore/loader/TextResourceDecoder.cpp800
-rw-r--r--src/3rdparty/webkit/WebCore/loader/TextResourceDecoder.h80
-rw-r--r--src/3rdparty/webkit/WebCore/loader/UserStyleSheetLoader.cpp62
-rw-r--r--src/3rdparty/webkit/WebCore/loader/UserStyleSheetLoader.h57
-rw-r--r--src/3rdparty/webkit/WebCore/loader/appcache/ApplicationCache.cpp210
-rw-r--r--src/3rdparty/webkit/WebCore/loader/appcache/ApplicationCache.h113
-rw-r--r--src/3rdparty/webkit/WebCore/loader/appcache/ApplicationCacheGroup.cpp719
-rw-r--r--src/3rdparty/webkit/WebCore/loader/appcache/ApplicationCacheGroup.h154
-rw-r--r--src/3rdparty/webkit/WebCore/loader/appcache/ApplicationCacheResource.cpp69
-rw-r--r--src/3rdparty/webkit/WebCore/loader/appcache/ApplicationCacheResource.h73
-rw-r--r--src/3rdparty/webkit/WebCore/loader/appcache/ApplicationCacheStorage.cpp796
-rw-r--r--src/3rdparty/webkit/WebCore/loader/appcache/ApplicationCacheStorage.h100
-rw-r--r--src/3rdparty/webkit/WebCore/loader/appcache/DOMApplicationCache.cpp292
-rw-r--r--src/3rdparty/webkit/WebCore/loader/appcache/DOMApplicationCache.h141
-rw-r--r--src/3rdparty/webkit/WebCore/loader/appcache/DOMApplicationCache.idl74
-rw-r--r--src/3rdparty/webkit/WebCore/loader/appcache/ManifestParser.cpp187
-rw-r--r--src/3rdparty/webkit/WebCore/loader/appcache/ManifestParser.h49
-rw-r--r--src/3rdparty/webkit/WebCore/loader/archive/Archive.h62
-rw-r--r--src/3rdparty/webkit/WebCore/loader/archive/ArchiveFactory.cpp91
-rw-r--r--src/3rdparty/webkit/WebCore/loader/archive/ArchiveFactory.h50
-rw-r--r--src/3rdparty/webkit/WebCore/loader/archive/ArchiveResource.cpp77
-rw-r--r--src/3rdparty/webkit/WebCore/loader/archive/ArchiveResource.h65
-rw-r--r--src/3rdparty/webkit/WebCore/loader/archive/ArchiveResourceCollection.cpp89
-rw-r--r--src/3rdparty/webkit/WebCore/loader/archive/ArchiveResourceCollection.h59
-rw-r--r--src/3rdparty/webkit/WebCore/loader/archive/cf/LegacyWebArchive.cpp578
-rw-r--r--src/3rdparty/webkit/WebCore/loader/archive/cf/LegacyWebArchive.h67
-rw-r--r--src/3rdparty/webkit/WebCore/loader/archive/cf/LegacyWebArchiveMac.mm74
-rw-r--r--src/3rdparty/webkit/WebCore/loader/icon/IconDatabase.cpp2047
-rw-r--r--src/3rdparty/webkit/WebCore/loader/icon/IconDatabase.h243
-rw-r--r--src/3rdparty/webkit/WebCore/loader/icon/IconDatabaseClient.h49
-rw-r--r--src/3rdparty/webkit/WebCore/loader/icon/IconDatabaseNone.cpp174
-rw-r--r--src/3rdparty/webkit/WebCore/loader/icon/IconFetcher.cpp236
-rw-r--r--src/3rdparty/webkit/WebCore/loader/icon/IconFetcher.h78
-rw-r--r--src/3rdparty/webkit/WebCore/loader/icon/IconLoader.cpp171
-rw-r--r--src/3rdparty/webkit/WebCore/loader/icon/IconLoader.h70
-rw-r--r--src/3rdparty/webkit/WebCore/loader/icon/IconRecord.cpp106
-rw-r--r--src/3rdparty/webkit/WebCore/loader/icon/IconRecord.h117
-rw-r--r--src/3rdparty/webkit/WebCore/loader/icon/PageURLRecord.cpp63
-rw-r--r--src/3rdparty/webkit/WebCore/loader/icon/PageURLRecord.h85
-rw-r--r--src/3rdparty/webkit/WebCore/loader/loader.cpp487
-rw-r--r--src/3rdparty/webkit/WebCore/loader/loader.h115
-rwxr-xr-xsrc/3rdparty/webkit/WebCore/make-generated-sources.sh8
-rwxr-xr-xsrc/3rdparty/webkit/WebCore/move-js-headers.sh6
-rw-r--r--src/3rdparty/webkit/WebCore/page/AXObjectCache.cpp239
-rw-r--r--src/3rdparty/webkit/WebCore/page/AXObjectCache.h113
-rw-r--r--src/3rdparty/webkit/WebCore/page/AbstractView.idl36
-rw-r--r--src/3rdparty/webkit/WebCore/page/AccessibilityImageMapLink.cpp130
-rw-r--r--src/3rdparty/webkit/WebCore/page/AccessibilityImageMapLink.h72
-rw-r--r--src/3rdparty/webkit/WebCore/page/AccessibilityList.cpp94
-rw-r--r--src/3rdparty/webkit/WebCore/page/AccessibilityList.h56
-rw-r--r--src/3rdparty/webkit/WebCore/page/AccessibilityListBox.cpp177
-rw-r--r--src/3rdparty/webkit/WebCore/page/AccessibilityListBox.h66
-rw-r--r--src/3rdparty/webkit/WebCore/page/AccessibilityListBoxOption.cpp207
-rw-r--r--src/3rdparty/webkit/WebCore/page/AccessibilityListBoxOption.h79
-rw-r--r--src/3rdparty/webkit/WebCore/page/AccessibilityObject.cpp1031
-rw-r--r--src/3rdparty/webkit/WebCore/page/AccessibilityObject.h424
-rw-r--r--src/3rdparty/webkit/WebCore/page/AccessibilityRenderObject.cpp2387
-rw-r--r--src/3rdparty/webkit/WebCore/page/AccessibilityRenderObject.h237
-rw-r--r--src/3rdparty/webkit/WebCore/page/AccessibilityTable.cpp491
-rw-r--r--src/3rdparty/webkit/WebCore/page/AccessibilityTable.h86
-rw-r--r--src/3rdparty/webkit/WebCore/page/AccessibilityTableCell.cpp157
-rw-r--r--src/3rdparty/webkit/WebCore/page/AccessibilityTableCell.h65
-rw-r--r--src/3rdparty/webkit/WebCore/page/AccessibilityTableColumn.cpp167
-rw-r--r--src/3rdparty/webkit/WebCore/page/AccessibilityTableColumn.h75
-rw-r--r--src/3rdparty/webkit/WebCore/page/AccessibilityTableHeaderContainer.cpp87
-rw-r--r--src/3rdparty/webkit/WebCore/page/AccessibilityTableHeaderContainer.h67
-rw-r--r--src/3rdparty/webkit/WebCore/page/AccessibilityTableRow.cpp110
-rw-r--r--src/3rdparty/webkit/WebCore/page/AccessibilityTableRow.h65
-rw-r--r--src/3rdparty/webkit/WebCore/page/BarInfo.cpp72
-rw-r--r--src/3rdparty/webkit/WebCore/page/BarInfo.h57
-rw-r--r--src/3rdparty/webkit/WebCore/page/BarInfo.idl35
-rw-r--r--src/3rdparty/webkit/WebCore/page/Chrome.cpp505
-rw-r--r--src/3rdparty/webkit/WebCore/page/Chrome.h134
-rw-r--r--src/3rdparty/webkit/WebCore/page/ChromeClient.h172
-rw-r--r--src/3rdparty/webkit/WebCore/page/Console.cpp369
-rw-r--r--src/3rdparty/webkit/WebCore/page/Console.h122
-rw-r--r--src/3rdparty/webkit/WebCore/page/Console.idl59
-rw-r--r--src/3rdparty/webkit/WebCore/page/ContextMenuClient.h59
-rw-r--r--src/3rdparty/webkit/WebCore/page/ContextMenuController.cpp310
-rw-r--r--src/3rdparty/webkit/WebCore/page/ContextMenuController.h61
-rw-r--r--src/3rdparty/webkit/WebCore/page/DOMSelection.cpp424
-rw-r--r--src/3rdparty/webkit/WebCore/page/DOMSelection.h102
-rw-r--r--src/3rdparty/webkit/WebCore/page/DOMSelection.idl70
-rw-r--r--src/3rdparty/webkit/WebCore/page/DOMWindow.cpp1244
-rw-r--r--src/3rdparty/webkit/WebCore/page/DOMWindow.h307
-rw-r--r--src/3rdparty/webkit/WebCore/page/DOMWindow.idl431
-rw-r--r--src/3rdparty/webkit/WebCore/page/DragActions.h66
-rw-r--r--src/3rdparty/webkit/WebCore/page/DragClient.h81
-rw-r--r--src/3rdparty/webkit/WebCore/page/DragController.cpp781
-rw-r--r--src/3rdparty/webkit/WebCore/page/DragController.h132
-rw-r--r--src/3rdparty/webkit/WebCore/page/EditorClient.h143
-rw-r--r--src/3rdparty/webkit/WebCore/page/EventHandler.cpp2275
-rw-r--r--src/3rdparty/webkit/WebCore/page/EventHandler.h352
-rw-r--r--src/3rdparty/webkit/WebCore/page/FocusController.cpp307
-rw-r--r--src/3rdparty/webkit/WebCore/page/FocusController.h64
-rw-r--r--src/3rdparty/webkit/WebCore/page/FocusDirection.h36
-rw-r--r--src/3rdparty/webkit/WebCore/page/Frame.cpp1880
-rw-r--r--src/3rdparty/webkit/WebCore/page/Frame.h328
-rw-r--r--src/3rdparty/webkit/WebCore/page/FrameLoadRequest.h73
-rw-r--r--src/3rdparty/webkit/WebCore/page/FramePrivate.h99
-rw-r--r--src/3rdparty/webkit/WebCore/page/FrameTree.cpp314
-rw-r--r--src/3rdparty/webkit/WebCore/page/FrameTree.h86
-rw-r--r--src/3rdparty/webkit/WebCore/page/FrameView.cpp1303
-rw-r--r--src/3rdparty/webkit/WebCore/page/FrameView.h200
-rw-r--r--src/3rdparty/webkit/WebCore/page/Geolocation.cpp222
-rw-r--r--src/3rdparty/webkit/WebCore/page/Geolocation.h104
-rw-r--r--src/3rdparty/webkit/WebCore/page/Geolocation.idl38
-rw-r--r--src/3rdparty/webkit/WebCore/page/Geoposition.cpp38
-rw-r--r--src/3rdparty/webkit/WebCore/page/Geoposition.h77
-rw-r--r--src/3rdparty/webkit/WebCore/page/Geoposition.idl42
-rw-r--r--src/3rdparty/webkit/WebCore/page/History.cpp77
-rw-r--r--src/3rdparty/webkit/WebCore/page/History.h56
-rw-r--r--src/3rdparty/webkit/WebCore/page/History.idl41
-rw-r--r--src/3rdparty/webkit/WebCore/page/Location.cpp135
-rw-r--r--src/3rdparty/webkit/WebCore/page/Location.h71
-rw-r--r--src/3rdparty/webkit/WebCore/page/Location.idl57
-rw-r--r--src/3rdparty/webkit/WebCore/page/MouseEventWithHitTestResults.cpp66
-rw-r--r--src/3rdparty/webkit/WebCore/page/MouseEventWithHitTestResults.h51
-rw-r--r--src/3rdparty/webkit/WebCore/page/Navigator.cpp144
-rw-r--r--src/3rdparty/webkit/WebCore/page/Navigator.h68
-rw-r--r--src/3rdparty/webkit/WebCore/page/Navigator.idl46
-rw-r--r--src/3rdparty/webkit/WebCore/page/NavigatorBase.cpp115
-rw-r--r--src/3rdparty/webkit/WebCore/page/NavigatorBase.h54
-rw-r--r--src/3rdparty/webkit/WebCore/page/Page.cpp632
-rw-r--r--src/3rdparty/webkit/WebCore/page/Page.h265
-rw-r--r--src/3rdparty/webkit/WebCore/page/PageGroup.cpp194
-rw-r--r--src/3rdparty/webkit/WebCore/page/PageGroup.h87
-rw-r--r--src/3rdparty/webkit/WebCore/page/PositionCallback.h44
-rw-r--r--src/3rdparty/webkit/WebCore/page/PositionCallback.idl34
-rw-r--r--src/3rdparty/webkit/WebCore/page/PositionError.h62
-rw-r--r--src/3rdparty/webkit/WebCore/page/PositionError.idl40
-rw-r--r--src/3rdparty/webkit/WebCore/page/PositionErrorCallback.h44
-rw-r--r--src/3rdparty/webkit/WebCore/page/PositionErrorCallback.idl34
-rw-r--r--src/3rdparty/webkit/WebCore/page/PositionOptions.h56
-rw-r--r--src/3rdparty/webkit/WebCore/page/PrintContext.cpp137
-rw-r--r--src/3rdparty/webkit/WebCore/page/PrintContext.h57
-rw-r--r--src/3rdparty/webkit/WebCore/page/Screen.cpp107
-rw-r--r--src/3rdparty/webkit/WebCore/page/Screen.h62
-rw-r--r--src/3rdparty/webkit/WebCore/page/Screen.idl43
-rw-r--r--src/3rdparty/webkit/WebCore/page/SecurityOrigin.cpp297
-rw-r--r--src/3rdparty/webkit/WebCore/page/SecurityOrigin.h141
-rw-r--r--src/3rdparty/webkit/WebCore/page/SecurityOriginHash.h81
-rw-r--r--src/3rdparty/webkit/WebCore/page/Settings.cpp408
-rw-r--r--src/3rdparty/webkit/WebCore/page/Settings.h261
-rw-r--r--src/3rdparty/webkit/WebCore/page/WindowFeatures.cpp188
-rw-r--r--src/3rdparty/webkit/WebCore/page/WindowFeatures.h83
-rw-r--r--src/3rdparty/webkit/WebCore/page/WorkerNavigator.cpp51
-rw-r--r--src/3rdparty/webkit/WebCore/page/WorkerNavigator.h56
-rw-r--r--src/3rdparty/webkit/WebCore/page/WorkerNavigator.idl43
-rw-r--r--src/3rdparty/webkit/WebCore/page/animation/AnimationBase.cpp860
-rw-r--r--src/3rdparty/webkit/WebCore/page/animation/AnimationBase.h199
-rw-r--r--src/3rdparty/webkit/WebCore/page/animation/AnimationController.cpp456
-rw-r--r--src/3rdparty/webkit/WebCore/page/animation/AnimationController.h91
-rw-r--r--src/3rdparty/webkit/WebCore/page/animation/CompositeAnimation.cpp706
-rw-r--r--src/3rdparty/webkit/WebCore/page/animation/CompositeAnimation.h95
-rw-r--r--src/3rdparty/webkit/WebCore/page/animation/ImplicitAnimation.cpp212
-rw-r--r--src/3rdparty/webkit/WebCore/page/animation/ImplicitAnimation.h86
-rw-r--r--src/3rdparty/webkit/WebCore/page/animation/KeyframeAnimation.cpp293
-rw-r--r--src/3rdparty/webkit/WebCore/page/animation/KeyframeAnimation.h91
-rw-r--r--src/3rdparty/webkit/WebCore/page/chromium/AccessibilityObjectChromium.cpp37
-rw-r--r--src/3rdparty/webkit/WebCore/page/chromium/AccessibilityObjectWrapper.h50
-rw-r--r--src/3rdparty/webkit/WebCore/page/qt/AccessibilityObjectQt.cpp34
-rw-r--r--src/3rdparty/webkit/WebCore/page/qt/DragControllerQt.cpp72
-rw-r--r--src/3rdparty/webkit/WebCore/page/qt/EventHandlerQt.cpp138
-rw-r--r--src/3rdparty/webkit/WebCore/page/qt/FrameQt.cpp53
-rw-r--r--src/3rdparty/webkit/WebCore/page/win/AXObjectCacheWin.cpp61
-rw-r--r--src/3rdparty/webkit/WebCore/page/win/AccessibilityObjectWin.cpp40
-rw-r--r--src/3rdparty/webkit/WebCore/page/win/AccessibilityObjectWrapperWin.h54
-rw-r--r--src/3rdparty/webkit/WebCore/page/win/DragControllerWin.cpp68
-rw-r--r--src/3rdparty/webkit/WebCore/page/win/EventHandlerWin.cpp114
-rw-r--r--src/3rdparty/webkit/WebCore/page/win/FrameCGWin.cpp111
-rw-r--r--src/3rdparty/webkit/WebCore/page/win/FrameCairoWin.cpp48
-rw-r--r--src/3rdparty/webkit/WebCore/page/win/FrameWin.cpp101
-rw-r--r--src/3rdparty/webkit/WebCore/page/win/FrameWin.h41
-rw-r--r--src/3rdparty/webkit/WebCore/page/win/PageWin.cpp38
-rw-r--r--src/3rdparty/webkit/WebCore/platform/Arena.cpp281
-rw-r--r--src/3rdparty/webkit/WebCore/platform/Arena.h130
-rw-r--r--src/3rdparty/webkit/WebCore/platform/AutodrainedPool.h67
-rw-r--r--src/3rdparty/webkit/WebCore/platform/ColorData.gperf151
-rw-r--r--src/3rdparty/webkit/WebCore/platform/ContextMenu.cpp656
-rw-r--r--src/3rdparty/webkit/WebCore/platform/ContextMenu.h89
-rw-r--r--src/3rdparty/webkit/WebCore/platform/ContextMenuItem.h238
-rw-r--r--src/3rdparty/webkit/WebCore/platform/CookieJar.h41
-rw-r--r--src/3rdparty/webkit/WebCore/platform/Cursor.h153
-rw-r--r--src/3rdparty/webkit/WebCore/platform/DeprecatedPtrList.h113
-rw-r--r--src/3rdparty/webkit/WebCore/platform/DeprecatedPtrListImpl.cpp514
-rw-r--r--src/3rdparty/webkit/WebCore/platform/DeprecatedPtrListImpl.h122
-rw-r--r--src/3rdparty/webkit/WebCore/platform/DragData.cpp42
-rw-r--r--src/3rdparty/webkit/WebCore/platform/DragData.h114
-rw-r--r--src/3rdparty/webkit/WebCore/platform/DragImage.cpp74
-rw-r--r--src/3rdparty/webkit/WebCore/platform/DragImage.h91
-rw-r--r--src/3rdparty/webkit/WebCore/platform/EventLoop.h49
-rw-r--r--src/3rdparty/webkit/WebCore/platform/FileChooser.cpp93
-rw-r--r--src/3rdparty/webkit/WebCore/platform/FileChooser.h80
-rw-r--r--src/3rdparty/webkit/WebCore/platform/FileSystem.h176
-rw-r--r--src/3rdparty/webkit/WebCore/platform/FloatConversion.h61
-rw-r--r--src/3rdparty/webkit/WebCore/platform/GeolocationService.cpp58
-rw-r--r--src/3rdparty/webkit/WebCore/platform/GeolocationService.h71
-rw-r--r--src/3rdparty/webkit/WebCore/platform/HostWindow.h66
-rw-r--r--src/3rdparty/webkit/WebCore/platform/KURL.cpp1594
-rw-r--r--src/3rdparty/webkit/WebCore/platform/KURL.h364
-rw-r--r--src/3rdparty/webkit/WebCore/platform/KURLHash.h61
-rw-r--r--src/3rdparty/webkit/WebCore/platform/Language.h37
-rw-r--r--src/3rdparty/webkit/WebCore/platform/Length.cpp151
-rw-r--r--src/3rdparty/webkit/WebCore/platform/Length.h197
-rw-r--r--src/3rdparty/webkit/WebCore/platform/LengthBox.h85
-rw-r--r--src/3rdparty/webkit/WebCore/platform/LengthSize.h58
-rw-r--r--src/3rdparty/webkit/WebCore/platform/LinkHash.cpp221
-rw-r--r--src/3rdparty/webkit/WebCore/platform/LinkHash.h73
-rw-r--r--src/3rdparty/webkit/WebCore/platform/LocalizedStrings.h124
-rw-r--r--src/3rdparty/webkit/WebCore/platform/Logging.cpp62
-rw-r--r--src/3rdparty/webkit/WebCore/platform/Logging.h62
-rw-r--r--src/3rdparty/webkit/WebCore/platform/MIMETypeRegistry.cpp342
-rw-r--r--src/3rdparty/webkit/WebCore/platform/MIMETypeRegistry.h77
-rw-r--r--src/3rdparty/webkit/WebCore/platform/NotImplemented.h55
-rw-r--r--src/3rdparty/webkit/WebCore/platform/Pasteboard.h135
-rw-r--r--src/3rdparty/webkit/WebCore/platform/PlatformKeyboardEvent.h185
-rw-r--r--src/3rdparty/webkit/WebCore/platform/PlatformMenuDescription.h64
-rw-r--r--src/3rdparty/webkit/WebCore/platform/PlatformMouseEvent.h168
-rw-r--r--src/3rdparty/webkit/WebCore/platform/PlatformScreen.h66
-rw-r--r--src/3rdparty/webkit/WebCore/platform/PlatformWheelEvent.h142
-rw-r--r--src/3rdparty/webkit/WebCore/platform/PopupMenu.h186
-rw-r--r--src/3rdparty/webkit/WebCore/platform/PopupMenuClient.h67
-rw-r--r--src/3rdparty/webkit/WebCore/platform/PopupMenuStyle.h58
-rw-r--r--src/3rdparty/webkit/WebCore/platform/PurgeableBuffer.h76
-rw-r--r--src/3rdparty/webkit/WebCore/platform/SSLKeyGenerator.h41
-rw-r--r--src/3rdparty/webkit/WebCore/platform/ScrollTypes.h85
-rw-r--r--src/3rdparty/webkit/WebCore/platform/ScrollView.cpp927
-rw-r--r--src/3rdparty/webkit/WebCore/platform/ScrollView.h328
-rw-r--r--src/3rdparty/webkit/WebCore/platform/Scrollbar.cpp452
-rw-r--r--src/3rdparty/webkit/WebCore/platform/Scrollbar.h168
-rw-r--r--src/3rdparty/webkit/WebCore/platform/ScrollbarClient.h51
-rw-r--r--src/3rdparty/webkit/WebCore/platform/ScrollbarTheme.h94
-rw-r--r--src/3rdparty/webkit/WebCore/platform/ScrollbarThemeComposite.cpp304
-rw-r--r--src/3rdparty/webkit/WebCore/platform/ScrollbarThemeComposite.h71
-rw-r--r--src/3rdparty/webkit/WebCore/platform/SearchPopupMenu.h46
-rw-r--r--src/3rdparty/webkit/WebCore/platform/SharedBuffer.cpp147
-rw-r--r--src/3rdparty/webkit/WebCore/platform/SharedBuffer.h111
-rw-r--r--src/3rdparty/webkit/WebCore/platform/SharedTimer.h44
-rw-r--r--src/3rdparty/webkit/WebCore/platform/Sound.h35
-rw-r--r--src/3rdparty/webkit/WebCore/platform/StaticConstructors.h76
-rw-r--r--src/3rdparty/webkit/WebCore/platform/SystemTime.h40
-rw-r--r--src/3rdparty/webkit/WebCore/platform/Theme.cpp58
-rw-r--r--src/3rdparty/webkit/WebCore/platform/Theme.h122
-rw-r--r--src/3rdparty/webkit/WebCore/platform/ThemeTypes.h75
-rw-r--r--src/3rdparty/webkit/WebCore/platform/ThreadCheck.h44
-rw-r--r--src/3rdparty/webkit/WebCore/platform/ThreadGlobalData.cpp98
-rw-r--r--src/3rdparty/webkit/WebCore/platform/ThreadGlobalData.h75
-rw-r--r--src/3rdparty/webkit/WebCore/platform/Timer.cpp396
-rw-r--r--src/3rdparty/webkit/WebCore/platform/Timer.h112
-rw-r--r--src/3rdparty/webkit/WebCore/platform/TreeShared.h108
-rw-r--r--src/3rdparty/webkit/WebCore/platform/Widget.cpp121
-rw-r--r--src/3rdparty/webkit/WebCore/platform/Widget.h203
-rw-r--r--src/3rdparty/webkit/WebCore/platform/animation/Animation.cpp126
-rw-r--r--src/3rdparty/webkit/WebCore/platform/animation/Animation.h146
-rw-r--r--src/3rdparty/webkit/WebCore/platform/animation/AnimationList.cpp57
-rw-r--r--src/3rdparty/webkit/WebCore/platform/animation/AnimationList.h60
-rw-r--r--src/3rdparty/webkit/WebCore/platform/animation/TimingFunction.h74
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/BitmapImage.cpp427
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/BitmapImage.h254
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/Color.cpp315
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/Color.h152
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/DashArray.h39
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/FloatPoint.cpp52
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/FloatPoint.h158
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/FloatPoint3D.cpp65
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/FloatPoint3D.h58
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/FloatQuad.cpp60
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/FloatQuad.h138
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/FloatRect.cpp134
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/FloatRect.h188
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/FloatSize.cpp44
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/FloatSize.h132
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/Font.cpp317
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/Font.h196
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/FontCache.cpp429
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/FontCache.h95
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/FontData.cpp35
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/FontData.h60
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/FontDescription.cpp101
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/FontDescription.h139
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/FontFallbackList.cpp134
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/FontFallbackList.h79
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/FontFamily.cpp59
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/FontFamily.h88
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/FontFastPath.cpp367
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/FontRenderingMode.h37
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/FontSelector.h47
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/FontTraitsMask.h70
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/GeneratedImage.cpp68
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/GeneratedImage.h76
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/Generator.h45
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/GlyphBuffer.h182
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/GlyphPageTreeNode.cpp384
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/GlyphPageTreeNode.h177
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/GlyphWidthMap.cpp79
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/GlyphWidthMap.h74
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/Gradient.cpp149
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/Gradient.h114
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/GraphicsContext.cpp512
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/GraphicsContext.h353
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/GraphicsContextPrivate.h118
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/GraphicsTypes.cpp189
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/GraphicsTypes.h80
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/Icon.h86
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/Image.cpp199
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/Image.h179
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/ImageBuffer.h90
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/ImageObserver.h51
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/ImageSource.h141
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/IntPoint.h180
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/IntRect.cpp107
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/IntRect.h210
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/IntSize.h163
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/IntSizeHash.h46
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/MediaPlayer.cpp272
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/MediaPlayer.h140
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/Path.cpp276
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/Path.h135
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/PathTraversalState.cpp207
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/PathTraversalState.h72
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/Pattern.cpp46
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/Pattern.h82
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/Pen.cpp77
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/Pen.h72
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/SegmentedFontData.cpp79
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/SegmentedFontData.h75
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/SimpleFontData.cpp163
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/SimpleFontData.h211
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/StringTruncator.cpp198
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/StringTruncator.h46
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/StrokeStyleApplier.h38
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/TextRun.h126
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/UnitBezier.h123
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/WidthIterator.cpp230
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/WidthIterator.h56
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/filters/FEBlend.cpp72
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/filters/FEBlend.h64
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/filters/FEColorMatrix.cpp72
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/filters/FEColorMatrix.h64
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/filters/FEComponentTransfer.cpp96
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/filters/FEComponentTransfer.h99
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/filters/FEComposite.cpp108
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/filters/FEComposite.h81
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/qt/ColorQt.cpp48
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/qt/FloatPointQt.cpp48
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/qt/FloatRectQt.cpp49
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/qt/FontCacheQt.cpp63
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/qt/FontCustomPlatformData.cpp65
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/qt/FontCustomPlatformData.h46
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/qt/FontFallbackListQt.cpp106
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/qt/FontPlatformData.h53
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/qt/FontPlatformDataQt.cpp78
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/qt/FontQt.cpp188
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/qt/FontQt43.cpp356
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/qt/GlyphPageTreeNodeQt.cpp36
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/qt/GradientQt.cpp78
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/qt/GraphicsContextQt.cpp1206
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/qt/IconQt.cpp68
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/qt/ImageBufferData.h48
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/qt/ImageBufferQt.cpp115
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/qt/ImageDecoderQt.cpp330
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/qt/ImageDecoderQt.h96
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/qt/ImageQt.cpp165
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/qt/ImageSourceQt.cpp171
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/qt/IntPointQt.cpp48
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/qt/IntRectQt.cpp48
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/qt/IntSizeQt.cpp49
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/qt/MediaPlayerPrivatePhonon.cpp481
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/qt/MediaPlayerPrivatePhonon.h148
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/qt/PathQt.cpp306
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/qt/PatternQt.cpp46
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/qt/SimpleFontDataQt.cpp66
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/qt/StillImageQt.cpp65
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/qt/StillImageQt.h59
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/qt/TransformationMatrixQt.cpp202
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/transforms/IdentityTransformOperation.h67
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/transforms/MatrixTransformOperation.cpp50
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/transforms/MatrixTransformOperation.h82
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/transforms/RotateTransformOperation.cpp40
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/transforms/RotateTransformOperation.h74
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/transforms/ScaleTransformOperation.cpp41
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/transforms/ScaleTransformOperation.h74
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/transforms/SkewTransformOperation.cpp41
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/transforms/SkewTransformOperation.h74
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/transforms/TransformOperation.h64
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/transforms/TransformOperations.cpp49
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/transforms/TransformOperations.h59
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/transforms/TransformationMatrix.cpp205
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/transforms/TransformationMatrix.h140
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/transforms/TranslateTransformOperation.cpp41
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/transforms/TranslateTransformOperation.h75
-rw-r--r--src/3rdparty/webkit/WebCore/platform/image-decoders/ImageDecoder.h170
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/AutodrainedPool.mm55
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/BlockExceptions.h32
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/BlockExceptions.mm38
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/ClipboardMac.h88
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/ClipboardMac.mm360
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/ContextMenuItemMac.mm155
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/ContextMenuMac.mm154
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/CookieJar.mm118
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/CursorMac.mm356
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/DragDataMac.mm131
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/DragImageMac.mm102
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/EventLoopMac.mm39
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/FileChooserMac.mm55
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/FileSystemMac.mm40
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/FoundationExtras.h72
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/KURLMac.mm71
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/KeyEventMac.mm876
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/Language.mm43
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/LocalCurrentGraphicsContext.h40
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/LocalCurrentGraphicsContext.mm53
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/LocalizedStringsMac.mm596
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/LoggingMac.mm74
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/MIMETypeRegistryMac.mm59
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/PasteboardHelper.h60
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/PasteboardMac.mm378
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/PlatformMouseEventMac.mm177
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/PlatformScreenMac.mm108
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/PopupMenuMac.mm195
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/PurgeableBufferMac.cpp164
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/SSLKeyGeneratorMac.mm49
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/SchedulePairMac.mm43
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/ScrollViewMac.mm220
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/ScrollbarThemeMac.h70
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/ScrollbarThemeMac.mm404
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/SearchPopupMenuMac.mm74
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/SharedBufferMac.mm130
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/SharedTimerMac.mm117
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/SoftLinking.h119
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/SoundMac.mm33
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/SystemTimeMac.cpp44
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/ThemeMac.h56
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/ThemeMac.mm545
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/ThreadCheck.mm100
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/WebCoreKeyGenerator.h32
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/WebCoreKeyGenerator.m58
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/WebCoreNSStringExtras.h51
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/WebCoreNSStringExtras.mm119
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/WebCoreObjCExtras.h43
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/WebCoreObjCExtras.mm79
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/WebCoreSystemInterface.h151
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/WebCoreSystemInterface.mm95
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/WebCoreTextRenderer.h40
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/WebCoreTextRenderer.mm93
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/WebCoreView.h28
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/WebCoreView.m65
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/WebFontCache.h34
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/WebFontCache.mm301
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/WheelEventMac.mm52
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/WidgetMac.mm353
-rw-r--r--src/3rdparty/webkit/WebCore/platform/network/AuthenticationChallengeBase.cpp113
-rw-r--r--src/3rdparty/webkit/WebCore/platform/network/AuthenticationChallengeBase.h70
-rw-r--r--src/3rdparty/webkit/WebCore/platform/network/Credential.cpp80
-rw-r--r--src/3rdparty/webkit/WebCore/platform/network/Credential.h59
-rw-r--r--src/3rdparty/webkit/WebCore/platform/network/DNS.h36
-rw-r--r--src/3rdparty/webkit/WebCore/platform/network/FormData.cpp167
-rw-r--r--src/3rdparty/webkit/WebCore/platform/network/FormData.h109
-rw-r--r--src/3rdparty/webkit/WebCore/platform/network/FormDataBuilder.cpp238
-rw-r--r--src/3rdparty/webkit/WebCore/platform/network/FormDataBuilder.h77
-rw-r--r--src/3rdparty/webkit/WebCore/platform/network/HTTPHeaderMap.h40
-rw-r--r--src/3rdparty/webkit/WebCore/platform/network/HTTPParsers.cpp186
-rw-r--r--src/3rdparty/webkit/WebCore/platform/network/HTTPParsers.h42
-rw-r--r--src/3rdparty/webkit/WebCore/platform/network/NetworkStateNotifier.cpp49
-rw-r--r--src/3rdparty/webkit/WebCore/platform/network/NetworkStateNotifier.h100
-rw-r--r--src/3rdparty/webkit/WebCore/platform/network/ProtectionSpace.cpp119
-rw-r--r--src/3rdparty/webkit/WebCore/platform/network/ProtectionSpace.h79
-rw-r--r--src/3rdparty/webkit/WebCore/platform/network/ResourceErrorBase.cpp62
-rw-r--r--src/3rdparty/webkit/WebCore/platform/network/ResourceErrorBase.h88
-rw-r--r--src/3rdparty/webkit/WebCore/platform/network/ResourceHandle.cpp202
-rw-r--r--src/3rdparty/webkit/WebCore/platform/network/ResourceHandle.h195
-rw-r--r--src/3rdparty/webkit/WebCore/platform/network/ResourceHandleClient.h93
-rw-r--r--src/3rdparty/webkit/WebCore/platform/network/ResourceHandleInternal.h213
-rw-r--r--src/3rdparty/webkit/WebCore/platform/network/ResourceRequestBase.cpp287
-rw-r--r--src/3rdparty/webkit/WebCore/platform/network/ResourceRequestBase.h147
-rw-r--r--src/3rdparty/webkit/WebCore/platform/network/ResourceResponseBase.cpp380
-rw-r--r--src/3rdparty/webkit/WebCore/platform/network/ResourceResponseBase.h151
-rw-r--r--src/3rdparty/webkit/WebCore/platform/network/chromium/ResourceResponse.h83
-rw-r--r--src/3rdparty/webkit/WebCore/platform/network/qt/AuthenticationChallenge.h46
-rw-r--r--src/3rdparty/webkit/WebCore/platform/network/qt/QNetworkReplyHandler.cpp435
-rw-r--r--src/3rdparty/webkit/WebCore/platform/network/qt/QNetworkReplyHandler.h118
-rw-r--r--src/3rdparty/webkit/WebCore/platform/network/qt/ResourceError.h48
-rw-r--r--src/3rdparty/webkit/WebCore/platform/network/qt/ResourceHandleQt.cpp208
-rw-r--r--src/3rdparty/webkit/WebCore/platform/network/qt/ResourceRequest.h74
-rw-r--r--src/3rdparty/webkit/WebCore/platform/network/qt/ResourceRequestQt.cpp49
-rw-r--r--src/3rdparty/webkit/WebCore/platform/network/qt/ResourceResponse.h47
-rw-r--r--src/3rdparty/webkit/WebCore/platform/posix/FileSystemPOSIX.cpp168
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/ClipboardQt.cpp305
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/ClipboardQt.h87
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/ContextMenuItemQt.cpp117
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/ContextMenuQt.cpp82
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/CookieJarQt.cpp133
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/CursorQt.cpp372
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/DragDataQt.cpp142
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/DragImageQt.cpp63
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/EventLoopQt.cpp32
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/FileChooserQt.cpp55
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/FileSystemQt.cpp175
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/KURLQt.cpp102
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/KeyboardCodes.h561
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/Localizations.cpp357
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/LoggingQt.cpp90
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/MIMETypeRegistryQt.cpp85
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/MenuEventProxy.h54
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/PasteboardQt.cpp172
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/PlatformKeyboardEventQt.cpp527
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/PlatformMouseEventQt.cpp94
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/PlatformScreenQt.cpp78
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/PopupMenuQt.cpp122
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/QWebPopup.cpp85
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/QWebPopup.h49
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/RenderThemeQt.cpp958
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/RenderThemeQt.h180
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/ScreenQt.cpp99
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/ScrollViewQt.cpp62
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/ScrollbarQt.cpp98
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/ScrollbarThemeQt.cpp251
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/ScrollbarThemeQt.h55
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/SearchPopupMenuQt.cpp45
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/SharedBufferQt.cpp52
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/SharedTimerQt.cpp134
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/SoundQt.cpp43
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/SystemTimeQt.cpp46
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/TemporaryLinkStubs.cpp130
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/WheelEventQt.cpp63
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/WidgetQt.cpp112
-rw-r--r--src/3rdparty/webkit/WebCore/platform/sql/SQLValue.cpp56
-rw-r--r--src/3rdparty/webkit/WebCore/platform/sql/SQLValue.h58
-rw-r--r--src/3rdparty/webkit/WebCore/platform/sql/SQLiteAuthorizer.cpp39
-rw-r--r--src/3rdparty/webkit/WebCore/platform/sql/SQLiteDatabase.cpp353
-rw-r--r--src/3rdparty/webkit/WebCore/platform/sql/SQLiteDatabase.h130
-rw-r--r--src/3rdparty/webkit/WebCore/platform/sql/SQLiteStatement.cpp453
-rw-r--r--src/3rdparty/webkit/WebCore/platform/sql/SQLiteStatement.h102
-rw-r--r--src/3rdparty/webkit/WebCore/platform/sql/SQLiteTransaction.cpp80
-rw-r--r--src/3rdparty/webkit/WebCore/platform/sql/SQLiteTransaction.h56
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/AtomicString.cpp308
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/AtomicString.h159
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/AtomicStringHash.h64
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/AtomicStringImpl.h36
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/Base64.cpp184
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/Base64.h41
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/BidiContext.cpp38
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/BidiContext.h69
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/BidiResolver.h937
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/CString.cpp115
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/CString.h80
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/CharacterNames.h61
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/ParserUtilities.h54
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/PlatformString.h373
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/RegularExpression.cpp213
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/RegularExpression.h63
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/SegmentedString.cpp202
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/SegmentedString.h176
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/String.cpp845
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/StringBuffer.h77
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/StringBuilder.cpp97
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/StringBuilder.h57
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/StringHash.h248
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/StringImpl.cpp991
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/StringImpl.h290
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/TextBoundaries.h38
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/TextBoundariesICU.cpp76
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/TextBreakIterator.h48
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/TextBreakIteratorICU.cpp117
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/TextBreakIteratorInternalICU.h32
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/TextCodec.cpp58
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/TextCodec.h84
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/TextCodecICU.cpp473
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/TextCodecICU.h79
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/TextCodecLatin1.cpp199
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/TextCodecLatin1.h44
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/TextCodecUTF16.cpp140
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/TextCodecUTF16.h51
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/TextCodecUserDefined.cpp111
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/TextCodecUserDefined.h44
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/TextDecoder.cpp129
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/TextDecoder.h64
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/TextDirection.h35
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/TextEncoding.cpp239
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/TextEncoding.h78
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/TextEncodingRegistry.cpp262
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/TextEncodingRegistry.h53
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/TextStream.cpp114
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/TextStream.h59
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/UnicodeRange.cpp462
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/UnicodeRange.h120
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/cf/StringCF.cpp55
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/cf/StringImplCF.cpp37
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/mac/CharsetData.h37
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/mac/ShapeArabic.c555
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/mac/ShapeArabic.h44
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/mac/StringImplMac.mm33
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/mac/StringMac.mm41
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/mac/TextBoundaries.mm54
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/mac/TextBreakIteratorInternalICUMac.mm72
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/mac/TextCodecMac.cpp329
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/mac/TextCodecMac.h73
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/mac/character-sets.txt1868
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/mac/mac-encodings.txt45
-rwxr-xr-xsrc/3rdparty/webkit/WebCore/platform/text/mac/make-charset-table.pl225
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/qt/StringQt.cpp56
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/qt/TextBoundaries.cpp125
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/qt/TextBreakIteratorQt.cpp297
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/qt/TextCodecQt.cpp121
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/qt/TextCodecQt.h54
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/symbian/StringImplSymbian.cpp53
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/symbian/StringSymbian.cpp50
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/win/TextBreakIteratorInternalICUWin.cpp31
-rw-r--r--src/3rdparty/webkit/WebCore/platform/win/SystemTimeWin.cpp58
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/MimeType.cpp70
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/MimeType.h52
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/MimeType.idl32
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/MimeTypeArray.cpp95
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/MimeTypeArray.h56
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/MimeTypeArray.idl33
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/Plugin.cpp91
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/Plugin.h57
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/Plugin.idl36
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/PluginArray.cpp100
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/PluginArray.h58
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/PluginArray.idl34
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/PluginData.cpp63
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/PluginData.h74
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/PluginDatabase.cpp375
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/PluginDatabase.h84
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/PluginDebug.h57
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/PluginInfoStore.cpp103
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/PluginInfoStore.h48
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/PluginMainThreadScheduler.cpp116
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/PluginMainThreadScheduler.h86
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/PluginPackage.cpp240
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/PluginPackage.h118
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/PluginQuirkSet.h62
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/PluginStream.cpp476
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/PluginStream.h123
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/PluginView.cpp938
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/PluginView.h302
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/mac/PluginDataMac.mm76
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/mac/PluginPackageMac.cpp378
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/mac/PluginViewMac.cpp704
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/npapi.cpp177
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/npfunctions.h204
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/qt/PluginDataQt.cpp108
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/qt/PluginPackageQt.cpp200
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/qt/PluginViewQt.cpp488
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/win/PluginDataWin.cpp72
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/win/PluginDatabaseWin.cpp354
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/win/PluginMessageThrottlerWin.cpp123
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/win/PluginMessageThrottlerWin.h72
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/win/PluginPackageWin.cpp375
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/win/PluginViewWin.cpp841
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/AutoTableLayout.cpp785
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/AutoTableLayout.h87
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/CounterNode.cpp192
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/CounterNode.h81
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/EllipsisBox.cpp85
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/EllipsisBox.h53
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/FixedTableLayout.cpp309
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/FixedTableLayout.h49
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/GapRects.h62
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/HitTestRequest.h44
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/HitTestResult.cpp334
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/HitTestResult.h94
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/InlineBox.cpp258
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/InlineBox.h316
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/InlineFlowBox.cpp1064
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/InlineFlowBox.h171
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/InlineRunBox.h54
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/InlineTextBox.cpp909
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/InlineTextBox.h139
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/LayoutState.cpp114
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/LayoutState.h71
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/ListMarkerBox.cpp45
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/ListMarkerBox.h41
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/MediaControlElements.cpp254
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/MediaControlElements.h136
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/PointerEventsHitRules.cpp110
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/PointerEventsHitRules.h50
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderApplet.cpp98
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderApplet.h52
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderArena.cpp135
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderArena.h64
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderBR.cpp111
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderBR.h71
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderBlock.cpp4671
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderBlock.h504
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderBox.cpp2768
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderBox.h257
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderButton.cpp183
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderButton.h77
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderContainer.cpp701
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderContainer.h75
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderCounter.cpp306
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderCounter.h54
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderFieldset.cpp282
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderFieldset.h60
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderFileUploadControl.cpp298
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderFileUploadControl.h70
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderFlexibleBox.cpp1157
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderFlexibleBox.h66
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderFlow.cpp883
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderFlow.h146
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderForeignObject.cpp132
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderForeignObject.h61
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderFrame.cpp62
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderFrame.h50
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderFrameSet.cpp669
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderFrameSet.h122
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderHTMLCanvas.cpp74
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderHTMLCanvas.h52
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderImage.cpp577
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderImage.h107
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderImageGeneratedContent.cpp53
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderImageGeneratedContent.h64
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderInline.cpp399
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderInline.h84
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderLayer.cpp2609
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderLayer.h523
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderLegend.cpp36
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderLegend.h42
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderListBox.cpp649
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderListBox.h132
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderListItem.cpp335
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderListItem.h83
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderListMarker.cpp905
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderListMarker.h85
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderMarquee.cpp311
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderMarquee.h97
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderMedia.cpp424
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderMedia.h118
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderMenuList.cpp441
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderMenuList.h119
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderObject.cpp3303
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderObject.h991
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderPart.cpp116
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderPart.h62
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderPartObject.cpp317
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderPartObject.h47
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderPath.cpp484
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderPath.h95
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderReplaced.cpp416
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderReplaced.h87
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderReplica.cpp80
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderReplica.h53
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderSVGBlock.cpp63
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderSVGBlock.h41
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderSVGContainer.cpp438
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderSVGContainer.h122
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderSVGGradientStop.cpp72
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderSVGGradientStop.h59
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderSVGHiddenContainer.cpp116
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderSVGHiddenContainer.h67
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderSVGImage.cpp280
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderSVGImage.h75
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderSVGInline.cpp58
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderSVGInline.h41
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderSVGInlineText.cpp180
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderSVGInlineText.h59
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderSVGRoot.cpp347
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderSVGRoot.h82
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderSVGTSpan.cpp82
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderSVGTSpan.h41
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderSVGText.cpp242
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderSVGText.h71
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderSVGTextPath.cpp122
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderSVGTextPath.h55
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderSVGTransformableContainer.cpp47
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderSVGTransformableContainer.h39
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderSVGViewportContainer.cpp198
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderSVGViewportContainer.h64
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderScrollbar.cpp320
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderScrollbar.h83
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderScrollbarPart.cpp169
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderScrollbarPart.h67
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderScrollbarTheme.cpp140
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderScrollbarTheme.h82
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderSlider.cpp402
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderSlider.h73
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderTable.cpp1152
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderTable.h226
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderTableCell.cpp882
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderTableCell.h133
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderTableCol.cpp92
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderTableCol.h61
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderTableRow.cpp219
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderTableRow.h67
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderTableSection.cpp1080
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderTableSection.h154
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderText.cpp1216
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderText.h183
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderTextControl.cpp591
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderTextControl.h121
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderTextControlMultiLine.cpp157
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderTextControlMultiLine.h54
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderTextControlSingleLine.cpp759
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderTextControlSingleLine.h123
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderTextFragment.cpp87
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderTextFragment.h64
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderTheme.cpp776
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderTheme.h234
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderThemeMac.h177
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderThemeSafari.cpp1235
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderThemeSafari.h181
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderThemeWin.cpp852
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderThemeWin.h147
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderTreeAsText.cpp512
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderTreeAsText.h43
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderVideo.cpp239
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderVideo.h75
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderView.cpp611
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderView.h226
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderWidget.cpp278
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderWidget.h77
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderWordBreak.cpp49
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderWordBreak.h46
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RootInlineBox.cpp405
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RootInlineBox.h206
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/SVGCharacterLayoutInfo.cpp535
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/SVGCharacterLayoutInfo.h416
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/SVGInlineFlowBox.cpp53
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/SVGInlineFlowBox.h48
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/SVGInlineTextBox.cpp548
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/SVGInlineTextBox.h75
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/SVGRenderSupport.cpp167
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/SVGRenderSupport.h42
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/SVGRenderTreeAsText.cpp562
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/SVGRenderTreeAsText.h111
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/SVGRootInlineBox.cpp1718
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/SVGRootInlineBox.h99
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/TableLayout.h48
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/TextControlInnerElements.cpp178
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/TextControlInnerElements.h73
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/bidi.cpp2222
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/bidi.h67
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/break_lines.cpp120
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/break_lines.h41
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/BindingURI.cpp71
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/BindingURI.h59
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/BorderData.h109
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/BorderValue.h75
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/CollapsedBorderValue.h66
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/ContentData.cpp66
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/ContentData.h62
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/CounterContent.h62
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/CounterDirectives.cpp38
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/CounterDirectives.h54
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/CursorData.h56
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/CursorList.h59
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/DataRef.h71
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/FillLayer.cpp254
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/FillLayer.h161
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/KeyframeList.cpp88
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/KeyframeList.h90
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/NinePieceImage.cpp35
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/NinePieceImage.h70
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/OutlineValue.h56
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/RenderStyle.cpp844
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/RenderStyle.h1129
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/RenderStyleConstants.h268
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/SVGRenderStyle.cpp146
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/SVGRenderStyle.h215
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/SVGRenderStyleDefs.cpp218
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/SVGRenderStyleDefs.h292
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/ShadowData.cpp45
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/ShadowData.h71
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/StyleBackgroundData.cpp47
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/StyleBackgroundData.h59
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/StyleBoxData.cpp67
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/StyleBoxData.h67
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/StyleCachedImage.cpp92
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/StyleCachedImage.h67
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/StyleDashboardRegion.h61
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/StyleFlexibleBoxData.cpp59
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/StyleFlexibleBoxData.h60
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/StyleGeneratedImage.cpp65
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/StyleGeneratedImage.h69
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/StyleImage.h81
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/StyleInheritedData.cpp91
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/StyleInheritedData.h80
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/StyleMarqueeData.cpp54
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/StyleMarqueeData.h61
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/StyleMultiColData.cpp65
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/StyleMultiColData.h75
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/StyleRareInheritedData.cpp95
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/StyleRareInheritedData.h76
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/StyleRareNonInheritedData.cpp167
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/StyleRareNonInheritedData.h120
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/StyleReflection.h70
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/StyleSurroundData.cpp47
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/StyleSurroundData.h58
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/StyleTransformData.cpp49
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/StyleTransformData.h57
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/StyleVisualData.cpp53
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/style/StyleVisualData.h67
-rw-r--r--src/3rdparty/webkit/WebCore/storage/ChangeVersionWrapper.cpp77
-rw-r--r--src/3rdparty/webkit/WebCore/storage/ChangeVersionWrapper.h55
-rw-r--r--src/3rdparty/webkit/WebCore/storage/Database.cpp597
-rw-r--r--src/3rdparty/webkit/WebCore/storage/Database.h148
-rw-r--r--src/3rdparty/webkit/WebCore/storage/Database.idl37
-rw-r--r--src/3rdparty/webkit/WebCore/storage/DatabaseAuthorizer.cpp212
-rw-r--r--src/3rdparty/webkit/WebCore/storage/DatabaseAuthorizer.h105
-rw-r--r--src/3rdparty/webkit/WebCore/storage/DatabaseDetails.h67
-rw-r--r--src/3rdparty/webkit/WebCore/storage/DatabaseTask.cpp177
-rw-r--r--src/3rdparty/webkit/WebCore/storage/DatabaseTask.h151
-rw-r--r--src/3rdparty/webkit/WebCore/storage/DatabaseThread.cpp136
-rw-r--r--src/3rdparty/webkit/WebCore/storage/DatabaseThread.h74
-rw-r--r--src/3rdparty/webkit/WebCore/storage/DatabaseTracker.cpp830
-rw-r--r--src/3rdparty/webkit/WebCore/storage/DatabaseTracker.h133
-rw-r--r--src/3rdparty/webkit/WebCore/storage/DatabaseTrackerClient.h45
-rw-r--r--src/3rdparty/webkit/WebCore/storage/LocalStorage.cpp172
-rw-r--r--src/3rdparty/webkit/WebCore/storage/LocalStorage.h81
-rw-r--r--src/3rdparty/webkit/WebCore/storage/LocalStorageArea.cpp416
-rw-r--r--src/3rdparty/webkit/WebCore/storage/LocalStorageArea.h105
-rw-r--r--src/3rdparty/webkit/WebCore/storage/LocalStorageTask.cpp84
-rw-r--r--src/3rdparty/webkit/WebCore/storage/LocalStorageTask.h64
-rw-r--r--src/3rdparty/webkit/WebCore/storage/LocalStorageThread.cpp139
-rw-r--r--src/3rdparty/webkit/WebCore/storage/LocalStorageThread.h74
-rw-r--r--src/3rdparty/webkit/WebCore/storage/OriginQuotaManager.cpp123
-rw-r--r--src/3rdparty/webkit/WebCore/storage/OriginQuotaManager.h70
-rw-r--r--src/3rdparty/webkit/WebCore/storage/OriginUsageRecord.cpp104
-rw-r--r--src/3rdparty/webkit/WebCore/storage/OriginUsageRecord.h67
-rw-r--r--src/3rdparty/webkit/WebCore/storage/SQLError.h52
-rw-r--r--src/3rdparty/webkit/WebCore/storage/SQLError.idl35
-rw-r--r--src/3rdparty/webkit/WebCore/storage/SQLResultSet.cpp81
-rw-r--r--src/3rdparty/webkit/WebCore/storage/SQLResultSet.h63
-rw-r--r--src/3rdparty/webkit/WebCore/storage/SQLResultSet.idl38
-rw-r--r--src/3rdparty/webkit/WebCore/storage/SQLResultSetRowList.cpp44
-rw-r--r--src/3rdparty/webkit/WebCore/storage/SQLResultSetRowList.h58
-rw-r--r--src/3rdparty/webkit/WebCore/storage/SQLResultSetRowList.idl35
-rw-r--r--src/3rdparty/webkit/WebCore/storage/SQLStatement.cpp197
-rw-r--r--src/3rdparty/webkit/WebCore/storage/SQLStatement.h83
-rw-r--r--src/3rdparty/webkit/WebCore/storage/SQLStatementCallback.h48
-rw-r--r--src/3rdparty/webkit/WebCore/storage/SQLStatementCallback.idl35
-rw-r--r--src/3rdparty/webkit/WebCore/storage/SQLStatementErrorCallback.h49
-rw-r--r--src/3rdparty/webkit/WebCore/storage/SQLStatementErrorCallback.idl35
-rw-r--r--src/3rdparty/webkit/WebCore/storage/SQLTransaction.cpp550
-rw-r--r--src/3rdparty/webkit/WebCore/storage/SQLTransaction.h131
-rw-r--r--src/3rdparty/webkit/WebCore/storage/SQLTransaction.idl34
-rw-r--r--src/3rdparty/webkit/WebCore/storage/SQLTransactionCallback.h47
-rw-r--r--src/3rdparty/webkit/WebCore/storage/SQLTransactionCallback.idl35
-rw-r--r--src/3rdparty/webkit/WebCore/storage/SQLTransactionErrorCallback.h48
-rw-r--r--src/3rdparty/webkit/WebCore/storage/SQLTransactionErrorCallback.idl35
-rw-r--r--src/3rdparty/webkit/WebCore/storage/SessionStorage.cpp75
-rw-r--r--src/3rdparty/webkit/WebCore/storage/SessionStorage.h64
-rw-r--r--src/3rdparty/webkit/WebCore/storage/SessionStorageArea.cpp89
-rw-r--r--src/3rdparty/webkit/WebCore/storage/SessionStorageArea.h57
-rw-r--r--src/3rdparty/webkit/WebCore/storage/Storage.cpp106
-rw-r--r--src/3rdparty/webkit/WebCore/storage/Storage.h65
-rw-r--r--src/3rdparty/webkit/WebCore/storage/Storage.idl45
-rw-r--r--src/3rdparty/webkit/WebCore/storage/StorageArea.cpp125
-rw-r--r--src/3rdparty/webkit/WebCore/storage/StorageArea.h83
-rw-r--r--src/3rdparty/webkit/WebCore/storage/StorageEvent.cpp57
-rw-r--r--src/3rdparty/webkit/WebCore/storage/StorageEvent.h72
-rw-r--r--src/3rdparty/webkit/WebCore/storage/StorageEvent.idl42
-rw-r--r--src/3rdparty/webkit/WebCore/storage/StorageMap.cpp158
-rw-r--r--src/3rdparty/webkit/WebCore/storage/StorageMap.h65
-rw-r--r--src/3rdparty/webkit/WebCore/svg/ColorDistance.cpp94
-rw-r--r--src/3rdparty/webkit/WebCore/svg/ColorDistance.h53
-rw-r--r--src/3rdparty/webkit/WebCore/svg/ElementTimeControl.h48
-rw-r--r--src/3rdparty/webkit/WebCore/svg/ElementTimeControl.idl39
-rw-r--r--src/3rdparty/webkit/WebCore/svg/Filter.cpp39
-rw-r--r--src/3rdparty/webkit/WebCore/svg/Filter.h46
-rw-r--r--src/3rdparty/webkit/WebCore/svg/FilterBuilder.h51
-rw-r--r--src/3rdparty/webkit/WebCore/svg/FilterEffect.cpp42
-rw-r--r--src/3rdparty/webkit/WebCore/svg/FilterEffect.h48
-rw-r--r--src/3rdparty/webkit/WebCore/svg/GradientAttributes.h74
-rw-r--r--src/3rdparty/webkit/WebCore/svg/LinearGradientAttributes.h78
-rw-r--r--src/3rdparty/webkit/WebCore/svg/PatternAttributes.h103
-rw-r--r--src/3rdparty/webkit/WebCore/svg/RadialGradientAttributes.h85
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAElement.cpp213
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAElement.h73
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAElement.idl38
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAltGlyphElement.cpp89
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAltGlyphElement.h57
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAltGlyphElement.idl35
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAngle.cpp150
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAngle.h79
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAngle.idl45
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAnimateColorElement.cpp39
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAnimateColorElement.h43
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAnimateColorElement.idl31
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAnimateElement.cpp289
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAnimateElement.h73
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAnimateElement.idl32
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAnimateMotionElement.cpp245
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAnimateMotionElement.h79
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAnimateTransformElement.cpp207
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAnimateTransformElement.h69
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAnimateTransformElement.idl31
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAnimatedAngle.idl33
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAnimatedBoolean.idl34
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAnimatedEnumeration.idl34
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAnimatedInteger.idl34
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAnimatedLength.idl33
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAnimatedLengthList.idl33
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAnimatedNumber.idl35
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAnimatedNumberList.idl33
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAnimatedPathData.cpp42
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAnimatedPathData.h50
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAnimatedPathData.idl35
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAnimatedPoints.cpp42
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAnimatedPoints.h48
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAnimatedPoints.idl33
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAnimatedPreserveAspectRatio.idl33
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAnimatedProperty.h460
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAnimatedRect.idl33
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAnimatedString.idl34
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAnimatedTemplate.h258
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAnimatedTransformList.idl33
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAnimationElement.cpp534
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAnimationElement.h125
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAnimationElement.idl40
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGCircleElement.cpp99
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGCircleElement.h62
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGCircleElement.idl40
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGClipPathElement.cpp123
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGClipPathElement.h65
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGClipPathElement.idl39
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGColor.cpp119
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGColor.h93
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGColor.idl48
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGComponentTransferFunctionElement.cpp106
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGComponentTransferFunctionElement.h57
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGComponentTransferFunctionElement.idl46
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGCursorElement.cpp107
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGCursorElement.h66
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGCursorElement.idl36
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGDefinitionSrcElement.cpp45
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGDefinitionSrcElement.h39
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGDefinitionSrcElement.idl31
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGDefsElement.cpp56
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGDefsElement.h53
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGDefsElement.idl36
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGDescElement.cpp48
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGDescElement.h46
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGDescElement.idl33
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGDocument.cpp105
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGDocument.h66
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGDocument.idl34
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGDocumentExtensions.cpp137
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGDocumentExtensions.h131
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGElement.cpp298
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGElement.h145
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGElement.idl36
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGElementInstance.cpp577
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGElementInstance.h211
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGElementInstance.idl103
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGElementInstanceList.cpp62
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGElementInstanceList.h50
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGElementInstanceList.idl32
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGEllipseElement.cpp106
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGEllipseElement.h63
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGEllipseElement.idl40
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGException.h58
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGException.idl42
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGExternalResourcesRequired.cpp62
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGExternalResourcesRequired.h63
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGExternalResourcesRequired.idl33
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEBlendElement.cpp90
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEBlendElement.h55
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEBlendElement.idl43
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEColorMatrixElement.cpp96
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEColorMatrixElement.h53
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEColorMatrixElement.idl42
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEComponentTransferElement.cpp97
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEComponentTransferElement.h50
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEComponentTransferElement.idl33
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFECompositeElement.cpp106
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFECompositeElement.h56
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFECompositeElement.idl48
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEDiffuseLightingElement.cpp115
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEDiffuseLightingElement.h61
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEDiffuseLightingElement.idl37
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEDisplacementMapElement.cpp102
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEDisplacementMapElement.h53
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEDisplacementMapElement.idl44
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEDistantLightElement.cpp44
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEDistantLightElement.h40
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEDistantLightElement.idl33
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEFloodElement.cpp74
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEFloodElement.h49
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEFloodElement.idl32
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEFuncAElement.cpp43
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEFuncAElement.h41
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEFuncAElement.idl31
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEFuncBElement.cpp43
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEFuncBElement.h41
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEFuncBElement.idl31
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEFuncGElement.cpp43
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEFuncGElement.h41
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEFuncGElement.idl31
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEFuncRElement.cpp43
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEFuncRElement.h41
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEFuncRElement.idl31
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEGaussianBlurElement.cpp89
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEGaussianBlurElement.h57
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEGaussianBlurElement.idl37
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEImageElement.cpp115
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEImageElement.h66
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEImageElement.idl35
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFELightElement.cpp82
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFELightElement.h60
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEMergeElement.cpp71
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEMergeElement.h47
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEMergeElement.idl32
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEMergeNodeElement.cpp51
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEMergeNodeElement.h48
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEMergeNodeElement.idl32
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEOffsetElement.cpp79
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEOffsetElement.h52
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEOffsetElement.idl35
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEPointLightElement.cpp47
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEPointLightElement.h40
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFEPointLightElement.idl34
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFESpecularLightingElement.cpp115
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFESpecularLightingElement.h61
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFESpecularLightingElement.idl36
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFESpotLightElement.cpp54
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFESpotLightElement.h40
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFESpotLightElement.idl39
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFETileElement.cpp74
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFETileElement.h50
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFETileElement.idl33
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFETurbulenceElement.cpp96
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFETurbulenceElement.h64
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFETurbulenceElement.idl48
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFilterElement.cpp156
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFilterElement.h73
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFilterElement.idl47
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFilterPrimitiveStandardAttributes.cpp128
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFilterPrimitiveStandardAttributes.h64
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFilterPrimitiveStandardAttributes.idl37
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFitToViewBox.cpp121
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFitToViewBox.h57
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFitToViewBox.idl34
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFont.cpp595
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFontData.cpp45
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFontData.h65
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFontElement.cpp243
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFontElement.h66
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFontElement.idl31
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFontFaceElement.cpp368
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFontFaceElement.h73
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFontFaceElement.idl31
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFontFaceFormatElement.cpp55
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFontFaceFormatElement.h40
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFontFaceFormatElement.idl31
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFontFaceNameElement.cpp43
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFontFaceNameElement.h40
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFontFaceNameElement.idl31
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFontFaceSrcElement.cpp62
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFontFaceSrcElement.h42
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFontFaceSrcElement.idl31
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFontFaceUriElement.cpp61
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFontFaceUriElement.h42
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGFontFaceUriElement.idl31
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGForeignObjectElement.cpp167
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGForeignObjectElement.h64
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGForeignObjectElement.idl40
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGGElement.cpp85
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGGElement.h61
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGGElement.idl36
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGGlyphElement.cpp178
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGGlyphElement.h131
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGGlyphElement.idl31
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGGlyphMap.h109
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGGradientElement.cpp169
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGGradientElement.h74
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGGradientElement.idl44
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGHKernElement.cpp81
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGHKernElement.h66
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGHKernElement.idl27
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGImageElement.cpp166
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGImageElement.h79
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGImageElement.idl42
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGImageLoader.cpp65
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGImageLoader.h44
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGLangSpace.cpp88
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGLangSpace.h56
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGLangSpace.idl36
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGLength.cpp323
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGLength.h105
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGLength.idl52
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGLengthList.cpp80
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGLengthList.h48
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGLengthList.idl48
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGLineElement.cpp103
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGLineElement.h67
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGLineElement.idl40
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGLinearGradientElement.cpp177
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGLinearGradientElement.h58
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGLinearGradientElement.idl35
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGList.h256
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGListTraits.h53
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGLocatable.cpp159
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGLocatable.h64
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGLocatable.idl40
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGMPathElement.cpp58
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGMPathElement.h54
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGMarkerElement.cpp195
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGMarkerElement.h89
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGMarkerElement.idl55
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGMaskElement.cpp214
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGMaskElement.h73
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGMaskElement.idl42
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGMatrix.idl52
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGMetadataElement.cpp38
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGMetadataElement.h43
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGMetadataElement.idl29
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGMissingGlyphElement.cpp34
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGMissingGlyphElement.h39
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGMissingGlyphElement.idl31
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGNumber.idl32
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGNumberList.cpp75
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGNumberList.h50
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGNumberList.idl48
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPaint.cpp117
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPaint.h100
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPaint.idl52
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGParserUtilities.cpp873
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGParserUtilities.h71
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathElement.cpp242
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathElement.h115
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathElement.idl112
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSeg.h95
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSeg.idl56
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSegArc.cpp44
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSegArc.h104
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSegArcAbs.idl46
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSegArcRel.idl46
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSegClosePath.cpp43
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSegClosePath.h51
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSegClosePath.idl32
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSegCurvetoCubic.cpp44
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSegCurvetoCubic.h98
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSegCurvetoCubicAbs.idl44
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSegCurvetoCubicRel.idl44
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSegCurvetoCubicSmooth.cpp43
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSegCurvetoCubicSmooth.h85
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSegCurvetoCubicSmoothAbs.idl40
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSegCurvetoCubicSmoothRel.idl40
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSegCurvetoQuadratic.cpp44
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSegCurvetoQuadratic.h85
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSegCurvetoQuadraticAbs.idl40
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSegCurvetoQuadraticRel.idl40
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSegCurvetoQuadraticSmooth.cpp44
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSegCurvetoQuadraticSmooth.h59
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSegCurvetoQuadraticSmoothAbs.idl36
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSegCurvetoQuadraticSmoothRel.idl36
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSegLineto.cpp44
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSegLineto.h59
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSegLinetoAbs.idl36
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSegLinetoHorizontal.cpp44
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSegLinetoHorizontal.h72
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSegLinetoHorizontalAbs.idl34
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSegLinetoHorizontalRel.idl34
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSegLinetoRel.idl36
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSegLinetoVertical.cpp43
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSegLinetoVertical.h72
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSegLinetoVerticalAbs.idl34
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSegLinetoVerticalRel.idl34
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSegList.cpp260
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSegList.h51
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSegList.idl48
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSegMoveto.cpp43
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSegMoveto.h58
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSegMovetoAbs.idl36
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPathSegMovetoRel.idl36
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPatternElement.cpp322
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPatternElement.h85
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPatternElement.idl45
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPoint.idl36
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPointList.cpp60
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPointList.h49
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPointList.idl47
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPolyElement.cpp130
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPolyElement.h68
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPolygonElement.cpp61
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPolygonElement.h42
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPolygonElement.idl37
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPolylineElement.cpp60
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPolylineElement.h42
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPolylineElement.idl37
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPreserveAspectRatio.cpp261
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPreserveAspectRatio.h92
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGPreserveAspectRatio.idl52
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGRadialGradientElement.cpp210
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGRadialGradientElement.h59
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGRadialGradientElement.idl36
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGRect.idl38
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGRectElement.cpp126
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGRectElement.h65
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGRectElement.idl43
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGRenderingIntent.h51
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGRenderingIntent.idl38
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGSVGElement.cpp538
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGSVGElement.h167
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGSVGElement.idl88
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGScriptElement.cpp211
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGScriptElement.h80
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGScriptElement.idl35
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGSetElement.cpp37
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGSetElement.h43
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGSetElement.idl31
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGStopElement.cpp66
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGStopElement.h49
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGStopElement.idl33
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGStringList.cpp71
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGStringList.h47
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGStringList.idl47
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGStylable.cpp40
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGStylable.h48
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGStylable.idl37
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGStyleElement.cpp140
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGStyleElement.h70
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGStyleElement.idl40
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGStyledElement.cpp281
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGStyledElement.h80
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGStyledLocatableElement.cpp72
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGStyledLocatableElement.h53
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGStyledTransformableElement.cpp126
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGStyledTransformableElement.h75
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGSwitchElement.cpp66
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGSwitchElement.h61
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGSwitchElement.idl36
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGSymbolElement.cpp60
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGSymbolElement.h54
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGSymbolElement.idl35
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGTRefElement.cpp82
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGTRefElement.h53
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGTRefElement.idl32
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGTSpanElement.cpp64
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGTSpanElement.h43
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGTSpanElement.idl31
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGTests.cpp120
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGTests.h61
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGTests.idl37
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGTextContentElement.cpp530
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGTextContentElement.h80
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGTextContentElement.idl60
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGTextElement.cpp134
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGTextElement.h64
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGTextElement.idl32
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGTextPathElement.cpp107
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGTextPathElement.h81
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGTextPathElement.idl45
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGTextPositioningElement.cpp78
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGTextPositioningElement.h55
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGTextPositioningElement.idl36
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGTitleElement.cpp59
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGTitleElement.h50
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGTitleElement.idl33
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGTransform.cpp156
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGTransform.h99
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGTransform.idl48
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGTransformDistance.cpp278
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGTransformDistance.h58
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGTransformList.cpp97
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGTransformList.h56
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGTransformList.idl50
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGTransformable.cpp233
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGTransformable.h58
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGTransformable.idl33
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGURIReference.cpp70
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGURIReference.h54
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGURIReference.idl33
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGUnitTypes.h48
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGUnitTypes.idl35
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGUseElement.cpp880
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGUseElement.h112
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGUseElement.idl44
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGViewElement.cpp73
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGViewElement.h59
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGViewElement.idl35
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGViewSpec.cpp179
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGViewSpec.h67
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGViewSpec.idl38
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGZoomAndPan.cpp87
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGZoomAndPan.h60
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGZoomAndPan.idl39
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGZoomEvent.cpp84
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGZoomEvent.h68
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGZoomEvent.idl36
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SynchronizableTypeWrapper.h180
-rw-r--r--src/3rdparty/webkit/WebCore/svg/animation/SMILTime.cpp64
-rw-r--r--src/3rdparty/webkit/WebCore/svg/animation/SMILTime.h74
-rw-r--r--src/3rdparty/webkit/WebCore/svg/animation/SMILTimeContainer.cpp286
-rw-r--r--src/3rdparty/webkit/WebCore/svg/animation/SMILTimeContainer.h95
-rw-r--r--src/3rdparty/webkit/WebCore/svg/animation/SVGSMILElement.cpp930
-rw-r--r--src/3rdparty/webkit/WebCore/svg/animation/SVGSMILElement.h197
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/SVGImage.cpp257
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/SVGImage.h87
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/SVGPaintServer.cpp183
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/SVGPaintServer.h99
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/SVGPaintServerGradient.cpp310
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/SVGPaintServerGradient.h103
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/SVGPaintServerLinearGradient.cpp74
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/SVGPaintServerLinearGradient.h62
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/SVGPaintServerPattern.cpp101
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/SVGPaintServerPattern.h88
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/SVGPaintServerRadialGradient.cpp87
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/SVGPaintServerRadialGradient.h66
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/SVGPaintServerSolid.cpp104
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/SVGPaintServerSolid.h61
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/SVGResource.cpp185
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/SVGResource.h101
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/SVGResourceClipper.cpp139
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/SVGResourceClipper.h93
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/SVGResourceFilter.cpp123
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/SVGResourceFilter.h99
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/SVGResourceListener.h0
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/SVGResourceMarker.cpp140
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/SVGResourceMarker.h78
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/SVGResourceMasker.cpp71
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/SVGResourceMasker.h73
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGDistantLightSource.h53
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGFEConvolveMatrix.cpp177
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGFEConvolveMatrix.h95
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGFEDiffuseLighting.cpp135
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGFEDiffuseLighting.h78
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGFEDisplacementMap.cpp116
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGFEDisplacementMap.h72
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGFEFlood.cpp81
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGFEFlood.h56
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGFEGaussianBlur.cpp81
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGFEGaussianBlur.h56
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGFEImage.cpp84
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGFEImage.h58
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGFEMerge.cpp78
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGFEMerge.h53
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGFEMorphology.cpp107
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGFEMorphology.h65
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGFEOffset.cpp81
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGFEOffset.h56
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGFESpecularLighting.cpp147
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGFESpecularLighting.h81
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGFETile.cpp57
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGFETile.h48
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGFETurbulence.cpp145
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGFETurbulence.h79
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGFilterEffect.cpp133
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGFilterEffect.h99
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGLightSource.cpp65
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGLightSource.h58
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGPointLightSource.h51
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGSpotLightSource.h62
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/qt/RenderPathQt.cpp47
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/qt/SVGPaintServerPatternQt.cpp90
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/qt/SVGPaintServerQt.cpp72
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/qt/SVGResourceFilterQt.cpp50
-rw-r--r--src/3rdparty/webkit/WebCore/svg/graphics/qt/SVGResourceMaskerQt.cpp38
-rw-r--r--src/3rdparty/webkit/WebCore/svg/svgattrs.in253
-rw-r--r--src/3rdparty/webkit/WebCore/svg/svgtags.in116
-rw-r--r--src/3rdparty/webkit/WebCore/svg/xlinkattrs.in11
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLAElement.cpp178
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLAElement.h55
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLAccessElement.cpp70
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLAccessElement.h40
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLAnchorElement.cpp67
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLAnchorElement.h48
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLAttributeNames.in24
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLBRElement.cpp76
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLBRElement.h46
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLCardElement.cpp329
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLCardElement.h76
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLDoElement.cpp152
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLDoElement.h64
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLDocument.cpp96
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLDocument.h52
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLElement.cpp116
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLElement.h53
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLErrorHandling.cpp105
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLErrorHandling.h51
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLEventHandlingElement.cpp68
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLEventHandlingElement.h56
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLFieldSetElement.cpp86
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLFieldSetElement.h48
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLGoElement.cpp214
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLGoElement.h56
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLImageElement.cpp148
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLImageElement.h58
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLImageLoader.cpp82
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLImageLoader.h45
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLInsertedLegendElement.cpp46
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLInsertedLegendElement.h40
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLIntrinsicEvent.cpp53
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLIntrinsicEvent.h59
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLIntrinsicEventHandler.cpp55
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLIntrinsicEventHandler.h58
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLMetaElement.cpp64
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLMetaElement.h45
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLNoopElement.cpp63
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLNoopElement.h40
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLOnEventElement.cpp88
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLOnEventElement.h47
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLPElement.cpp112
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLPElement.h48
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLPageState.cpp132
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLPageState.h81
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLPostfieldElement.cpp78
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLPostfieldElement.h50
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLPrevElement.cpp64
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLPrevElement.h40
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLRefreshElement.cpp77
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLRefreshElement.h40
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLSetvarElement.cpp74
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLSetvarElement.h48
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLTableElement.cpp269
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLTableElement.h57
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLTagNames.in34
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLTaskElement.cpp95
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLTaskElement.h56
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLTemplateElement.cpp114
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLTemplateElement.h42
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLTimerElement.cpp141
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLTimerElement.h55
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLVariables.cpp288
-rw-r--r--src/3rdparty/webkit/WebCore/wml/WMLVariables.h46
-rw-r--r--src/3rdparty/webkit/WebCore/xml/DOMParser.cpp42
-rw-r--r--src/3rdparty/webkit/WebCore/xml/DOMParser.h41
-rw-r--r--src/3rdparty/webkit/WebCore/xml/DOMParser.idl24
-rw-r--r--src/3rdparty/webkit/WebCore/xml/NativeXPathNSResolver.cpp58
-rw-r--r--src/3rdparty/webkit/WebCore/xml/NativeXPathNSResolver.h53
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XMLHttpRequest.cpp1443
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XMLHttpRequest.h237
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XMLHttpRequest.idl99
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XMLHttpRequestException.h60
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XMLHttpRequestException.idl49
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XMLHttpRequestProgressEvent.h61
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XMLHttpRequestProgressEvent.idl36
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XMLHttpRequestUpload.cpp144
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XMLHttpRequestUpload.h110
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XMLHttpRequestUpload.idl54
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XMLSerializer.cpp47
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XMLSerializer.h44
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XMLSerializer.idl28
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XPathEvaluator.cpp77
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XPathEvaluator.h62
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XPathEvaluator.idl35
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XPathException.h64
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XPathException.idl50
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XPathExpression.cpp93
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XPathExpression.h66
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XPathExpression.idl34
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XPathExpressionNode.cpp57
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XPathExpressionNode.h85
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XPathFunctions.cpp683
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XPathFunctions.h62
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XPathGrammar.y554
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XPathNSResolver.cpp40
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XPathNSResolver.h51
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XPathNSResolver.idl27
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XPathNamespace.cpp85
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XPathNamespace.h66
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XPathNodeSet.cpp206
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XPathNodeSet.h82
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XPathParser.cpp636
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XPathParser.h131
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XPathPath.cpp201
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XPathPath.h93
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XPathPredicate.cpp284
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XPathPredicate.h111
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XPathResult.cpp245
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XPathResult.h94
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XPathResult.idl57
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XPathStep.cpp306
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XPathStep.h104
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XPathUtil.cpp96
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XPathUtil.h56
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XPathValue.cpp129
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XPathValue.h106
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XPathVariableReference.cpp55
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XPathVariableReference.h50
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XSLImportRule.cpp117
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XSLImportRule.h72
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XSLStyleSheet.cpp316
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XSLStyleSheet.h100
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XSLTExtensions.cpp88
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XSLTExtensions.h40
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XSLTProcessor.cpp461
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XSLTProcessor.h81
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XSLTProcessor.idl52
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XSLTUnicodeSort.cpp352
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XSLTUnicodeSort.h42
-rw-r--r--src/3rdparty/webkit/WebCore/xml/xmlattrs.in6
-rw-r--r--src/3rdparty/webkit/WebKit.pri95
-rw-r--r--src/3rdparty/webkit/WebKit/ChangeLog714
-rw-r--r--src/3rdparty/webkit/WebKit/LICENSE25
-rw-r--r--src/3rdparty/webkit/WebKit/StringsNotToBeLocalized.txt666
-rw-r--r--src/3rdparty/webkit/WebKit/qt/Api/headers.pri8
-rw-r--r--src/3rdparty/webkit/WebKit/qt/Api/qwebdatabase.cpp148
-rw-r--r--src/3rdparty/webkit/WebKit/qt/Api/qwebdatabase.h59
-rw-r--r--src/3rdparty/webkit/WebKit/qt/Api/qwebdatabase_p.h38
-rw-r--r--src/3rdparty/webkit/WebKit/qt/Api/qwebframe.cpp1311
-rw-r--r--src/3rdparty/webkit/WebKit/qt/Api/qwebframe.h204
-rw-r--r--src/3rdparty/webkit/WebKit/qt/Api/qwebframe_p.h116
-rw-r--r--src/3rdparty/webkit/WebKit/qt/Api/qwebhistory.cpp443
-rw-r--r--src/3rdparty/webkit/WebKit/qt/Api/qwebhistory.h107
-rw-r--r--src/3rdparty/webkit/WebKit/qt/Api/qwebhistory_p.h59
-rw-r--r--src/3rdparty/webkit/WebKit/qt/Api/qwebhistoryinterface.cpp118
-rw-r--r--src/3rdparty/webkit/WebKit/qt/Api/qwebhistoryinterface.h43
-rw-r--r--src/3rdparty/webkit/WebKit/qt/Api/qwebkitglobal.h62
-rw-r--r--src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp2757
-rw-r--r--src/3rdparty/webkit/WebKit/qt/Api/qwebpage.h334
-rw-r--r--src/3rdparty/webkit/WebKit/qt/Api/qwebpage_p.h173
-rw-r--r--src/3rdparty/webkit/WebKit/qt/Api/qwebpluginfactory.cpp216
-rw-r--r--src/3rdparty/webkit/WebKit/qt/Api/qwebpluginfactory.h74
-rw-r--r--src/3rdparty/webkit/WebKit/qt/Api/qwebsecurityorigin.cpp176
-rw-r--r--src/3rdparty/webkit/WebKit/qt/Api/qwebsecurityorigin.h67
-rw-r--r--src/3rdparty/webkit/WebKit/qt/Api/qwebsecurityorigin_p.h40
-rw-r--r--src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.cpp781
-rw-r--r--src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.h130
-rw-r--r--src/3rdparty/webkit/WebKit/qt/Api/qwebview.cpp962
-rw-r--r--src/3rdparty/webkit/WebKit/qt/Api/qwebview.h159
-rw-r--r--src/3rdparty/webkit/WebKit/qt/ChangeLog11466
-rw-r--r--src/3rdparty/webkit/WebKit/qt/Plugins/ICOHandler.cpp459
-rw-r--r--src/3rdparty/webkit/WebKit/qt/Plugins/ICOHandler.h52
-rw-r--r--src/3rdparty/webkit/WebKit/qt/Plugins/Plugins.pro14
-rw-r--r--src/3rdparty/webkit/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp431
-rw-r--r--src/3rdparty/webkit/WebKit/qt/WebCoreSupport/ChromeClientQt.h134
-rw-r--r--src/3rdparty/webkit/WebKit/qt/WebCoreSupport/ContextMenuClientQt.cpp81
-rw-r--r--src/3rdparty/webkit/WebKit/qt/WebCoreSupport/ContextMenuClientQt.h52
-rw-r--r--src/3rdparty/webkit/WebKit/qt/WebCoreSupport/DragClientQt.cpp80
-rw-r--r--src/3rdparty/webkit/WebKit/qt/WebCoreSupport/DragClientQt.h46
-rw-r--r--src/3rdparty/webkit/WebKit/qt/WebCoreSupport/EditCommandQt.cpp57
-rw-r--r--src/3rdparty/webkit/WebKit/qt/WebCoreSupport/EditCommandQt.h50
-rw-r--r--src/3rdparty/webkit/WebKit/qt/WebCoreSupport/EditorClientQt.cpp596
-rw-r--r--src/3rdparty/webkit/WebKit/qt/WebCoreSupport/EditorClientQt.h121
-rw-r--r--src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp1172
-rw-r--r--src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.h220
-rw-r--r--src/3rdparty/webkit/WebKit/qt/WebCoreSupport/InspectorClientQt.cpp206
-rw-r--r--src/3rdparty/webkit/WebKit/qt/WebCoreSupport/InspectorClientQt.h80
-rw-r--r--src/3rdparty/webkit/WebKit/qt/WebKit_pch.h83
-rw-r--r--src/3rdparty/webkit/WebKit/qt/tests/qwebframe/image.pngbin0 -> 14743 bytes
-rw-r--r--src/3rdparty/webkit/WebKit/qt/tests/qwebframe/qwebframe.pro7
-rw-r--r--src/3rdparty/webkit/WebKit/qt/tests/qwebframe/qwebframe.qrc5
-rw-r--r--src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp2355
-rw-r--r--src/3rdparty/webkit/WebKit/qt/tests/qwebhistoryinterface/qwebhistoryinterface.pro6
-rw-r--r--src/3rdparty/webkit/WebKit/qt/tests/qwebhistoryinterface/tst_qwebhistoryinterface.cpp94
-rw-r--r--src/3rdparty/webkit/WebKit/qt/tests/qwebpage/qwebpage.pro6
-rw-r--r--src/3rdparty/webkit/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp986
-rw-r--r--src/3rdparty/webkit/WebKit/qt/tests/tests.pro3
-rw-r--r--src/3rdparty/wintab/pktdef.h233
-rw-r--r--src/3rdparty/wintab/wintab.h864
-rw-r--r--src/3rdparty/xorg/wacomcfg.h138
-rw-r--r--src/3rdparty/zlib/ChangeLog855
-rw-r--r--src/3rdparty/zlib/FAQ339
-rw-r--r--src/3rdparty/zlib/INDEX51
-rw-r--r--src/3rdparty/zlib/Makefile154
-rw-r--r--src/3rdparty/zlib/Makefile.in154
-rw-r--r--src/3rdparty/zlib/README125
-rw-r--r--src/3rdparty/zlib/adler32.c149
-rw-r--r--src/3rdparty/zlib/algorithm.txt209
-rw-r--r--src/3rdparty/zlib/compress.c79
-rwxr-xr-xsrc/3rdparty/zlib/configure459
-rw-r--r--src/3rdparty/zlib/crc32.c423
-rw-r--r--src/3rdparty/zlib/crc32.h441
-rw-r--r--src/3rdparty/zlib/deflate.c1736
-rw-r--r--src/3rdparty/zlib/deflate.h331
-rw-r--r--src/3rdparty/zlib/example.c565
-rw-r--r--src/3rdparty/zlib/examples/README.examples42
-rw-r--r--src/3rdparty/zlib/examples/fitblk.c233
-rw-r--r--src/3rdparty/zlib/examples/gun.c693
-rw-r--r--src/3rdparty/zlib/examples/gzappend.c500
-rw-r--r--src/3rdparty/zlib/examples/gzjoin.c448
-rw-r--r--src/3rdparty/zlib/examples/gzlog.c413
-rw-r--r--src/3rdparty/zlib/examples/gzlog.h58
-rw-r--r--src/3rdparty/zlib/examples/zlib_how.html523
-rw-r--r--src/3rdparty/zlib/examples/zpipe.c191
-rw-r--r--src/3rdparty/zlib/examples/zran.c404
-rw-r--r--src/3rdparty/zlib/gzio.c1026
-rw-r--r--src/3rdparty/zlib/infback.c623
-rw-r--r--src/3rdparty/zlib/inffast.c318
-rw-r--r--src/3rdparty/zlib/inffast.h11
-rw-r--r--src/3rdparty/zlib/inffixed.h94
-rw-r--r--src/3rdparty/zlib/inflate.c1368
-rw-r--r--src/3rdparty/zlib/inflate.h115
-rw-r--r--src/3rdparty/zlib/inftrees.c329
-rw-r--r--src/3rdparty/zlib/inftrees.h55
-rw-r--r--src/3rdparty/zlib/make_vms.com461
-rw-r--r--src/3rdparty/zlib/minigzip.c322
-rw-r--r--src/3rdparty/zlib/projects/README.projects41
-rw-r--r--src/3rdparty/zlib/projects/visualc6/README.txt73
-rw-r--r--src/3rdparty/zlib/projects/visualc6/example.dsp278
-rw-r--r--src/3rdparty/zlib/projects/visualc6/minigzip.dsp278
-rw-r--r--src/3rdparty/zlib/projects/visualc6/zlib.dsp609
-rw-r--r--src/3rdparty/zlib/projects/visualc6/zlib.dsw59
-rw-r--r--src/3rdparty/zlib/trees.c1219
-rw-r--r--src/3rdparty/zlib/trees.h128
-rw-r--r--src/3rdparty/zlib/uncompr.c61
-rw-r--r--src/3rdparty/zlib/win32/DLL_FAQ.txt397
-rw-r--r--src/3rdparty/zlib/win32/Makefile.bor107
-rw-r--r--src/3rdparty/zlib/win32/Makefile.emx69
-rw-r--r--src/3rdparty/zlib/win32/Makefile.gcc141
-rw-r--r--src/3rdparty/zlib/win32/Makefile.msc126
-rw-r--r--src/3rdparty/zlib/win32/VisualC.txt3
-rw-r--r--src/3rdparty/zlib/win32/zlib.def60
-rw-r--r--src/3rdparty/zlib/win32/zlib1.rc39
-rw-r--r--src/3rdparty/zlib/zconf.h332
-rw-r--r--src/3rdparty/zlib/zconf.in.h332
-rw-r--r--src/3rdparty/zlib/zlib.3159
-rw-r--r--src/3rdparty/zlib/zlib.h1368
-rw-r--r--src/3rdparty/zlib/zutil.c318
-rw-r--r--src/3rdparty/zlib/zutil.h274
5985 files changed, 2084657 insertions, 0 deletions
diff --git a/src/3rdparty/.gitattributes b/src/3rdparty/.gitattributes
new file mode 100644
index 0000000..8cb308a
--- /dev/null
+++ b/src/3rdparty/.gitattributes
@@ -0,0 +1,19 @@
+libpng/projects/cbuilder5/libpng.bpf -crlf
+libpng/projects/cbuilder5/libpng.bpg -crlf
+libpng/projects/cbuilder5/libpng.bpr -crlf
+libpng/projects/cbuilder5/libpng.cpp -crlf
+libpng/projects/cbuilder5/libpngstat.bpf -crlf
+libpng/projects/cbuilder5/libpngstat.bpr -crlf
+libpng/projects/visualc6/libpng.dsp -crlf
+libpng/projects/visualc6/libpng.dsw -crlf
+libpng/projects/visualc6/pngtest.dsp -crlf
+libpng/projects/visualc71/libpng.sln -crlf
+libpng/projects/visualc71/libpng.vcproj -crlf
+libpng/projects/visualc71/pngtest.vcproj -crlf
+libpng/projects/visualc71/zlib.vcproj -crlf
+libtiff/nmake.opt -crlf
+zlib/projects/visualc6/example.dsp -crlf
+zlib/projects/visualc6/minigzip.dsp -crlf
+zlib/projects/visualc6/README.txt -crlf
+zlib/projects/visualc6/zlib.dsp -crlf
+zlib/projects/visualc6/zlib.dsw -crlf
diff --git a/src/3rdparty/Makefile b/src/3rdparty/Makefile
new file mode 100644
index 0000000..c8c9ed1
--- /dev/null
+++ b/src/3rdparty/Makefile
@@ -0,0 +1,9 @@
+PNGMAK=scripts/makefile.linux
+
+all:
+ cd zlib; ./configure; make
+ cd libpng; make -f $(PNGMAK)
+
+clean:
+ -cd zlib; make clean
+ -cd libpng; make -f $(PNGMAK) clean
diff --git a/src/3rdparty/README b/src/3rdparty/README
new file mode 100644
index 0000000..2be1036
--- /dev/null
+++ b/src/3rdparty/README
@@ -0,0 +1,22 @@
+The libraries included here are the original packages, unpacked, and
+with their version number removed from the directory name (for version
+information, see the README files in the directories). The following
+have been removed:
+
+ libjpeg - some source files, images, Makefiles, manual pages
+ libpng/contrib - a collection of examples and test-suite
+ libmng/bcb - a collection of files for the Borland compiler
+ libmng/contrib - a collection of projects that use libmng
+ libmng/special - configuration file for Mozilla integration
+ libtiff/contrib - a collection of additions to libtiff
+ libtiff/man - manual pages
+ libtiff/tools - a collection of command-line tools based on libtiff
+ zlib/contrib - a collection of non-zlib code
+ zlib/amiga - zlib for a platform not supported by Qt
+ zlib/as400 - zlib for a platform not supported by Qt
+ zlib/msdos - zlib for a platform not supported by Qt
+ zlib/old - zlib for a platform not supported by Qt
+ zlib/qnx - zlib packaging
+
+Some patches are applied from time to time. Recent patches can be
+found in the patches subdirectory.
diff --git a/src/3rdparty/clucene/APACHE.license b/src/3rdparty/clucene/APACHE.license
new file mode 100644
index 0000000..261eeb9
--- /dev/null
+++ b/src/3rdparty/clucene/APACHE.license
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/src/3rdparty/clucene/AUTHORS b/src/3rdparty/clucene/AUTHORS
new file mode 100644
index 0000000..4a7904b
--- /dev/null
+++ b/src/3rdparty/clucene/AUTHORS
@@ -0,0 +1,22 @@
+As with most development projects, contributions come from many people and in
+many forms. The CLucene project would like to thank it's many contributors.
+Omissions are merely accidental, please e-mail ustramooner@users.sourceforge.net
+if you have been left out or a contribution is not mentioned.
+
+CLucene was originally ported to C++ by Ben van Klinken (ustramooner@users.sourceforge.net)
+from Doug Cutting's popular java search engine, Lucene (see http://lucene.apache.org).
+
+Here is a list of contributors. Please send me an email at ustramooner@users.sourceforge.net
+if I have left you out.
+
+Doug Cutting cutting@users.sourceforge.net
+John Wheeler j_wheeler@users.sourceforge.net
+Robert G. Ristroph rgristroph@users.sourceforge.net
+David Rushby woodsplitter@users.sourceforge.net
+Jimmy Pritts jpritts@sdf.lonestar.org
+Peter Edwards peter@dragonstaff.co.uk
+Jorge Sabater Redondo jsabater@elderecho.com
+Daniel Glassey danglassey@ntlworld.com
+Peter Gladkikh batyi@mail.ru
+Pedja amigo@max3d.com
+Peter Hodges hodges.peter@gmail.com
diff --git a/src/3rdparty/clucene/COPYING b/src/3rdparty/clucene/COPYING
new file mode 100644
index 0000000..0e32bb4
--- /dev/null
+++ b/src/3rdparty/clucene/COPYING
@@ -0,0 +1,30 @@
+License
+
+The CLucene Core Library uses a dual license strategy for the source code.
+These licenses are the GNU Lesser General Public License (LGPL) and the Apache
+License (Version 2.0). Users can choose the license they wish to distribute
+their software under. This means that you do not need to abide by *both*
+licenses, but rather than you can choose the license which most suits your
+needs.
+
+To rephrase this and to make it perfectly clear:
+CLucene is distributed under the GNU Lesser General Public License (LGPL)
+ *or*
+the Apache License, Version 2.0
+
+However, we are an open source project, and we encourage users to use the LGPL
+license and participate fully in the free software community. Dual licensing
+of the CLucene source code provides open and free access to the technology both
+for the GPL community and for other developers or companies that cannot use the
+GPL.
+
+You can freely modify, extend, and improve the CLucene source code. The only
+question is whether or not you must provide the source code and contribute
+modifications to the community. The GNU and Apache licenses allow different
+ranges of flexibility in this regard, but in the end, regardless of the license
+used, we highly recommend that you submit any bugs, incompatibilities or
+added features.
+
+Note that this same license does *not* apply to the CLucene Contributions
+package. You should read the COPYING file in that directory or package for
+more information. \ No newline at end of file
diff --git a/src/3rdparty/clucene/ChangeLog b/src/3rdparty/clucene/ChangeLog
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/3rdparty/clucene/ChangeLog
diff --git a/src/3rdparty/clucene/LGPL.license b/src/3rdparty/clucene/LGPL.license
new file mode 100644
index 0000000..422c760
--- /dev/null
+++ b/src/3rdparty/clucene/LGPL.license
@@ -0,0 +1,475 @@
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+-------------------------------------------------------------------------------
+
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+-------------------------------------------------------------------------------
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+-------------------------------------------------------------------------------
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+-------------------------------------------------------------------------------
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+-------------------------------------------------------------------------------
+
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+-------------------------------------------------------------------------------
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+-------------------------------------------------------------------------------
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+-------------------------------------------------------------------------------
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
diff --git a/src/3rdparty/clucene/README b/src/3rdparty/clucene/README
new file mode 100644
index 0000000..ee4f493
--- /dev/null
+++ b/src/3rdparty/clucene/README
@@ -0,0 +1,92 @@
+CLucene README
+==============
+
+------------------------------------------------------
+CLucene is a C++ port of Lucene.
+It is a high-performance, full-featured text search
+engine written in C++. CLucene is faster than lucene
+as it is written in C++.
+------------------------------------------------------
+
+CLucene has contributions from many, see AUTHORS
+
+CLucene is distributed under the GNU Lesser General Public License (LGPL)
+ *or*
+the Apache License, Version 2.0
+See the LGPL.license and APACHE.license for the respective license information.
+Read COPYING for more about the license.
+
+Installation
+------------
+* For Linux, MacOSX, cygwin and MinGW build information, read INSTALL.
+* Boost.Jam files are provided in the root directory and subdirectories.
+* Microsoft Visual Studio (6&7) are provided in the win32 folder.
+
+Mailing List
+------------
+Questions and discussion should be directed to the CLucene mailing list
+ at clucene-developers@lists.sourceforge.net
+Find subscription instructions at
+ http://lists.sourceforge.net/lists/listinfo/clucene-developers
+Suggestions and bug reports can be made on our bug tracking database
+ (http://sourceforge.net/tracker/?group_id=80013&atid=558446)
+
+The latest version
+------------------
+Details of the latest version can be found on the CLucene sourceforge project
+web site: http://www.sourceforge.net/projects/clucene
+
+Documentation
+-------------
+Documentation is provided at http://clucene.sourceforge.net/doc/doxygen/html/
+You can also build your own documentation by running doxygen from the root directory
+of clucene.
+CLucene is a very close port of Java Lucene, so you can also try looking at the
+Java Docs on http://lucene.apache.org/java/
+
+
+Performance
+-----------
+Very little benchmarking has been done on clucene. Andi Vajda posted some
+limited statistics on the clucene list a while ago with the following results.
+
+There are 250 HTML files under $JAVA_HOME/docs/api/java/util for about
+6108kb of HTML text.
+org.apache.lucene.demo.IndexFiles with java and gcj:
+on mac os x 10.3.1 (panther) powerbook g4 1ghz 1gb:
+ . running with java 1.4.1_01-99 : 20379 ms
+ . running with gcj 3.3.2 -O2 : 17842 ms
+ . running clucene 0.8.9's demo : 9930 ms
+
+I recently did some more tests and came up with these rough tests:
+663mb (797 files) of Guttenberg texts
+on a Pentium 4 running Windows XP with 1 GB of RAM. Indexing max 100,000 fields
+• Jlucene: 646453ms. peak mem usage ~72mb, avg ~14mb ram
+• Clucene: 232141. peak mem usage ~60, avg ~4mb ram
+
+Searching indexing using 10,000 single word queries
+• Jlucene: ~60078ms and used ~13mb ram
+• Clucene: ~48359ms and used ~4.2mb ram
+
+Platform notes
+--------------
+
+'Too many open files'
+Some platforms don't provide enough file handles to run CLucene properly.
+To solve this, increase the open file limit:
+
+On Solaris:
+ulimit -n 1024
+set rlim_fd_cur=1024
+
+Acknowledgments
+----------------
+
+The Apache Lucene project is the basis for this software, so the biggest
+acknoledgment goes to that project.
+
+We wish to acknowledge the following copyrighted works that
+make up portions of the CLucene software:
+
+CLucene relies heavily on the use of autoconf and libtool to provide
+a build environment.
diff --git a/src/3rdparty/clucene/src/CLucene.h b/src/3rdparty/clucene/src/CLucene.h
new file mode 100644
index 0000000..1eac800
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene.h
@@ -0,0 +1,38 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+//Includes some standard headers for searching and indexing.
+#ifndef _lucene_CLucene_
+#define _lucene_CLucene_
+
+#include "CLucene/StdHeader.h"
+#include "CLucene/debug/condition.h"
+#include "CLucene/debug/mem.h"
+#include "CLucene/index/IndexReader.h"
+#include "CLucene/index/IndexWriter.h"
+#include "CLucene/index/MultiReader.h"
+#include "CLucene/index/Term.h"
+#include "CLucene/search/IndexSearcher.h"
+#include "CLucene/search/MultiSearcher.h"
+#include "CLucene/search/DateFilter.h"
+#include "CLucene/search/WildcardQuery.h"
+#include "CLucene/search/FuzzyQuery.h"
+#include "CLucene/search/PhraseQuery.h"
+#include "CLucene/search/PrefixQuery.h"
+#include "CLucene/search/RangeQuery.h"
+#include "CLucene/search/BooleanQuery.h"
+#include "CLucene/document/Document.h"
+#include "CLucene/document/Field.h"
+#include "CLucene/document/DateField.h"
+#include "CLucene/store/Directory.h"
+#include "CLucene/store/FSDirectory.h"
+#include "CLucene/queryParser/QueryParser.h"
+#include "CLucene/queryParser/MultiFieldQueryParser.h"
+#include "CLucene/analysis/standard/StandardAnalyzer.h"
+#include "CLucene/analysis/Analyzers.h"
+#include "CLucene/util/Reader.h"
+
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/CLBackwards.h b/src/3rdparty/clucene/src/CLucene/CLBackwards.h
new file mode 100644
index 0000000..ffaf428
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/CLBackwards.h
@@ -0,0 +1,87 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _clucene_backwards_h
+#define _clucene_backwards_h
+
+//In light of the recent major changes to clucene,
+//this file should help to maintain some backwards compatibility
+//include it after including StdHeader.h
+//
+//Note: I haven't tested this much, so please send me your changes
+
+//dirent is one of the most major changes that won't easily port.
+//you can use the TCHAR copying macros, STRCPY_TtoA and STRCPY_AtoT
+//to copy between different character types.
+
+//If you use stringPrintF, you will need to add the target string
+//size parameter, because it is using _sntprintf... Change this if you
+//want, but _sntprintf is much safer
+
+#define char_t TCHAR
+#define uchar_t TCHAR
+#define l_byte_t byte_t
+
+//#define stringSpn _tcsspn //not used in clucene anymore
+#define stringCSpn _tcscspn
+#define stringLength _tcslen
+//#define stringToInteger _ttoi //not used in clucene anymore, use integer w/ base
+#define stringFind _tcsstr
+#define stringFindChar _tcschr
+#define stringCompare _tcscmp
+#define stringNCopy _tcsncpy
+#define stringCopy _tcscpy
+#define stringCat _tcscat
+//#define stringToken _tcstok //not used in clucene anymore
+#define stringPrintF _sntprintf //you will have errors, because now we used printf w/ bufferlen count
+#define printFormatted _tprintf
+
+//conversion functions
+#define integerToString _i64tot
+#define stringToIntegerBase _tcstoi64
+#define stringToFloat _tcstod
+
+//file find structures
+#define Cmd_Stat fileStat
+#define Struct_Stat fileStat
+#define stringICompare _tcsicmp
+#define stringNCompare _tcsncmp
+#define stringDifference _tcscmp
+
+//character conversion functions
+#define isSpace _istspace
+#define isDigit _istwdigit
+#define isAlNum _istwalnum
+#define toLower _totlower
+#define stringUpper _tcsupr
+//#define stringLower _tcslwr //not used in clucene anymore
+
+#define _THROWX(y) _THROWT(y)
+#define _THROWC(y) _THROWA(y)
+
+//file naming stuff - remember we have changed all names to file naming lower case
+#define fileRename _rename
+#define fileFullName(abs,rel) _realpath(rel,abs)
+#define makeDirectory _tmkdir
+#define unlinkFile _unlink
+
+//no longer supported definitions
+#ifdef _UNICODE
+ #define TO_CHAR_T STRDUP_AtoT
+ #define _cout wcout
+ #define _cin wcin
+ #define _cerr wcerr
+#else
+ #define TO_CHAR_T STRDUP_WtoT
+ #define _cout cout
+ #define _cin cin
+ #define _cerr cerr
+#endif
+
+//some headers that used to be automatically included:
+#include "CLucene/util/dirent.h" //if we have dirent, then the native one will be used
+
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/CLConfig.h b/src/3rdparty/clucene/src/CLucene/CLConfig.h
new file mode 100644
index 0000000..c63c083
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/CLConfig.h
@@ -0,0 +1,304 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_Config_
+#define _lucene_Config_
+
+
+////////////////////////////////////////////////////////////////////
+// this settings should be set up in the compiler,
+// but are put here for reference as to what could be defined
+////////////////////////////////////////////////////////////////////
+//
+//define this if you want debugging code to be enabled
+//#define _DEBUG
+//
+//define this if you want condition debugging to be enabled
+#if defined(_DEBUG) && !defined(_CL__CND_DEBUG)
+ #define _CL__CND_DEBUG
+#endif
+//
+//define this to print out lots of information about merges, etc
+//requires __CL__CND_DEBUG to be defined
+//#define _CL_DEBUG_INFO stdout
+//
+//to disable namespaces define this
+//#define DISABLE_NAMESPACE
+//
+//This is mostly for windows. If you have put the google sparse
+//map code in your include path somewhere, then define this
+//to use it.
+//However, for msvc, there are no significant gains since there
+//is already a compatible hashmap available.
+//#define _CL_HAVE_GOOGLE_DENSE_HASH_MAP
+//
+////////////////////////////////////////////////////////////////////
+
+////////////////////////////////////////////////////////////////////
+// These options can be set depending on the particular needs of
+// Your application
+////////////////////////////////////////////////////////////////////
+//
+//define this to force the build into ascii mode
+//#define _ASCII
+//
+//define this to force the build into ucs2 mode
+//#define _UCS2
+//
+//if a wide character is being converted to a ascii character and it
+//cannot fit, this character is used instead. Required.
+#define LUCENE_OOR_CHAR(c) ((char)(((unsigned short)c)&0xFF))
+//
+//define if you would like to force clucene to use the internal
+//character functions.
+//Tests may display unpredictable behaviour if this is not defined.
+#define LUCENE_USE_INTERNAL_CHAR_FUNCTIONS
+//
+//define this to enable mmap support in the fsdirectory IndexInput
+//todo: only available for windows so far...need to add MMapInput.cpp to project
+//EXPERIMENTAL
+//#define LUCENE_FS_MMAP
+//
+//LOCK_DIR implementation:
+//define this to set an exact directory for the lock dir (not recommended)
+//all other methods of getting the temporary directory will be ignored
+//#define LUCENE_LOCK_DIR "/tmp"
+//
+//define this to try and load the lock dir from this specified environment variable
+#define LUCENE_LOCK_DIR_ENV_1 "TEMP"
+//define this if you want to have look up this environment variable if the first one fails
+#define LUCENE_LOCK_DIR_ENV_2 "TMP"
+//define this if you want to have a fallback directory, if not defined then
+//the lockdirectory will be the index directory
+#define LUCENE_LOCK_DIR_ENV_FALLBACK "/tmp"
+//
+////////////////////////////////////////////////////////////////////
+
+
+
+////////////////////////////////////////////////////////////////////
+// The following are search query options
+// THe NO_* options can make CLucene faster and/or smaller
+// special queries sometime require longer search times or may
+// not be required
+////////////////////////////////////////////////////////////////////
+//
+//Define this to remove fuzzy query and sloppy scoring
+//#define NO_FUZZY_QUERY
+//
+//Define to remove wildcard t*m or te?m to match term
+//#define NO_WILDCARD_QUERY
+//
+//Define to remove prefix term query - ter* to match term or terms
+//#define NO_PREFIX_QUERY
+//
+//Define to remove range (exlusive and inclusive)
+//#define NO_RANGE_QUERY
+//
+//This must always be defined. They can be adjusted if required. But
+//general Wildcard string would be '*' and Wildcard Char would be '?'
+//Both are Required.
+#define LUCENE_WILDCARDTERMENUM_WILDCARD_STRING '*'
+#define LUCENE_WILDCARDTERMENUM_WILDCARD_CHAR '?'
+//
+////////////////////////////////////////////////////////////////////
+
+////////////////////////////////////////////////////////////////////
+// memory handling configurations
+////////////////////////////////////////////////////////////////////
+//
+//If this is defined, lucene's configurations are changed
+//to use less memory, but may run slower.
+//todo: i dont think this actualy changes speed much, just memory
+#define LUCENE_OPTIMIZE_FOR_MEMORY
+//
+//define this if you want the pointer tracking to be enabled
+//this is a useful tool for memory leak tracking
+//The LuceneBase can slow down the code a *lot*
+#if defined(_DEBUG)
+ #if !defined(LUCENE_DISABLE_MEMTRACKING) && !defined(LUCENE_ENABLE_MEMLEAKTRACKING)
+ #define LUCENE_ENABLE_MEMLEAKTRACKING
+ #endif
+#endif
+//
+//enable use of rich file/line tracking. use CL_FILELINE to pass
+//to functions like stringDuplicate (or use CL_STRDUP* functions instead) and
+//CLStringIntern::x.
+#if defined(LUCENE_ENABLE_MEMLEAKTRACKING)
+ #define LUCENE_ENABLE_FILELINEINFO
+#endif
+//
+//enable creation of clucene.log file. Logs every
+//call to new operator. Must have LUCENE_ENABLE_MEMLEAKTRACKING enabled.
+//writes log in this format.
+//action,file name,file line,allocation size
+//logging can be disabled by setting _lucene_disable_debuglogging to true
+#if defined(LUCENE_ENABLE_MEMLEAKTRACKING) && defined(_DEBUG)
+//#define LUCENE_ENABLE_CONSTRUCTOR_LOG
+#endif
+//
+//
+//enable this if you want to enable reference counting. This is
+//not necessary or useful in most cases except when implementing wrappers
+//which have reference counting. If the wrapper wraps a StringReader,
+//for example, it should expect that the wrapped StringReader should not
+//be deleted. However, when the stringreader is added into a Field,
+//the Field usually takes over the stringReader and deletes it on completion.
+//If reference counting is enabled, the wrapper can add a reference to any class
+//and when _CLDECDELETE is called, the reference is decremented and only deleted
+//if the refcount is zero.
+#define LUCENE_ENABLE_REFCOUNT
+
+
+////////////////////////////////////////////////////////////////////
+// These options allow you to remove certain implementations
+// out of clucene so that they can be implemented in the client
+// application
+////////////////////////////////////////////////////////////////////
+//
+//define this to your own setting if you would like to implement your own
+//threading locking code. it should have the same sort of functions as
+//mutex_default. If not defined, clucene will try and use posix,win32 critical
+//sections, or a timer based mutex hack.
+//#define _LUCENE_THREADMUTEX CL_NS(util)::mutex_default
+//
+//define this if you want to implement the _Cnd_OutDebug routine yourself
+//you can then easily customise in your own application how to handle debug messages
+//#define _CND_DEBUG_DONTIMPLEMENT_OUTDEBUG
+//
+//define this if you want to implement your own namespace macros
+//#define _LUCENE_DONTIMPLEMENT_NS_MACROS
+//
+//define this if you do not want clucene to include any standard libraries.
+//this could be useful if you want to use alternate libraries
+//#define LUCENE_DISABLE_INCLUDES
+//
+////////////////////////////////////////////////////////////////////
+
+
+////////////////////////////////////////////////////////////////////
+// These options will be changed depending on your compiler/platform
+// but can also be changed here if required
+////////////////////////////////////////////////////////////////////
+//
+//define this if multi-threading support is not required
+//if not defined, multi-thread locking will
+//occur (and its related processing overhead)
+//note: it is recommended to disable multithreading if you do not need it
+//there is a lot of overhead that can be avoided.
+//#define _CL_DISABLE_MULTITHREADING
+//
+//if you want to define your own default file encoding. specify it
+//here - normally defined in the platform specific headers
+//#define PLATFORM_DEFAULT_READER_ENCODING CL_NS(util)::FileReader::ENCODING_ASCII
+//
+//disable hash implementations (if available)
+//#define LUCENE_DISABLE_HASHING
+////////////////////////////////////////////////////////////////////
+
+
+
+////////////////////////////////////////////////////////////////////
+// These options should not be changed. But you can experiment with
+// them to optimize performance
+////////////////////////////////////////////////////////////////////
+//
+//some defaults, wouldn't usually need to be changed
+//Buffer size for input/output streams. Required.
+#define LUCENE_STREAM_BUFFER_SIZE 1024
+//
+// DSR:2004.08.19:
+// Formerly, StringBuffer used 1024 as the default size of its internal buffer.
+// However, StringBuffer is used primarily for token- and term-oriented
+// processing, e.g. in StandardTokenizer. I've calculated that the average
+// token (as produced by StandardTokenizer) in all .txt files distributed in
+// the Project Gutenberg CD Image (August 2003 release) has only 6 characters.
+// Although most languages are likely to have a longer average word length than
+// English due to the popularity of "non-atomized" conjugation and declension
+// mechanisms, 1024 is still vastly excessive.
+// I made two changes intended to deliver better overall performance:
+// a) Switched to a default StringBuffer character capacity of 32. Though 32
+// is longer than the average token, the high cost of realloc makes a
+// slightly liberal default size optimal. I chose the default size of 32
+// after fairly extensive experimentation on the Gutenberg e-texts. The
+// results are summarized in the following table:
+// ------------------------------------------------------------------------
+// LUCENE_DEFAULT_TOKEN_BUFFER_SIZE value | % faster than default size 1024
+// ------------------------------------------------------------------------
+// 8 : 4%
+// 16 : 7%
+// 32 : 6%
+// 64 : 3%
+// A default size of 32 is actually slightly slower than 16, but I was
+// experimenting on English text; I expect that 32 will maintain decent
+// performance in languages such as German, and in technical documents
+// with long tokens.
+//
+// b) To offset the switch to a smaller default buffer size, I implemented a
+// more aggressive growth strategy. A StringBuffer now [at least] doubles
+// the size of its internal buffer every time it needs to grow, rather
+// than [at least] increasing by LUCENE_DEFAULT_TOKEN_BUFFER_SIZE no
+// matter how many times it has already grown.
+//Required.
+#define LUCENE_DEFAULT_TOKEN_BUFFER_SIZE 32
+//todo: should implement a similar strategy in analysis/token
+//
+//Expert: The fraction of {@link TermDocs} entries stored in skip tables,
+//used to accellerate {@link TermDocs#skipTo(int)}. Larger values result in
+//smaller indices, greater acceleration, but fewer accelerable cases, while
+//smaller values result in bigger indices, less acceleration and more
+//accelerable cases. More detailed experiments would be useful here. */
+#define LUCENE_DEFAULT_TERMDOCS_SKIP_INTERVAL 16
+//
+//Size of TermScore cache. Required.
+#define LUCENE_SCORE_CACHE_SIZE 32
+//
+//analysis options
+//maximum length that the CharTokenizer uses. Required.
+//By adjusting this value, you can greatly improve the performance of searching
+//and especially indexing. Default is 255, but smaller numbers will decrease
+//the amount of memory used as well as increasing the speed.
+#define LUCENE_MAX_WORD_LEN 255
+//Maximum length of a token word.
+//Should be the same or more than LUCENE_MAX_WORD_LEN
+//if not defined, then no token limit, but may be slower
+//if defined will be faster (up to 15% in some cases), but will use more memory
+#ifndef LUCENE_OPTIMIZE_FOR_MEMORY
+ #define LUCENE_TOKEN_WORD_LENGTH LUCENE_MAX_WORD_LEN
+#endif
+//
+//maximum field length. some optimisation can be done if a maximum field
+//length is given... The smaller the better
+#define LUCENE_MAX_FIELD_LEN 100
+//
+//The initial value set to BooleanQuery::maxClauseCount. Default is 1024
+#define LUCENE_BOOLEANQUERY_MAXCLAUSECOUNT 1024
+//
+//bvk: 12.3.2005
+//==============================================================================
+//Previously the way the tokenizer has worked has been changed to optionally
+//use a a fixed word length. I have implemented this in the Term class as well.
+//It seems that by predefining the text length instead of using new TCHAR[x]
+//in the constructor greatly improves the performance by 20-30% for certain
+//operations.
+//Maximum length of a term text.
+//Should be the same or more than LUCENE_MAX_WORD_LEN
+//if not defined, then no term text limit, but may be slower
+//if defined will be faster (up to 30% in some cases), but will use more memory
+#ifndef LUCENE_OPTIMIZE_FOR_MEMORY
+ #define LUCENE_TERM_TEXT_LENGTH LUCENE_MAX_WORD_LEN
+#endif
+//
+//Size of the CharTokenizer buffersize. Required.
+#define LUCENE_IO_BUFFER_SIZE 1024
+//
+//the minimum amount the segment term enum should grow by. Must be at least 1
+#define LUCENE_SEGMENTTERMENUM_GROWSIZE 8
+//
+////////////////////////////////////////////////////////////////////
+
+#endif
+
diff --git a/src/3rdparty/clucene/src/CLucene/CLMonolithic.cpp b/src/3rdparty/clucene/src/CLucene/CLMonolithic.cpp
new file mode 100644
index 0000000..e3c2798
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/CLMonolithic.cpp
@@ -0,0 +1,115 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+*
+* Changes are Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+------------------------------------------------------------------------------*/
+/*
+* this is a monolithic file that can be used to compile clucene using one source file.
+* it simplifies some build processes by avoiding static & dynamic compalation pitfalls.
+*
+* note: when creating a project add either this file, or all the other .cpp files, not both!
+*/
+#include "CLucene/StdHeader.cpp"
+#include "CLucene/analysis/Analyzers.cpp"
+#include "CLucene/analysis/AnalysisHeader.cpp"
+#include "CLucene/analysis/standard/StandardAnalyzer.cpp"
+#include "CLucene/analysis/standard/StandardFilter.cpp"
+#include "CLucene/analysis/standard/StandardTokenizer.cpp"
+#include "CLucene/config/gunichartables.cpp"
+#include "CLucene/config/repl_tcscasecmp.cpp"
+#include "CLucene/config/repl_tcslwr.cpp"
+#include "CLucene/config/repl_tcstod.cpp"
+#include "CLucene/config/repl_lltot.cpp"
+#include "CLucene/config/repl_tcstoll.cpp"
+#include "CLucene/config/repl_tprintf.cpp"
+#include "CLucene/config/threads.cpp"
+#include "CLucene/config/utf8.cpp"
+#include "CLucene/debug/condition.cpp"
+#include "CLucene/debug/error.cpp"
+#include "CLucene/debug/memtracking.cpp"
+#include "CLucene/document/DateField.cpp"
+#include "CLucene/document/Document.cpp"
+#include "CLucene/document/Field.cpp"
+#include "CLucene/index/CompoundFile.cpp"
+#include "CLucene/index/DocumentWriter.cpp"
+#include "CLucene/index/FieldInfos.cpp"
+#include "CLucene/index/FieldsReader.cpp"
+#include "CLucene/index/FieldsWriter.cpp"
+#include "CLucene/index/IndexWriter.cpp"
+#include "CLucene/index/IndexReader.cpp"
+#include "CLucene/index/MultiReader.cpp"
+#include "CLucene/index/SegmentInfos.cpp"
+#include "CLucene/index/SegmentMergeInfo.cpp"
+#include "CLucene/index/SegmentMergeQueue.cpp"
+#include "CLucene/index/SegmentMerger.cpp"
+#include "CLucene/index/SegmentReader.cpp"
+#include "CLucene/index/SegmentTermDocs.cpp"
+#include "CLucene/index/SegmentTermEnum.cpp"
+#include "CLucene/index/SegmentTermPositions.cpp"
+#include "CLucene/index/SegmentTermVector.cpp"
+#include "CLucene/index/Term.cpp"
+#include "CLucene/index/TermInfo.cpp"
+#include "CLucene/index/TermInfosReader.cpp"
+#include "CLucene/index/TermInfosWriter.cpp"
+#include "CLucene/index/TermVectorReader.cpp"
+#include "CLucene/index/TermVectorWriter.cpp"
+#include "CLucene/queryParser/Lexer.cpp"
+#include "CLucene/queryParser/MultiFieldQueryParser.cpp"
+#include "CLucene/queryParser/QueryParser.cpp"
+#include "CLucene/queryParser/QueryParserBase.cpp"
+#include "CLucene/queryParser/QueryToken.cpp"
+#include "CLucene/queryParser/TokenList.cpp"
+#include "CLucene/search/BooleanQuery.cpp"
+#include "CLucene/search/BooleanScorer.cpp"
+#include "CLucene/search/CachingWrapperFilter.cpp"
+#include "CLucene/search/ChainedFilter.cpp"
+#include "CLucene/search/DateFilter.cpp"
+#include "CLucene/search/ConjunctionScorer.cpp"
+#include "CLucene/search/ExactPhraseScorer.cpp"
+#include "CLucene/search/Explanation.cpp"
+#include "CLucene/search/FieldCache.cpp"
+#include "CLucene/search/FieldCacheImpl.cpp"
+#include "CLucene/search/FieldDocSortedHitQueue.cpp"
+#include "CLucene/search/FieldSortedHitQueue.cpp"
+#include "CLucene/search/FilteredTermEnum.cpp"
+#include "CLucene/search/FuzzyQuery.cpp"
+#include "CLucene/search/Hits.cpp"
+#include "CLucene/search/HitQueue.cpp"
+#include "CLucene/search/IndexSearcher.cpp"
+#include "CLucene/search/MultiSearcher.cpp"
+#include "CLucene/search/MultiTermQuery.cpp"
+#include "CLucene/search/PhrasePositions.cpp"
+#include "CLucene/search/PhraseQuery.cpp"
+#include "CLucene/search/PhraseScorer.cpp"
+#include "CLucene/search/PrefixQuery.cpp"
+#include "CLucene/search/QueryFilter.cpp"
+#include "CLucene/search/RangeQuery.cpp"
+#include "CLucene/search/RangeFilter.cpp"
+#include "CLucene/search/SearchHeader.cpp"
+#include "CLucene/search/Similarity.cpp"
+#include "CLucene/search/SloppyPhraseScorer.cpp"
+#include "CLucene/search/Sort.cpp"
+#include "CLucene/search/TermQuery.cpp"
+#include "CLucene/search/TermScorer.cpp"
+#include "CLucene/search/WildcardQuery.cpp"
+#include "CLucene/search/WildcardTermEnum.cpp"
+#include "CLucene/store/FSDirectory.cpp"
+#include "CLucene/store/IndexInput.cpp"
+#include "CLucene/store/Lock.cpp"
+#include "CLucene/store/MMapInput.cpp"
+#include "CLucene/store/IndexOutput.cpp"
+#include "CLucene/store/RAMDirectory.cpp"
+#include "CLucene/store/TransactionalRAMDirectory.cpp"
+#include "CLucene/util/BitSet.cpp"
+#include "CLucene/util/Equators.cpp"
+#include "CLucene/util/FastCharStream.cpp"
+#include "CLucene/util/fileinputstream.cpp"
+#include "CLucene/util/Misc.cpp"
+#include "CLucene/util/Reader.cpp"
+#include "CLucene/util/StringBuffer.cpp"
+#include "CLucene/util/StringIntern.cpp"
+#include "CLucene/util/dirent.cpp"
+#include "CLucene/util/ThreadLocal.cpp"
diff --git a/src/3rdparty/clucene/src/CLucene/LuceneThreads.h b/src/3rdparty/clucene/src/CLucene/LuceneThreads.h
new file mode 100644
index 0000000..cad0786
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/LuceneThreads.h
@@ -0,0 +1,72 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _LuceneThreads_h
+#define _LuceneThreads_h
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#if defined(_CL_DISABLE_MULTITHREADING)
+ #define SCOPED_LOCK_MUTEX(theMutex)
+ #define DEFINE_MUTEX(x)
+ #define STATIC_DEFINE_MUTEX(x)
+ #define _LUCENE_SLEEP(x)
+ #define _LUCENE_CURRTHREADID 1
+ #define _LUCENE_THREADID_TYPE char
+
+ CL_NS_DEF(util)
+ class CLuceneThreadIdCompare
+ {
+ public:
+ enum
+ { // parameters for hash table
+ bucket_size = 4, // 0 < bucket_size
+ min_buckets = 8
+ }; // min_buckets = 2 ^^ N, 0 < N
+
+ bool operator()( char t1, char t2 ) const{
+ return t1 < t2;
+ }
+ };
+ CL_NS_END
+#else
+
+ #if defined(_LUCENE_DONTIMPLEMENT_THREADMUTEX)
+ //do nothing
+ #elif defined(_CL_HAVE_PTHREAD)
+ #include "CLucene/config/threadPthread.h"
+ #elif defined(_CL_HAVE_WIN32_THREADS) || defined(_CLCOMPILER_MSVC) || defined(__MINGW32__) //note that mingw32 could have pthreads, so put this after.
+ #if !defined(_CL_HAVE_WIN32_THREADS)
+ #define _CL_HAVE_WIN32_THREADS
+ #endif
+ #include "CLucene/config/threadCSection.h"
+ #else
+ #error A valid thread library was not found
+ #endif //mutex types
+
+ CL_NS_DEF(util)
+ /** @internal */
+ class mutexGuard
+ {
+ private:
+ _LUCENE_THREADMUTEX* mrMutex;
+ mutexGuard(const mutexGuard& clone);
+ public:
+ mutexGuard( _LUCENE_THREADMUTEX& rMutex );
+ ~mutexGuard();
+ };
+ CL_NS_END
+
+ #define SCOPED_LOCK_MUTEX(theMutex) CL_NS(util)::mutexGuard theMutexGuard(theMutex);
+ #define DEFINE_MUTEX(theMutex) _LUCENE_THREADMUTEX theMutex;
+ #define STATIC_DEFINE_MUTEX(theMutex) static _LUCENE_THREADMUTEX theMutex;
+
+#endif //_CL_DISABLE_MULTITHREADING
+
+
+
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/StdHeader.cpp b/src/3rdparty/clucene/src/CLucene/StdHeader.cpp
new file mode 100644
index 0000000..9813a58
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/StdHeader.cpp
@@ -0,0 +1,132 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+*
+* Changes are Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "CLucene/util/Misc.h"
+
+#include "CLucene/search/Sort.h"
+#include "CLucene/search/Similarity.h"
+#include "CLucene/search/FieldCache.h"
+#include "CLucene/search/FieldSortedHitQueue.h"
+
+#if defined(_CLCOMPILER_MSVC) && defined(_DEBUG)
+# define CRTDBG_MAP_ALLOC
+# include <stdlib.h>
+# include <crtdbg.h>
+#endif
+
+CL_NS_USE(util)
+
+TCHAR* _LUCENE_BLANK_STRING = _T("");
+char* _LUCENE_BLANK_ASTRING = "";
+
+#ifndef Q_CC_MIPS
+#if defined(_LUCENE_THREADMUTEX_USINGDEFAULT)
+# if defined(_LUCENE_PRAGMA_WARNINGS)
+# pragma message ("==================Using clunky thread mutex!!!==================")
+# else
+# if !defined(Q_OS_SOLARIS)
+# warning "==================Using clunky thread mutex!!!=================="
+# endif
+# endif
+#endif
+
+#if defined(_ASCII)
+# if defined(_LUCENE_PRAGMA_WARNINGS)
+# pragma message ("==================Using ascii mode!!!==================")
+# else
+# if !defined(Q_OS_SOLARIS)
+# warning "==================Using ascii mode!!!=================="
+# endif
+# endif
+#endif
+
+//This causes confusion, because CLucene doesn't really need hashed maps/sets. My experience with the
+//hash maps on linux are that there are no significant improvements in using them (infact it adversely
+//affected performance... therefore we'll just silently ignore
+/*#if defined(LUCENE_DISABLE_HASHING)
+# if defined(_LUCENE_PRAGMA_WARNINGS)
+# pragma message ("==================Hashing not available or is disabled! CLucene may run slower than optimal ==================")
+# else
+# if !defined(Q_OS_SOLARIS)
+# warning "==================Hashing not available or is disabled! CLucene may run slower than optimal =================="
+# endif
+# endif
+#endif*/
+#endif
+
+//clears all static memory. do not attempt to do anything else
+//in clucene after calling this function
+void _lucene_shutdown(){
+ CL_NS(search)::FieldSortedHitQueue::Comparators.clear();
+ _CLDELETE(CL_NS(search)::Sort::RELEVANCE);
+ _CLDELETE(CL_NS(search)::Sort::INDEXORDER);
+ _CLDELETE(CL_NS(search)::ScoreDocComparator::INDEXORDER);
+ _CLDELETE(CL_NS(search)::ScoreDocComparator::RELEVANCE);
+ _CLDELETE(CL_NS(search)::SortField::FIELD_SCORE);
+ _CLDELETE(CL_NS(search)::SortField::FIELD_DOC);
+ _CLDELETE(CL_NS(search)::FieldCache::DEFAULT);
+
+ _CLLDELETE(CL_NS(search)::Similarity::getDefault());
+
+ CL_NS(util)::CLStringIntern::shutdown();
+}
+
+void CLDebugBreak(){
+ //can be used for debug breaking...
+#if defined(_CLCOMPILER_MSVC) && defined(_DEBUG)
+ _CrtDbgBreak();
+#else
+ int i=0; //a line to put breakpoint on
+#endif
+}
+
+//these are functions that lucene uses which
+//are not replacement functions
+char* lucenestrdup(const char* v CL_FILELINEPARAM){
+ size_t len = strlen(v);
+ char* ret = new char[len+1];
+ strncpy(ret,v,len+1);
+#if defined(LUCENE_ENABLE_MEMLEAKTRACKING)
+# if defined(LUCENE_ENABLE_FILELINEINFO)
+ CL_NS(debug)::LuceneBase::__cl_voidpadd((void*)ret,file,line,len);
+# else
+ CL_NS(debug)::LuceneBase::__cl_voidpadd((void*)ret,__FILE__,__LINE__,len);
+# endif
+#endif
+ return ret;
+}
+
+#ifdef _UCS2
+wchar_t* lucenewcsdup(const wchar_t* v CL_FILELINEPARAM){
+ size_t len = _tcslen(v);
+ wchar_t* ret = new wchar_t[len+1];
+ _tcsncpy(ret,v,len+1);
+#if defined(LUCENE_ENABLE_MEMLEAKTRACKING)
+# if defined(LUCENE_ENABLE_FILELINEINFO)
+ CL_NS(debug)::LuceneBase::__cl_voidpadd((void*)ret,file,line,len);
+# else
+ CL_NS(debug)::LuceneBase::__cl_voidpadd((void*)ret,__FILE__,__LINE__,len);
+# endif
+#endif
+ return ret;
+}
+#endif //ucs2
+
+
+//ok, these are the exceptions, but these never
+//exist on non-msvc platform, so lets put it here
+#ifndef _CL_HAVE_FILELENGTH
+int64_t lucene_filelength(int filehandle)
+{
+ struct fileStat info;
+ if (fileHandleStat(filehandle, &info) == -1)
+ _CLTHROWA( CL_ERR_IO,"fileStat error" );
+ return info.st_size;
+}
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/StdHeader.h b/src/3rdparty/clucene/src/CLucene/StdHeader.h
new file mode 100644
index 0000000..d267d03
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/StdHeader.h
@@ -0,0 +1,491 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+*
+* Changes are Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+------------------------------------------------------------------------------*/
+#ifndef lucene_stdheader_h
+#define lucene_stdheader_h
+
+#if defined(OVERRIDE_DEFAULT_CLCONFIG)
+ #include "AltCLConfig.h"
+#else
+ #include "CLucene/CLConfig.h"
+#endif
+
+//first inclusion of compiler.h (it will be called again later)
+#include "CLucene/config/compiler.h"
+
+extern void _lucene_shutdown();
+extern int _lucene_counter_break; //can set a watch on this
+#if defined(LUCENE_ENABLE_MEMLEAKTRACKING)
+ extern bool _lucene_disable_debuglogging; //if LUCENE_ENABLE_CONSTRUCTOR_LOG is on, dont do log if this is true
+#endif
+
+////////////////////////////////////////////////////////
+// default includes
+////////////////////////////////////////////////////////
+#ifndef LUCENE_DISABLE_INCLUDES
+
+#include <stdio.h>
+
+#if defined(_CL_STDC_HEADERS)
+ #include <stdlib.h>
+ #include <stddef.h>
+#else
+ #if defined(_CL_HAVE_STDLIB_H)
+ #include <stdlib.h>
+ #endif
+#endif
+
+#if defined(_CL_HAVE_STRING_H)
+ #if !defined(_CL_STDC_HEADERS) && defined(_CL_HAVE_MEMORY_H)
+ #include <memory.h>
+ #endif
+ #include <string.h>
+#elif defined(_CL_HAVE_STRINGS_H)
+ //note: as a side note, strtok is not thread-safe.. so be careful where you use it!
+ #error "strtok replacement for BSD has not been implemented"
+ #include <strings.h>
+ #if !defined(_CL_HAVE_STRCHR)
+ #define strchr index
+ #define strrchr rindex
+ #endif
+#endif
+
+#if defined(_CL_HAVE_UNISTD_H)
+ #include <unistd.h>
+#elif defined(_CL_HAVE_IO_H) && defined(_CL_HAVE_DIRECT_H)
+ #include <io.h>
+ #include <direct.h>
+#else
+ #error "Neither unistd.h or (io.h & direct.h) were available"
+#endif
+
+#ifndef _CL_DISABLE_NATIVE_EXCEPTIONS
+ #ifdef _CL_HAVE_STDEXCEPT
+ #include <stdexcept>
+ #else
+ #error "CLucene can't compile with exception handling on because <stdexcept> header is not available"
+ #endif
+#endif
+
+#if defined(_CL_STAT_MACROS_BROKEN)
+ #error "Haven't implemented STAT_MACROS_BROKEN fix yet"
+#elif defined(_CL_HAVE_SYS_STAT_H)
+ #include <sys/stat.h>
+#else
+ #error "Haven't implemented platforms with no sys/stat.h"
+#endif
+
+#if defined(_CL_HAVE_STDARG_H)
+ #include <stdarg.h>
+#else
+ #error "CLucene can compile, but some extras may not work"
+#endif
+
+#if defined(_CL_HAVE_MATH_H)
+ #include <math.h>
+#else
+ #error "CLucene can't compile without <math.h>"
+#endif
+
+#if defined(_CL_HAVE_MAP)
+ #include <map>
+#else
+ #error "CLucene can't compile without the map header"
+#endif
+
+#if defined(_CL_HAVE_LIST)
+ #include <list>
+#else
+ #error "CLucene can't compile without the list header"
+#endif
+
+#if defined(_CL_HAVE_SET)
+ #include <set>
+#else
+ #error "CLucene can't compile without the set header"
+#endif
+
+#if defined(_CL_HAVE_VECTOR)
+ #include <vector>
+#else
+ #error "CLucene can't compile without the vector header"
+#endif
+
+#if !defined(LUCENE_DISABLE_HASHING) && defined(_CL_HAVE_HASH_MAP) && defined(_CL_HAVE_HASH_SET)
+ //hashing is all or nothing!
+ #include <hash_map>
+ #include <hash_set>
+#elif !defined(LUCENE_DISABLE_HASHING) && defined(_CL_HAVE_EXT_HASH_MAP) && defined(_CL_HAVE_EXT_HASH_SET)
+ #include <ext/hash_map>
+ #include <ext/hash_set>
+#elif !defined(LUCENE_DISABLE_HASHING)
+ #define LUCENE_DISABLE_HASHING
+#endif
+#if !defined(LUCENE_DISABLE_HASHING) && !defined(CL_NS_HASHING)
+ #define CL_NS_HASHING(func) std::func
+#endif
+
+#if defined(_CL_HAVE_ALGORITHM)
+# include <algorithm>
+#else
+# error "Can't compile clucene without <algorithm>"
+#endif
+
+#if defined(_CL_HAVE_FUNCTIONAL)
+# include <functional>
+#else
+# error "Can't compile clucene without <functional>"
+#endif
+
+#if !defined(_CL_HAVE_PRINTF)
+ #error "CLucene can't compile without printf, replacements have not been implemented"
+#endif
+
+#if !defined(_CL_HAVE_SNPRINTF) && !defined(_CL_HAVE__SNPRINTF)
+ #error "CLucene can't compile without snprintf, replacements have not been implemented"
+#elif !defined(_CL_HAVE__SNPRINTF)&& defined(_CL_HAVE_SVNPRINTF)
+ #define _snprintf snprintf
+#endif
+
+#if defined(_UCS2)
+ #if defined(_CL_HAVE_WCHAR_H)
+ #include <wchar.h>
+ #else
+ //actually the repl_wchar.h replacements header will
+ //always be included. It replaces some functions
+ //that are missing in some wchar.h headers.
+ #endif
+#endif
+
+#if defined(_UCS2) && defined(_CL_HAVE_WCTYPE_H)
+ #include <wctype.h>
+#elif defined(_ASCII) && defined(_CL_HAVE_CTYPE_H)
+ #include <ctype.h>
+ #undef LUCENE_USE_INTERNAL_CHAR_FUNCTIONS
+#elif defined(_UCS2)
+ //must be in _UCS2 to use internal char functions
+ #undef LUCENE_USE_INTERNAL_CHAR_FUNCTIONS
+ #define LUCENE_USE_INTERNAL_CHAR_FUNCTIONS
+#else
+ #error "Cannot compile in _ASCII without ctype.h"
+#endif
+
+//always include replacement, some missing tchar defines
+#include "CLucene/config/repl_tchar.h"
+
+#if defined(_CL_HAVE_ERRNO_H)
+ #include <errno.h>
+#else
+ #error "Haven't implemented platforms with no errno.h"
+#endif
+
+#if defined(_CL_HAVE_FCNTL_H)
+ #include <fcntl.h>
+#else
+ #error "Haven't implemented platforms with no fcntl.h"
+#endif
+
+#if defined(_CL_HAVE_WINDOWS_H)
+ #include <windows.h>
+#endif
+
+#endif //LUCENE_DISABLE_INCLUDES
+//
+////////////////////////////////////////////////////////
+
+//second inclusion of compiler.h
+//this gives CompilerXXX.h a chance to include other headers
+#include "CLucene/config/compiler.h"
+//
+////////////////////////////////////////////////////////
+
+
+////////////////////////////////////////////////////////
+// Character functions.
+// Here we decide whose character functions to use
+////////////////////////////////////////////////////////
+#if defined(LUCENE_USE_INTERNAL_CHAR_FUNCTIONS)
+ #define stringCaseFold cl_tcscasefold
+ #define stringCaseFoldCmp cl_tcscasefoldcmp
+
+ #undef _istspace
+ #undef _istdigit
+ #undef _istalnum
+ #undef _istalpha
+ #undef _totlower
+ #undef _totupper
+ #define _istalnum cl_isalnum
+ #define _istalpha cl_isletter
+ #define _istspace cl_isspace
+ #define _istdigit cl_isdigit
+ #define _totlower cl_tolower
+ #define _totupper cl_toupper
+
+ //here are some functions to help deal with utf8/ucs2 conversions
+ //lets let the user decide what mb functions to use... we provide pure utf8 ones no matter what.
+ /*#undef _mbtowc
+ #undef _mbstowcs
+ #undef _wctomb
+ #undef _wcstombs
+ #define _mbtowc lucene_mbstowc
+ #define _mbsstowcs lucene_mbstowcs
+ #define _wctomb lucene_wcto_mb
+ #define _wcstombs lucene_wcstombs*/
+#else
+ //we are using native functions
+ //here are some functions to help deal with utf8/ucs2 conversions
+ /*#define _mbtowc mbtowc
+ #define _wctomb wctomb
+ #define _mbstowcs mbstowcs
+ #define _wcstombs wcstombs*/
+
+ //we are using native character functions
+ #if defined(_ASCII)
+ #undef _istspace
+ #undef _istdigit
+ #undef _istalnum
+ #undef _istalpha
+ #undef _totlower
+ #undef _totupper
+ #define _istspace(x) isspace((unsigned char)x)
+ #define _istdigit(x) isdigit((unsigned char)x)
+ #define _istalnum(x) isalnum((unsigned char)x)
+ #define _istalpha(x) isalpha((unsigned char)x)
+ #define _totlower(x) tolower((unsigned char)x)
+ #define _totupper(x) toupper((unsigned char)x)
+ #endif
+#endif
+
+//the methods contained in gunichartables.h
+typedef unsigned long clunichar;
+bool cl_isletter(clunichar c);
+bool cl_isalnum(clunichar c);
+bool cl_isdigit(clunichar c);
+bool cl_isspace (clunichar c);
+TCHAR cl_tolower (TCHAR c);
+TCHAR cl_toupper (TCHAR c);
+
+int cl_tcscasefoldcmp(const TCHAR * dst, const TCHAR * src);
+TCHAR* cl_tcscasefold( TCHAR * str, int len=-1 );
+
+//we provide utf8 conversion functions
+size_t lucene_utf8towc (wchar_t *ret, const char *s, size_t n);
+size_t lucene_utf8towcs(wchar_t *, const char *, size_t maxslen);
+size_t lucene_wctoutf8 (char * ret, const wchar_t str);
+size_t lucene_wcstoutf8 (char *, const wchar_t *, size_t maxslen);
+size_t lucene_utf8charlen(const char *p);
+
+///a blank string...
+extern TCHAR* _LUCENE_BLANK_STRING;
+#define LUCENE_BLANK_STRING _LUCENE_BLANK_STRING
+extern char* _LUCENE_BLANK_ASTRING;
+#define LUCENE_BLANK_ASTRING _LUCENE_BLANK_ASTRING
+
+/* Converts a string into a form that is independent of case. The
+ * result will not correspond to any particular case, but can be
+ * compared for equality or ordered with the results of calling
+ * stringCaseFold() on other strings.
+ *
+ * If we did not define this elsewhere, then just convert to lower case
+ */
+#ifndef stringCaseFold
+ #define stringCaseFold _tcslwr
+#endif
+/* Compares 2 strings using case folding (if available)
+ * If we did not define this elsewhere, then just compare
+ * using normal method
+ */
+#ifndef stringCaseFoldCmp
+ #define stringCaseFoldCmp _tcsicmp
+#endif
+
+//now that all the character routines are completed, include the
+//wchar.h replacements.
+#include "CLucene/config/repl_wchar.h" //always include replacements
+
+//a replacement for _tcsdup. This uses new TCHAR[] instead of malloc, so that we can use delete[] to free
+#if defined(LUCENE_ENABLE_FILELINEINFO)
+ #define CL_FILELINE ,__FILE__,__LINE__
+ #define CL_FILELINEREF ,file,line ///<for passing the reference along to another function
+ #define CL_FILELINEREF2 ,file,line ///<for passing the reference along to another function
+ #define CL_FILELINEPARAM ,char* file,int line
+#else
+ #define CL_FILELINE
+ #define CL_FILELINEREF
+ #define CL_FILELINEREF2 ,NULL,-1
+ #define CL_FILELINEPARAM
+#endif
+
+char* lucenestrdup(const char* v CL_FILELINEPARAM);
+#if defined(_UCS2)
+ wchar_t* lucenewcsdup(const wchar_t* v CL_FILELINEPARAM);
+ #define stringDuplicate(x) lucenewcsdup(x CL_FILELINE) //don't change this... uses [] instead of malloc
+#else
+ #define stringDuplicate(x) lucenestrdup(x CL_FILELINE) //don't change this... uses [] instead of malloc
+#endif
+
+#define STRCPY_AtoA(target,src,len) strncpy(target,src,len)
+#define STRDUP_AtoA(x) lucenestrdup(x CL_FILELINE)
+
+#if defined(_UCS2)
+ #define STRDUP_WtoW(x) lucenewcsdup(x CL_FILELINE)
+ #define STRDUP_TtoT STRDUP_WtoW
+ #define STRDUP_WtoT STRDUP_WtoW
+ #define STRDUP_TtoW STRDUP_WtoW
+
+ #define STRDUP_AtoW(x) CL_NS(util)::Misc::_charToWide(x CL_FILELINE)
+ #define STRDUP_AtoT STRDUP_AtoW
+
+ #define STRDUP_WtoA(x) CL_NS(util)::Misc::_wideToChar(x CL_FILELINE)
+ #define STRDUP_TtoA STRDUP_WtoA
+
+ #define STRCPY_WtoW(target,src,len) _tcsncpy(target,src,len)
+ #define STRCPY_TtoW STRCPY_WtoW
+ #define STRCPY_WtoT STRCPY_WtoW
+ #define STRCPY_TtoT STRCPY_WtoW
+
+ #define STRCPY_AtoW(target,src,len) CL_NS(util)::Misc::_cpycharToWide(src,target,len)
+ #define STRCPY_AtoT STRCPY_AtoW
+
+ #define STRCPY_WtoA(target,src,len) CL_NS(util)::Misc::_cpywideToChar(src,target,len)
+ #define STRCPY_TtoA STRCPY_WtoA
+#else
+ #define STRDUP_AtoT STRDUP_AtoA
+ #define STRDUP_TtoA STRDUP_AtoA
+ #define STRDUP_TtoT STRDUP_AtoA
+
+ #define STRDUP_WtoT(x) xxxxxxxxxxxxxxx //not possible
+ #define STRCPY_WtoT(target,src,len) xxxxxxxxxxxxxxx //not possible
+
+ #define STRCPY_AtoT STRCPY_AtoA
+ #define STRCPY_TtoA STRCPY_AtoA
+ #define STRCPY_TtoT STRCPY_AtoA
+#endif
+
+//
+////////////////////////////////////////////////////////
+
+////////////////////////////////////////////////////////
+//namespace helper
+////////////////////////////////////////////////////////
+#if defined(_LUCENE_DONTIMPLEMENT_NS_MACROS)
+
+#elif !defined(DISABLE_NAMESPACE)
+//
+// W A R N I N G
+// -------------
+//
+// adjustments here, need to be done in
+// QTDIR/src/tools/assistant/lib/fulltextsearch/qclucene_global.h as well
+//
+# ifdef QT_NAMESPACE
+# define CL_NS_DEF(sub) namespace QT_NAMESPACE { namespace lucene{ namespace sub{
+# define CL_NS_DEF2(sub,sub2) namespace QT_NAMESPACE { namespace lucene{ namespace sub{ namespace sub2 {
+
+# define CL_NS_END }}}
+# define CL_NS_END2 }}}}
+
+# define CL_NS_USE(sub) using namespace QT_NAMESPACE::lucene::sub;
+# define CL_NS_USE2(sub,sub2) using namespace QT_NAMESPACE::lucene::sub::sub2;
+
+# define CL_NS(sub) QT_NAMESPACE::lucene::sub
+# define CL_NS2(sub,sub2) QT_NAMESPACE::lucene::sub::sub2
+# else
+# define CL_NS_DEF(sub) namespace lucene{ namespace sub{
+# define CL_NS_DEF2(sub,sub2) namespace lucene{ namespace sub{ namespace sub2 {
+
+# define CL_NS_END }}
+# define CL_NS_END2 }}}
+
+# define CL_NS_USE(sub) using namespace lucene::sub;
+# define CL_NS_USE2(sub,sub2) using namespace lucene::sub::sub2;
+
+# define CL_NS(sub) lucene::sub
+# define CL_NS2(sub,sub2) lucene::sub::sub2
+# endif
+#else
+# define CL_NS_DEF(sub)
+# define CL_NS_DEF2(sub, sub2)
+# define CL_NS_END
+# define CL_NS_END2
+# define CL_NS_USE(sub)
+# define CL_NS_USE2(sub,sub2)
+# define CL_NS(sub)
+# define CL_NS2(sub,sub2)
+#endif
+
+#if defined(LUCENE_NO_STDC_NAMESPACE)
+ //todo: haven't actually tested this on a non-stdc compliant compiler
+ #define CL_NS_STD(func) ::func
+#else
+ #define CL_NS_STD(func) std::func
+#endif
+//
+////////////////////////////////////////////////////////
+
+//
+void CLDebugBreak(); //define a debugbreak function
+
+
+////////////////////////////////////////////////////////////////
+// These are defines and functions used throughout clucene
+////////////////////////////////////////////////////////////////
+#undef _T //remove any previously defined _T - required for ppc os
+#if defined(_UCS2)
+ #define _T(x) L ## x
+#else
+ #define _T(x) x
+#endif
+
+//third inclusion of compiler.h
+//this gives CompilerXXX.h a chance to fix any of the
+//default settings
+#include "CLucene/config/compiler.h"
+
+#if defined _MSC_VER && (_MSC_VER < 1300)
+# define LUCENE_NO_STDC_NAMESPACE
+#endif
+
+//use std namespace
+#ifndef LUCENE_NO_STDC_NAMESPACE
+using namespace std;
+#endif
+
+
+////////////////////////////////////////////////////////
+//misc shortcut defines
+////////////////////////////////////////////////////////
+
+//include the headers that we need practically everywhere
+#include "CLucene/debug/error.h" //all delete/creation/mem debugging code
+#include "CLucene/debug/condition.h" //conditional debugging (like assert)
+#include "CLucene/debug/mem.h" //all delete/creation/mem debugging code
+#include "LuceneThreads.h" //lucene threading support
+
+#include "CLucene/util/Misc.h"
+#include "CLucene/util/Equators.h"
+#include "CLucene/util/VoidList.h"
+#include "CLucene/util/VoidMap.h"
+
+
+CL_NS_DEF(util)
+typedef CL_NS(util)::CLVector<TCHAR*> StringArray;
+typedef CL_NS(util)::CLVector<TCHAR*, CL_NS(util)::Deletor::tcArray > StringArrayWithDeletor;
+typedef CL_NS(util)::CLVector<const TCHAR*> StringArrayConst;
+typedef CL_NS(util)::CLVector<const TCHAR*, CL_NS(util)::Deletor::tcArray > StringArrayConstWithDeletor;
+
+typedef CL_NS(util)::CLVector<char*> AStringArray;
+typedef CL_NS(util)::CLVector<char*, CL_NS(util)::Deletor::acArray > AStringArrayWithDeletor;
+typedef CL_NS(util)::CLVector<const char*> AStringArrayConst;
+typedef CL_NS(util)::CLVector<const char*, CL_NS(util)::Deletor::acArray > AStringArrayConstWithDeletor;
+CL_NS_END
+
+//
+////////////////////////////////////////////////////////
+
+#endif // STDHEADER_H
diff --git a/src/3rdparty/clucene/src/CLucene/analysis/AnalysisHeader.cpp b/src/3rdparty/clucene/src/CLucene/analysis/AnalysisHeader.cpp
new file mode 100644
index 0000000..03f61a0
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/analysis/AnalysisHeader.cpp
@@ -0,0 +1,200 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "AnalysisHeader.h"
+#include "CLucene/util/StringBuffer.h"
+
+CL_NS_USE(util)
+CL_NS_DEF(analysis)
+
+const TCHAR* Token::defaultType=_T("word");
+
+Token::Token():
+ _startOffset (0),
+ _endOffset (0),
+ _type ( defaultType ),
+ positionIncrement (1)
+{
+ _termTextLen = 0;
+#ifndef LUCENE_TOKEN_WORD_LENGTH
+ _termText = NULL;
+ bufferTextLen = 0;
+#else
+ _termText[0] = 0; //make sure null terminated
+ bufferTextLen = LUCENE_TOKEN_WORD_LENGTH+1;
+#endif
+}
+
+Token::~Token(){
+#ifndef LUCENE_TOKEN_WORD_LENGTH
+ free(_termText);
+#endif
+}
+
+Token::Token(const TCHAR* text, const int32_t start, const int32_t end, const TCHAR* typ):
+ _startOffset (start),
+ _endOffset (end),
+ _type ( typ ),
+ positionIncrement (1)
+{
+ _termTextLen = 0;
+#ifndef LUCENE_TOKEN_WORD_LENGTH
+ _termText = NULL;
+ bufferTextLen = 0;
+#else
+ _termText[0] = 0; //make sure null terminated
+ bufferTextLen = LUCENE_TOKEN_WORD_LENGTH+1;
+#endif
+ setText(text);
+}
+
+void Token::set(const TCHAR* text, const int32_t start, const int32_t end, const TCHAR* typ){
+ _startOffset = start;
+ _endOffset = end;
+ _type = typ;
+ positionIncrement = 1;
+ setText(text);
+}
+
+void Token::setText(const TCHAR* text){
+ _termTextLen = _tcslen(text);
+
+#ifndef LUCENE_TOKEN_WORD_LENGTH
+ growBuffer(_termTextLen+1);
+ _tcsncpy(_termText,text,_termTextLen+1);
+#else
+ if ( _termTextLen > LUCENE_TOKEN_WORD_LENGTH ){
+ //in the case where this occurs, we will leave the endOffset as it is
+ //since the actual word still occupies that space.
+ _termTextLen=LUCENE_TOKEN_WORD_LENGTH;
+ }
+ _tcsncpy(_termText,text,_termTextLen+1);
+#endif
+ _termText[_termTextLen] = 0; //make sure null terminated
+}
+
+void Token::growBuffer(size_t size){
+ if(bufferTextLen>=size)
+ return;
+#ifndef LUCENE_TOKEN_WORD_LENGTH
+ if ( _termText == NULL )
+ _termText = (TCHAR*)malloc( size * sizeof(TCHAR) );
+ else
+ _termText = (TCHAR*)realloc( _termText, size * sizeof(TCHAR) );
+ bufferTextLen = size;
+#else
+ _CLTHROWA(CL_ERR_TokenMgr,"Couldn't grow Token buffer");
+#endif
+}
+
+void Token::setPositionIncrement(int32_t posIncr) {
+ if (posIncr < 0) {
+ _CLTHROWA(CL_ERR_IllegalArgument,"positionIncrement must be >= 0");
+ }
+ positionIncrement = posIncr;
+}
+
+int32_t Token::getPositionIncrement() const { return positionIncrement; }
+
+// Returns the Token's term text.
+const TCHAR* Token::termText() const{
+ return (const TCHAR*) _termText;
+}
+size_t Token::termTextLength() {
+ if ( _termTextLen == -1 ) //it was invalidated by growBuffer
+ _termTextLen = _tcslen(_termText);
+ return _termTextLen;
+}
+void Token::resetTermTextLen(){
+ _termTextLen=-1;
+}
+bool Token::OrderCompare::operator()( Token* t1, Token* t2 ) const{
+ if(t1->startOffset()>t2->startOffset())
+ return false;
+ if(t1->startOffset()<t2->startOffset())
+ return true;
+ return true;
+}
+TCHAR* Token::toString() const{
+ StringBuffer sb;
+ sb.append(_T("("));
+ sb.append( _termText );
+ sb.append(_T(","));
+ sb.appendInt( _startOffset );
+ sb.append(_T(","));
+ sb.appendInt( _endOffset );
+
+ if (!_tcscmp( _type, _T("word")) == 0 ){
+ sb.append(_T(",type="));
+ sb.append(_type);
+ }
+ if (positionIncrement != 1){
+ sb.append(_T(",posIncr="));
+ sb.appendInt(positionIncrement);
+ }
+ sb.append(_T(")"));
+
+ return sb.toString();
+}
+
+
+Token* TokenStream::next(){
+ Token* t = _CLNEW Token; //deprecated
+ if ( !next(t) )
+ _CLDELETE(t);
+ return t;
+}
+
+
+TokenFilter::TokenFilter(TokenStream* in, bool deleteTS):
+ input(in),
+ deleteTokenStream(deleteTS)
+{
+}
+TokenFilter::~TokenFilter(){
+ close();
+}
+
+// Close the input TokenStream.
+void TokenFilter::close() {
+ if ( input != NULL ){
+ input->close();
+ if ( deleteTokenStream )
+ _CLDELETE( input );
+ }
+ input = NULL;
+}
+
+
+
+Tokenizer::Tokenizer() {
+ input = NULL;
+}
+
+Tokenizer::Tokenizer(CL_NS(util)::Reader* _input):
+ input(_input)
+{
+}
+
+void Tokenizer::close(){
+ if (input != NULL) {
+ // ? delete input;
+ input = NULL;
+ }
+}
+
+Tokenizer::~Tokenizer(){
+ close();
+}
+
+
+int32_t Analyzer::getPositionIncrementGap(const TCHAR* fieldName)
+{
+ return 0;
+}
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/analysis/AnalysisHeader.h b/src/3rdparty/clucene/src/CLucene/analysis/AnalysisHeader.h
new file mode 100644
index 0000000..0cfd9c6
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/analysis/AnalysisHeader.h
@@ -0,0 +1,234 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_analysis_AnalysisHeader_
+#define _lucene_analysis_AnalysisHeader_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "CLucene/util/Reader.h"
+
+CL_NS_DEF(analysis)
+
+
+/** A Token is an occurence of a term from the text of a field. It consists of
+* a term's text, the start and end offset of the term in the text of the field,
+* and a type string.
+*
+* The start and end offsets permit applications to re-associate a token with
+* its source text, e.g., to display highlighted query terms in a document
+* browser, or to show matching text fragments in a KWIC (KeyWord In Context)
+* display, etc.
+*
+* The type is an interned string, assigned by a lexical analyzer
+* (a.k.a. tokenizer), naming the lexical or syntactic class that the token
+* belongs to. For example an end of sentence marker token might be implemented
+* with type "eos". The default token type is "word".
+*/
+class Token:LUCENE_BASE{
+private:
+ int32_t _startOffset; // start in source text
+ int32_t _endOffset; // end in source text
+ const TCHAR* _type; // lexical type
+ int32_t positionIncrement;
+ size_t bufferTextLen;
+
+public:
+ #ifndef LUCENE_TOKEN_WORD_LENGTH
+ TCHAR* _termText; // the text of the term
+ #else
+ TCHAR _termText[LUCENE_TOKEN_WORD_LENGTH+1]; // the text of the term
+ #endif
+ int32_t _termTextLen;
+ static const TCHAR* defaultType;
+
+ Token();
+ ~Token();
+ // Constructs a Token with the given text, start and end offsets, & type.
+ Token(const TCHAR* text, const int32_t start, const int32_t end, const TCHAR* typ=defaultType);
+ void set(const TCHAR* text, const int32_t start, const int32_t end, const TCHAR* typ=defaultType);
+
+ size_t bufferLength(){ return bufferTextLen; }
+ void growBuffer(size_t size);
+
+ /* Set the position increment. This determines the position of this
+ * token relative to the previous Token in a TokenStream, used in
+ * phrase searching.
+ *
+ * The default value is 1.
+ *
+ * Some common uses for this are:
+ *
+ * - Set it to zero to put multiple terms in the same position. This is
+ * useful if, e.g., a word has multiple stems. Searches for phrases
+ * including either stem will match. In this case, all but the first stem's
+ * increment should be set to zero: the increment of the first instance
+ * should be one. Repeating a token with an increment of zero can also be
+ * used to boost the scores of matches on that token.
+ *
+ * - Set it to values greater than one to inhibit exact phrase matches.
+ * If, for example, one does not want phrases to match across removed stop
+ * words, then one could build a stop word filter that removes stop words and
+ * also sets the increment to the number of stop words removed before each
+ * non-stop word. Then exact phrase queries will only match when the terms
+ * occur with no intervening stop words.
+ */
+ void setPositionIncrement(int32_t posIncr);
+ int32_t getPositionIncrement() const;
+ const TCHAR* termText() const;
+ size_t termTextLength();
+ void resetTermTextLen();
+ void setText(const TCHAR* txt);
+
+ /**
+ * Returns this Token's starting offset, the position of the first character
+ * corresponding to this token in the source text.
+ *
+ * Note that the difference between endOffset() and startOffset() may not be
+ * equal to termText.length(), as the term text may have been altered by a
+ * stemmer or some other filter.
+ */
+ int32_t startOffset() const { return _startOffset; }
+ void setStartOffset(int32_t val){ _startOffset =val; }
+
+ /**
+ * Returns this Token's ending offset, one greater than the position of the
+ * last character corresponding to this token in the source text.
+ */
+ int32_t endOffset() const { return _endOffset; }
+ void setEndOffset(int32_t val){ _endOffset =val; }
+
+ // Returns this Token's lexical type. Defaults to "word".
+ const TCHAR* type() const { return _type; } ///<returns reference
+ void setType(const TCHAR* val) { _type = val; } ///<returns reference
+
+ TCHAR* toString() const;
+
+ ///Compares the Token for their order
+ class OrderCompare:LUCENE_BASE, public CL_NS(util)::Compare::_base //<Token*>
+ {
+ public:
+ bool operator()( Token* t1, Token* t2 ) const;
+ };
+};
+
+/**
+* A TokenStream enumerates the sequence of tokens, either from
+* fields of a document or from query text.
+* <p>
+* This is an abstract class. Concrete subclasses are:
+* <ul>
+* <li>{@link Tokenizer}, a TokenStream
+* whose input is a Reader; and
+* <li>{@link TokenFilter}, a TokenStream
+* whose input is another TokenStream.
+* </ul>
+*/
+class TokenStream:LUCENE_BASE {
+public:
+ /** Sets token to the next token in the stream, returns false at the EOS. */
+ virtual bool next(Token* token) = 0;
+
+ /** Releases resources associated with this stream. */
+ virtual void close() = 0;
+
+ virtual ~TokenStream(){
+ }
+
+ /* This is for backwards compatibility only. You should pass the token you want to fill
+ * to next(), this will save a lot of object construction and destructions.
+ * @deprecated. use next(token). Kept only to avoid breaking existing code.
+ */
+ _CL_DEPRECATED(next(Token)) Token* next();
+};
+
+
+/** An Analyzer builds TokenStreams, which analyze text. It thus represents a
+ * policy for extracting index terms from text.
+ * <p>
+ * Typical implementations first build a Tokenizer, which breaks the stream of
+ * characters from the Reader into raw Tokens. One or more TokenFilters may
+ * then be applied to the output of the Tokenizer.
+ * <p>
+ * WARNING: You must override one of the methods defined by this class in your
+ * subclass or the Analyzer will enter an infinite loop.
+ */
+class Analyzer:LUCENE_BASE{
+public:
+ /** Creates a TokenStream which tokenizes all the text in the provided
+ Reader. Default implementation forwards to tokenStream(Reader) for
+ compatibility with older version. Override to allow Analyzer to choose
+ strategy based on document and/or field. Must be able to handle null
+ field name for backward compatibility. */
+ virtual TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader)=0;
+
+ virtual ~Analyzer(){
+ }
+
+ /**
+ * Invoked before indexing a Field instance if
+ * terms have already been added to that field. This allows custom
+ * analyzers to place an automatic position increment gap between
+ * Field instances using the same field name. The default value
+ * position increment gap is 0. With a 0 position increment gap and
+ * the typical default token position increment of 1, all terms in a field,
+ * including across Field instances, are in successive positions, allowing
+ * exact PhraseQuery matches, for instance, across Field instance boundaries.
+ *
+ * @param fieldName Field name being indexed.
+ * @return position increment gap, added to the next token emitted from {@link #tokenStream(TCHAR*, Reader*)}
+ */
+ virtual int32_t getPositionIncrementGap(const TCHAR* fieldName);
+};
+
+
+/** A Tokenizer is a TokenStream whose input is a Reader.
+<p>
+This is an abstract class.
+*/
+class Tokenizer:public TokenStream {
+protected:
+ /** The text source for this Tokenizer. */
+ CL_NS(util)::Reader* input;
+
+public:
+ /** Construct a tokenizer with null input. */
+ Tokenizer();
+ /** Construct a token stream processing the given input. */
+ Tokenizer(CL_NS(util)::Reader* _input);
+
+ // ** By default, closes the input Reader. */
+ virtual void close();
+ virtual ~Tokenizer();
+};
+
+/** A TokenFilter is a TokenStream whose input is another token stream.
+<p>
+This is an abstract class.
+*/
+class TokenFilter:public TokenStream {
+protected:
+ /** The source of tokens for this filter. */
+ TokenStream* input;
+ /** If true then input will be deleted in the destructor */
+ bool deleteTokenStream;
+
+ /** Construct a token stream filtering the given input.
+ *
+ * @param in The TokenStream to filter from
+ * @param deleteTS If true, input will be deleted in the destructor
+ */
+ TokenFilter(TokenStream* in, bool deleteTS=false);
+ virtual ~TokenFilter();
+public:
+ /** Close the input TokenStream. */
+ void close();
+};
+
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/analysis/Analyzers.cpp b/src/3rdparty/clucene/src/CLucene/analysis/Analyzers.cpp
new file mode 100644
index 0000000..142bbfb
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/analysis/Analyzers.cpp
@@ -0,0 +1,389 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+*
+* Changes are Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "Analyzers.h"
+#include "CLucene/util/StringBuffer.h"
+
+CL_NS_USE(util)
+CL_NS_DEF(analysis)
+
+CharTokenizer::CharTokenizer(Reader* in) :
+ Tokenizer(in),
+ offset(0),
+ bufferIndex(0),
+ dataLen(0),
+ ioBuffer(NULL)
+{
+ buffer[0]=0;
+}
+
+TCHAR CharTokenizer::normalize(const TCHAR c) const
+{
+ return c;
+}
+bool CharTokenizer::next(Token* token){
+ int32_t length = 0;
+ int32_t start = offset;
+ while (true) {
+ TCHAR c;
+ offset++;
+ if (bufferIndex >= dataLen) {
+ dataLen = input->read(ioBuffer, LUCENE_IO_BUFFER_SIZE);
+ if (dataLen == -1)
+ dataLen = 0;
+ bufferIndex = 0;
+ }
+ if (dataLen <= 0 ) {
+ if (length > 0)
+ break;
+ else
+ return false;
+ }else
+ c = ioBuffer[bufferIndex++];
+ if (isTokenChar(c)) { // if it's a token TCHAR
+
+ if (length == 0) // start of token
+ start = offset-1;
+
+ buffer[length++] = normalize(c); // buffer it, normalized
+
+ if (length == LUCENE_MAX_WORD_LEN) // buffer overflow!
+ break;
+
+ } else if (length > 0) // at non-Letter w/ chars
+ break; // return 'em
+
+ }
+ buffer[length]=0;
+ token->set( buffer, start, start+length);
+ return true;
+}
+
+bool LetterTokenizer::isTokenChar(const TCHAR c) const {
+ return _istalpha(c)!=0;
+}
+
+
+TCHAR LowerCaseTokenizer::normalize(const TCHAR chr) const {
+ return _totlower(chr);
+}
+
+bool WhitespaceTokenizer::isTokenChar(const TCHAR c) const{
+ return _istspace(c)==0; //(return true if NOT a space)
+}
+
+TokenStream* WhitespaceAnalyzer::tokenStream(const TCHAR* fieldName, Reader* reader) {
+ return _CLNEW WhitespaceTokenizer(reader);
+}
+
+TokenStream* SimpleAnalyzer::tokenStream(const TCHAR* fieldName, Reader* reader) {
+ return _CLNEW LowerCaseTokenizer(reader);
+}
+
+bool LowerCaseFilter::next(Token* t){
+ if (!input->next(t))
+ return false;
+ stringCaseFold( t->_termText );
+ return true;
+}
+
+StopFilter::StopFilter(TokenStream* in, bool deleteTokenStream, const TCHAR** stopWords):
+ TokenFilter(in, deleteTokenStream),
+ table(_CLNEW CLSetList<const TCHAR*>(false))
+{
+ fillStopTable( table,stopWords );
+}
+
+void StopFilter::fillStopTable(CLSetList<const TCHAR*>* stopTable,
+ const TCHAR** stopWords) {
+ for (int32_t i = 0; stopWords[i]!=NULL; i++)
+ stopTable->insert(stopWords[i]);
+}
+
+bool StopFilter::next(Token* token) {
+ // return the first non-stop word found
+ while (input->next(token)){
+ if (table->find(token->_termText)==table->end()){
+ return true;
+ }
+ }
+
+ // reached EOS -- return nothing
+ return false;
+}
+
+StopAnalyzer::StopAnalyzer():stopTable(false)
+{
+ StopFilter::fillStopTable(&stopTable,ENGLISH_STOP_WORDS);
+}
+StopAnalyzer::~StopAnalyzer()
+{
+}
+StopAnalyzer::StopAnalyzer( const TCHAR** stopWords) {
+ StopFilter::fillStopTable(&stopTable,stopWords);
+}
+TokenStream* StopAnalyzer::tokenStream(const TCHAR* fieldName, Reader* reader) {
+ return _CLNEW StopFilter(_CLNEW LowerCaseTokenizer(reader),true, &stopTable);
+}
+
+const TCHAR* StopAnalyzer::ENGLISH_STOP_WORDS[] =
+{
+ _T("a"), _T("an"), _T("and"), _T("are"), _T("as"), _T("at"), _T("be"), _T("but"), _T("by"),
+ _T("for"), _T("if"), _T("in"), _T("into"), _T("is"), _T("it"),
+ _T("no"), _T("not"), _T("of"), _T("on"), _T("or"), _T("s"), _T("such"),
+ _T("t"), _T("that"), _T("the"), _T("their"), _T("then"), _T("there"), _T("these"),
+ _T("they"), _T("this"), _T("to"), _T("was"), _T("will"), _T("with"), NULL
+};
+
+PerFieldAnalyzerWrapper::PerFieldAnalyzerWrapper(Analyzer* defaultAnalyzer):
+ analyzerMap(true,true)
+{
+ this->defaultAnalyzer = defaultAnalyzer;
+}
+PerFieldAnalyzerWrapper::~PerFieldAnalyzerWrapper(){
+ analyzerMap.clear();
+ _CLDELETE(defaultAnalyzer);
+}
+
+void PerFieldAnalyzerWrapper::addAnalyzer(const TCHAR* fieldName, Analyzer* analyzer) {
+ analyzerMap.put(STRDUP_TtoT(fieldName), analyzer);
+}
+
+TokenStream* PerFieldAnalyzerWrapper::tokenStream(const TCHAR* fieldName, Reader* reader) {
+ Analyzer* analyzer = (fieldName==NULL?defaultAnalyzer:analyzerMap.get(fieldName));
+ if (analyzer == NULL) {
+ analyzer = defaultAnalyzer;
+ }
+
+ return analyzer->tokenStream(fieldName, reader);
+}
+
+
+
+bool ISOLatin1AccentFilter::next(Token* token){
+ if ( input->next(token) ){
+ int32_t l = token->termTextLength();
+ const TCHAR* chars = token->termText();
+ bool doProcess = false;
+ for (int32_t i = 0; i < l; ++i) {
+#ifdef _UCS2
+ if ( chars[i] >= 0xC0 && chars[i] <= 0x178 ) {
+#else
+ if ( (chars[i] >= 0xC0 && chars[i] <= 0xFF) || chars[i] < 0 ) {
+#endif
+ doProcess = true;
+ break;
+ }
+ }
+ if ( !doProcess ) {
+ return true;
+ }
+
+ StringBuffer output(l*2);
+ for (int32_t j = 0; j < l; j++) {
+ #ifdef _UCS2
+ TCHAR c = chars[j];
+ #else
+ unsigned char c = chars[j];
+ #endif
+ switch (c) {
+ case 0xC0 :
+ case 0xC1 :
+ case 0xC2 :
+ case 0xC3 :
+ case 0xC4 :
+ case 0xC5 :
+ output.appendChar('A');
+ break;
+ case 0xC6 :
+ output.append(_T("AE"));
+ break;
+ case 0xC7 :
+ output.appendChar('C');
+ break;
+ case 0xC8 :
+ case 0xC9 :
+ case 0xCA :
+ case 0xCB :
+ output.appendChar('E');
+ break;
+ case 0xCC :
+ case 0xCD :
+ case 0xCE :
+ case 0xCF :
+ output.appendChar('I');
+ break;
+ case 0xD0 :
+ output.appendChar('D');
+ break;
+ case 0xD1 :
+ output.appendChar('N');
+ break;
+ case 0xD2 :
+ case 0xD3 :
+ case 0xD4 :
+ case 0xD5 :
+ case 0xD6 :
+ case 0xD8 :
+ output.appendChar('O');
+ break;
+ case 0xDE :
+ output.append(_T("TH"));
+ break;
+ case 0xD9 :
+ case 0xDA :
+ case 0xDB :
+ case 0xDC :
+ output.appendChar('U');
+ break;
+ case 0xDD :
+ output.appendChar('Y');
+ break;
+ case 0xE0 :
+ case 0xE1 :
+ case 0xE2 :
+ case 0xE3 :
+ case 0xE4 :
+ case 0xE5 :
+ output.appendChar('a');
+ break;
+ case 0xE6 :
+ output.append(_T("ae"));
+ break;
+ case 0xE7 :
+ output.appendChar('c');
+ break;
+ case 0xE8 :
+ case 0xE9 :
+ case 0xEA :
+ case 0xEB :
+ output.appendChar('e');
+ break;
+ case 0xEC :
+ case 0xED :
+ case 0xEE :
+ case 0xEF :
+ output.appendChar('i');
+ break;
+ case 0xF0 :
+ output.appendChar('d');
+ break;
+ case 0xF1 :
+ output.appendChar('n');
+ break;
+ case 0xF2 :
+ case 0xF3 :
+ case 0xF4 :
+ case 0xF5 :
+ case 0xF6 :
+ case 0xF8 :
+ output.appendChar('o');
+ break;
+ case 0xDF :
+ output.append(_T("ss"));
+ break;
+ case 0xFE :
+ output.append(_T("th"));
+ break;
+ case 0xF9 :
+ case 0xFA :
+ case 0xFB :
+ case 0xFC :
+ output.appendChar('u');
+ break;
+ case 0xFD :
+ case 0xFF :
+ output.appendChar('y');
+ break;
+
+ #ifdef _UCS2
+ case 0x152 :
+ output.append(_T("OE"));
+ break;
+ case 0x153 :
+ output.append(_T("oe"));
+ break;
+ case 0x178 :
+ output.appendChar('Y');
+ break;
+ #endif
+ default :
+ output.appendChar(c);
+ break;
+ }
+ }
+ token->setText(output.getBuffer());
+ return true;
+ }
+ return false;
+}
+
+
+TokenStream* KeywordAnalyzer::tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader){
+ return _CLNEW KeywordTokenizer(reader);
+}
+
+KeywordTokenizer::KeywordTokenizer(CL_NS(util)::Reader* input, int bufferSize):
+ Tokenizer(input)
+{
+ this->done = false;
+ if ( bufferSize < 0 )
+ this->bufferSize = DEFAULT_BUFFER_SIZE;
+}
+KeywordTokenizer::~KeywordTokenizer(){
+}
+
+bool KeywordTokenizer::next(Token* token){
+ if (!done) {
+ done = true;
+ int32_t rd;
+ const TCHAR* buffer=0;
+ while (true) {
+ rd = input->read(buffer, bufferSize);
+ if (rd == -1)
+ break;
+ token->growBuffer(token->_termTextLen +rd+1);
+
+ int32_t cp = rd;
+ if ( token->_termTextLen + cp > token->bufferLength() )
+ cp = token->bufferLength() - token->_termTextLen;
+ _tcsncpy(token->_termText+token->_termTextLen,buffer,cp);
+ token->_termTextLen+=rd;
+ }
+ token->_termText[token->_termTextLen]=0;
+ token->set(token->_termText,0,token->_termTextLen);
+ return true;
+ }
+ return false;
+}
+
+
+LengthFilter::LengthFilter(TokenStream* in, int _min, int _max):
+ TokenFilter(in)
+{
+ this->_min = _min;
+ this->_max = _max;
+}
+
+bool LengthFilter::next(Token* token)
+{
+ // return the first non-stop word found
+ while ( input->next(token) )
+ {
+ size_t len = token->termTextLength();
+ if (len >= _min && len <= _max)
+ return true;
+ // note: else we ignore it but should we index each part of it?
+ }
+ // reached EOS -- return null
+ return false;
+}
+
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/analysis/Analyzers.h b/src/3rdparty/clucene/src/CLucene/analysis/Analyzers.h
new file mode 100644
index 0000000..a12bd65
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/analysis/Analyzers.h
@@ -0,0 +1,309 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_analysis_Analyzers_
+#define _lucene_analysis_Analyzers_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "CLucene/util/Reader.h"
+#include "AnalysisHeader.h"
+#include "CLucene/util/Misc.h"
+
+CL_NS_DEF(analysis)
+
+/** An abstract base class for simple, character-oriented tokenizers.*/
+class CharTokenizer:public Tokenizer {
+private:
+ int32_t offset, bufferIndex, dataLen;
+ TCHAR buffer[LUCENE_MAX_WORD_LEN+1];
+ const TCHAR* ioBuffer;
+protected:
+
+ /** Returns true iff a character should be included in a token. This
+ * tokenizer generates as tokens adjacent sequences of characters which
+ * satisfy this predicate. Characters for which this is false are used to
+ * define token boundaries and are not included in tokens. */
+ virtual bool isTokenChar(const TCHAR c) const = 0;
+
+ /** Called on each token character to normalize it before it is added to the
+ * token. The default implementation does nothing. Subclasses may use this
+ * to, e.g., lowercase tokens. */
+ virtual TCHAR normalize(const TCHAR c) const;
+
+public:
+ CharTokenizer(CL_NS(util)::Reader* in);
+ virtual ~CharTokenizer(){
+ }
+ bool next(Token* token);
+};
+
+
+/** A LetterTokenizer is a tokenizer that divides text at non-letters. That's
+to say, it defines tokens as maximal strings of adjacent letters, as defined
+by java.lang.Character.isLetter() predicate.
+
+Note: this does a decent job for most European languages, but does a terrible
+job for some Asian languages, where words are not separated by spaces. */
+class LetterTokenizer:public CharTokenizer {
+public:
+ // Construct a new LetterTokenizer.
+ LetterTokenizer(CL_NS(util)::Reader* in):
+ CharTokenizer(in) {}
+
+ ~LetterTokenizer(){}
+protected:
+ /** Collects only characters which satisfy _istalpha.*/
+ bool isTokenChar(const TCHAR c) const;
+};
+
+
+
+/**
+* LowerCaseTokenizer performs the function of LetterTokenizer
+* and LowerCaseFilter together. It divides text at non-letters and converts
+* them to lower case. While it is functionally equivalent to the combination
+* of LetterTokenizer and LowerCaseFilter, there is a performance advantage
+* to doing the two tasks at once, hence this (redundant) implementation.
+* <P>
+* Note: this does a decent job for most European languages, but does a terrible
+* job for some Asian languages, where words are not separated by spaces.
+*/
+class LowerCaseTokenizer:public LetterTokenizer {
+public:
+ /** Construct a new LowerCaseTokenizer. */
+ LowerCaseTokenizer(CL_NS(util)::Reader* in):
+ LetterTokenizer(in) {}
+
+ ~LowerCaseTokenizer(){}
+protected:
+ /** Collects only characters which satisfy _totlower. */
+ TCHAR normalize(const TCHAR chr) const;
+};
+
+
+/** A WhitespaceTokenizer is a tokenizer that divides text at whitespace.
+ * Adjacent sequences of non-Whitespace characters form tokens. */
+class WhitespaceTokenizer: public CharTokenizer {
+public:
+ /** Construct a new WhitespaceTokenizer. */
+ WhitespaceTokenizer(CL_NS(util)::Reader* in):CharTokenizer(in) {}
+ ~WhitespaceTokenizer(){}
+protected:
+ /** Collects only characters which do not satisfy _istspace.
+ */
+ bool isTokenChar(const TCHAR c) const;
+};
+
+
+/** An Analyzer that uses WhitespaceTokenizer. */
+class WhitespaceAnalyzer: public Analyzer {
+ public:
+ TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader);
+ ~WhitespaceAnalyzer(){}
+};
+
+/** An Analyzer that filters LetterTokenizer with LowerCaseFilter. */
+class SimpleAnalyzer: public Analyzer {
+public:
+ TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader);
+ ~SimpleAnalyzer(){}
+};
+
+
+
+/**
+* Normalizes token text to lower case.
+*/
+class LowerCaseFilter: public TokenFilter {
+public:
+ LowerCaseFilter(TokenStream* in, bool deleteTokenStream):TokenFilter(in,deleteTokenStream) {}
+ ~LowerCaseFilter(){}
+ bool next(Token* token);
+};
+
+
+/**
+ * Removes stop words from a token stream.
+ */
+class StopFilter: public TokenFilter {
+private:
+ //bvk: i found this to work faster with a non-hash table. the number of items
+ //in the stop table is not like to make it worth having hashing.
+ CL_NS(util)::CLSetList<const TCHAR*>* table;
+public:
+ // Constructs a filter which removes words from the input
+ // TokenStream that are named in the array of words.
+ StopFilter(TokenStream* in, bool deleteTokenStream, const TCHAR** stopWords);
+
+ ~StopFilter(){}
+
+ /** Constructs a filter which removes words from the input
+ * TokenStream that are named in the CLSetList.
+ */
+ StopFilter(TokenStream* in, bool deleteTokenStream, CL_NS(util)::CLSetList<const TCHAR*>* stopTable):
+ TokenFilter(in, deleteTokenStream),
+ table(stopTable)
+ {}
+
+
+ /**
+ * Builds a Hashtable from an array of stop words, appropriate for passing
+ * into the StopFilter constructor. This permits this table construction to
+ * be cached once when an Analyzer is constructed.
+ * Note: the stopWords list must be a static list because the strings are not copied
+ */
+ static void fillStopTable(CL_NS(util)::CLSetList<const TCHAR*>* stopTable,
+ const TCHAR** stopWords);
+
+ /**
+ * Returns the next input Token whose termText() is not a stop word.
+ */
+ bool next(Token* token);
+};
+
+
+
+
+/** Filters LetterTokenizer with LowerCaseFilter and StopFilter. */
+class StopAnalyzer: public Analyzer {
+ CL_NS(util)::CLSetList<const TCHAR*> stopTable;
+
+public:
+ /** Builds an analyzer which removes words in ENGLISH_STOP_WORDS. */
+ StopAnalyzer();
+ ~StopAnalyzer();
+
+ /** Builds an analyzer which removes words in the provided array. */
+ StopAnalyzer( const TCHAR** stopWords );
+ /** Filters LowerCaseTokenizer with StopFilter. */
+ TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader);
+
+ /** An array containing some common English words that are not usually useful
+ for searching. */
+ static const TCHAR* ENGLISH_STOP_WORDS[];
+};
+
+
+
+/**
+ * This analyzer is used to facilitate scenarios where different
+ * fields require different analysis techniques. Use {@link #addAnalyzer}
+ * to add a non-default analyzer on a field name basis.
+ *
+ * <p>Example usage:
+ *
+ * <pre>
+ * PerFieldAnalyzerWrapper aWrapper =
+ * new PerFieldAnalyzerWrapper(new StandardAnalyzer());
+ * aWrapper.addAnalyzer("firstname", new KeywordAnalyzer());
+ * aWrapper.addAnalyzer("lastname", new KeywordAnalyzer());
+ * </pre>
+ *
+ * <p>In this example, StandardAnalyzer will be used for all fields except "firstname"
+ * and "lastname", for which KeywordAnalyzer will be used.
+ *
+ * <p>A PerFieldAnalyzerWrapper can be used like any other analyzer, for both indexing
+ * and query parsing.
+ */
+class PerFieldAnalyzerWrapper : public Analyzer {
+private:
+ Analyzer* defaultAnalyzer;
+ CL_NS(util)::CLHashMap<const TCHAR*, Analyzer*, CL_NS(util)::Compare::TChar,
+ CL_NS(util)::Equals::TChar, CL_NS(util)::Deletor::tcArray,CL_NS(util)::Deletor::Void<Analyzer> > analyzerMap;
+public:
+ /**
+ * Constructs with default analyzer.
+ *
+ * @param defaultAnalyzer Any fields not specifically
+ * defined to use a different analyzer will use the one provided here.
+ */
+ PerFieldAnalyzerWrapper(Analyzer* defaultAnalyzer);
+ ~PerFieldAnalyzerWrapper();
+
+ /**
+ * Defines an analyzer to use for the specified field.
+ *
+ * @param fieldName field name requiring a non-default analyzer
+ * @param analyzer non-default analyzer to use for field
+ */
+ void addAnalyzer(const TCHAR* fieldName, Analyzer* analyzer);
+ TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader);
+};
+
+
+/**
+ * A filter that replaces accented characters in the ISO Latin 1 character set
+ * (ISO-8859-1) by their unaccented equivalent. The case will not be altered.
+ * <p>
+ * For instance, '&agrave;' will be replaced by 'a'.
+ * <p>
+ */
+class ISOLatin1AccentFilter: public TokenFilter {
+public:
+ ISOLatin1AccentFilter(TokenStream* input, bool deleteTs):
+ TokenFilter(input,deleteTs)
+ {
+ }
+
+ /**
+ * To replace accented characters in a String by unaccented equivalents.
+ */
+ bool next(Token* token);
+};
+
+
+/**
+ * Emits the entire input as a single token.
+ */
+class KeywordTokenizer: public Tokenizer {
+private:
+ LUCENE_STATIC_CONSTANT(int, DEFAULT_BUFFER_SIZE = 256);
+ bool done;
+ int bufferSize;
+public:
+ KeywordTokenizer(CL_NS(util)::Reader* input, int bufferSize=-1);
+ virtual ~KeywordTokenizer();
+ bool next(Token* token);
+};
+
+/**
+ * "Tokenizes" the entire stream as a single token. This is useful
+ * for data like zip codes, ids, and some product names.
+ */
+class KeywordAnalyzer: public Analyzer {
+public:
+ TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader);
+ virtual ~KeywordAnalyzer(){}
+};
+
+
+/**
+ * Removes words that are too long and too short from the stream.
+ *
+ */
+class LengthFilter: public TokenFilter {
+private:
+ int _min;
+ int _max;
+public:
+ /**
+ * Build a filter that removes words that are too long or too
+ * short from the text.
+ */
+ LengthFilter(TokenStream* in, int _min, int _max);
+
+ /**
+ * Returns the next input Token whose termText() is the right len
+ */
+ bool next(Token* token);
+};
+
+
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/analysis/standard/StandardAnalyzer.cpp b/src/3rdparty/clucene/src/CLucene/analysis/standard/StandardAnalyzer.cpp
new file mode 100644
index 0000000..e0994c4
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/analysis/standard/StandardAnalyzer.cpp
@@ -0,0 +1,46 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "StandardAnalyzer.h"
+
+#include "CLucene/util/VoidMap.h"
+#include "CLucene/util/Reader.h"
+#include "CLucene/analysis/AnalysisHeader.h"
+#include "CLucene/analysis/Analyzers.h"
+#include "StandardFilter.h"
+#include "StandardTokenizer.h"
+
+CL_NS_USE(util)
+CL_NS_USE(analysis)
+
+CL_NS_DEF2(analysis,standard)
+
+ StandardAnalyzer::StandardAnalyzer():
+ stopSet(false)
+ {
+ StopFilter::fillStopTable( &stopSet,CL_NS(analysis)::StopAnalyzer::ENGLISH_STOP_WORDS);
+ }
+
+ StandardAnalyzer::StandardAnalyzer( const TCHAR** stopWords):
+ stopSet(false)
+ {
+ StopFilter::fillStopTable( &stopSet,stopWords );
+ }
+
+ StandardAnalyzer::~StandardAnalyzer(){
+ }
+
+
+ TokenStream* StandardAnalyzer::tokenStream(const TCHAR* fieldName, Reader* reader)
+ {
+ TokenStream* ret = _CLNEW StandardTokenizer(reader);
+ ret = _CLNEW StandardFilter(ret,true);
+ ret = _CLNEW LowerCaseFilter(ret,true);
+ ret = _CLNEW StopFilter(ret,true, &stopSet);
+ return ret;
+ }
+CL_NS_END2
diff --git a/src/3rdparty/clucene/src/CLucene/analysis/standard/StandardAnalyzer.h b/src/3rdparty/clucene/src/CLucene/analysis/standard/StandardAnalyzer.h
new file mode 100644
index 0000000..9cce041
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/analysis/standard/StandardAnalyzer.h
@@ -0,0 +1,47 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_analysis_standard_StandardAnalyzer
+#define _lucene_analysis_standard_StandardAnalyzer
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "CLucene/util/VoidMap.h"
+#include "CLucene/util/Reader.h"
+#include "CLucene/analysis/AnalysisHeader.h"
+#include "CLucene/analysis/Analyzers.h"
+#include "StandardFilter.h"
+#include "StandardTokenizer.h"
+
+
+CL_NS_DEF2(analysis,standard)
+
+ /** Represents a standard analyzer. */
+ class StandardAnalyzer : public Analyzer
+ {
+ private:
+ CL_NS(util)::CLSetList<const TCHAR*> stopSet;
+ public:
+ /** Builds an analyzer.*/
+ StandardAnalyzer();
+
+ /** Builds an analyzer with the given stop words. */
+ StandardAnalyzer( const TCHAR** stopWords);
+
+ ~StandardAnalyzer();
+
+
+ /**
+ * Constructs a StandardTokenizer filtered by a
+ * StandardFilter, a LowerCaseFilter and a StopFilter.
+ */
+ TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader)
+ ;
+ };
+CL_NS_END2
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/analysis/standard/StandardFilter.cpp b/src/3rdparty/clucene/src/CLucene/analysis/standard/StandardFilter.cpp
new file mode 100644
index 0000000..9869d25
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/analysis/standard/StandardFilter.cpp
@@ -0,0 +1,58 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "StandardFilter.h"
+
+#include "../AnalysisHeader.h"
+#include "../Analyzers.h"
+#include "StandardTokenizerConstants.h"
+#include "CLucene/util/StringBuffer.h"
+
+CL_NS_USE(analysis)
+CL_NS_USE(util)
+CL_NS_DEF2(analysis,standard)
+
+ StandardFilter::StandardFilter(TokenStream* in, bool deleteTokenStream):
+ TokenFilter(in, deleteTokenStream)
+ {
+ }
+
+ StandardFilter::~StandardFilter(){
+ }
+
+ bool StandardFilter::next(Token* t) {
+ if (!input->next(t))
+ return false;
+
+ TCHAR* text = t->_termText;
+ const int32_t textLength = t->termTextLength();
+ const TCHAR* type = t->type();
+
+ if ( type == tokenImage[APOSTROPHE] && //we can compare the type directy since the type should always come from the tokenImage
+ ( textLength >= 2 && _tcsicmp(text+textLength-2, _T("'s"))==0 ) )
+ {
+ // remove 's
+ text[textLength-2]=0;
+ t->resetTermTextLen();
+
+ return true;
+
+ } else if ( type == tokenImage[ACRONYM] ) { // remove dots
+ int32_t j = 0;
+ for ( int32_t i=0;i<textLength;i++ ){
+ if ( text[i] != '.' )
+ text[j++]=text[i];
+ }
+ text[j]=0;
+ return true;
+
+ } else {
+ return true;
+ }
+ }
+
+CL_NS_END2
diff --git a/src/3rdparty/clucene/src/CLucene/analysis/standard/StandardFilter.h b/src/3rdparty/clucene/src/CLucene/analysis/standard/StandardFilter.h
new file mode 100644
index 0000000..59657fd
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/analysis/standard/StandardFilter.h
@@ -0,0 +1,37 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_analysis_standard_StandardFilter
+#define _lucene_analysis_standard_StandardFilter
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "../AnalysisHeader.h"
+#include "../Analyzers.h"
+#include "StandardTokenizerConstants.h"
+#include "CLucene/util/StringBuffer.h"
+
+CL_NS_DEF2(analysis,standard)
+
+ /** Normalizes tokens extracted with {@link StandardTokenizer}. */
+ class StandardFilter: public TokenFilter{
+ public:
+ // Construct filtering <i>in</i>.
+ StandardFilter(TokenStream* in, bool deleteTokenStream);
+
+ ~StandardFilter();
+
+
+ /** Returns the next token in the stream, or NULL at EOS.
+ * <p>Removes <tt>'s</tt> from the end of words.
+ * <p>Removes dots from acronyms.
+ */
+ bool next(Token* token);
+ };
+CL_NS_END2
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/analysis/standard/StandardTokenizer.cpp b/src/3rdparty/clucene/src/CLucene/analysis/standard/StandardTokenizer.cpp
new file mode 100644
index 0000000..60f9a44
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/analysis/standard/StandardTokenizer.cpp
@@ -0,0 +1,446 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "StandardTokenizer.h"
+
+CL_NS_USE(analysis)
+CL_NS_USE(util)
+CL_NS_DEF2(analysis,standard)
+
+ const static TCHAR* tokenImageArray[] = {
+ _T("<EOF>"),
+ _T("<UNKNOWN>"),
+ _T("<ALPHANUM>"),
+ _T("<APOSTROPHE>"),
+ _T("<ACRONYM>"),
+ _T("<COMPANY>"),
+ _T("<EMAIL>"),
+ _T("<HOST>"),
+ _T("<NUM>"),
+ _T("<CJK>")
+ };
+ const TCHAR** tokenImage = tokenImageArray;
+
+ /* A bunch of shortcut macros, many of which make assumptions about variable
+ ** names. These macros enhance readability, not just convenience! */
+ #define EOS (ch==-1 || rd->Eos())
+ #define SPACE (_istspace((TCHAR)ch) != 0)
+ #define ALPHA (_istalpha((TCHAR)ch) != 0)
+ #define ALNUM (_istalnum(ch) != 0)
+ #define DIGIT (_istdigit(ch) != 0)
+ #define UNDERSCORE (ch == '_')
+
+ #define _CJK ( (ch>=0x3040 && ch<=0x318f) || \
+ (ch>=0x3300 && ch<=0x337f) || \
+ (ch>=0x3400 && ch<=0x3d2d) || \
+ (ch>=0x4e00 && ch<=0x9fff) || \
+ (ch>=0xf900 && ch<=0xfaff) || \
+ (ch>=0xac00 && ch<=0xd7af) ) //korean
+
+
+ #define DASH (ch == '-')
+ #define NEGATIVE_SIGN_ DASH
+ //#define POSITIVE_SIGN_ (ch == '+')
+ //#define SIGN (NEGATIVE_SIGN_ || POSITIVE_SIGN_)
+
+ #define DOT (ch == '.')
+ #define DECIMAL DOT
+
+
+ //freebsd seems to have a problem with defines over multiple lines, so this has to be one long line
+ #define _CONSUME_AS_LONG_AS(conditionFails) while (true) { ch = readChar(); if (ch==-1 || (!(conditionFails) || str.len >= LUCENE_MAX_WORD_LEN)) { break; } str.appendChar(ch);}
+
+ #define CONSUME_ALPHAS _CONSUME_AS_LONG_AS(ALPHA)
+
+ #define CONSUME_DIGITS _CONSUME_AS_LONG_AS(DIGIT)
+
+ /* otherMatches is a condition (possibly compound) under which a character
+ ** that's not an ALNUM or UNDERSCORE can be considered not to break the
+ ** span. Callers should pass false if only ALNUM/UNDERSCORE are acceptable. */
+ #define CONSUME_WORD _CONSUME_AS_LONG_AS(ALNUM || UNDERSCORE)
+
+ /*
+ ** Consume CJK characters
+ */
+ #define CONSUME_CJK _CONSUME_AS_LONG_AS(_CJK)
+
+
+ /* It is considered that "nothing of value" has been read if:
+ ** a) The "read head" hasn't moved since specialCharPos was established.
+ ** or
+ ** b) The "read head" has moved by one character, but that character was
+ ** either whitespace or not among the characters found in the body of
+ ** a token (deliberately doesn't include the likes of '@'/'&'). */
+ #define CONSUMED_NOTHING_OF_VALUE (rdPos == specialCharPos || (rdPos == specialCharPos+1 && ( SPACE || !(ALNUM || DOT || DASH || UNDERSCORE) )))
+
+ #define RIGHTMOST(sb) (sb.getBuffer()[sb.len-1])
+ #define RIGHTMOST_IS(sb, c) (RIGHTMOST(sb) == c)
+ /* To discard the last character in a StringBuffer, we decrement the buffer's
+ ** length indicator and move the terminator back by one character. */
+ #define SHAVE_RIGHTMOST(sb) (sb.getBuffer()[--sb.len] = '\0')
+
+ //#define REMOVE_TRAILING_CHARS(sb, charMatchesCondition) { TCHAR* sbBuf = sb.getBuffer(); for (int32_t i = sb.len-1; i >= 0; i--) { TCHAR c = sbBuf[i]; if (charMatchesCondition) { sbBuf[--sb.len] = '\0'; } else {break;}}}
+
+ /* Does StringBuffer sb contain any of the characters in string ofThese? */
+ #define CONTAINS_ANY(sb, ofThese) (_tcscspn(sb.getBuffer(), _T(ofThese)) != static_cast<size_t>(sb.len))
+
+
+ StandardTokenizer::StandardTokenizer(Reader* reader):
+ rd(_CLNEW FastCharStream(reader)),
+ /* rdPos is zero-based. It starts at -1, and will advance to the first
+ ** position when readChar() is first called. */
+ rdPos(-1),
+ tokenStart(-1)
+ {
+ }
+
+ StandardTokenizer::~StandardTokenizer() {
+ _CLDELETE(rd);
+ }
+
+ int StandardTokenizer::readChar() {
+ /* Increment by 1 because we're speaking in terms of characters, not
+ ** necessarily bytes: */
+ rdPos++;
+ return rd->GetNext();
+ }
+
+ void StandardTokenizer::unReadChar() {
+ rd->UnGet();
+ rdPos--;
+ }
+
+ inline bool StandardTokenizer::setToken(Token* t, StringBuffer* sb, TokenTypes tokenCode) {
+ t->setStartOffset(tokenStart);
+ t->setEndOffset(tokenStart+sb->length());
+ t->setType(tokenImage[tokenCode]);
+ sb->getBuffer(); //null terminates the buffer
+ t->resetTermTextLen();
+ return true;
+ }
+
+ bool StandardTokenizer::next(Token* t) {
+ int ch=0;
+ while (!EOS) {
+ ch = readChar();
+
+ if ( ch == 0 || ch == -1 ){
+ continue;
+ } else if (SPACE) {
+ continue;
+ } else if (ALPHA || UNDERSCORE) {
+ tokenStart = rdPos;
+ return ReadAlphaNum(ch,t);
+ } else if (DIGIT || NEGATIVE_SIGN_ || DECIMAL) {
+ tokenStart = rdPos;
+ /* ReadNumber returns NULL if it fails to extract a valid number; in
+ ** that case, we just continue. */
+ if (ReadNumber(NULL, ch,t))
+ return true;
+ } else if ( _CJK ){
+ if ( ReadCJK(ch,t) )
+ return true;
+ }
+ }
+ return false;
+ }
+
+ bool StandardTokenizer::ReadNumber(const TCHAR* previousNumber, const TCHAR prev,Token* t) {
+ /* previousNumber is only non-NULL if this function already read a complete
+ ** number in a previous recursion, yet has been asked to read additional
+ ** numeric segments. For example, in the HOST "192.168.1.3", "192.168" is
+ ** a complete number, but this function will recurse to read the "1.3",
+ ** generating a single HOST token "192.168.1.3". */
+ t->growBuffer(LUCENE_MAX_WORD_LEN+1);//make sure token can hold the next word
+ StringBuffer str(t->_termText,t->bufferLength(),true); //use stringbuffer to read data onto the termText
+ TokenTypes tokenType;
+ bool decExhausted;
+ if (previousNumber != NULL) {
+ str.prepend(previousNumber);
+ tokenType = CL_NS2(analysis,standard)::HOST;
+ decExhausted = false;
+ } else {
+ tokenType = CL_NS2(analysis,standard)::NUM;
+ decExhausted = (prev == '.');
+ }
+ if ( str.len >= LUCENE_MAX_WORD_LEN ){
+ //if a number is too long, i would say there is no point
+ //storing it, because its going to be the wrong number anyway?
+ //what do people think?
+ return false;
+ }
+ str.appendChar(prev);
+
+ const bool signExhausted = (prev == '-');
+ int ch = prev;
+
+ CONSUME_DIGITS;
+
+ if (str.len < 2 /* CONSUME_DIGITS didn't find any digits. */
+ && (
+ (signExhausted && !DECIMAL)
+ || (decExhausted /* && !DIGIT is implied, since CONSUME_DIGITS stopped on a non-digit. */)
+ )
+ )
+ {
+ /* We have either:
+ ** a) a negative sign that's not followed by either digit(s) or a decimal
+ ** b) a decimal that's not followed by digit(s)
+ ** so this is not a valid number. */
+ if (!EOS) {
+ /* Unread the character that stopped CONSUME_DIGITS: */
+ unReadChar();
+ }
+ return false;
+ }
+
+ /* We just read a group of digits. Is it followed by a decimal symbol,
+ ** implying that there might be another group of digits available? */
+ if (!EOS) {
+ if (DECIMAL) {
+ if ( str.len >= LUCENE_MAX_WORD_LEN )
+ return false; //read above for rationale
+ str.appendChar(ch);
+ } else {
+ unReadChar();
+ goto SUCCESSFULLY_EXTRACTED_NUMBER;
+ }
+
+ CONSUME_DIGITS;
+ if (!DIGIT && !DECIMAL) {
+ unReadChar();
+ } else if (!EOS && DECIMAL && _istdigit(rd->Peek())) {
+ /* We just read the fractional digit group, but it's also followed by
+ ** a decimal symbol and at least one more digit, so this must be a
+ ** HOST rather than a real number. */
+ return ReadNumber(str.getBuffer(), '.',t);
+ }
+ }
+
+ SUCCESSFULLY_EXTRACTED_NUMBER:
+ TCHAR rightmost = RIGHTMOST(str);
+ /* Don't including a trailing decimal point. */
+ if (rightmost == '.') {
+ SHAVE_RIGHTMOST(str);
+ unReadChar();
+ rightmost = RIGHTMOST(str);
+ }
+ /* If all we have left is a negative sign, it's not a valid number. */
+ if (rightmost == '-') {
+ CND_PRECONDITION (str.len == 1, "Number is invalid");
+ return false;
+ }
+
+ return setToken(t,&str,tokenType);
+ }
+
+ bool StandardTokenizer::ReadAlphaNum(const TCHAR prev, Token* t) {
+ t->growBuffer(LUCENE_MAX_WORD_LEN+1);//make sure token can hold the next word
+ StringBuffer str(t->_termText,t->bufferLength(),true); //use stringbuffer to read data onto the termText
+ if ( str.len < LUCENE_MAX_WORD_LEN ){
+ str.appendChar(prev);
+ int ch = prev;
+
+ CONSUME_WORD;
+ if (!EOS && str.len < LUCENE_MAX_WORD_LEN-1 ) { //still have space for 1 more character?
+ switch(ch) { /* What follows the first alphanum segment? */
+ case '.':
+ str.appendChar('.');
+ return ReadDotted(&str, CL_NS2(analysis,standard)::UNKNOWN,t);
+ case '\'':
+ str.appendChar('\'');
+ return ReadApostrophe(&str,t);
+ case '@':
+ str.appendChar('@');
+ return ReadAt(&str,t);
+ case '&':
+ str.appendChar('&');
+ return ReadCompany(&str,t);
+ /* default: fall through to end of this function. */
+ }
+ }
+ }
+ return setToken(t,&str,CL_NS2(analysis,standard)::ALPHANUM);
+ }
+
+ bool StandardTokenizer::ReadCJK(const TCHAR prev, Token* t) {
+ t->growBuffer(LUCENE_MAX_WORD_LEN+1);//make sure token can hold the next word
+ StringBuffer str(t->_termText,t->bufferLength(),true); //use stringbuffer to read data onto the termText
+ if ( str.len < LUCENE_MAX_WORD_LEN ){
+ str.appendChar(prev);
+ int ch = prev;
+
+ CONSUME_CJK;
+ }
+ return setToken(t,&str,CL_NS2(analysis,standard)::CJK);
+ }
+
+
+ bool StandardTokenizer::ReadDotted(StringBuffer* _str, TokenTypes forcedType, Token* t) {
+ const int32_t specialCharPos = rdPos;
+ StringBuffer& str=*_str;
+
+ /* A segment of a "dotted" is not allowed to begin with another dot or a dash.
+ ** Even though hosts, e-mail addresses, etc., could have a dotted-segment
+ ** that begins with a dot or a dash, it's far more common in source text
+ ** for a pattern like "abc.--def" to be intended as two tokens. */
+ int ch = rd->Peek();
+ if (!(DOT || DASH)) {
+ bool prevWasDot;
+ bool prevWasDash;
+ if (str.len == 0) {
+ prevWasDot = false;
+ prevWasDash = false;
+ } else {
+ prevWasDot = RIGHTMOST(str) == '.';
+ prevWasDash = RIGHTMOST(str) == '-';
+ }
+ while (!EOS && str.len < LUCENE_MAX_WORD_LEN-1 ) {
+ ch = readChar();
+ const bool dot = ch == '.';
+ const bool dash = ch == '-';
+
+ if (!(ALNUM || UNDERSCORE || dot || dash)) {
+ break;
+ }
+ /* Multiple dots or dashes in succession end the token.
+ ** Consider the following inputs:
+ ** "Visit windowsupdate.microsoft.com--update today!"
+ ** "In the U.S.A.--yes, even there!" */
+ if ((dot || dash) && (prevWasDot || prevWasDash)) {
+ /* We're not going to append the character we just read, in any case.
+ ** As to the character before it (which is currently RIGHTMOST(str)):
+ ** Unless RIGHTMOST(str) is a dot, in which we need to save it so the
+ ** acronym-versus-host detection can work, we want to get rid of it. */
+ if (!prevWasDot) {
+ SHAVE_RIGHTMOST(str);
+ }
+ break;
+ }
+
+ str.appendChar(ch);
+
+ prevWasDot = dot;
+ prevWasDash = dash;
+ }
+ }
+
+ /* There's a potential StringBuffer.append call in the code above, which
+ ** could cause str to reallocate its internal buffer. We must wait to
+ ** obtain the optimization-oriented strBuf pointer until after the initial
+ ** potentially realloc-triggering operations on str.
+ ** Because there can be other such ops much later in this function, strBuf
+ ** is guarded within a block to prevent its use during or after the calls
+ ** that would potentially invalidate it. */
+ { /* Begin block-guard of strBuf */
+ TCHAR* strBuf = str.getBuffer();
+
+ bool rightmostIsDot = RIGHTMOST_IS(str, '.');
+ if (CONSUMED_NOTHING_OF_VALUE) {
+ /* No more alphanums available for this token; shave trailing dot, if any. */
+ if (rightmostIsDot) {
+ SHAVE_RIGHTMOST(str);
+ }
+ /* If there are no dots remaining, this is a generic ALPHANUM. */
+ if (_tcschr(strBuf, '.') == NULL) {
+ forcedType = CL_NS2(analysis,standard)::ALPHANUM;
+ }
+
+ /* Check the token to see if it's an acronym. An acronym must have a
+ ** letter in every even slot and a dot in every odd slot, including the
+ ** last slot (for example, "U.S.A."). */
+ } else if (rightmostIsDot) {
+ bool isAcronym = true;
+ const int32_t upperCheckLimit = str.len - 1; /* -1 b/c we already checked the last slot. */
+
+ for (int32_t i = 0; i < upperCheckLimit; i++) {
+ const bool even = (i % 2 == 0);
+ ch = strBuf[i];
+ if ( (even && !ALPHA) || (!even && !DOT) ) {
+ isAcronym = false;
+ break;
+ }
+ }
+ if (isAcronym) {
+ forcedType = CL_NS2(analysis,standard)::ACRONYM;
+ } else {
+ /* If it's not an acronym, we don't want the trailing dot. */
+ SHAVE_RIGHTMOST(str);
+ /* If there are no dots remaining, this is a generic ALPHANUM. */
+ if (_tcschr(strBuf, '.') == NULL) {
+ forcedType = CL_NS2(analysis,standard)::ALPHANUM;
+ }
+ }
+ }
+ } /* End block-guard of strBuf */
+
+ if (!EOS) {
+ if (ch == '@' && str.len < LUCENE_MAX_WORD_LEN-1) {
+ str.appendChar('@');
+ return ReadAt(&str,t);
+ } else {
+ unReadChar();
+ }
+ }
+
+ return setToken(t,&str,CL_NS2(analysis,standard)::UNKNOWN
+ ? forcedType : CL_NS2(analysis,standard)::HOST);
+ }
+
+ bool StandardTokenizer::ReadApostrophe(StringBuffer* _str, Token* t) {
+ StringBuffer& str=*_str;
+
+ TokenTypes tokenType = CL_NS2(analysis,standard)::APOSTROPHE;
+ const int32_t specialCharPos = rdPos;
+ int ch=0;
+
+ CONSUME_ALPHAS;
+ if (RIGHTMOST_IS(str, '\'') || CONSUMED_NOTHING_OF_VALUE) {
+ /* After the apostrophe, no more alphanums were available within this
+ ** token; shave trailing apostrophe and revert to generic ALPHANUM. */
+ SHAVE_RIGHTMOST(str);
+ tokenType = CL_NS2(analysis,standard)::ALPHANUM;
+ }
+ if (!EOS) {
+ unReadChar();
+ }
+
+ return setToken(t,&str,tokenType);
+ }
+
+ bool StandardTokenizer::ReadAt(StringBuffer* str, Token* t) {
+ ReadDotted(str, CL_NS2(analysis,standard)::EMAIL,t);
+ /* JLucene grammar indicates dots/digits not allowed in company name: */
+ if (!CONTAINS_ANY((*str), ".0123456789")) {
+ setToken(t,str,CL_NS2(analysis,standard)::COMPANY);
+ }
+ return true;
+ }
+
+ bool StandardTokenizer::ReadCompany(StringBuffer* _str, Token* t) {
+ StringBuffer& str = *_str;
+ const int32_t specialCharPos = rdPos;
+ int ch=0;
+
+ CONSUME_WORD;
+ if (CONSUMED_NOTHING_OF_VALUE) {
+ /* After the ampersand, no more alphanums were available within this
+ ** token; shave trailing ampersand and revert to ALPHANUM. */
+ CND_PRECONDITION(RIGHTMOST_IS(str, '&'),"ReadCompany failed");
+ SHAVE_RIGHTMOST(str);
+
+
+ return setToken(t,&str,CL_NS2(analysis,standard)::ALPHANUM);
+ }
+ if (!EOS) {
+ unReadChar();
+ }
+
+ return setToken(t,&str,CL_NS2(analysis,standard)::COMPANY);
+ }
+
+CL_NS_END2
diff --git a/src/3rdparty/clucene/src/CLucene/analysis/standard/StandardTokenizer.h b/src/3rdparty/clucene/src/CLucene/analysis/standard/StandardTokenizer.h
new file mode 100644
index 0000000..d4195be
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/analysis/standard/StandardTokenizer.h
@@ -0,0 +1,88 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_analysis_standard_StandardTokenizer
+#define _lucene_analysis_standard_StandardTokenizer
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "../AnalysisHeader.h"
+#include "../Analyzers.h"
+#include "StandardTokenizerConstants.h"
+#include "CLucene/util/StringBuffer.h"
+#include "CLucene/util/FastCharStream.h"
+#include "CLucene/util/Reader.h"
+
+
+CL_NS_DEF2(analysis,standard)
+
+/** A grammar-based tokenizer constructed with JavaCC.
+ *
+ * <p> This should be a good tokenizer for most European-language documents:
+ *
+ * <ul>
+ * <li>Splits words at punctuation characters, removing punctuation. However, a
+ * dot that's not followed by whitespace is considered part of a token.
+ * <li>Splits words at hyphens, unless there's a number in the token, in which case
+ * the whole token is interpreted as a product number and is not split.
+ * <li>Recognizes email addresses and internet hostnames as one token.
+ * </ul>
+ *
+ * <p>Many applications have specific tokenizer needs. If this tokenizer does
+ * not suit your application, please consider copying this source code
+ * directory to your project and maintaining your own grammar-based tokenizer.
+ */
+ class StandardTokenizer: public Tokenizer {
+ private:
+ int32_t rdPos;
+ int32_t tokenStart;
+
+ // Advance by one character, incrementing rdPos and returning the character.
+ int readChar();
+ // Retreat by one character, decrementing rdPos.
+ void unReadChar();
+
+ // createToken centralizes token creation for auditing purposes.
+ //Token* createToken(CL_NS(util)::StringBuffer* sb, TokenTypes tokenCode);
+ inline bool setToken(Token* t, CL_NS(util)::StringBuffer* sb, TokenTypes tokenCode);
+
+ bool ReadDotted(CL_NS(util)::StringBuffer* str, TokenTypes forcedType,Token* t);
+
+ public:
+ CL_NS(util)::FastCharStream* rd;
+
+ // Constructs a tokenizer for this Reader.
+ StandardTokenizer(CL_NS(util)::Reader* reader);
+
+ ~StandardTokenizer();
+
+ /** Returns the next token in the stream, or false at end-of-stream.
+ * The returned token's type is set to an element of
+ * StandardTokenizerConstants::tokenImage. */
+ bool next(Token* token);
+
+ // Reads for number like "1"/"1234.567", or IP address like "192.168.1.2".
+ bool ReadNumber(const TCHAR* previousNumber, const TCHAR prev, Token* t);
+
+ bool ReadAlphaNum(const TCHAR prev, Token* t);
+
+ // Reads for apostrophe-containing word.
+ bool ReadApostrophe(CL_NS(util)::StringBuffer* str, Token* t);
+
+ // Reads for something@... it may be a COMPANY name or a EMAIL address
+ bool ReadAt(CL_NS(util)::StringBuffer* str, Token* t);
+
+ // Reads for COMPANY name like AT&T.
+ bool ReadCompany(CL_NS(util)::StringBuffer* str, Token* t);
+
+ // Reads CJK characters
+ bool ReadCJK(const TCHAR prev, Token* t);
+ };
+
+CL_NS_END2
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/analysis/standard/StandardTokenizerConstants.h b/src/3rdparty/clucene/src/CLucene/analysis/standard/StandardTokenizerConstants.h
new file mode 100644
index 0000000..3c95af4
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/analysis/standard/StandardTokenizerConstants.h
@@ -0,0 +1,30 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_analysis_standard_StandardTokenizerConstants
+#define _lucene_analysis_standard_StandardTokenizerConstants
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+CL_NS_DEF2(analysis,standard)
+ enum TokenTypes {
+ _EOF,
+ UNKNOWN,
+ ALPHANUM,
+ APOSTROPHE,
+ ACRONYM,
+ COMPANY,
+ EMAIL,
+ HOST,
+ NUM,
+ CJK
+ };
+ extern const TCHAR** tokenImage;
+
+ CL_NS_END2
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/config/CompilerAcc.h b/src/3rdparty/clucene/src/CLucene/config/CompilerAcc.h
new file mode 100644
index 0000000..6ecd142
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/config/CompilerAcc.h
@@ -0,0 +1,166 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+*
+* Changes are Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+------------------------------------------------------------------------------*/
+#if !defined(_lucene_COMPILER_ACC)
+#define _lucene_COMPILER_ACC
+
+// It is internal CLucene header - DO NOT include it directly
+#if !defined(_SUPPRESS_MAKE_BASED_CONFIG)
+#if defined(_BUILD_FOR_QT_)
+#include "fulltextsearch/qclucene-config_p.h"
+#else
+#include "CLucene/clucene-config.h" //make clucene-config.h file
+#endif
+#endif
+
+#if defined(_ASCII)
+#undef _UCS2
+#elif defined(_UCS2)
+//
+#else
+#define CL_CHARSET_GUESS
+#endif
+
+//dont allow FS_MMAP if mmap is not available
+#if defined(LUCENE_FS_MMAP) && !defined(_CL_HAVE_MMAP)
+#error "LUCENE_FS_MMAP is defined and MMap doesn't appear to be available"
+#endif
+
+#ifdef _CL_HAVE_NO_FUNCTION_TRY_BLOCKS
+#undef _LUCENE_DISABLE_EXCEPTIONS
+#define _LUCENE_DISABLE_EXCEPTIONS
+
+#error "this is bad if you made it here... your compiler seems not to have try/catch blocks."
+#error "maybe you could implement an alternative solution for us? :)"
+#endif
+
+#ifndef _CL_HAVE_NAMESPACES
+#define DISABLE_NAMESPACE
+#endif
+
+#define LUCENE_DISABLE_HASHING //we could enable this, but so far test show that the hashing is slower :(
+
+//define the file functions
+#define fileSeek lseek
+#define fileSize _filelength
+#define fileStat stat
+#define fileHandleStat fstat
+#ifdef _CL_HAVE_TELL
+#define fileTell tell
+#else
+//ftell (and probably soon ftell64) are POSIX standard functions, but tell and
+//tell64 are not, so we define fileTell in terms of fileSeek.
+#define fileTell(fhandle) fileSeek(fhandle, 0, SEEK_CUR)
+#endif
+
+//this is needed early on so that CL_MAX_PATH can be correctly determined
+//in the StdHeader.h. This was earlier causing problems with macosx.
+//:: crash was due to realpath() that expects an output arguments that
+//has at least the size of PATH_MAX (even if the result has a lower size)
+#include <limits.h>
+
+#ifndef _CL_HAVE_WCHAR_T
+ typedef unsigned short wchar_t;
+#endif
+
+#if defined(__CYGWIN__)
+//cygwin seems to incorrectly define that it has wprintf???
+#undef _CL_HAVE_WPRINTF
+#elif defined(__MINGW32__)
+# ifndef _CL_HAVE_WINDOWS_H
+# define _CL_HAVE_WINDOWS_H
+# endif
+#endif
+
+
+///////////////////////////////////////////////////////////////////////////////
+//end _lucene_COMPILER_ACC
+#elif !defined(_lucene_COMPILER_ACC2)
+#define _lucene_COMPILER_ACC2
+//second inclusion
+
+ //types
+ #if defined(_CL_HAVE_SYS_TYPES_H)
+ #include <sys/types.h>
+ #endif
+ #if defined(_CL_HAVE_INTTYPES_H)
+ #include <inttypes.h>
+ #elif defined(_CL_HAVE_STDINT_H)
+ #include <stdint.h>
+ #else
+ #if _CL_SIZEOF_UNSIGNED_LONG_LONG==8
+ typedef unsigned long long uint64_t;
+ typedef long long int64_t;
+ #elif _CL_SIZEOF_UNSIGNED_LONG==8
+ typedef unsigned long uint64_t;
+ typedef long int64_t;
+ #else
+ #error I do not know what to use for a uint64_t.
+ #endif
+
+ /* Give us an unsigned 32-bit data type. */
+ #if _CL_SIZEOF_UNSIGNED_LONG==4
+ typedef unsigned long uint32_t;
+ typedef long int32_t;
+ #elif _CL_SIZEOF_UNSIGNED_INT==4
+ typedef unsigned int uint32_t;
+ typedef int int32_t;
+ #else
+ #error I do not know what to use for a uint32_t.
+ #endif
+
+ /* An unsigned 8-bit data type */
+ #if _CL_SIZEOF_UNSIGNED_CHAR==1
+ typedef unsigned char uint8_t;
+ #else
+ #error I do not know what to use for a uint8_t.
+ #endif
+ #endif
+
+ //second chance to fix default settings
+ //this must be defined later, otherwise it messes up
+ //the standard libraries
+ #if !defined(__MINGW32__)
+ #define _close ::close
+ #define _read ::read
+ #endif
+
+ //now that int64_t is defined, we can define this...
+ #ifndef _CL_HAVE_FILELENGTH
+ #undef fileSize
+ #define fileSize lucene_filelength
+ int64_t lucene_filelength(int handle);
+ #endif
+
+#elif !defined(_lucene_COMPILER_ACC3)
+#define _lucene_COMPILER_ACC3
+ //third inclusion
+
+ #if !defined(__MINGW32__)
+ //define replacements
+ #define O_RANDOM 0
+ #undef O_BINARY
+ #define O_BINARY 0
+ #define _S_IREAD 0444
+ #define _S_IWRITE 0333 // write and execute permissions
+
+ //some functions that are needed - not charset dependent and not tchar type functions
+ #define _open open
+ #define _write write
+ #define _snprintf snprintf
+
+ //clucene uses ascii for filename interactions
+ #define _realpath(rel,abs) realpath(rel,abs)
+ #define _mkdir(x) mkdir(x,0777)
+ #define _unlink unlink
+ #else
+ #define _realpath(rel,abs) _fullpath(abs,rel,CL_MAX_PATH)
+ #endif
+ //also required by mingw
+ #define _rename rename
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/config/CompilerBcb.h b/src/3rdparty/clucene/src/CLucene/config/CompilerBcb.h
new file mode 100644
index 0000000..f1b423b
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/config/CompilerBcb.h
@@ -0,0 +1,68 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#if !defined(_lucene_COMPILER_BCB)
+#define _lucene_COMPILER_BCB
+
+// It is internal CLucene header - DO NOT include it directly
+
+#include "CLucene/config/define_std.h"
+#undef _CL_HAVE_STRTOLL
+#undef _CL_HAVE_WCSTOLL
+
+#define _LUCENE_PRAGMA_ONCE
+#define _LUCENE_PRAGMA_WARNINGS //tell lucene to display warnings using pragmas instead of #warning
+#define LUCENE_DISABLE_HASHING
+#define LUCENE_STATIC_CONSTANT(type, assignment) enum { assignment }
+
+#undef LUCENE_ENABLE_MEMLEAKTRACKING //it has been reported that this causes problems
+
+#define fileSize filelength
+#define fileSeek lseek
+#define fileTell tell
+#define fileStat stat
+#define fileHandleStat fstat
+
+#define O_RANDOM 0
+
+//java long type
+typedef __int64 int64_t;
+typedef unsigned __int64 uint64_t;
+
+//java int type
+typedef int int32_t;
+typedef unsigned int uint32_t;
+
+//java byte type
+typedef unsigned char uint8_t;
+
+//floating point type
+//we are going to use qreal now
+//typedef double float_t;
+
+//required type
+typedef int intptr_t;
+
+#define _CL_ILONG(x) x ## L
+#define _ILONGLONG(x) x ## i64
+
+
+#elif !defined(_lucene_COMPILER_BCB2)
+#define _lucene_COMPILER_BCB2
+ //second inclusion
+
+ #define _open open
+ #define _timeb timeb
+ #define _ftime ::ftime
+ #define _rename rename
+
+ #define _realpath(rel,abs) _fullpath(abs,rel,CL_MAX_PATH)
+
+#elif !defined(_lucene_COMPILER_BCB3)
+#define _lucene_COMPILER_BCB3
+ //third inclusion
+
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/config/CompilerGcc.h b/src/3rdparty/clucene/src/CLucene/config/CompilerGcc.h
new file mode 100644
index 0000000..a912098
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/config/CompilerGcc.h
@@ -0,0 +1,175 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+*
+* Changes are Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+------------------------------------------------------------------------------*/
+#if !defined(_lucene_COMPILER_GCC)
+#define _lucene_COMPILER_GCC
+
+// It is internal CLucene header - DO NOT include it directly
+#if !defined(_SUPPRESS_MAKE_BASED_CONFIG)
+ #if defined(_BUILD_FOR_QT_)
+ #include "fulltextsearch/qclucene-config_p.h"
+ #else
+ #include "CLucene/clucene-config.h" //make clucene-config.h file
+ #endif
+#endif
+
+#if defined(_ASCII)
+ #undef _UCS2
+#elif defined(_UCS2)
+//
+#else
+ #define CL_CHARSET_GUESS
+#endif
+
+//dont allow FS_MMAP if mmap is not available
+#if defined(LUCENE_FS_MMAP) && !defined(_CL_HAVE_MMAP)
+ #error "LUCENE_FS_MMAP is defined and MMap doesn't appear to be available"
+#endif
+
+#ifdef _CL_HAVE_NO_FUNCTION_TRY_BLOCKS
+ #undef _LUCENE_DISABLE_EXCEPTIONS
+ #define _LUCENE_DISABLE_EXCEPTIONS
+
+ #error "this is bad if you made it here... your compiler seems not to have try/catch blocks."
+ #error "maybe you could implement an alternative solution for us? :)"
+#endif
+
+#ifndef _CL_HAVE_NAMESPACES
+ #define DISABLE_NAMESPACE
+#endif
+
+#define CL_NS_HASHING(func) __gnu_cxx::func
+#define LUCENE_DISABLE_HASHING //we could enable this, but so far test show that the hashing is slower :(
+
+//define the file functions
+#define fileSeek lseek
+#define fileSize _filelength
+#define fileStat stat
+#define fileHandleStat fstat
+#ifdef _CL_HAVE_TELL
+ #define fileTell tell
+#else
+ //ftell (and probably soon ftell64) are POSIX standard functions, but tell and
+ //tell64 are not, so we define fileTell in terms of fileSeek.
+ #define fileTell(fhandle) fileSeek(fhandle, 0, SEEK_CUR)
+#endif
+
+//this is needed early on so that CL_MAX_PATH can be correctly determined
+//in the StdHeader.h. This was earlier causing problems with macosx.
+//:: crash was due to realpath() that expects an output arguments that
+//has at least the size of PATH_MAX (even if the result has a lower size)
+#include <limits.h>
+
+#ifndef _CL_HAVE_WCHAR_T
+ typedef unsigned short wchar_t;
+#endif
+
+#if defined(__CYGWIN__)
+ //cygwin seems to incorrectly define that it has wprintf???
+ #undef _CL_HAVE_WPRINTF
+#elif defined(__MINGW32__)
+ #ifndef _CL_HAVE_WINDOWS_H
+ #define _CL_HAVE_WINDOWS_H
+ #endif
+#endif
+
+
+///////////////////////////////////////////////////////////////////////////////
+//end _lucene_COMPILER_GCC1
+#elif !defined(_lucene_COMPILER_GCC2)
+#define _lucene_COMPILER_GCC2
+ //second inclusion
+
+ //types
+ #if defined(_CL_HAVE_SYS_TYPES_H)
+ #include <sys/types.h>
+ #endif
+ #if defined(_CL_HAVE_INTTYPES_H)
+ #include <inttypes.h>
+ #elif defined(_CL_HAVE_STDINT_H)
+ #include <stdint.h>
+ #else
+ #if _CL_SIZEOF_UNSIGNED_LONG_LONG==8
+ typedef unsigned long long uint64_t;
+ typedef long long int64_t;
+ #elif _CL_SIZEOF_UNSIGNED_LONG==8
+ typedef unsigned long uint64_t;
+ typedef long int64_t;
+ #else
+ #error I do not know what to use for a uint64_t.
+ #endif
+
+ /* Give us an unsigned 32-bit data type. */
+ #if _CL_SIZEOF_UNSIGNED_LONG==4
+ typedef unsigned long uint32_t;
+ typedef long int32_t;
+ #elif _CL_SIZEOF_UNSIGNED_INT==4
+ typedef unsigned int uint32_t;
+ typedef int int32_t;
+ #else
+ #error I do not know what to use for a uint32_t.
+ #endif
+
+ /* An unsigned 8-bit data type */
+ #if _CL_SIZEOF_UNSIGNED_CHAR==1
+ typedef unsigned char uint8_t;
+ #else
+ #error I do not know what to use for a uint8_t.
+ #endif
+ #endif
+
+ //second chance to fix default settings
+ //this must be defined later, otherwise it messes up
+ //the standard libraries
+ #if !defined(__MINGW32__)
+ #define _close ::close
+ #define _read ::read
+ #endif
+
+ //now that int64_t is defined, we can define this...
+ #ifndef _CL_HAVE_FILELENGTH
+ #undef fileSize
+ #define fileSize lucene_filelength
+ int64_t lucene_filelength(int handle);
+ #endif
+
+#elif !defined(_lucene_COMPILER_GCC3)
+#define _lucene_COMPILER_GCC3
+ //third inclusion
+
+ #if !defined(__MINGW32__)
+ //define replacements
+ #define O_RANDOM 0
+ #undef O_BINARY
+ #define O_BINARY 0
+ #define _S_IREAD 0444
+ #define _S_IWRITE 0333 // write and execute permissions
+
+ //some functions that are needed - not charset dependent and not tchar type functions
+ #define _open open
+ #define _write write
+ #define _snprintf snprintf
+
+ //clucene uses ascii for filename interactions
+ #define _realpath(rel,abs) realpath(rel,abs)
+ #define _mkdir(x) mkdir(x,0777)
+ #define _unlink unlink
+ #else
+ #define _realpath(rel,abs) _fullpath(abs,rel,CL_MAX_PATH)
+ #endif
+ //also required by mingw
+ #define _rename rename
+#endif
+
+#if defined(__GNUC__) && (defined(__sgi) || (defined(Q_OS_SOLARIS) && Q_SOLARIS_VERSION < 10))
+ #undef _CL_HAVE_FLOAT_T
+#endif
+
+#if defined(__GNUC__) && defined(Q_OS_SOLARIS) && Q_SOLARIS_VERSION < 10
+ #undef _CL_HAVE_WCSTOLL
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/config/CompilerMsvc.h b/src/3rdparty/clucene/src/CLucene/config/CompilerMsvc.h
new file mode 100644
index 0000000..82ff9aa
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/config/CompilerMsvc.h
@@ -0,0 +1,134 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+*
+* Changes are Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+------------------------------------------------------------------------------*/
+#if !defined(_lucene_COMPILER_MSVC)
+#define _lucene_COMPILER_MSVC
+
+// It is internal CLucene header - DO NOT include it directly
+
+#include "CLucene/config/define_std.h"
+
+#if (_MSC_VER >= 1300)
+//>= 7.0
+ #if defined(_BUILD_FOR_QT_)
+ # pragma warning(disable: 4100) // disable unreferenced formal parameter
+ # pragma warning(disable: 4189) // disable local variable is initialized but not referenced
+ #endif
+ # pragma warning(disable: 4512) // This would be very annoying
+ # pragma warning(disable: 4290) // Ignore exception specification warning
+ # pragma warning(disable: 4250) // Ignore 'class1' : inherits 'class2::member' via dominance (e.g. in MultiReader)
+ #if (_MSC_VER < 1310)
+ #define CL_NS_HASHING(func) std::func //the namespace is different on VC 7.0
+ #else
+ #define CL_NS_HASHING(func) stdext::func
+ #endif
+ #define LUCENE_STATIC_CONSTANT_SYNTAX 1
+
+ #if _MSC_FULL_VER >= 140050320
+ #define _CL_DEPRECATE_TEXT(_Text) __declspec(deprecated(_Text))
+ #else
+ #define _CL_DEPRECATE_TEXT(_Text) __declspec(deprecated)
+ #endif
+
+#elif (_MSC_VER >= 1200)
+//6.0
+#ifdef LUCENE_ENABLE_MEMLEAKTRACKING
+ #define _CLDELETE_CARRAY(x) if (x!=NULL){CL_NS(debug)::LuceneBase::__cl_voidpremove((void*)x,__FILE__,__LINE__);delete[] __CONST_CAST(TCHAR*,x); x=NULL;}
+ #define _CLDELETE_CaARRAY(x) if (x!=NULL){CL_NS(debug)::LuceneBase::__cl_voidpremove((void*)x,__FILE__,__LINE__);delete[] __CONST_CAST(char*,x); x=NULL;}
+ #define _CLDELETE_LCARRAY(x) if (x!=NULL){CL_NS(debug)::LuceneBase::__cl_voidpremove((void*)x,__FILE__,__LINE__);delete[] __CONST_CAST(TCHAR*,x);}
+ #define _CLDELETE_LCaARRAY(x) if (x!=NULL){CL_NS(debug)::LuceneBase::__cl_voidpremove((void*)x,__FILE__,__LINE__);delete[] __CONST_CAST(char*,x);}
+#else
+ #define _CLDELETE_CARRAY(x) if (x!=NULL){delete[] __CONST_CAST(TCHAR*,x); x=NULL;}
+ #define _CLDELETE_CaARRAY(x) if (x!=NULL){delete[] __CONST_CAST(char*,x); x=NULL;}
+ #define _CLDELETE_LCARRAY(x) if (x!=NULL){delete[] __CONST_CAST(TCHAR*,x);}
+ #define _CLDELETE_LCaARRAY(x) if (x!=NULL){delete[] __CONST_CAST(char*,x);}
+
+#endif
+ #define LUCENE_STATIC_CONSTANT_SYNTAX 2
+
+ # pragma warning(disable: 4786) // This would be very annoying
+ namespace std{
+ # undef min // just in case
+ # undef max // just in case
+
+ #define min(a,b) (a>b?b:a)
+ #define max(a,b) (a>b?a:b)
+ }
+
+ //only 7.0+ has these function
+ #undef _CL_HAVE_LLTOA
+ #undef _CL_HAVE_LLTOAW
+ #undef _CL_HAVE_INTPTR_T
+ #undef _CL_HAVE_WCSTOLL
+ #undef _CL_HAVE_STRTOLL
+ #undef _CL_HAVE_HASH_MAP
+ #undef _CL_HAVE_HASH_SET
+
+#else
+# error "This version of MSVC has not been tested. Please uncomment this line to try anyway. Please send a report to the Clucene's administration if successful"
+#endif
+
+#if _MSC_VER >= 1020
+ #define _LUCENE_PRAGMA_ONCE
+#endif
+#define _LUCENE_PRAGMA_WARNINGS //tell lucene to display warnings using pragmas instead of #warning
+
+//if we are compiling using single-threaded libraries, we can disable multi-threading stuff
+#if !defined(_MT) && !defined(_CL_DISABLE_MULTITHREADING)
+ #define _CL_DISABLE_MULTITHREADING
+#endif
+
+//msvc supports large files
+#ifdef _LARGE_FILES
+# define fileSize _filelengthi64
+# define fileSeek _lseeki64
+# define fileTell _telli64
+# define fileStat _stati64
+# define fileHandleStat _fstati64
+#else
+# define fileSize _filelength
+# define fileSeek _lseek
+# define fileTell _tell
+# define fileStat _stat
+# define fileHandleStat _fstat
+#endif
+
+//_rename is not defined???
+#define _rename rename
+
+#define CL_MAX_PATH 260 //give the windef.h value for this...
+#define _realpath(rel,abs) _fullpath(abs,rel,CL_MAX_PATH)
+
+//java long type
+typedef __int64 int64_t;
+typedef unsigned __int64 uint64_t;
+
+//java int type
+typedef int int32_t;
+typedef unsigned int uint32_t;
+
+//java byte type
+typedef unsigned char uint8_t;
+
+//floating point type
+//we are going to use qreal now
+//typedef double float_t;
+
+#define _CL_ILONG(x) x ## L
+#define _ILONGLONG(x) x ## i64
+
+
+#elif !defined(_lucene_COMPILER_MSVC2)
+#define _lucene_COMPILER_MSVC2
+ //second inclusion
+
+
+#elif !defined(_lucene_COMPILER_MSVC3)
+#define _lucene_COMPILER_MSVC3
+ //third inclusion
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/config/PlatformMac.h b/src/3rdparty/clucene/src/CLucene/config/PlatformMac.h
new file mode 100644
index 0000000..9f6d6f4
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/config/PlatformMac.h
@@ -0,0 +1,19 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+// It is internal CLucene header - DO NOT include it directly
+
+# define PATH_DELIMITER _T("/")
+# define PATH_DELIMITERA "/"
+# define PATH_DELIMITERC '/'
+
+# if (__GNUC__ < 3) && !defined( __APPLE_CC__)
+// GCC strange "ignore std" mode works better if you pretend everything
+// is in the std namespace, for the most part.
+# define LUCENE_NO_STDC_NAMESPACE
+# endif
+
+#undef _T //apple has something else strange here...
diff --git a/src/3rdparty/clucene/src/CLucene/config/PlatformUnix.h b/src/3rdparty/clucene/src/CLucene/config/PlatformUnix.h
new file mode 100644
index 0000000..202a894
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/config/PlatformUnix.h
@@ -0,0 +1,12 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+// It is internal CLucene header - DO NOT include it directly
+
+# define PATH_DELIMITER _T("/")
+# define PATH_DELIMITERA "/"
+# define PATH_DELIMITERC '/'
+
diff --git a/src/3rdparty/clucene/src/CLucene/config/PlatformWin32.h b/src/3rdparty/clucene/src/CLucene/config/PlatformWin32.h
new file mode 100644
index 0000000..8b8a113
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/config/PlatformWin32.h
@@ -0,0 +1,11 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+// It is internal CLucene header - DO NOT include it directly
+
+# define PATH_DELIMITER _T("\\")
+# define PATH_DELIMITERA "\\"
+# define PATH_DELIMITERC '\\'
diff --git a/src/3rdparty/clucene/src/CLucene/config/compiler.h b/src/3rdparty/clucene/src/CLucene/config/compiler.h
new file mode 100644
index 0000000..68f93b6
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/config/compiler.h
@@ -0,0 +1,259 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#if !defined(lucene_compiler_h)
+#define lucene_compiler_h
+
+#if defined(_MBCS) || defined(_ASCII)
+#undef _ASCII
+#undef _UCS2
+#define _ASCII
+#elif defined(_UNICODE)
+#define _UCS2
+#elif !defined(_UCS2)
+#define _UCS2
+#endif
+
+//msvc needs unicode define so that it uses unicode library
+#ifdef _UCS2
+#undef _UNICODE
+#define _UNICODE
+#undef _ASCII
+#else
+#undef _UNICODE
+#undef _UCS2
+#endif
+
+
+////////////////////////////////////////////////////////////////////
+// Figure out what compiler we are using
+////////////////////////////////////////////////////////////////////
+
+#if defined(_MSC_VER) && !defined(__MWERKS__) && !defined (__COMO__)
+#define _CLCOMPILER_MSVC _MSC_VER
+#endif
+
+#if defined(__GNUC__) || defined(__SUNPRO_CC) || defined(__xlC__) || defined(__sgi) && defined(__EDG__)
+#include "CLucene/config/CompilerGcc.h"
+
+#elif defined(_CLCOMPILER_MSVC)
+/* Microsoft Visual C++ */
+#include "CLucene/config/CompilerMsvc.h"
+
+#elif defined (__BORLANDC__)
+#include "CLucene/config/CompilerBcb.h"
+
+#elif defined (__HP_aCC)
+#include "CLucene/config/CompilerAcc.h"
+
+#else
+ //Unable to identify the compiler, issue error diagnostic.
+ //Edit <CLucene/config/LuceneMycomp.h> to set STLport up for your compiler.
+ //Uncomment this next line
+#error "Unable to identify the compiler, issue error diagnostic. Edit <CLucene/config/CompilerMycomp.h> to set Lucene up for your compiler."
+#include "CLucene/config/LuceneMycomp.h"
+#endif /* end of compiler choice */
+////////////////////////////////////////////////////////////////////
+
+
+
+////////////////////////////////////////////////////////////////////
+// Now include platform specific definitions
+////////////////////////////////////////////////////////////////////
+
+/* Operating system recognition (basic) */
+#if defined (__unix) || defined (__linux__) || defined (__QNX__) || defined (_AIX) || defined (__NetBSD__) || defined (__OpenBSD__) || defined (__Lynx__) || defined(hpux) || defined(__hpux)
+#undef _UNIX
+#define _UNIX 1
+#include "CLucene/config/PlatformUnix.h"
+
+#elif defined(macintosh) || defined (_MAC) || defined(__APPLE__)
+#undef _MAC
+#define _MAC 1
+#include "CLucene/config/PlatformMac.h"
+
+#elif defined (_WIN32) || defined (__WIN32) || defined (WIN32) || defined (__WIN32__)
+#undef _WIN32
+#define _WIN32
+#include "CLucene/config/PlatformWin32.h"
+
+#elif defined (__WIN16) || defined (WIN16) || defined (_WIN16)
+#undef _WIN16
+#define _WIN16
+#error "CLucene has not been tested on this platform. Please send a report to the lucene administrators if you are able to successfully compile"
+#else
+#error "CLucene could not identify the platform."
+#endif /* platforms */
+
+
+
+////////////////////////////////////////////////////////////////////
+// Now we take all that we have learnt, and define some things
+////////////////////////////////////////////////////////////////////
+
+//lets just say that we can always do unicode! :)
+#ifdef CL_CHARSET_GUESS
+#define _UCS2
+#endif
+
+#if defined(_ASCII)
+#undef _UCS2
+#elif defined(_UCS2)
+#undef _ASCII
+#endif
+
+#ifndef _LUCENE_NO_NEW_STYLE_CASTS
+#define __CONST_CAST(typ,var) const_cast<typ>(var)
+#define __REINTERPRET_CAST(typ,var) reinterpret_cast<typ>(var)
+#else
+#define __CONST_CAST(typ,var) ((typ)(var))
+#define __REINTERPRET_CAST,var) ((typ)(var))
+#endif
+
+#ifndef _CL_DEPRECATE_TEXT
+#define _CL_DEPRECATE_TEXT(_Text)
+#endif
+#define _CL_DEPRECATED(_NewItem) _CL_DEPRECATE_TEXT("This function or variable has been superceded by newer library or operating system functionality. Consider using" #_NewItem "instead. See online help for details.")
+
+
+//cnd-debug exit command
+#ifndef debugFatalExit
+#define debugFatalExit(ret) exit(ret)
+#endif
+
+#ifndef _CL_ILONG
+#define _CL_ILONG(x) x ## L
+#endif
+#ifndef _ILONGLONG
+#define _ILONGLONG(x) x ## LL
+#endif
+
+//define whats the values of item intergers *should* be. we can check this in a test
+#define LUCENE_INT64_MAX_SHOULDBE _ILONGLONG(0x7FFFFFFFFFFFFFFF)
+#define LUCENE_INT32_MAX_SHOULDBE 0x7FFFFFFFL
+#define LUCENE_UINT8_MAX_SHOULDBE 0xff
+
+//maximum path length. only used for buffers that use fullpath.
+//anything else should use a dynamic length.
+#if defined(CL_MAX_PATH)
+//do nothing...
+#elif defined(PATH_MAX)
+#define CL_MAX_PATH PATH_MAX
+#elif defined(MAX_PATH)
+#define CL_MAX_PATH MAX_PATH
+#elif defined(_MAX_PATH)
+#define CL_MAX_PATH _MAX_PATH
+#else
+ #error "CL_MAX_PATH could not be determined"
+#endif
+
+//this is the max filename... for now its just the same,
+//but this could change, so we use a different name
+#define CL_MAX_NAME CL_MAX_PATH
+//this used to be CL_MAX_NAME * 32, but as Alex Hudson points out, this could come to be 128kb.
+//the above logic for CL_MAX_NAME should be correct enough to handle all file names
+#define CL_MAX_DIR CL_MAX_PATH
+
+#ifdef _LARGE_FILES
+#define LUCENE_MAX_FILELENGTH LUCENE_INT64_MAX_SHOULDBE
+#else
+#define LUCENE_MAX_FILELENGTH LUCENE_INT32_MAX_SHOULDBE
+#endif
+
+//use the LUCENE_STATIC_CONSTANT_SYNTAX to determine LUCENE_STATIC_CONSTANT
+#ifndef LUCENE_STATIC_CONSTANT
+ //autoconf is not properly detecting the correct method for this, and since there's no real big
+ //harm in always using an enum, we'll probably just make this the default.
+ /*#if LUCENE_STATIC_CONSTANT_SYNTAX == 1
+ #define LUCENE_STATIC_CONSTANT(type, assignment) static const type assignment
+ #elif LUCENE_STATIC_CONSTANT_SYNTAX == 2*/
+ #define LUCENE_STATIC_CONSTANT(type, assignment) enum { assignment }
+ /*#else
+ #error "LUCENE_STATIC_CONSTANT not defined, and/or LUCENE_STATIC_CONSTANT_SYNTAX is not defined to a valid value"
+ #endif*/
+#endif
+
+//end of lucene_compiler_h
+#elif !defined(lucene_compiler_h2)
+#define lucene_compiler_h2
+//here we include the compiler header again, this gives the header a
+//second chance at including stuff, after the main inclusions are complete
+
+#if defined (__GNUC__) || defined(__SUNPRO_CC) || defined(__xlC__) || defined(__sgi) && defined(__EDG__)
+#include "CLucene/config/CompilerGcc.h"
+
+#elif defined(_CLCOMPILER_MSVC)
+/* Microsoft Visual C++ */
+#include "CLucene/config/CompilerMsvc.h"
+
+#elif defined __BORLANDC__
+#include "CLucene/config/CompilerBcb.h"
+
+#elif defined (__HP_aCC)
+#include "CLucene/config/CompilerAcc.h"
+
+#else
+//Unable to identify the compiler, issue error diagnostic.
+//Edit <CLucene/config/LuceneMycomp.h> to set STLport up for your compiler.
+//Uncomment this next line
+#error "Unable to identify the compiler, issue error diagnostic. Edit <CLucene/config/CompilerMycomp.h> to set Lucene up for your compiler."
+#include "CLucene/config/LuceneMycomp.h"
+#endif /* end of compiler choice */
+
+#ifndef _CL_HAVE_FLOAT_T
+//#ifdef _CL_HAVE_LONG_DOUBLE
+// long double's are not working (reported by Mark Ashworth on Solaris 64)
+// typedef long double float_t; /* `float' expressions are evaluated as `long double'. */
+//#else
+// we are going to use qreal now
+// typedef double float_t;
+//#endif
+#endif
+
+/*todo: but need to define SIZEOF_VOID_P #if (SIZEOF_VOID_P > 4 && SIZEOF_VOID_P <= 8)
+#ifndef _CL_HAVE_INTPTR_T
+ typedef int64_t intptr_t;
+#endif
+#elif (SIZEOF_VOID_P > 2 && SIZEOF_VOID_P <= 4)
+# ifndef _CL_HAVE_INTPTR_T
+ typedef int32_t intptr_t;
+# endif
+#else
+#error "void * is either >8 bytes or <= 2. In either case, I am confused."
+#endif*/
+
+#ifndef _CL_HAVE_INTPTR_T
+ typedef int intptr_t;
+#endif
+
+//end of lucene_compiler_h2
+#elif !defined(lucene_compiler_h3)
+#define lucene_compiler_h3
+//here we include the compiler header again, this gives the header a
+//third chance at including stuff, after the main inclusions are complete
+
+#if defined (__GNUC__ ) || defined(__SUNPRO_CC) || defined(__xlC__) || defined(__sgi) && defined(__EDG__)
+#include "CLucene/config/CompilerGcc.h"
+
+#elif defined(_CLCOMPILER_MSVC)
+/* Microsoft Visual C++ */
+#include "CLucene/config/CompilerMsvc.h"
+
+#elif defined __BORLANDC__
+#include "CLucene/config/CompilerBcb.h"
+
+#elif defined (__HP_aCC)
+#include "CLucene/config/CompilerAcc.h"
+
+#else
+//Unable to identify the compiler, issue error diagnostic.
+//Edit <CLucene/config/LuceneMycomp.h> to set STLport up for your compiler.
+//Uncomment this next line
+#error "Unable to identify the compiler, issue error diagnostic. Edit <CLucene/config/CompilerMycomp.h> to set Lucene up for your compiler."
+#include "CLucene/config/LuceneMycomp.h"
+#endif /* end of compiler choice */
+
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/config/define_std.h b/src/3rdparty/clucene/src/CLucene/config/define_std.h
new file mode 100644
index 0000000..3f92117
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/config/define_std.h
@@ -0,0 +1,110 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef lucene_define_std
+#define lucene_define_std
+//define a standard list of defines.
+//These defines represents a fairly complete compiler.
+//Of course it is preferable to use the autoconf generated
+//list, but then not all systems can do this :)
+
+//we support long files - 64 bit file functions
+#define _LARGE_FILES
+
+//support namespaces
+#define _CL_HAVE_NAMESPACES
+
+//support try/catch blocks
+#define _CL_HAVE_FUNCTION_TRY_BLOCKS
+
+//the normal headers
+#define _CL_STDC_HEADERS
+#define _CL_HAVE_STDARG_H
+#define _CL_HAVE_ALGORITHM
+#define _CL_HAVE_FUNCTIONAL
+#define _CL_HAVE_MATH_H
+#define _CL_HAVE_STL
+#define _CL_HAVE_HASH_MAP
+#define _CL_HAVE_HASH_SET
+#define _CL_HAVE_MAP
+#define _CL_HAVE_SET
+#define _CL_HAVE_LIST
+#define _CL_HAVE_VECTOR
+#define _CL_HAVE_STDEXCEPT
+#define _CL_HAVE_ERRNO_H
+#define _CL_HAVE_SYS_STAT_H
+#define _CL_HAVE_FCNTL_H
+
+//character & std tchar support
+#define _CL_HAVE_TCHAR_H
+#ifdef _UCS2
+ #define _CL_HAVE_WCTYPE_H
+
+ #define _CL_HAVE_WCSCPY
+ #define _CL_HAVE_WCSNCPY
+ #define _CL_HAVE_WCSCAT
+ #define _CL_HAVE_WCSCHR
+ #define _CL_HAVE_WCSSTR
+ #define _CL_HAVE_WCSLEN
+ #define _CL_HAVE_WCSCMP
+ #define _CL_HAVE_WCSNCMP
+ #define _CL_HAVE_WCSCSPN
+#else
+ #define _CL_HAVE_CTYPE_H
+#endif
+
+//already have the normal structures
+#define _CL_HAVE_FLOAT_T
+#define _CL_HAVE_INTPTR_T
+
+//system dependant:
+#define _CL_HAVE_STRING_H //could be HAVE_STRINGS_H && HAVE_STRCHR
+#define _CL_HAVE_SYS_TIMEB_H
+#define _CL_HAVE_TIME_H
+
+#if defined (_WIN32) || defined (__WIN32) || defined (WIN32) || defined (__WIN32__)
+ #define _CL_HAVE_IO_H
+ #define _CL_HAVE_DIRECT_H
+ #define _CL_HAVE_WINDOWS_H
+#else
+ #define _CL_HAVE_UNISTD_H
+#endif
+
+////////////////////////////////////////////////
+//now for individual functions. some compilers
+//miss these, so must individually define what
+//we have
+////////////////////////////////////////////////
+
+//string functions
+#define _CL_HAVE_STRLWR
+#define _CL_HAVE_WCSLWR
+#define _CL_HAVE_WCSCASECMP
+#define _CL_HAVE_STRCASECMP
+
+//formatting functions
+#define _CL_HAVE_SNWPRINTF
+#define _CL_HAVE_VSNWPRINTF
+#define _CL_HAVE_WPRINTF
+#define _CL_HAVE_SNPRINTF
+#define _CL_HAVE_PRINTF
+
+
+//conversion functions
+#define _CL_HAVE_STRTOLL
+#define _CL_HAVE_WCSTOLL
+#define _CL_HAVE_WCSTOD
+#define _CL_HAVE_LLTOA
+#define _CL_HAVE_LLTOW
+#define _CL_HAVE_INTPTR_T
+
+//these ones are not standard (msvc)
+//so you will probably need to undefine
+//if you are not using msvc
+#define _CL_HAVE_FILELENGTH
+
+
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/config/gunichartables.cpp b/src/3rdparty/clucene/src/CLucene/config/gunichartables.cpp
new file mode 100644
index 0000000..5463936
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/config/gunichartables.cpp
@@ -0,0 +1,386 @@
+/*
+ * Copyright (C) 1999 Tom Tromey
+ * Copyright (C) 2000 Red Hat, Inc.
+ *
+ * This library 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 of the License, or (at your option) any later version.
+ *
+ * This library 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 library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ *
+ ************************************************
+ * Also licensed with permission from Tom Tromey
+ * and Owen Taylor under the Apache license.
+ * Original location:
+ * http://cvs.gnome.org/viewcvs/glib/glib/guniprop.c?view=log
+ ************************************************
+ *
+ * Copyright 2003-2006 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * Changes are Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+*/
+
+#include "CLucene/StdHeader.h"
+
+typedef unsigned long gunichar;
+typedef unsigned short guint16;
+typedef short gint16;
+typedef char gchar;
+typedef unsigned char guchar;
+
+/* These are the possible character classifications.
+ * See http://www.unicode.org/Public/UNIDATA/UnicodeData.txt
+ or http://www.unicode.org/Public/UNIDATA/UCD.html.
+
+ todo: i think there is a new version of the unicode, which we should use.
+ data is licensed like this: http://www.unicode.org/copyright.html... not sure but looks apache compatible
+ */
+typedef enum
+{
+ G_UNICODE_CONTROL,
+ G_UNICODE_FORMAT,
+ G_UNICODE_UNASSIGNED,
+ G_UNICODE_PRIVATE_USE,
+ G_UNICODE_SURROGATE,
+ G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_OTHER_LETTER,
+ G_UNICODE_TITLECASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_COMBINING_MARK,
+ G_UNICODE_ENCLOSING_MARK,
+ G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_LETTER_NUMBER,
+ G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_CONNECT_PUNCTUATION,
+ G_UNICODE_DASH_PUNCTUATION,
+ G_UNICODE_CLOSE_PUNCTUATION,
+ G_UNICODE_FINAL_PUNCTUATION,
+ G_UNICODE_INITIAL_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OPEN_PUNCTUATION,
+ G_UNICODE_CURRENCY_SYMBOL,
+ G_UNICODE_MODIFIER_SYMBOL,
+ G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_LINE_SEPARATOR,
+ G_UNICODE_PARAGRAPH_SEPARATOR,
+ G_UNICODE_SPACE_SEPARATOR
+} GUnicodeType;
+
+
+#include "gunichartables.h"
+
+#define ATTR_TABLE(Page) (((Page) <= G_UNICODE_LAST_PAGE_PART1) \
+ ? attr_table_part1[Page] \
+ : attr_table_part2[(Page) - 0xe00])
+
+#define ATTTABLE(Page, Char) \
+ ((ATTR_TABLE(Page) == G_UNICODE_MAX_TABLE_INDEX) ? 0 : (attr_data[ATTR_TABLE(Page)][Char]))
+
+
+#define TTYPE_PART1(Page, Char) \
+ ((type_table_part1[Page] >= G_UNICODE_MAX_TABLE_INDEX) \
+ ? (type_table_part1[Page] - G_UNICODE_MAX_TABLE_INDEX) \
+ : (type_data[type_table_part1[Page]][Char]))
+
+#define TTYPE_PART2(Page, Char) \
+ ((type_table_part2[Page] >= G_UNICODE_MAX_TABLE_INDEX) \
+ ? (type_table_part2[Page] - G_UNICODE_MAX_TABLE_INDEX) \
+ : (type_data[type_table_part2[Page]][Char]))
+
+#define TYPE(Char) \
+ (((Char) <= G_UNICODE_LAST_CHAR_PART1) \
+ ? TTYPE_PART1 ((Char) >> 8, (Char) & 0xff) \
+ : (((Char) >= 0xe0000 && (Char) <= G_UNICODE_LAST_CHAR) \
+ ? TTYPE_PART2 (((Char) - 0xe0000) >> 8, (Char) & 0xff) \
+ : G_UNICODE_UNASSIGNED))
+
+/* Count the number of elements in an array. The array must be defined
+ * as such; using this with a dynamically allocated array will give
+ * incorrect results.
+ */
+#define G_N_ELEMENTS(arr) (sizeof (arr) / sizeof ((arr)[0]))
+
+
+
+
+#if defined(LUCENE_USE_INTERNAL_CHAR_FUNCTIONS)
+#ifdef _LUCENE_PRAGMA_WARNINGS
+ #pragma message ("===== Using internal character function =====")
+#else
+#if !(defined(Q_OS_SOLARIS) || defined(Q_CC_MIPS))
+#warning "===== Using internal character function ====="
+#endif
+#endif
+
+bool cl_isletter(gunichar c)
+{
+ int t = TYPE (c);
+ switch(t)
+ {
+ case G_UNICODE_LOWERCASE_LETTER: return true;
+ case G_UNICODE_TITLECASE_LETTER: return true;
+ case G_UNICODE_UPPERCASE_LETTER: return true;
+ case G_UNICODE_MODIFIER_LETTER: return true;
+ case G_UNICODE_OTHER_LETTER: return true;
+ default: return false;
+ }
+}
+
+bool cl_isalnum(gunichar c)
+{
+ int t = TYPE (c);
+ switch(t)
+ {
+ case G_UNICODE_LOWERCASE_LETTER: return true;
+ case G_UNICODE_TITLECASE_LETTER: return true;
+ case G_UNICODE_UPPERCASE_LETTER: return true;
+ case G_UNICODE_MODIFIER_LETTER: return true;
+ case G_UNICODE_OTHER_LETTER: return true;
+ case G_UNICODE_DECIMAL_NUMBER: return true;
+ case G_UNICODE_LETTER_NUMBER: return true;
+ case G_UNICODE_OTHER_NUMBER: return true;
+ default: return false;
+ }
+}
+
+bool cl_isdigit(gunichar c)
+{
+ int t = TYPE (c);
+ switch(t)
+ {
+ case G_UNICODE_DECIMAL_NUMBER: return true;
+ case G_UNICODE_LETTER_NUMBER: return true;
+ case G_UNICODE_OTHER_NUMBER: return true;
+ default: return false;
+ }
+}
+
+/**
+ * cl_isspace:
+ * @c: a Unicode character
+ *
+ * Determines whether a character is a space, tab, or line separator
+ * (newline, carriage return, etc.). Given some UTF-8 text, obtain a
+ * character value with lucene_utf8towc().
+ *
+ * (Note: don't use this to do word breaking; you have to use
+ * Pango or equivalent to get word breaking right, the algorithm
+ * is fairly complex.)
+ *
+ * Return value: %TRUE if @c is a punctuation character
+ **/
+bool cl_isspace (gunichar c)
+{
+ switch (c)
+ {
+ /* special-case these since Unicode thinks they are not spaces */
+ case '\t':
+ case '\n':
+ case '\r':
+ case '\f':
+ return true;
+
+ default:
+ {
+ int t = TYPE ((gunichar)c);
+ return (t == G_UNICODE_SPACE_SEPARATOR || t == G_UNICODE_LINE_SEPARATOR
+ || t == G_UNICODE_PARAGRAPH_SEPARATOR);
+ }
+ }
+}
+
+
+
+/**
+ * cl_tolower:
+ * @c: a Unicode character.
+ *
+ * Converts a character to lower case.
+ *
+ * Return value: the result of converting @c to lower case.
+ * If @c is not an upperlower or titlecase character,
+ * or has no lowercase equivalent @c is returned unchanged.
+ **/
+TCHAR cl_tolower (TCHAR ch)
+{
+ gunichar c=ch;
+ int t = TYPE ((gunichar)c);
+ if (t == G_UNICODE_UPPERCASE_LETTER)
+ {
+ gunichar val = ATTTABLE (c >> 8, c & 0xff);
+ if (val >= 0x1000000)
+ {
+ const gchar *p = special_case_table + val - 0x1000000;
+ int len=0;
+ wchar_t ret=0;
+ lucene_utf8towc(&ret,p,6);
+#ifdef _UCS2
+ return ret;
+#else
+ return LUCENE_OOR_CHAR(ret);
+#endif
+ //return cl_utf8_get_char (p, &len);
+ }else
+ return val ? val : c;
+ }else if (t == G_UNICODE_TITLECASE_LETTER){
+ unsigned int i;
+ for (i = 0; i < G_N_ELEMENTS (title_table); ++i)
+ {
+ if (title_table[i][0] == c)
+ return title_table[i][2];
+ }
+ }
+ return c;
+}
+
+/**
+ * cl_toupper:
+ * @c: a Unicode character
+ *
+ * Converts a character to uppercase.
+ *
+ * Return value: the result of converting @c to uppercase.
+ * If @c is not an lowercase or titlecase character,
+ * or has no upper case equivalent @c is returned unchanged.
+ **/
+TCHAR cl_toupper (TCHAR ch)
+{
+ gunichar c=ch;
+ int t = TYPE (c);
+ if (t == G_UNICODE_LOWERCASE_LETTER)
+ {
+ gunichar val = ATTTABLE (c >> 8, c & 0xff);
+ if (val >= 0x1000000)
+ {
+ const gchar *p = special_case_table + val - 0x1000000;
+
+ wchar_t ret=0;
+ lucene_utf8towc(&ret,p,6);
+#ifdef _UCS2
+ return ret;
+#else
+ return LUCENE_OOR_CHAR(ret);
+#endif
+ //return lucene_utf8towc (p);
+ }
+ else
+ return val ? val : c;
+ }
+ else if (t == G_UNICODE_TITLECASE_LETTER)
+ {
+ unsigned int i;
+ for (i = 0; i < G_N_ELEMENTS (title_table); ++i)
+ {
+ if (title_table[i][0] == c)
+ return title_table[i][1];
+ }
+ }
+ return c;
+}
+
+
+
+/**
+ * cl_tcasefold:
+ * @str: a unicode string
+ *
+ * Converts a string into a form that is independent of case. The
+ * result will not correspond to any particular case, but can be
+ * compared for equality or ordered with the results of calling
+ * cl_tcasefold() on other strings.
+ *
+ * Note that calling cl_tcasefold() followed by g_utf8_collate() is
+ * only an approximation to the correct linguistic case insensitive
+ * ordering, though it is a fairly good one. Getting this exactly
+ * right would require a more sophisticated collation function that
+ * takes case sensitivity into account. GLib does not currently
+ * provide such a function.
+ *
+ * Return value: a newly allocated string, that is a
+ * case independent form of @str.
+ **/
+TCHAR cl_tcasefold(const TCHAR ch){
+ int start = 0;
+ int end = G_N_ELEMENTS (casefold_table);
+
+ if (ch >= casefold_table[start].ch &&
+ ch <= casefold_table[end - 1].ch)
+ {
+ while (1)
+ {
+ int half = (start + end) / 2;
+ if (ch == casefold_table[half].ch)
+ {
+ wchar_t ret=0;
+ lucene_utf8towc(&ret,casefold_table[half].data,6);
+
+ #ifdef _UCS2
+ return ret;
+ #else
+ LUCENE_OOR_CHAR(ret)
+ #endif
+ }else if (half == start){
+ break;
+ }else if (ch > casefold_table[half].ch){
+ start = half;
+ }else{
+ end = half;
+ }
+ }
+ }
+ return cl_tolower(ch);
+
+}
+
+
+//this function was not taken from gnome
+TCHAR* cl_tcscasefold( TCHAR * str, int len ) //len default is -1
+{
+ TCHAR *p = str;
+ while ((len < 0 || p < str + len) && *p)
+ {
+ *p = cl_tcasefold(*p);
+ p++;
+ }
+ return str;
+}
+//this function was not taken from gnome
+int cl_tcscasefoldcmp(const TCHAR * dst, const TCHAR * src){
+ TCHAR f,l;
+
+ do{
+ f = cl_tcasefold( (*(dst++)) );
+ l = cl_tcasefold( (*(src++)) );
+ } while ( (f) && (f == l) );
+
+ return (int)(f - l);
+}
+
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/config/gunichartables.h b/src/3rdparty/clucene/src/CLucene/config/gunichartables.h
new file mode 100644
index 0000000..182a870
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/config/gunichartables.h
@@ -0,0 +1,11264 @@
+/* This file is automatically generated. DO NOT EDIT!
+ Instead, edit gen-unicode-tables.pl and re-run. */
+
+#ifndef CHARTABLES_H
+#define CHARTABLES_H
+
+#define G_UNICODE_DATA_VERSION "4.0"
+
+#define G_UNICODE_LAST_CHAR 0x10ffff
+
+#define G_UNICODE_MAX_TABLE_INDEX 10000
+
+#define G_UNICODE_LAST_CHAR_PART1 0x2FAFF
+
+#define G_UNICODE_LAST_PAGE_PART1 762
+
+static const char type_data[][256] = {
+ { /* page 0, index 0 */
+ G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL,
+ G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL,
+ G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL,
+ G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL,
+ G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL,
+ G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL,
+ G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL,
+ G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL,
+ G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL,
+ G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL,
+ G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_SPACE_SEPARATOR,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_CURRENCY_SYMBOL,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION,
+ G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_DASH_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_MODIFIER_SYMBOL,
+ G_UNICODE_CONNECT_PUNCTUATION, G_UNICODE_MODIFIER_SYMBOL,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_MATH_SYMBOL, G_UNICODE_CONTROL,
+ G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL,
+ G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL,
+ G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL,
+ G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL,
+ G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL,
+ G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL,
+ G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL,
+ G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL,
+ G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL,
+ G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_CONTROL,
+ G_UNICODE_CONTROL, G_UNICODE_CONTROL, G_UNICODE_SPACE_SEPARATOR,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_CURRENCY_SYMBOL,
+ G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL,
+ G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_INITIAL_PUNCTUATION, G_UNICODE_MATH_SYMBOL, G_UNICODE_FORMAT,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_MODIFIER_SYMBOL,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_MODIFIER_SYMBOL,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_FINAL_PUNCTUATION, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER
+ },
+ { /* page 1, index 1 */
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_TITLECASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_TITLECASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_TITLECASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_TITLECASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER
+ },
+ { /* page 2, index 2 */
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_SYMBOL,
+ G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL,
+ G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_SYMBOL,
+ G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL,
+ G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL,
+ G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL,
+ G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL,
+ G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL,
+ G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL,
+ G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL,
+ G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL,
+ G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL,
+ G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL,
+ G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL,
+ G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL,
+ G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL,
+ G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL,
+ G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL,
+ G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL,
+ G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL,
+ G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL,
+ G_UNICODE_MODIFIER_SYMBOL
+ },
+ { /* page 3, index 3 */
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_MODIFIER_SYMBOL,
+ G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED
+ },
+ { /* page 4, index 4 */
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED,
+ G_UNICODE_ENCLOSING_MARK, G_UNICODE_ENCLOSING_MARK,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED
+ },
+ { /* page 5, index 5 */
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_UNASSIGNED, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_DASH_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+ },
+ { /* page 6, index 6 */
+ G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_MODIFIER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_FORMAT, G_UNICODE_ENCLOSING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_LETTER
+ },
+ { /* page 7, index 7 */
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_UNASSIGNED, G_UNICODE_FORMAT, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+ },
+ { /* page 9, index 8 */
+ G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+ },
+ { /* page 10, index 9 */
+ G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+ },
+ { /* page 11, index 10 */
+ G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED
+ },
+ { /* page 12, index 11 */
+ G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+ },
+ { /* page 13, index 12 */
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+ },
+ { /* page 14, index 13 */
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_CURRENCY_SYMBOL,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_MODIFIER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+ },
+ { /* page 15, index 14 */
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_OPEN_PUNCTUATION,
+ G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION,
+ G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+ },
+ { /* page 16, index 15 */
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+ },
+ { /* page 17, index 16 */
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED
+ },
+ { /* page 18, index 17 */
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER
+ },
+ { /* page 19, index 18 */
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED
+ },
+ { /* page 20, index 19 */
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER
+ },
+ { /* page 22, index 20 */
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_SPACE_SEPARATOR, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OPEN_PUNCTUATION,
+ G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER,
+ G_UNICODE_LETTER_NUMBER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED
+ },
+ { /* page 23, index 21 */
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_FORMAT,
+ G_UNICODE_FORMAT, G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_CURRENCY_SYMBOL,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+ },
+ { /* page 24, index 22 */
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_DASH_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_SPACE_SEPARATOR, G_UNICODE_UNASSIGNED,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+ },
+ { /* page 25, index 23 */
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL
+ },
+ { /* page 29, index 24 */
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED
+ },
+ { /* page 30, index 25 */
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED
+ },
+ { /* page 31, index 26 */
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER,
+ G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER,
+ G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER,
+ G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER,
+ G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER,
+ G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER,
+ G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER,
+ G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER,
+ G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER,
+ G_UNICODE_TITLECASE_LETTER, G_UNICODE_TITLECASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_TITLECASE_LETTER, G_UNICODE_MODIFIER_SYMBOL,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_MODIFIER_SYMBOL,
+ G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_TITLECASE_LETTER, G_UNICODE_MODIFIER_SYMBOL,
+ G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL,
+ G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_SYMBOL,
+ G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_TITLECASE_LETTER, G_UNICODE_MODIFIER_SYMBOL,
+ G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_UNASSIGNED
+ },
+ { /* page 32, index 27 */
+ G_UNICODE_SPACE_SEPARATOR, G_UNICODE_SPACE_SEPARATOR,
+ G_UNICODE_SPACE_SEPARATOR, G_UNICODE_SPACE_SEPARATOR,
+ G_UNICODE_SPACE_SEPARATOR, G_UNICODE_SPACE_SEPARATOR,
+ G_UNICODE_SPACE_SEPARATOR, G_UNICODE_SPACE_SEPARATOR,
+ G_UNICODE_SPACE_SEPARATOR, G_UNICODE_SPACE_SEPARATOR,
+ G_UNICODE_SPACE_SEPARATOR, G_UNICODE_SPACE_SEPARATOR, G_UNICODE_FORMAT,
+ G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT,
+ G_UNICODE_DASH_PUNCTUATION, G_UNICODE_DASH_PUNCTUATION,
+ G_UNICODE_DASH_PUNCTUATION, G_UNICODE_DASH_PUNCTUATION,
+ G_UNICODE_DASH_PUNCTUATION, G_UNICODE_DASH_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_INITIAL_PUNCTUATION, G_UNICODE_FINAL_PUNCTUATION,
+ G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_INITIAL_PUNCTUATION,
+ G_UNICODE_INITIAL_PUNCTUATION, G_UNICODE_FINAL_PUNCTUATION,
+ G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_INITIAL_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_LINE_SEPARATOR, G_UNICODE_PARAGRAPH_SEPARATOR,
+ G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT,
+ G_UNICODE_FORMAT, G_UNICODE_SPACE_SEPARATOR, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_INITIAL_PUNCTUATION, G_UNICODE_FINAL_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_CONNECT_PUNCTUATION, G_UNICODE_CONNECT_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_CONNECT_PUNCTUATION,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_SPACE_SEPARATOR, G_UNICODE_FORMAT,
+ G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT,
+ G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_CURRENCY_SYMBOL,
+ G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL,
+ G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL,
+ G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL,
+ G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL,
+ G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL,
+ G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL,
+ G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL,
+ G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL,
+ G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_ENCLOSING_MARK, G_UNICODE_ENCLOSING_MARK,
+ G_UNICODE_ENCLOSING_MARK, G_UNICODE_ENCLOSING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_ENCLOSING_MARK,
+ G_UNICODE_ENCLOSING_MARK, G_UNICODE_ENCLOSING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+ },
+ { /* page 33, index 28 */
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER,
+ G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER,
+ G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER,
+ G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER,
+ G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER,
+ G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER,
+ G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER,
+ G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER,
+ G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER,
+ G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER,
+ G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER,
+ G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER,
+ G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER,
+ G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER,
+ G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER,
+ G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER,
+ G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER,
+ G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL
+ },
+ { /* page 35, index 29 */
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_OPEN_PUNCTUATION,
+ G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED
+ },
+ { /* page 36, index 30 */
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER
+ },
+ { /* page 37, index 31 */
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL
+ },
+ { /* page 38, index 32 */
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED
+ },
+ { /* page 39, index 33 */
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION,
+ G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION,
+ G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION,
+ G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION,
+ G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION,
+ G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION,
+ G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_OPEN_PUNCTUATION,
+ G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION,
+ G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION,
+ G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL
+ },
+ { /* page 41, index 34 */
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_OPEN_PUNCTUATION,
+ G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION,
+ G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION,
+ G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION,
+ G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION,
+ G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION,
+ G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION,
+ G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION,
+ G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION,
+ G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION,
+ G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION,
+ G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_OPEN_PUNCTUATION,
+ G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION,
+ G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_OPEN_PUNCTUATION,
+ G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL
+ },
+ { /* page 43, index 35 */
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED
+ },
+ { /* page 46, index 36 */
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED
+ },
+ { /* page 47, index 37 */
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED
+ },
+ { /* page 48, index 38 */
+ G_UNICODE_SPACE_SEPARATOR, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_LETTER_NUMBER,
+ G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION,
+ G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION,
+ G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION,
+ G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION,
+ G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION,
+ G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION,
+ G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION,
+ G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION,
+ G_UNICODE_DASH_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION,
+ G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER,
+ G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER,
+ G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER,
+ G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER,
+ G_UNICODE_LETTER_NUMBER, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_DASH_PUNCTUATION,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_LETTER_NUMBER, G_UNICODE_LETTER_NUMBER,
+ G_UNICODE_LETTER_NUMBER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_MODIFIER_SYMBOL,
+ G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_DASH_PUNCTUATION, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_CONNECT_PUNCTUATION, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_OTHER_LETTER
+ },
+ { /* page 49, index 39 */
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER
+ },
+ { /* page 50, index 40 */
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_UNASSIGNED
+ },
+ { /* page 77, index 41 */
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL
+ },
+ { /* page 159, index 42 */
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED
+ },
+ { /* page 164, index 43 */
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED
+ },
+ { /* page 215, index 44 */
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED
+ },
+ { /* page 250, index 45 */
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED
+ },
+ { /* page 251, index 46 */
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER
+ },
+ { /* page 253, index 47 */
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED
+ },
+ { /* page 254, index 48 */
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_DASH_PUNCTUATION, G_UNICODE_DASH_PUNCTUATION,
+ G_UNICODE_CONNECT_PUNCTUATION, G_UNICODE_CONNECT_PUNCTUATION,
+ G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION,
+ G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION,
+ G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION,
+ G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION,
+ G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION,
+ G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION,
+ G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION,
+ G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_CONNECT_PUNCTUATION, G_UNICODE_CONNECT_PUNCTUATION,
+ G_UNICODE_CONNECT_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_DASH_PUNCTUATION,
+ G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION,
+ G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION,
+ G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_DASH_PUNCTUATION, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_FORMAT
+ },
+ { /* page 255, index 49 */
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_DASH_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_MODIFIER_SYMBOL,
+ G_UNICODE_CONNECT_PUNCTUATION, G_UNICODE_MODIFIER_SYMBOL,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_OPEN_PUNCTUATION, G_UNICODE_CLOSE_PUNCTUATION,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OPEN_PUNCTUATION,
+ G_UNICODE_CLOSE_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_CONNECT_PUNCTUATION, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_MODIFIER_LETTER, G_UNICODE_MODIFIER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_CURRENCY_SYMBOL,
+ G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MODIFIER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_CURRENCY_SYMBOL, G_UNICODE_CURRENCY_SYMBOL,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED
+ },
+ { /* page 256, index 50 */
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED
+ },
+ { /* page 257, index 51 */
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_OTHER_PUNCTUATION,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+ },
+ { /* page 259, index 52 */
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER, G_UNICODE_OTHER_NUMBER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_LETTER_NUMBER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_PUNCTUATION, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED
+ },
+ { /* page 260, index 53 */
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+ },
+ { /* page 264, index 54 */
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED
+ },
+ { /* page 464, index 55 */
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED
+ },
+ { /* page 465, index 56 */
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK,
+ G_UNICODE_COMBINING_MARK, G_UNICODE_COMBINING_MARK, G_UNICODE_FORMAT,
+ G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT,
+ G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED
+ },
+ { /* page 467, index 57 */
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL, G_UNICODE_OTHER_SYMBOL,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED
+ },
+ { /* page 468, index 58 */
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER
+ },
+ { /* page 469, index 59 */
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER
+ },
+ { /* page 470, index 60 */
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_MATH_SYMBOL, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER
+ },
+ { /* page 471, index 61 */
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_UPPERCASE_LETTER,
+ G_UNICODE_UPPERCASE_LETTER, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_MATH_SYMBOL,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_LOWERCASE_LETTER, G_UNICODE_LOWERCASE_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER,
+ G_UNICODE_DECIMAL_NUMBER, G_UNICODE_DECIMAL_NUMBER
+ },
+ { /* page 678, index 62 */
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED
+ },
+ { /* page 762, index 63 */
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER, G_UNICODE_OTHER_LETTER,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED
+ },
+ { /* page 3584, index 64 */
+ G_UNICODE_UNASSIGNED, G_UNICODE_FORMAT, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_FORMAT,
+ G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT,
+ G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT,
+ G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT,
+ G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT,
+ G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT,
+ G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT,
+ G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT,
+ G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT,
+ G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT,
+ G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT,
+ G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT,
+ G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT,
+ G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT,
+ G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT,
+ G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT,
+ G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT,
+ G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT,
+ G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT,
+ G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT,
+ G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT,
+ G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT,
+ G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT,
+ G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT,
+ G_UNICODE_FORMAT, G_UNICODE_FORMAT, G_UNICODE_FORMAT,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED
+ },
+ { /* page 3585, index 65 */
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_NON_SPACING_MARK, G_UNICODE_NON_SPACING_MARK,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED
+ },
+ { /* page 4095, index 66 */
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED
+ },
+ { /* page 4351, index 67 */
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE,
+ G_UNICODE_PRIVATE_USE, G_UNICODE_PRIVATE_USE, G_UNICODE_UNASSIGNED,
+ G_UNICODE_UNASSIGNED
+ }
+};
+
+/* U+0000 through U+2FAFF */
+static const gint16 type_table_part1[763] = {
+ 0 /* page 0 */,
+ 1 /* page 1 */,
+ 2 /* page 2 */,
+ 3 /* page 3 */,
+ 4 /* page 4 */,
+ 5 /* page 5 */,
+ 6 /* page 6 */,
+ 7 /* page 7 */,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ 8 /* page 9 */,
+ 9 /* page 10 */,
+ 10 /* page 11 */,
+ 11 /* page 12 */,
+ 12 /* page 13 */,
+ 13 /* page 14 */,
+ 14 /* page 15 */,
+ 15 /* page 16 */,
+ 16 /* page 17 */,
+ 17 /* page 18 */,
+ 18 /* page 19 */,
+ 19 /* page 20 */,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ 20 /* page 22 */,
+ 21 /* page 23 */,
+ 22 /* page 24 */,
+ 23 /* page 25 */,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ 24 /* page 29 */,
+ 25 /* page 30 */,
+ 26 /* page 31 */,
+ 27 /* page 32 */,
+ 28 /* page 33 */,
+ G_UNICODE_MATH_SYMBOL + G_UNICODE_MAX_TABLE_INDEX,
+ 29 /* page 35 */,
+ 30 /* page 36 */,
+ 31 /* page 37 */,
+ 32 /* page 38 */,
+ 33 /* page 39 */,
+ G_UNICODE_OTHER_SYMBOL + G_UNICODE_MAX_TABLE_INDEX,
+ 34 /* page 41 */,
+ G_UNICODE_MATH_SYMBOL + G_UNICODE_MAX_TABLE_INDEX,
+ 35 /* page 43 */,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ 36 /* page 46 */,
+ 37 /* page 47 */,
+ 38 /* page 48 */,
+ 39 /* page 49 */,
+ 40 /* page 50 */,
+ G_UNICODE_OTHER_SYMBOL + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ 41 /* page 77 */,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ 42 /* page 159 */,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ 43 /* page 164 */,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ 44 /* page 215 */,
+ G_UNICODE_SURROGATE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_SURROGATE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_SURROGATE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_SURROGATE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_SURROGATE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_SURROGATE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_SURROGATE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_SURROGATE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ 45 /* page 250 */,
+ 46 /* page 251 */,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ 47 /* page 253 */,
+ 48 /* page 254 */,
+ 49 /* page 255 */,
+ 50 /* page 256 */,
+ 51 /* page 257 */,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ 52 /* page 259 */,
+ 53 /* page 260 */,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ 54 /* page 264 */,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ 55 /* page 464 */,
+ 56 /* page 465 */,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ 57 /* page 467 */,
+ 58 /* page 468 */,
+ 59 /* page 469 */,
+ 60 /* page 470 */,
+ 61 /* page 471 */,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ 62 /* page 678 */,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_OTHER_LETTER + G_UNICODE_MAX_TABLE_INDEX,
+ 63 /* page 762 */
+};
+
+/* U+E0000 through U+10FFFF */
+static const gint16 type_table_part2[768] = {
+ 64 /* page 3584 */,
+ 65 /* page 3585 */,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_UNASSIGNED + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ 66 /* page 4095 */,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ G_UNICODE_PRIVATE_USE + G_UNICODE_MAX_TABLE_INDEX,
+ 67 /* page 4351 */
+};
+
+static const gunichar attr_data[][256] = {
+ { /* page 0, index 0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005,
+ 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079,
+ 0x007a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0041, 0x0042,
+ 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a, 0x004b,
+ 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054,
+ 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x039c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5,
+ 0x00e6, 0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee,
+ 0x00ef, 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x0000,
+ 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x1000000,
+ 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, 0x00c8,
+ 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, 0x00d0, 0x00d1,
+ 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x0000, 0x00d8, 0x00d9, 0x00da,
+ 0x00db, 0x00dc, 0x00dd, 0x00de, 0x0178
+ },
+ { /* page 1, index 1 */
+ 0x0101, 0x0100, 0x0103, 0x0102, 0x0105, 0x0104, 0x0107, 0x0106, 0x0109,
+ 0x0108, 0x010b, 0x010a, 0x010d, 0x010c, 0x010f, 0x010e, 0x0111, 0x0110,
+ 0x0113, 0x0112, 0x0115, 0x0114, 0x0117, 0x0116, 0x0119, 0x0118, 0x011b,
+ 0x011a, 0x011d, 0x011c, 0x011f, 0x011e, 0x0121, 0x0120, 0x0123, 0x0122,
+ 0x0125, 0x0124, 0x0127, 0x0126, 0x0129, 0x0128, 0x012b, 0x012a, 0x012d,
+ 0x012c, 0x012f, 0x012e, 0x1000007, 0x0049, 0x0133, 0x0132, 0x0135,
+ 0x0134, 0x0137, 0x0136, 0x0000, 0x013a, 0x0139, 0x013c, 0x013b, 0x013e,
+ 0x013d, 0x0140, 0x013f, 0x0142, 0x0141, 0x0144, 0x0143, 0x0146, 0x0145,
+ 0x0148, 0x0147, 0x1000086, 0x014b, 0x014a, 0x014d, 0x014c, 0x014f,
+ 0x014e, 0x0151, 0x0150, 0x0153, 0x0152, 0x0155, 0x0154, 0x0157, 0x0156,
+ 0x0159, 0x0158, 0x015b, 0x015a, 0x015d, 0x015c, 0x015f, 0x015e, 0x0161,
+ 0x0160, 0x0163, 0x0162, 0x0165, 0x0164, 0x0167, 0x0166, 0x0169, 0x0168,
+ 0x016b, 0x016a, 0x016d, 0x016c, 0x016f, 0x016e, 0x0171, 0x0170, 0x0173,
+ 0x0172, 0x0175, 0x0174, 0x0177, 0x0176, 0x00ff, 0x017a, 0x0179, 0x017c,
+ 0x017b, 0x017e, 0x017d, 0x0053, 0x0000, 0x0253, 0x0183, 0x0182, 0x0185,
+ 0x0184, 0x0254, 0x0188, 0x0187, 0x0256, 0x0257, 0x018c, 0x018b, 0x0000,
+ 0x01dd, 0x0259, 0x025b, 0x0192, 0x0191, 0x0260, 0x0263, 0x01f6, 0x0269,
+ 0x0268, 0x0199, 0x0198, 0x0000, 0x0000, 0x026f, 0x0272, 0x0220, 0x0275,
+ 0x01a1, 0x01a0, 0x01a3, 0x01a2, 0x01a5, 0x01a4, 0x0280, 0x01a8, 0x01a7,
+ 0x0283, 0x0000, 0x0000, 0x01ad, 0x01ac, 0x0288, 0x01b0, 0x01af, 0x028a,
+ 0x028b, 0x01b4, 0x01b3, 0x01b6, 0x01b5, 0x0292, 0x01b9, 0x01b8, 0x0000,
+ 0x0000, 0x01bd, 0x01bc, 0x0000, 0x01f7, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x01c6, 0x0000, 0x01c4, 0x01c9, 0x0000, 0x01c7, 0x01cc, 0x0000, 0x01ca,
+ 0x01ce, 0x01cd, 0x01d0, 0x01cf, 0x01d2, 0x01d1, 0x01d4, 0x01d3, 0x01d6,
+ 0x01d5, 0x01d8, 0x01d7, 0x01da, 0x01d9, 0x01dc, 0x01db, 0x018e, 0x01df,
+ 0x01de, 0x01e1, 0x01e0, 0x01e3, 0x01e2, 0x01e5, 0x01e4, 0x01e7, 0x01e6,
+ 0x01e9, 0x01e8, 0x01eb, 0x01ea, 0x01ed, 0x01ec, 0x01ef, 0x01ee,
+ 0x10000ad, 0x01f3, 0x0000, 0x01f1, 0x01f5, 0x01f4, 0x0195, 0x01bf,
+ 0x01f9, 0x01f8, 0x01fb, 0x01fa, 0x01fd, 0x01fc, 0x01ff, 0x01fe
+ },
+ { /* page 2, index 2 */
+ 0x0201, 0x0200, 0x0203, 0x0202, 0x0205, 0x0204, 0x0207, 0x0206, 0x0209,
+ 0x0208, 0x020b, 0x020a, 0x020d, 0x020c, 0x020f, 0x020e, 0x0211, 0x0210,
+ 0x0213, 0x0212, 0x0215, 0x0214, 0x0217, 0x0216, 0x0219, 0x0218, 0x021b,
+ 0x021a, 0x021d, 0x021c, 0x021f, 0x021e, 0x019e, 0x0000, 0x0223, 0x0222,
+ 0x0225, 0x0224, 0x0227, 0x0226, 0x0229, 0x0228, 0x022b, 0x022a, 0x022d,
+ 0x022c, 0x022f, 0x022e, 0x0231, 0x0230, 0x0233, 0x0232, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0181, 0x0186, 0x0000, 0x0189, 0x018a, 0x0000, 0x018f,
+ 0x0000, 0x0190, 0x0000, 0x0000, 0x0000, 0x0000, 0x0193, 0x0000, 0x0000,
+ 0x0194, 0x0000, 0x0000, 0x0000, 0x0000, 0x0197, 0x0196, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x019c, 0x0000, 0x0000, 0x019d, 0x0000, 0x0000,
+ 0x019f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x01a6, 0x0000, 0x0000, 0x01a9, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x01ae, 0x0000, 0x01b1, 0x01b2, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x01b7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000
+ },
+ { /* page 3, index 3 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03ac,
+ 0x0000, 0x03ad, 0x03ae, 0x03af, 0x0000, 0x03cc, 0x0000, 0x03cd, 0x03ce,
+ 0x100008f, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7,
+ 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0,
+ 0x03c1, 0x0000, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9,
+ 0x03ca, 0x03cb, 0x0386, 0x0388, 0x0389, 0x038a, 0x100009e, 0x0391,
+ 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039a,
+ 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0, 0x03a1, 0x03a3, 0x03a3,
+ 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, 0x03aa, 0x03ab, 0x038c,
+ 0x038e, 0x038f, 0x0000, 0x0392, 0x0398, 0x0000, 0x0000, 0x0000, 0x03a6,
+ 0x03a0, 0x0000, 0x03d9, 0x03d8, 0x03db, 0x03da, 0x03dd, 0x03dc, 0x03df,
+ 0x03de, 0x03e1, 0x03e0, 0x03e3, 0x03e2, 0x03e5, 0x03e4, 0x03e7, 0x03e6,
+ 0x03e9, 0x03e8, 0x03eb, 0x03ea, 0x03ed, 0x03ec, 0x03ef, 0x03ee, 0x039a,
+ 0x03a1, 0x03f9, 0x0000, 0x03b8, 0x0395, 0x0000, 0x03f8, 0x03f7, 0x03f2,
+ 0x03fb, 0x03fa, 0x0000, 0x0000, 0x0000, 0x0000
+ },
+ { /* page 4, index 4 */
+ 0x0450, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, 0x0458,
+ 0x0459, 0x045a, 0x045b, 0x045c, 0x045d, 0x045e, 0x045f, 0x0430, 0x0431,
+ 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043a,
+ 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, 0x0440, 0x0441, 0x0442, 0x0443,
+ 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c,
+ 0x044d, 0x044e, 0x044f, 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415,
+ 0x0416, 0x0417, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e,
+ 0x041f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
+ 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, 0x0400,
+ 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, 0x0408, 0x0409,
+ 0x040a, 0x040b, 0x040c, 0x040d, 0x040e, 0x040f, 0x0461, 0x0460, 0x0463,
+ 0x0462, 0x0465, 0x0464, 0x0467, 0x0466, 0x0469, 0x0468, 0x046b, 0x046a,
+ 0x046d, 0x046c, 0x046f, 0x046e, 0x0471, 0x0470, 0x0473, 0x0472, 0x0475,
+ 0x0474, 0x0477, 0x0476, 0x0479, 0x0478, 0x047b, 0x047a, 0x047d, 0x047c,
+ 0x047f, 0x047e, 0x0481, 0x0480, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x048b, 0x048a, 0x048d, 0x048c, 0x048f, 0x048e,
+ 0x0491, 0x0490, 0x0493, 0x0492, 0x0495, 0x0494, 0x0497, 0x0496, 0x0499,
+ 0x0498, 0x049b, 0x049a, 0x049d, 0x049c, 0x049f, 0x049e, 0x04a1, 0x04a0,
+ 0x04a3, 0x04a2, 0x04a5, 0x04a4, 0x04a7, 0x04a6, 0x04a9, 0x04a8, 0x04ab,
+ 0x04aa, 0x04ad, 0x04ac, 0x04af, 0x04ae, 0x04b1, 0x04b0, 0x04b3, 0x04b2,
+ 0x04b5, 0x04b4, 0x04b7, 0x04b6, 0x04b9, 0x04b8, 0x04bb, 0x04ba, 0x04bd,
+ 0x04bc, 0x04bf, 0x04be, 0x0000, 0x04c2, 0x04c1, 0x04c4, 0x04c3, 0x04c6,
+ 0x04c5, 0x04c8, 0x04c7, 0x04ca, 0x04c9, 0x04cc, 0x04cb, 0x04ce, 0x04cd,
+ 0x0000, 0x04d1, 0x04d0, 0x04d3, 0x04d2, 0x04d5, 0x04d4, 0x04d7, 0x04d6,
+ 0x04d9, 0x04d8, 0x04db, 0x04da, 0x04dd, 0x04dc, 0x04df, 0x04de, 0x04e1,
+ 0x04e0, 0x04e3, 0x04e2, 0x04e5, 0x04e4, 0x04e7, 0x04e6, 0x04e9, 0x04e8,
+ 0x04eb, 0x04ea, 0x04ed, 0x04ec, 0x04ef, 0x04ee, 0x04f1, 0x04f0, 0x04f3,
+ 0x04f2, 0x04f5, 0x04f4, 0x0000, 0x0000, 0x04f9, 0x04f8, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000
+ },
+ { /* page 5, index 5 */
+ 0x0501, 0x0500, 0x0503, 0x0502, 0x0505, 0x0504, 0x0507, 0x0506, 0x0509,
+ 0x0508, 0x050b, 0x050a, 0x050d, 0x050c, 0x050f, 0x050e, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0561, 0x0562, 0x0563, 0x0564, 0x0565,
+ 0x0566, 0x0567, 0x0568, 0x0569, 0x056a, 0x056b, 0x056c, 0x056d, 0x056e,
+ 0x056f, 0x0570, 0x0571, 0x0572, 0x0573, 0x0574, 0x0575, 0x0576, 0x0577,
+ 0x0578, 0x0579, 0x057a, 0x057b, 0x057c, 0x057d, 0x057e, 0x057f, 0x0580,
+ 0x0581, 0x0582, 0x0583, 0x0584, 0x0585, 0x0586, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0531, 0x0532,
+ 0x0533, 0x0534, 0x0535, 0x0536, 0x0537, 0x0538, 0x0539, 0x053a, 0x053b,
+ 0x053c, 0x053d, 0x053e, 0x053f, 0x0540, 0x0541, 0x0542, 0x0543, 0x0544,
+ 0x0545, 0x0546, 0x0547, 0x0548, 0x0549, 0x054a, 0x054b, 0x054c, 0x054d,
+ 0x054e, 0x054f, 0x0550, 0x0551, 0x0552, 0x0553, 0x0554, 0x0555, 0x0556,
+ 0x1000044, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
+ },
+ { /* page 6, index 6 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002,
+ 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002,
+ 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000
+ },
+ { /* page 9, index 7 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005,
+ 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003,
+ 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000
+ },
+ { /* page 10, index 8 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005,
+ 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003,
+ 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000
+ },
+ { /* page 11, index 9 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005,
+ 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003,
+ 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000
+ },
+ { /* page 12, index 10 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005,
+ 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003,
+ 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000
+ },
+ { /* page 13, index 11 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005,
+ 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000
+ },
+ { /* page 14, index 12 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000
+ },
+ { /* page 15, index 13 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003,
+ 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000
+ },
+ { /* page 16, index 14 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000
+ },
+ { /* page 19, index 15 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0003,
+ 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000
+ },
+ { /* page 23, index 16 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000
+ },
+ { /* page 24, index 17 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001,
+ 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000
+ },
+ { /* page 25, index 18 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001,
+ 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000
+ },
+ { /* page 30, index 19 */
+ 0x1e01, 0x1e00, 0x1e03, 0x1e02, 0x1e05, 0x1e04, 0x1e07, 0x1e06, 0x1e09,
+ 0x1e08, 0x1e0b, 0x1e0a, 0x1e0d, 0x1e0c, 0x1e0f, 0x1e0e, 0x1e11, 0x1e10,
+ 0x1e13, 0x1e12, 0x1e15, 0x1e14, 0x1e17, 0x1e16, 0x1e19, 0x1e18, 0x1e1b,
+ 0x1e1a, 0x1e1d, 0x1e1c, 0x1e1f, 0x1e1e, 0x1e21, 0x1e20, 0x1e23, 0x1e22,
+ 0x1e25, 0x1e24, 0x1e27, 0x1e26, 0x1e29, 0x1e28, 0x1e2b, 0x1e2a, 0x1e2d,
+ 0x1e2c, 0x1e2f, 0x1e2e, 0x1e31, 0x1e30, 0x1e33, 0x1e32, 0x1e35, 0x1e34,
+ 0x1e37, 0x1e36, 0x1e39, 0x1e38, 0x1e3b, 0x1e3a, 0x1e3d, 0x1e3c, 0x1e3f,
+ 0x1e3e, 0x1e41, 0x1e40, 0x1e43, 0x1e42, 0x1e45, 0x1e44, 0x1e47, 0x1e46,
+ 0x1e49, 0x1e48, 0x1e4b, 0x1e4a, 0x1e4d, 0x1e4c, 0x1e4f, 0x1e4e, 0x1e51,
+ 0x1e50, 0x1e53, 0x1e52, 0x1e55, 0x1e54, 0x1e57, 0x1e56, 0x1e59, 0x1e58,
+ 0x1e5b, 0x1e5a, 0x1e5d, 0x1e5c, 0x1e5f, 0x1e5e, 0x1e61, 0x1e60, 0x1e63,
+ 0x1e62, 0x1e65, 0x1e64, 0x1e67, 0x1e66, 0x1e69, 0x1e68, 0x1e6b, 0x1e6a,
+ 0x1e6d, 0x1e6c, 0x1e6f, 0x1e6e, 0x1e71, 0x1e70, 0x1e73, 0x1e72, 0x1e75,
+ 0x1e74, 0x1e77, 0x1e76, 0x1e79, 0x1e78, 0x1e7b, 0x1e7a, 0x1e7d, 0x1e7c,
+ 0x1e7f, 0x1e7e, 0x1e81, 0x1e80, 0x1e83, 0x1e82, 0x1e85, 0x1e84, 0x1e87,
+ 0x1e86, 0x1e89, 0x1e88, 0x1e8b, 0x1e8a, 0x1e8d, 0x1e8c, 0x1e8f, 0x1e8e,
+ 0x1e91, 0x1e90, 0x1e93, 0x1e92, 0x1e95, 0x1e94, 0x10000b6, 0x10000bf,
+ 0x10000c8, 0x10000d1, 0x10000da, 0x1e60, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x1ea1, 0x1ea0, 0x1ea3, 0x1ea2, 0x1ea5, 0x1ea4, 0x1ea7, 0x1ea6, 0x1ea9,
+ 0x1ea8, 0x1eab, 0x1eaa, 0x1ead, 0x1eac, 0x1eaf, 0x1eae, 0x1eb1, 0x1eb0,
+ 0x1eb3, 0x1eb2, 0x1eb5, 0x1eb4, 0x1eb7, 0x1eb6, 0x1eb9, 0x1eb8, 0x1ebb,
+ 0x1eba, 0x1ebd, 0x1ebc, 0x1ebf, 0x1ebe, 0x1ec1, 0x1ec0, 0x1ec3, 0x1ec2,
+ 0x1ec5, 0x1ec4, 0x1ec7, 0x1ec6, 0x1ec9, 0x1ec8, 0x1ecb, 0x1eca, 0x1ecd,
+ 0x1ecc, 0x1ecf, 0x1ece, 0x1ed1, 0x1ed0, 0x1ed3, 0x1ed2, 0x1ed5, 0x1ed4,
+ 0x1ed7, 0x1ed6, 0x1ed9, 0x1ed8, 0x1edb, 0x1eda, 0x1edd, 0x1edc, 0x1edf,
+ 0x1ede, 0x1ee1, 0x1ee0, 0x1ee3, 0x1ee2, 0x1ee5, 0x1ee4, 0x1ee7, 0x1ee6,
+ 0x1ee9, 0x1ee8, 0x1eeb, 0x1eea, 0x1eed, 0x1eec, 0x1eef, 0x1eee, 0x1ef1,
+ 0x1ef0, 0x1ef3, 0x1ef2, 0x1ef5, 0x1ef4, 0x1ef7, 0x1ef6, 0x1ef9, 0x1ef8,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
+ },
+ { /* page 31, index 20 */
+ 0x1f08, 0x1f09, 0x1f0a, 0x1f0b, 0x1f0c, 0x1f0d, 0x1f0e, 0x1f0f, 0x1f00,
+ 0x1f01, 0x1f02, 0x1f03, 0x1f04, 0x1f05, 0x1f06, 0x1f07, 0x1f18, 0x1f19,
+ 0x1f1a, 0x1f1b, 0x1f1c, 0x1f1d, 0x0000, 0x0000, 0x1f10, 0x1f11, 0x1f12,
+ 0x1f13, 0x1f14, 0x1f15, 0x0000, 0x0000, 0x1f28, 0x1f29, 0x1f2a, 0x1f2b,
+ 0x1f2c, 0x1f2d, 0x1f2e, 0x1f2f, 0x1f20, 0x1f21, 0x1f22, 0x1f23, 0x1f24,
+ 0x1f25, 0x1f26, 0x1f27, 0x1f38, 0x1f39, 0x1f3a, 0x1f3b, 0x1f3c, 0x1f3d,
+ 0x1f3e, 0x1f3f, 0x1f30, 0x1f31, 0x1f32, 0x1f33, 0x1f34, 0x1f35, 0x1f36,
+ 0x1f37, 0x1f48, 0x1f49, 0x1f4a, 0x1f4b, 0x1f4c, 0x1f4d, 0x0000, 0x0000,
+ 0x1f40, 0x1f41, 0x1f42, 0x1f43, 0x1f44, 0x1f45, 0x0000, 0x0000,
+ 0x10000e3, 0x1f59, 0x10000ee, 0x1f5b, 0x10000fd, 0x1f5d, 0x100010c,
+ 0x1f5f, 0x0000, 0x1f51, 0x0000, 0x1f53, 0x0000, 0x1f55, 0x0000, 0x1f57,
+ 0x1f68, 0x1f69, 0x1f6a, 0x1f6b, 0x1f6c, 0x1f6d, 0x1f6e, 0x1f6f, 0x1f60,
+ 0x1f61, 0x1f62, 0x1f63, 0x1f64, 0x1f65, 0x1f66, 0x1f67, 0x1fba, 0x1fbb,
+ 0x1fc8, 0x1fc9, 0x1fca, 0x1fcb, 0x1fda, 0x1fdb, 0x1ff8, 0x1ff9, 0x1fea,
+ 0x1feb, 0x1ffa, 0x1ffb, 0x0000, 0x0000, 0x10001b7, 0x10001c4, 0x10001d1,
+ 0x10001de, 0x10001eb, 0x10001f8, 0x1000205, 0x1000212, 0x100021f,
+ 0x1000229, 0x1000233, 0x100023d, 0x1000247, 0x1000251, 0x100025b,
+ 0x1000265, 0x100026f, 0x100027c, 0x1000289, 0x1000296, 0x10002a3,
+ 0x10002b0, 0x10002bd, 0x10002ca, 0x10002d7, 0x10002e1, 0x10002eb,
+ 0x10002f5, 0x10002ff, 0x1000309, 0x1000313, 0x100031d, 0x1000327,
+ 0x1000334, 0x1000341, 0x100034e, 0x100035b, 0x1000368, 0x1000375,
+ 0x1000382, 0x100038f, 0x1000399, 0x10003a3, 0x10003ad, 0x10003b7,
+ 0x10003c1, 0x10003cb, 0x10003d5, 0x1fb8, 0x1fb9, 0x100041e, 0x10003df,
+ 0x100042b, 0x0000, 0x100011b, 0x1000466, 0x1fb0, 0x1fb1, 0x1f70, 0x1f71,
+ 0x10003eb, 0x0000, 0x0399, 0x0000, 0x0000, 0x0000, 0x1000436, 0x10003f4,
+ 0x1000443, 0x0000, 0x1000126, 0x1000475, 0x1f72, 0x1f73, 0x1f74, 0x1f75,
+ 0x1000400, 0x0000, 0x0000, 0x0000, 0x1fd8, 0x1fd9, 0x1000131, 0x1000140,
+ 0x0000, 0x0000, 0x100014f, 0x100015a, 0x1fd0, 0x1fd1, 0x1f76, 0x1f77,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x1fe8, 0x1fe9, 0x1000169, 0x1000178,
+ 0x1000187, 0x1fec, 0x1000192, 0x100019d, 0x1fe0, 0x1fe1, 0x1f7a, 0x1f7b,
+ 0x1fe5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x100044e, 0x1000409,
+ 0x100045b, 0x0000, 0x10001ac, 0x1000484, 0x1f78, 0x1f79, 0x1f7c, 0x1f7d,
+ 0x1000415, 0x0000, 0x0000, 0x0000
+ },
+ { /* page 33, index 21 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x03c9, 0x0000, 0x0000, 0x0000, 0x006b, 0x00e5, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000
+ },
+ { /* page 251, index 22 */
+ 0x100000f, 0x1000016, 0x100001d, 0x1000024, 0x100002d, 0x1000036,
+ 0x100003d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x100004f, 0x100005a, 0x1000065,
+ 0x1000070, 0x100007b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000
+ },
+ { /* page 255, index 23 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001,
+ 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xff41, 0xff42, 0xff43,
+ 0xff44, 0xff45, 0xff46, 0xff47, 0xff48, 0xff49, 0xff4a, 0xff4b, 0xff4c,
+ 0xff4d, 0xff4e, 0xff4f, 0xff50, 0xff51, 0xff52, 0xff53, 0xff54, 0xff55,
+ 0xff56, 0xff57, 0xff58, 0xff59, 0xff5a, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0xff21, 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27,
+ 0xff28, 0xff29, 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30,
+ 0xff31, 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37, 0xff38, 0xff39,
+ 0xff3a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000
+ },
+ { /* page 260, index 24 */
+ 0x10428, 0x10429, 0x1042a, 0x1042b, 0x1042c, 0x1042d, 0x1042e, 0x1042f,
+ 0x10430, 0x10431, 0x10432, 0x10433, 0x10434, 0x10435, 0x10436, 0x10437,
+ 0x10438, 0x10439, 0x1043a, 0x1043b, 0x1043c, 0x1043d, 0x1043e, 0x1043f,
+ 0x10440, 0x10441, 0x10442, 0x10443, 0x10444, 0x10445, 0x10446, 0x10447,
+ 0x10448, 0x10449, 0x1044a, 0x1044b, 0x1044c, 0x1044d, 0x1044e, 0x1044f,
+ 0x10400, 0x10401, 0x10402, 0x10403, 0x10404, 0x10405, 0x10406, 0x10407,
+ 0x10408, 0x10409, 0x1040a, 0x1040b, 0x1040c, 0x1040d, 0x1040e, 0x1040f,
+ 0x10410, 0x10411, 0x10412, 0x10413, 0x10414, 0x10415, 0x10416, 0x10417,
+ 0x10418, 0x10419, 0x1041a, 0x1041b, 0x1041c, 0x1041d, 0x1041e, 0x1041f,
+ 0x10420, 0x10421, 0x10422, 0x10423, 0x10424, 0x10425, 0x10426, 0x10427,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
+ },
+ { /* page 471, index 25 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009,
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008,
+ 0x0009, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006,
+ 0x0007, 0x0008, 0x0009, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005,
+ 0x0006, 0x0007, 0x0008, 0x0009
+ }
+};
+
+/* U+0000 through U+2FAFF */
+static const gint16 attr_table_part1[763] = {
+ 0 /* page 0 */,
+ 1 /* page 1 */,
+ 2 /* page 2 */,
+ 3 /* page 3 */,
+ 4 /* page 4 */,
+ 5 /* page 5 */,
+ 6 /* page 6 */,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 7 /* page 9 */,
+ 8 /* page 10 */,
+ 9 /* page 11 */,
+ 10 /* page 12 */,
+ 11 /* page 13 */,
+ 12 /* page 14 */,
+ 13 /* page 15 */,
+ 14 /* page 16 */,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 15 /* page 19 */,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 16 /* page 23 */,
+ 17 /* page 24 */,
+ 18 /* page 25 */,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 19 /* page 30 */,
+ 20 /* page 31 */,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 21 /* page 33 */,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 22 /* page 251 */,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 23 /* page 255 */,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 24 /* page 260 */,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 25 /* page 471 */,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX
+};
+
+/* U+E0000 through U+10FFFF */
+static const gint16 attr_table_part2[768] = {
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX,
+ 0x0000 + G_UNICODE_MAX_TABLE_INDEX
+};
+
+static const gunichar title_table[][3] = {
+ { 0x01c5, 0x01c4, 0x01c6 },
+ { 0x01c8, 0x01c7, 0x01c9 },
+ { 0x01cb, 0x01ca, 0x01cc },
+ { 0x01f2, 0x01f1, 0x01f3 },
+ { 0x1f88, 0x0000, 0x1f80 },
+ { 0x1f89, 0x0000, 0x1f81 },
+ { 0x1f8a, 0x0000, 0x1f82 },
+ { 0x1f8b, 0x0000, 0x1f83 },
+ { 0x1f8c, 0x0000, 0x1f84 },
+ { 0x1f8d, 0x0000, 0x1f85 },
+ { 0x1f8e, 0x0000, 0x1f86 },
+ { 0x1f8f, 0x0000, 0x1f87 },
+ { 0x1f98, 0x0000, 0x1f90 },
+ { 0x1f99, 0x0000, 0x1f91 },
+ { 0x1f9a, 0x0000, 0x1f92 },
+ { 0x1f9b, 0x0000, 0x1f93 },
+ { 0x1f9c, 0x0000, 0x1f94 },
+ { 0x1f9d, 0x0000, 0x1f95 },
+ { 0x1f9e, 0x0000, 0x1f96 },
+ { 0x1f9f, 0x0000, 0x1f97 },
+ { 0x1fa8, 0x0000, 0x1fa0 },
+ { 0x1fa9, 0x0000, 0x1fa1 },
+ { 0x1faa, 0x0000, 0x1fa2 },
+ { 0x1fab, 0x0000, 0x1fa3 },
+ { 0x1fac, 0x0000, 0x1fa4 },
+ { 0x1fad, 0x0000, 0x1fa5 },
+ { 0x1fae, 0x0000, 0x1fa6 },
+ { 0x1faf, 0x0000, 0x1fa7 },
+ { 0x1fbc, 0x0000, 0x1fb3 },
+ { 0x1fcc, 0x0000, 0x1fc3 },
+ { 0x1ffc, 0x0000, 0x1ff3 }
+};
+
+
+/* Table of special cases for case conversion; each record contains
+ * First, the best single character mapping to lowercase if Lu,
+ * and to uppercase if Ll, followed by the output mapping for the two cases
+ * other than the case of the codepoint, in the order [Ll],[Lu],[Lt],
+ * encoded in UTF-8, separated and terminated by a null character.
+ */
+static const gchar special_case_table[] = {
+ "\x00\x53\x53\x00\x53\x73\0" /* offset 0 */
+ "\x69\x69\xcc\x87\x00\xc4\xb0\0" /* offset 7 */
+ "\x00\x46\x46\x00\x46\x66\0" /* offset 15 */
+ "\x00\x46\x49\x00\x46\x69\0" /* offset 22 */
+ "\x00\x46\x4c\x00\x46\x6c\0" /* offset 29 */
+ "\x00\x46\x46\x49\x00\x46\x66\x69\0" /* offset 36 */
+ "\x00\x46\x46\x4c\x00\x46\x66\x6c\0" /* offset 45 */
+ "\x00\x53\x54\x00\x53\x74\0" /* offset 54 */
+ "\x00\x53\x54\x00\x53\x74\0" /* offset 61 */
+ "\x00\xd4\xb5\xd5\x92\x00\xd4\xb5\xd6\x82\0" /* offset 68 */
+ "\x00\xd5\x84\xd5\x86\x00\xd5\x84\xd5\xb6\0" /* offset 79 */
+ "\x00\xd5\x84\xd4\xb5\x00\xd5\x84\xd5\xa5\0" /* offset 90 */
+ "\x00\xd5\x84\xd4\xbb\x00\xd5\x84\xd5\xab\0" /* offset 101 */
+ "\x00\xd5\x8e\xd5\x86\x00\xd5\x8e\xd5\xb6\0" /* offset 112 */
+ "\x00\xd5\x84\xd4\xbd\x00\xd5\x84\xd5\xad\0" /* offset 123 */
+ "\x00\xca\xbc\x4e\x00\xca\xbc\x4e\0" /* offset 134 */
+ "\x00\xce\x99\xcc\x88\xcc\x81\x00\xce\x99\xcc\x88\xcc\x81\0" /* offset 143 */
+ "\x00\xce\xa5\xcc\x88\xcc\x81\x00\xce\xa5\xcc\x88\xcc\x81\0" /* offset 158 */
+ "\x00\x4a\xcc\x8c\x00\x4a\xcc\x8c\0" /* offset 173 */
+ "\x00\x48\xcc\xb1\x00\x48\xcc\xb1\0" /* offset 182 */
+ "\x00\x54\xcc\x88\x00\x54\xcc\x88\0" /* offset 191 */
+ "\x00\x57\xcc\x8a\x00\x57\xcc\x8a\0" /* offset 200 */
+ "\x00\x59\xcc\x8a\x00\x59\xcc\x8a\0" /* offset 209 */
+ "\x00\x41\xca\xbe\x00\x41\xca\xbe\0" /* offset 218 */
+ "\x00\xce\xa5\xcc\x93\x00\xce\xa5\xcc\x93\0" /* offset 227 */
+ "\x00\xce\xa5\xcc\x93\xcc\x80\x00\xce\xa5\xcc\x93\xcc\x80\0" /* offset 238 */
+ "\x00\xce\xa5\xcc\x93\xcc\x81\x00\xce\xa5\xcc\x93\xcc\x81\0" /* offset 253 */
+ "\x00\xce\xa5\xcc\x93\xcd\x82\x00\xce\xa5\xcc\x93\xcd\x82\0" /* offset 268 */
+ "\x00\xce\x91\xcd\x82\x00\xce\x91\xcd\x82\0" /* offset 283 */
+ "\x00\xce\x97\xcd\x82\x00\xce\x97\xcd\x82\0" /* offset 294 */
+ "\x00\xce\x99\xcc\x88\xcc\x80\x00\xce\x99\xcc\x88\xcc\x80\0" /* offset 305 */
+ "\x00\xce\x99\xcc\x88\xcc\x81\x00\xce\x99\xcc\x88\xcc\x81\0" /* offset 320 */
+ "\x00\xce\x99\xcd\x82\x00\xce\x99\xcd\x82\0" /* offset 335 */
+ "\x00\xce\x99\xcc\x88\xcd\x82\x00\xce\x99\xcc\x88\xcd\x82\0" /* offset 346 */
+ "\x00\xce\xa5\xcc\x88\xcc\x80\x00\xce\xa5\xcc\x88\xcc\x80\0" /* offset 361 */
+ "\x00\xce\xa5\xcc\x88\xcc\x81\x00\xce\xa5\xcc\x88\xcc\x81\0" /* offset 376 */
+ "\x00\xce\xa1\xcc\x93\x00\xce\xa1\xcc\x93\0" /* offset 391 */
+ "\x00\xce\xa5\xcd\x82\x00\xce\xa5\xcd\x82\0" /* offset 402 */
+ "\x00\xce\xa5\xcc\x88\xcd\x82\x00\xce\xa5\xcc\x88\xcd\x82\0" /* offset 413 */
+ "\x00\xce\xa9\xcd\x82\x00\xce\xa9\xcd\x82\0" /* offset 428 */
+ "\xe1\xbe\x88\xe1\xbc\x88\xce\x99\x00\xe1\xbe\x88\0" /* offset 439 */
+ "\xe1\xbe\x89\xe1\xbc\x89\xce\x99\x00\xe1\xbe\x89\0" /* offset 452 */
+ "\xe1\xbe\x8a\xe1\xbc\x8a\xce\x99\x00\xe1\xbe\x8a\0" /* offset 465 */
+ "\xe1\xbe\x8b\xe1\xbc\x8b\xce\x99\x00\xe1\xbe\x8b\0" /* offset 478 */
+ "\xe1\xbe\x8c\xe1\xbc\x8c\xce\x99\x00\xe1\xbe\x8c\0" /* offset 491 */
+ "\xe1\xbe\x8d\xe1\xbc\x8d\xce\x99\x00\xe1\xbe\x8d\0" /* offset 504 */
+ "\xe1\xbe\x8e\xe1\xbc\x8e\xce\x99\x00\xe1\xbe\x8e\0" /* offset 517 */
+ "\xe1\xbe\x8f\xe1\xbc\x8f\xce\x99\x00\xe1\xbe\x8f\0" /* offset 530 */
+ "\xe1\xbe\x80\x00\xe1\xbc\x88\xce\x99\0" /* offset 543 */
+ "\xe1\xbe\x81\x00\xe1\xbc\x89\xce\x99\0" /* offset 553 */
+ "\xe1\xbe\x82\x00\xe1\xbc\x8a\xce\x99\0" /* offset 563 */
+ "\xe1\xbe\x83\x00\xe1\xbc\x8b\xce\x99\0" /* offset 573 */
+ "\xe1\xbe\x84\x00\xe1\xbc\x8c\xce\x99\0" /* offset 583 */
+ "\xe1\xbe\x85\x00\xe1\xbc\x8d\xce\x99\0" /* offset 593 */
+ "\xe1\xbe\x86\x00\xe1\xbc\x8e\xce\x99\0" /* offset 603 */
+ "\xe1\xbe\x87\x00\xe1\xbc\x8f\xce\x99\0" /* offset 613 */
+ "\xe1\xbe\x98\xe1\xbc\xa8\xce\x99\x00\xe1\xbe\x98\0" /* offset 623 */
+ "\xe1\xbe\x99\xe1\xbc\xa9\xce\x99\x00\xe1\xbe\x99\0" /* offset 636 */
+ "\xe1\xbe\x9a\xe1\xbc\xaa\xce\x99\x00\xe1\xbe\x9a\0" /* offset 649 */
+ "\xe1\xbe\x9b\xe1\xbc\xab\xce\x99\x00\xe1\xbe\x9b\0" /* offset 662 */
+ "\xe1\xbe\x9c\xe1\xbc\xac\xce\x99\x00\xe1\xbe\x9c\0" /* offset 675 */
+ "\xe1\xbe\x9d\xe1\xbc\xad\xce\x99\x00\xe1\xbe\x9d\0" /* offset 688 */
+ "\xe1\xbe\x9e\xe1\xbc\xae\xce\x99\x00\xe1\xbe\x9e\0" /* offset 701 */
+ "\xe1\xbe\x9f\xe1\xbc\xaf\xce\x99\x00\xe1\xbe\x9f\0" /* offset 714 */
+ "\xe1\xbe\x90\x00\xe1\xbc\xa8\xce\x99\0" /* offset 727 */
+ "\xe1\xbe\x91\x00\xe1\xbc\xa9\xce\x99\0" /* offset 737 */
+ "\xe1\xbe\x92\x00\xe1\xbc\xaa\xce\x99\0" /* offset 747 */
+ "\xe1\xbe\x93\x00\xe1\xbc\xab\xce\x99\0" /* offset 757 */
+ "\xe1\xbe\x94\x00\xe1\xbc\xac\xce\x99\0" /* offset 767 */
+ "\xe1\xbe\x95\x00\xe1\xbc\xad\xce\x99\0" /* offset 777 */
+ "\xe1\xbe\x96\x00\xe1\xbc\xae\xce\x99\0" /* offset 787 */
+ "\xe1\xbe\x97\x00\xe1\xbc\xaf\xce\x99\0" /* offset 797 */
+ "\xe1\xbe\xa8\xe1\xbd\xa8\xce\x99\x00\xe1\xbe\xa8\0" /* offset 807 */
+ "\xe1\xbe\xa9\xe1\xbd\xa9\xce\x99\x00\xe1\xbe\xa9\0" /* offset 820 */
+ "\xe1\xbe\xaa\xe1\xbd\xaa\xce\x99\x00\xe1\xbe\xaa\0" /* offset 833 */
+ "\xe1\xbe\xab\xe1\xbd\xab\xce\x99\x00\xe1\xbe\xab\0" /* offset 846 */
+ "\xe1\xbe\xac\xe1\xbd\xac\xce\x99\x00\xe1\xbe\xac\0" /* offset 859 */
+ "\xe1\xbe\xad\xe1\xbd\xad\xce\x99\x00\xe1\xbe\xad\0" /* offset 872 */
+ "\xe1\xbe\xae\xe1\xbd\xae\xce\x99\x00\xe1\xbe\xae\0" /* offset 885 */
+ "\xe1\xbe\xaf\xe1\xbd\xaf\xce\x99\x00\xe1\xbe\xaf\0" /* offset 898 */
+ "\xe1\xbe\xa0\x00\xe1\xbd\xa8\xce\x99\0" /* offset 911 */
+ "\xe1\xbe\xa1\x00\xe1\xbd\xa9\xce\x99\0" /* offset 921 */
+ "\xe1\xbe\xa2\x00\xe1\xbd\xaa\xce\x99\0" /* offset 931 */
+ "\xe1\xbe\xa3\x00\xe1\xbd\xab\xce\x99\0" /* offset 941 */
+ "\xe1\xbe\xa4\x00\xe1\xbd\xac\xce\x99\0" /* offset 951 */
+ "\xe1\xbe\xa5\x00\xe1\xbd\xad\xce\x99\0" /* offset 961 */
+ "\xe1\xbe\xa6\x00\xe1\xbd\xae\xce\x99\0" /* offset 971 */
+ "\xe1\xbe\xa7\x00\xe1\xbd\xaf\xce\x99\0" /* offset 981 */
+ "\xe1\xbe\xbc\xce\x91\xce\x99\x00\xe1\xbe\xbc\0" /* offset 991 */
+ "\xe1\xbe\xb3\x00\xce\x91\xce\x99\0" /* offset 1003 */
+ "\xe1\xbf\x8c\xce\x97\xce\x99\x00\xe1\xbf\x8c\0" /* offset 1012 */
+ "\xe1\xbf\x83\x00\xce\x97\xce\x99\0" /* offset 1024 */
+ "\xe1\xbf\xbc\xce\xa9\xce\x99\x00\xe1\xbf\xbc\0" /* offset 1033 */
+ "\xe1\xbf\xb3\x00\xce\xa9\xce\x99\0" /* offset 1045 */
+ "\x00\xe1\xbe\xba\xce\x99\x00\xe1\xbe\xba\xcd\x85\0" /* offset 1054 */
+ "\x00\xce\x86\xce\x99\x00\xce\x86\xcd\x85\0" /* offset 1067 */
+ "\x00\xe1\xbf\x8a\xce\x99\x00\xe1\xbf\x8a\xcd\x85\0" /* offset 1078 */
+ "\x00\xce\x89\xce\x99\x00\xce\x89\xcd\x85\0" /* offset 1091 */
+ "\x00\xe1\xbf\xba\xce\x99\x00\xe1\xbf\xba\xcd\x85\0" /* offset 1102 */
+ "\x00\xce\x8f\xce\x99\x00\xce\x8f\xcd\x85\0" /* offset 1115 */
+ "\x00\xce\x91\xcd\x82\xce\x99\x00\xce\x91\xcd\x82\xcd\x85\0" /* offset 1126 */
+ "\x00\xce\x97\xcd\x82\xce\x99\x00\xce\x97\xcd\x82\xcd\x85\0" /* offset 1141 */
+ "\x00\xce\xa9\xcd\x82\xce\x99\x00\xce\xa9\xcd\x82\xcd\x85\0" /* offset 1156 */
+};
+
+
+/* Table of casefolding cases that can't be derived by lowercasing
+ */
+static const struct {
+ guint16 ch;
+ gchar data[7];
+} casefold_table[] = {
+ { 0x00b5, "\xce\xbc" },
+ { 0x00df, "\x73\x73" },
+ { 0x0130, "\x69\xcc\x87" },
+ { 0x0149, "\xca\xbc\x6e" },
+ { 0x017f, "\x73" },
+ { 0x01f0, "\x6a\xcc\x8c" },
+ { 0x0345, "\xce\xb9" },
+ { 0x0390, "\xce\xb9\xcc\x88\xcc\x81" },
+ { 0x03b0, "\xcf\x85\xcc\x88\xcc\x81" },
+ { 0x03c2, "\xcf\x83" },
+ { 0x03d0, "\xce\xb2" },
+ { 0x03d1, "\xce\xb8" },
+ { 0x03d5, "\xcf\x86" },
+ { 0x03d6, "\xcf\x80" },
+ { 0x03f0, "\xce\xba" },
+ { 0x03f1, "\xcf\x81" },
+ { 0x03f5, "\xce\xb5" },
+ { 0x0587, "\xd5\xa5\xd6\x82" },
+ { 0x1e96, "\x68\xcc\xb1" },
+ { 0x1e97, "\x74\xcc\x88" },
+ { 0x1e98, "\x77\xcc\x8a" },
+ { 0x1e99, "\x79\xcc\x8a" },
+ { 0x1e9a, "\x61\xca\xbe" },
+ { 0x1e9b, "\xe1\xb9\xa1" },
+ { 0x1f50, "\xcf\x85\xcc\x93" },
+ { 0x1f52, "\xcf\x85\xcc\x93\xcc\x80" },
+ { 0x1f54, "\xcf\x85\xcc\x93\xcc\x81" },
+ { 0x1f56, "\xcf\x85\xcc\x93\xcd\x82" },
+ { 0x1f80, "\xe1\xbc\x80\xce\xb9" },
+ { 0x1f81, "\xe1\xbc\x81\xce\xb9" },
+ { 0x1f82, "\xe1\xbc\x82\xce\xb9" },
+ { 0x1f83, "\xe1\xbc\x83\xce\xb9" },
+ { 0x1f84, "\xe1\xbc\x84\xce\xb9" },
+ { 0x1f85, "\xe1\xbc\x85\xce\xb9" },
+ { 0x1f86, "\xe1\xbc\x86\xce\xb9" },
+ { 0x1f87, "\xe1\xbc\x87\xce\xb9" },
+ { 0x1f88, "\xe1\xbc\x80\xce\xb9" },
+ { 0x1f89, "\xe1\xbc\x81\xce\xb9" },
+ { 0x1f8a, "\xe1\xbc\x82\xce\xb9" },
+ { 0x1f8b, "\xe1\xbc\x83\xce\xb9" },
+ { 0x1f8c, "\xe1\xbc\x84\xce\xb9" },
+ { 0x1f8d, "\xe1\xbc\x85\xce\xb9" },
+ { 0x1f8e, "\xe1\xbc\x86\xce\xb9" },
+ { 0x1f8f, "\xe1\xbc\x87\xce\xb9" },
+ { 0x1f90, "\xe1\xbc\xa0\xce\xb9" },
+ { 0x1f91, "\xe1\xbc\xa1\xce\xb9" },
+ { 0x1f92, "\xe1\xbc\xa2\xce\xb9" },
+ { 0x1f93, "\xe1\xbc\xa3\xce\xb9" },
+ { 0x1f94, "\xe1\xbc\xa4\xce\xb9" },
+ { 0x1f95, "\xe1\xbc\xa5\xce\xb9" },
+ { 0x1f96, "\xe1\xbc\xa6\xce\xb9" },
+ { 0x1f97, "\xe1\xbc\xa7\xce\xb9" },
+ { 0x1f98, "\xe1\xbc\xa0\xce\xb9" },
+ { 0x1f99, "\xe1\xbc\xa1\xce\xb9" },
+ { 0x1f9a, "\xe1\xbc\xa2\xce\xb9" },
+ { 0x1f9b, "\xe1\xbc\xa3\xce\xb9" },
+ { 0x1f9c, "\xe1\xbc\xa4\xce\xb9" },
+ { 0x1f9d, "\xe1\xbc\xa5\xce\xb9" },
+ { 0x1f9e, "\xe1\xbc\xa6\xce\xb9" },
+ { 0x1f9f, "\xe1\xbc\xa7\xce\xb9" },
+ { 0x1fa0, "\xe1\xbd\xa0\xce\xb9" },
+ { 0x1fa1, "\xe1\xbd\xa1\xce\xb9" },
+ { 0x1fa2, "\xe1\xbd\xa2\xce\xb9" },
+ { 0x1fa3, "\xe1\xbd\xa3\xce\xb9" },
+ { 0x1fa4, "\xe1\xbd\xa4\xce\xb9" },
+ { 0x1fa5, "\xe1\xbd\xa5\xce\xb9" },
+ { 0x1fa6, "\xe1\xbd\xa6\xce\xb9" },
+ { 0x1fa7, "\xe1\xbd\xa7\xce\xb9" },
+ { 0x1fa8, "\xe1\xbd\xa0\xce\xb9" },
+ { 0x1fa9, "\xe1\xbd\xa1\xce\xb9" },
+ { 0x1faa, "\xe1\xbd\xa2\xce\xb9" },
+ { 0x1fab, "\xe1\xbd\xa3\xce\xb9" },
+ { 0x1fac, "\xe1\xbd\xa4\xce\xb9" },
+ { 0x1fad, "\xe1\xbd\xa5\xce\xb9" },
+ { 0x1fae, "\xe1\xbd\xa6\xce\xb9" },
+ { 0x1faf, "\xe1\xbd\xa7\xce\xb9" },
+ { 0x1fb2, "\xe1\xbd\xb0\xce\xb9" },
+ { 0x1fb3, "\xce\xb1\xce\xb9" },
+ { 0x1fb4, "\xce\xac\xce\xb9" },
+ { 0x1fb6, "\xce\xb1\xcd\x82" },
+ { 0x1fb7, "\xce\xb1\xcd\x82\xce\xb9" },
+ { 0x1fbc, "\xce\xb1\xce\xb9" },
+ { 0x1fbe, "\xce\xb9" },
+ { 0x1fc2, "\xe1\xbd\xb4\xce\xb9" },
+ { 0x1fc3, "\xce\xb7\xce\xb9" },
+ { 0x1fc4, "\xce\xae\xce\xb9" },
+ { 0x1fc6, "\xce\xb7\xcd\x82" },
+ { 0x1fc7, "\xce\xb7\xcd\x82\xce\xb9" },
+ { 0x1fcc, "\xce\xb7\xce\xb9" },
+ { 0x1fd2, "\xce\xb9\xcc\x88\xcc\x80" },
+ { 0x1fd3, "\xce\xb9\xcc\x88\xcc\x81" },
+ { 0x1fd6, "\xce\xb9\xcd\x82" },
+ { 0x1fd7, "\xce\xb9\xcc\x88\xcd\x82" },
+ { 0x1fe2, "\xcf\x85\xcc\x88\xcc\x80" },
+ { 0x1fe3, "\xcf\x85\xcc\x88\xcc\x81" },
+ { 0x1fe4, "\xcf\x81\xcc\x93" },
+ { 0x1fe6, "\xcf\x85\xcd\x82" },
+ { 0x1fe7, "\xcf\x85\xcc\x88\xcd\x82" },
+ { 0x1ff2, "\xe1\xbd\xbc\xce\xb9" },
+ { 0x1ff3, "\xcf\x89\xce\xb9" },
+ { 0x1ff4, "\xcf\x8e\xce\xb9" },
+ { 0x1ff6, "\xcf\x89\xcd\x82" },
+ { 0x1ff7, "\xcf\x89\xcd\x82\xce\xb9" },
+ { 0x1ffc, "\xcf\x89\xce\xb9" },
+ { 0x2160, "\xe2\x85\xb0" },
+ { 0x2161, "\xe2\x85\xb1" },
+ { 0x2162, "\xe2\x85\xb2" },
+ { 0x2163, "\xe2\x85\xb3" },
+ { 0x2164, "\xe2\x85\xb4" },
+ { 0x2165, "\xe2\x85\xb5" },
+ { 0x2166, "\xe2\x85\xb6" },
+ { 0x2167, "\xe2\x85\xb7" },
+ { 0x2168, "\xe2\x85\xb8" },
+ { 0x2169, "\xe2\x85\xb9" },
+ { 0x216a, "\xe2\x85\xba" },
+ { 0x216b, "\xe2\x85\xbb" },
+ { 0x216c, "\xe2\x85\xbc" },
+ { 0x216d, "\xe2\x85\xbd" },
+ { 0x216e, "\xe2\x85\xbe" },
+ { 0x216f, "\xe2\x85\xbf" },
+ { 0x24b6, "\xe2\x93\x90" },
+ { 0x24b7, "\xe2\x93\x91" },
+ { 0x24b8, "\xe2\x93\x92" },
+ { 0x24b9, "\xe2\x93\x93" },
+ { 0x24ba, "\xe2\x93\x94" },
+ { 0x24bb, "\xe2\x93\x95" },
+ { 0x24bc, "\xe2\x93\x96" },
+ { 0x24bd, "\xe2\x93\x97" },
+ { 0x24be, "\xe2\x93\x98" },
+ { 0x24bf, "\xe2\x93\x99" },
+ { 0x24c0, "\xe2\x93\x9a" },
+ { 0x24c1, "\xe2\x93\x9b" },
+ { 0x24c2, "\xe2\x93\x9c" },
+ { 0x24c3, "\xe2\x93\x9d" },
+ { 0x24c4, "\xe2\x93\x9e" },
+ { 0x24c5, "\xe2\x93\x9f" },
+ { 0x24c6, "\xe2\x93\xa0" },
+ { 0x24c7, "\xe2\x93\xa1" },
+ { 0x24c8, "\xe2\x93\xa2" },
+ { 0x24c9, "\xe2\x93\xa3" },
+ { 0x24ca, "\xe2\x93\xa4" },
+ { 0x24cb, "\xe2\x93\xa5" },
+ { 0x24cc, "\xe2\x93\xa6" },
+ { 0x24cd, "\xe2\x93\xa7" },
+ { 0x24ce, "\xe2\x93\xa8" },
+ { 0x24cf, "\xe2\x93\xa9" },
+ { 0xfb00, "\x66\x66" },
+ { 0xfb01, "\x66\x69" },
+ { 0xfb02, "\x66\x6c" },
+ { 0xfb03, "\x66\x66\x69" },
+ { 0xfb04, "\x66\x66\x6c" },
+ { 0xfb05, "\x73\x74" },
+ { 0xfb06, "\x73\x74" },
+ { 0xfb13, "\xd5\xb4\xd5\xb6" },
+ { 0xfb14, "\xd5\xb4\xd5\xa5" },
+ { 0xfb15, "\xd5\xb4\xd5\xab" },
+ { 0xfb16, "\xd5\xbe\xd5\xb6" },
+ { 0xfb17, "\xd5\xb4\xd5\xad" },
+};
+
+static const struct {
+ gunichar ch;
+ gunichar mirrored_ch;
+} bidi_mirroring_table[] =
+{
+ { 0x0028, 0x0029 },
+ { 0x0029, 0x0028 },
+ { 0x003c, 0x003e },
+ { 0x003e, 0x003c },
+ { 0x005b, 0x005d },
+ { 0x005d, 0x005b },
+ { 0x007b, 0x007d },
+ { 0x007d, 0x007b },
+ { 0x00ab, 0x00bb },
+ { 0x00bb, 0x00ab },
+ { 0x2039, 0x203a },
+ { 0x203a, 0x2039 },
+ { 0x2045, 0x2046 },
+ { 0x2046, 0x2045 },
+ { 0x207d, 0x207e },
+ { 0x207e, 0x207d },
+ { 0x208d, 0x208e },
+ { 0x208e, 0x208d },
+ { 0x2208, 0x220b },
+ { 0x2209, 0x220c },
+ { 0x220a, 0x220d },
+ { 0x220b, 0x2208 },
+ { 0x220c, 0x2209 },
+ { 0x220d, 0x220a },
+ { 0x2215, 0x29f5 },
+ { 0x223c, 0x223d },
+ { 0x223d, 0x223c },
+ { 0x2243, 0x22cd },
+ { 0x2252, 0x2253 },
+ { 0x2253, 0x2252 },
+ { 0x2254, 0x2255 },
+ { 0x2255, 0x2254 },
+ { 0x2264, 0x2265 },
+ { 0x2265, 0x2264 },
+ { 0x2266, 0x2267 },
+ { 0x2267, 0x2266 },
+ { 0x2268, 0x2269 },
+ { 0x2269, 0x2268 },
+ { 0x226a, 0x226b },
+ { 0x226b, 0x226a },
+ { 0x226e, 0x226f },
+ { 0x226f, 0x226e },
+ { 0x2270, 0x2271 },
+ { 0x2271, 0x2270 },
+ { 0x2272, 0x2273 },
+ { 0x2273, 0x2272 },
+ { 0x2274, 0x2275 },
+ { 0x2275, 0x2274 },
+ { 0x2276, 0x2277 },
+ { 0x2277, 0x2276 },
+ { 0x2278, 0x2279 },
+ { 0x2279, 0x2278 },
+ { 0x227a, 0x227b },
+ { 0x227b, 0x227a },
+ { 0x227c, 0x227d },
+ { 0x227d, 0x227c },
+ { 0x227e, 0x227f },
+ { 0x227f, 0x227e },
+ { 0x2280, 0x2281 },
+ { 0x2281, 0x2280 },
+ { 0x2282, 0x2283 },
+ { 0x2283, 0x2282 },
+ { 0x2284, 0x2285 },
+ { 0x2285, 0x2284 },
+ { 0x2286, 0x2287 },
+ { 0x2287, 0x2286 },
+ { 0x2288, 0x2289 },
+ { 0x2289, 0x2288 },
+ { 0x228a, 0x228b },
+ { 0x228b, 0x228a },
+ { 0x228f, 0x2290 },
+ { 0x2290, 0x228f },
+ { 0x2291, 0x2292 },
+ { 0x2292, 0x2291 },
+ { 0x2298, 0x29b8 },
+ { 0x22a2, 0x22a3 },
+ { 0x22a3, 0x22a2 },
+ { 0x22a6, 0x2ade },
+ { 0x22a8, 0x2ae4 },
+ { 0x22a9, 0x2ae3 },
+ { 0x22ab, 0x2ae5 },
+ { 0x22b0, 0x22b1 },
+ { 0x22b1, 0x22b0 },
+ { 0x22b2, 0x22b3 },
+ { 0x22b3, 0x22b2 },
+ { 0x22b4, 0x22b5 },
+ { 0x22b5, 0x22b4 },
+ { 0x22b6, 0x22b7 },
+ { 0x22b7, 0x22b6 },
+ { 0x22c9, 0x22ca },
+ { 0x22ca, 0x22c9 },
+ { 0x22cb, 0x22cc },
+ { 0x22cc, 0x22cb },
+ { 0x22cd, 0x2243 },
+ { 0x22d0, 0x22d1 },
+ { 0x22d1, 0x22d0 },
+ { 0x22d6, 0x22d7 },
+ { 0x22d7, 0x22d6 },
+ { 0x22d8, 0x22d9 },
+ { 0x22d9, 0x22d8 },
+ { 0x22da, 0x22db },
+ { 0x22db, 0x22da },
+ { 0x22dc, 0x22dd },
+ { 0x22dd, 0x22dc },
+ { 0x22de, 0x22df },
+ { 0x22df, 0x22de },
+ { 0x22e0, 0x22e1 },
+ { 0x22e1, 0x22e0 },
+ { 0x22e2, 0x22e3 },
+ { 0x22e3, 0x22e2 },
+ { 0x22e4, 0x22e5 },
+ { 0x22e5, 0x22e4 },
+ { 0x22e6, 0x22e7 },
+ { 0x22e7, 0x22e6 },
+ { 0x22e8, 0x22e9 },
+ { 0x22e9, 0x22e8 },
+ { 0x22ea, 0x22eb },
+ { 0x22eb, 0x22ea },
+ { 0x22ec, 0x22ed },
+ { 0x22ed, 0x22ec },
+ { 0x22f0, 0x22f1 },
+ { 0x22f1, 0x22f0 },
+ { 0x22f2, 0x22fa },
+ { 0x22f3, 0x22fb },
+ { 0x22f4, 0x22fc },
+ { 0x22f6, 0x22fd },
+ { 0x22f7, 0x22fe },
+ { 0x22fa, 0x22f2 },
+ { 0x22fb, 0x22f3 },
+ { 0x22fc, 0x22f4 },
+ { 0x22fd, 0x22f6 },
+ { 0x22fe, 0x22f7 },
+ { 0x2308, 0x2309 },
+ { 0x2309, 0x2308 },
+ { 0x230a, 0x230b },
+ { 0x230b, 0x230a },
+ { 0x2329, 0x232a },
+ { 0x232a, 0x2329 },
+ { 0x2768, 0x2769 },
+ { 0x2769, 0x2768 },
+ { 0x276a, 0x276b },
+ { 0x276b, 0x276a },
+ { 0x276c, 0x276d },
+ { 0x276d, 0x276c },
+ { 0x276e, 0x276f },
+ { 0x276f, 0x276e },
+ { 0x2770, 0x2771 },
+ { 0x2771, 0x2770 },
+ { 0x2772, 0x2773 },
+ { 0x2773, 0x2772 },
+ { 0x2774, 0x2775 },
+ { 0x2775, 0x2774 },
+ { 0x27d5, 0x27d6 },
+ { 0x27d6, 0x27d5 },
+ { 0x27dd, 0x27de },
+ { 0x27de, 0x27dd },
+ { 0x27e2, 0x27e3 },
+ { 0x27e3, 0x27e2 },
+ { 0x27e4, 0x27e5 },
+ { 0x27e5, 0x27e4 },
+ { 0x27e6, 0x27e7 },
+ { 0x27e7, 0x27e6 },
+ { 0x27e8, 0x27e9 },
+ { 0x27e9, 0x27e8 },
+ { 0x27ea, 0x27eb },
+ { 0x27eb, 0x27ea },
+ { 0x2983, 0x2984 },
+ { 0x2984, 0x2983 },
+ { 0x2985, 0x2986 },
+ { 0x2986, 0x2985 },
+ { 0x2987, 0x2988 },
+ { 0x2988, 0x2987 },
+ { 0x2989, 0x298a },
+ { 0x298a, 0x2989 },
+ { 0x298b, 0x298c },
+ { 0x298c, 0x298b },
+ { 0x298d, 0x2990 },
+ { 0x298e, 0x298f },
+ { 0x298f, 0x298e },
+ { 0x2990, 0x298d },
+ { 0x2991, 0x2992 },
+ { 0x2992, 0x2991 },
+ { 0x2993, 0x2994 },
+ { 0x2994, 0x2993 },
+ { 0x2995, 0x2996 },
+ { 0x2996, 0x2995 },
+ { 0x2997, 0x2998 },
+ { 0x2998, 0x2997 },
+ { 0x29b8, 0x2298 },
+ { 0x29c0, 0x29c1 },
+ { 0x29c1, 0x29c0 },
+ { 0x29c4, 0x29c5 },
+ { 0x29c5, 0x29c4 },
+ { 0x29cf, 0x29d0 },
+ { 0x29d0, 0x29cf },
+ { 0x29d1, 0x29d2 },
+ { 0x29d2, 0x29d1 },
+ { 0x29d4, 0x29d5 },
+ { 0x29d5, 0x29d4 },
+ { 0x29d8, 0x29d9 },
+ { 0x29d9, 0x29d8 },
+ { 0x29da, 0x29db },
+ { 0x29db, 0x29da },
+ { 0x29f5, 0x2215 },
+ { 0x29f8, 0x29f9 },
+ { 0x29f9, 0x29f8 },
+ { 0x29fc, 0x29fd },
+ { 0x29fd, 0x29fc },
+ { 0x2a2b, 0x2a2c },
+ { 0x2a2c, 0x2a2b },
+ { 0x2a2d, 0x2a2c },
+ { 0x2a2e, 0x2a2d },
+ { 0x2a34, 0x2a35 },
+ { 0x2a35, 0x2a34 },
+ { 0x2a3c, 0x2a3d },
+ { 0x2a3d, 0x2a3c },
+ { 0x2a64, 0x2a65 },
+ { 0x2a65, 0x2a64 },
+ { 0x2a79, 0x2a7a },
+ { 0x2a7a, 0x2a79 },
+ { 0x2a7d, 0x2a7e },
+ { 0x2a7e, 0x2a7d },
+ { 0x2a7f, 0x2a80 },
+ { 0x2a80, 0x2a7f },
+ { 0x2a81, 0x2a82 },
+ { 0x2a82, 0x2a81 },
+ { 0x2a83, 0x2a84 },
+ { 0x2a84, 0x2a83 },
+ { 0x2a8b, 0x2a8c },
+ { 0x2a8c, 0x2a8b },
+ { 0x2a91, 0x2a92 },
+ { 0x2a92, 0x2a91 },
+ { 0x2a93, 0x2a94 },
+ { 0x2a94, 0x2a93 },
+ { 0x2a95, 0x2a96 },
+ { 0x2a96, 0x2a95 },
+ { 0x2a97, 0x2a98 },
+ { 0x2a98, 0x2a97 },
+ { 0x2a99, 0x2a9a },
+ { 0x2a9a, 0x2a99 },
+ { 0x2a9b, 0x2a9c },
+ { 0x2a9c, 0x2a9b },
+ { 0x2aa1, 0x2aa2 },
+ { 0x2aa2, 0x2aa1 },
+ { 0x2aa6, 0x2aa7 },
+ { 0x2aa7, 0x2aa6 },
+ { 0x2aa8, 0x2aa9 },
+ { 0x2aa9, 0x2aa8 },
+ { 0x2aaa, 0x2aab },
+ { 0x2aab, 0x2aaa },
+ { 0x2aac, 0x2aad },
+ { 0x2aad, 0x2aac },
+ { 0x2aaf, 0x2ab0 },
+ { 0x2ab0, 0x2aaf },
+ { 0x2ab3, 0x2ab4 },
+ { 0x2ab4, 0x2ab3 },
+ { 0x2abb, 0x2abc },
+ { 0x2abc, 0x2abb },
+ { 0x2abd, 0x2abe },
+ { 0x2abe, 0x2abd },
+ { 0x2abf, 0x2ac0 },
+ { 0x2ac0, 0x2abf },
+ { 0x2ac1, 0x2ac2 },
+ { 0x2ac2, 0x2ac1 },
+ { 0x2ac3, 0x2ac4 },
+ { 0x2ac4, 0x2ac3 },
+ { 0x2ac5, 0x2ac6 },
+ { 0x2ac6, 0x2ac5 },
+ { 0x2acd, 0x2ace },
+ { 0x2ace, 0x2acd },
+ { 0x2acf, 0x2ad0 },
+ { 0x2ad0, 0x2acf },
+ { 0x2ad1, 0x2ad2 },
+ { 0x2ad2, 0x2ad1 },
+ { 0x2ad3, 0x2ad4 },
+ { 0x2ad4, 0x2ad3 },
+ { 0x2ad5, 0x2ad6 },
+ { 0x2ad6, 0x2ad5 },
+ { 0x2ade, 0x22a6 },
+ { 0x2ae3, 0x22a9 },
+ { 0x2ae4, 0x22a8 },
+ { 0x2ae5, 0x22ab },
+ { 0x2aec, 0x2aed },
+ { 0x2aed, 0x2aec },
+ { 0x2af7, 0x2af8 },
+ { 0x2af8, 0x2af7 },
+ { 0x2af9, 0x2afa },
+ { 0x2afa, 0x2af9 },
+ { 0x3008, 0x3009 },
+ { 0x3009, 0x3008 },
+ { 0x300a, 0x300b },
+ { 0x300b, 0x300a },
+ { 0x300c, 0x300d },
+ { 0x300d, 0x300c },
+ { 0x300e, 0x300f },
+ { 0x300f, 0x300e },
+ { 0x3010, 0x3011 },
+ { 0x3011, 0x3010 },
+ { 0x3014, 0x3015 },
+ { 0x3015, 0x3014 },
+ { 0x3016, 0x3017 },
+ { 0x3017, 0x3016 },
+ { 0x3018, 0x3019 },
+ { 0x3019, 0x3018 },
+ { 0x301a, 0x301b },
+ { 0x301b, 0x301a },
+ { 0xff08, 0xff09 },
+ { 0xff09, 0xff08 },
+ { 0xff1c, 0xff1e },
+ { 0xff1e, 0xff1c },
+ { 0xff3b, 0xff3d },
+ { 0xff3d, 0xff3b },
+ { 0xff5b, 0xff5d },
+ { 0xff5d, 0xff5b },
+ { 0xff5f, 0xff60 },
+ { 0xff60, 0xff5f },
+ { 0xff62, 0xff63 },
+ { 0xff63, 0xff62 }
+};
+
+#endif /* CHARTABLES_H */
diff --git a/src/3rdparty/clucene/src/CLucene/config/repl_lltot.cpp b/src/3rdparty/clucene/src/CLucene/config/repl_lltot.cpp
new file mode 100644
index 0000000..05a63b8
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/config/repl_lltot.cpp
@@ -0,0 +1,47 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+
+TCHAR* lucene_i64tot(
+ int64_t value, /* [I] Value to be converted */
+ TCHAR* str, /* [O] Destination for the converted value */
+ int radix) /* [I] Number base for conversion */
+{
+ uint64_t val;
+ int negative;
+ TCHAR buffer[65];
+ TCHAR* pos;
+ int digit;
+
+ if (value < 0 && radix == 10) {
+ negative = 1;
+ val = -value;
+ } else {
+ negative = 0;
+ val = value;
+ } /* if */
+
+ pos = &buffer[64];
+ *pos = '\0';
+
+ do {
+ digit = val % radix;
+ val = val / radix;
+ if (digit < 10) {
+ *--pos = '0' + digit;
+ } else {
+ *--pos = 'a' + digit - 10;
+ } /* if */
+ } while (val != 0L);
+
+ if (negative) {
+ *--pos = '-';
+ } /* if */
+
+ _tcsncpy(str,pos,&buffer[64] - pos + 1); //needed for unicode to work
+ return str;
+}
diff --git a/src/3rdparty/clucene/src/CLucene/config/repl_tchar.h b/src/3rdparty/clucene/src/CLucene/config/repl_tchar.h
new file mode 100644
index 0000000..d562cc8
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/config/repl_tchar.h
@@ -0,0 +1,106 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _CL_HAVE_TCHAR_H
+#if defined(_UCS2)
+ #define TCHAR wchar_t
+
+ //note: descriptions with * in front have replacement functions
+
+ //formatting functions
+ #define _sntprintf swprintf //* make a formatted a string
+ #define _tprintf wprintf //* print a formatted string
+
+ //this one has no replacement functions yet, but it is only used in the tests
+ #define _vsntprintf vsnwprintf //* print a formatted string using variable arguments
+
+ //we are using the internal functions of the compiler here
+ //if LUCENE_USE_INTERNAL_CHAR_FUNCTIONS is defined, thesse
+ //will be replaced by internal functions
+ #define _istalnum iswalnum //* alpha/numeric char check
+ #define _istalpha iswalpha //* alpha char check
+ #define _istspace iswspace //* space char check
+ #define _istdigit iswdigit //* digit char check
+ #define _totlower towlower //* convert char to lower case
+ #define _totupper towupper //* convert char to lower case
+ #define _tcslwr wcslwr //* convert string to lower case
+
+ //these are the string handling functions
+ //we may need to create wide-character/multi-byte replacements for these
+ #define _tcscpy wcscpy //copy a string to another string
+ #define _tcsncpy wcsncpy //copy a specified amount of one string to another string.
+ #define _tcscat wcscat //copy a string onto the end of the other string
+ #define _tcschr wcschr //find location of one character
+ #define _tcsstr wcsstr //find location of a string
+ #define _tcslen wcslen //get length of a string
+ #define _tcscmp wcscmp //case sensitive compare two strings
+ #define _tcsncmp wcsncmp //case sensitive compare two strings
+ #define _tcscspn wcscspn //location of any of a set of character in a string
+
+ #ifdef _CL_HAVE_WCSICMP
+ #define _tcsicmp wcsicmp //* case insensitive compare two string
+ #else
+ #define _tcsicmp wcscasecmp //* case insensitive compare two string
+ #endif
+
+ //conversion functions
+ #define _tcstod wcstod //convert a string to a double
+ #ifdef _PA_RISC
+ #define _tcstoi64 __wcstoll //* convers a string to an 64bit bit integer
+ #else
+ #define _tcstoi64 wcstoll //* convers a string to an 64bit bit integer
+ #endif
+ #define _i64tot lltow //* converts a 64 bit integer to a string (with base)
+
+#else //if defined(_ASCII)
+ #define TCHAR char
+
+ //formatting functions
+ #define _sntprintf snprintf
+ #define _tprintf printf
+ #define _vsntprintf vsnprintf
+
+ //we are using the internal functions of the compiler here
+ //if LUCENE_USE_INTERNAL_CHAR_FUNCTIONS is defined, thesse
+ //will be replaced by internal functions
+ #define _istalnum isalnum
+ #define _istalpha isalpha
+ #define _istspace isspace
+ #define _istdigit isdigit
+ #define _totlower tolower
+ #define _totupper toupper
+ #define _tcslwr strlwr
+
+ //these are the string handling functions
+ #define _tcscpy strcpy
+ #define _tcsncpy strncpy
+ #define _tcscat strcat
+ #define _tcschr strchr
+ #define _tcsstr strstr
+ #define _tcslen strlen
+ #define _tcscmp strcmp
+ #define _tcsncmp strncmp
+ #define _tcsicmp strcasecmp
+ #define _tcscspn strcspn
+
+ //converstion methods
+ #define _tcstod strtod
+ #define _tcstoi64 strtoll
+ #define _i64tot lltoa
+#endif
+#else //HAVE_TCHAR_H
+ #include <tchar.h>
+
+ //some tchar headers miss these...
+ #ifndef _tcstoi64
+ #if defined(_UCS2)
+ #define _tcstoi64 wcstoll //* convers a string to an 64bit bit integer
+ #else
+ #define _tcstoi64 strtoll
+ #endif
+ #endif
+
+#endif //HAVE_TCHAR_H
diff --git a/src/3rdparty/clucene/src/CLucene/config/repl_tcscasecmp.cpp b/src/3rdparty/clucene/src/CLucene/config/repl_tcscasecmp.cpp
new file mode 100644
index 0000000..1bee7b7
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/config/repl_tcscasecmp.cpp
@@ -0,0 +1,21 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+
+#include "CLucene/StdHeader.h"
+
+int lucene_tcscasecmp(const TCHAR * sa, const TCHAR * sb){
+ TCHAR ca,cb;
+ if (sa == sb)
+ return 0;
+
+ do{
+ ca = _totlower( (*(sa++)) );
+ cb = _totlower( (*(sb++)) );
+ } while ( ca != L'\0' && (ca == cb) );
+
+ return (int)(ca - cb);
+}
diff --git a/src/3rdparty/clucene/src/CLucene/config/repl_tcslwr.cpp b/src/3rdparty/clucene/src/CLucene/config/repl_tcslwr.cpp
new file mode 100644
index 0000000..2ae6abc
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/config/repl_tcslwr.cpp
@@ -0,0 +1,15 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+
+#include "CLucene/StdHeader.h"
+
+TCHAR* lucene_tcslwr( TCHAR* str )
+{
+ TCHAR* ret = str;
+ for ( ; *str; str++) *str = _totlower(*str);
+ return ret;
+}
diff --git a/src/3rdparty/clucene/src/CLucene/config/repl_tcstod.cpp b/src/3rdparty/clucene/src/CLucene/config/repl_tcstod.cpp
new file mode 100644
index 0000000..1fd4ca7
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/config/repl_tcstod.cpp
@@ -0,0 +1,23 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+
+#include "CLucene/StdHeader.h"
+
+#ifndef _ASCII
+double lucene_tcstod(const TCHAR *value, TCHAR **end){
+ int32_t len = _tcslen(value)+1;
+ char* avalue=_CL_NEWARRAY(char,len);
+ char* aend=NULL;
+ STRCPY_TtoA(avalue,value,len);
+
+ double ret = strtod(avalue,&aend);
+ *end=(TCHAR*)value+(aend-avalue);
+ _CLDELETE_CaARRAY(avalue);
+
+ return ret;
+}
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/config/repl_tcstoll.cpp b/src/3rdparty/clucene/src/CLucene/config/repl_tcstoll.cpp
new file mode 100644
index 0000000..246d66c
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/config/repl_tcstoll.cpp
@@ -0,0 +1,46 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+
+#include "CLucene/StdHeader.h"
+
+int64_t lucene_tcstoi64(const TCHAR* str, TCHAR**end, int radix){
+ #define LUCENE_TCSTOI64_RADIX(x,r) ((x>=_T('0') && x<=_T('9'))?x-_T('0'):((x>=_T('a') && x<=_T('z'))?x-_T('a')+10:((x>=_T('A') && x<=_T('Z'))?x-_T('A')+10:1000)))
+
+ if (radix < 2 || radix > 36)
+ return 0;
+
+ /* Skip white space. */
+ while (_istspace (*str))
+ ++str;
+
+ int sign=1;
+ if ( str[0] == _T('+') )
+ str++;
+ else if ( str[0] == _T('-') ){
+ sign = -1;
+ str++;
+ }
+
+ *end=(TCHAR*)str;
+ long r = -1;
+ while ( (r=LUCENE_TCSTOI64_RADIX(*end[0],radix)) >=0 && r<radix )
+ (*end)++;
+
+ TCHAR* p = (*end)-1;
+ int64_t ret = 0;
+ int pos = 0;
+ for ( ;p>=str;p-- ){
+ int i=LUCENE_TCSTOI64_RADIX(p[0],radix);
+ if ( pos == 0 )
+ ret=i;
+ else
+ ret += (int64_t)pow((qreal)radix,(qreal)pos) * i; //todo: might be quicker with a different pow overload
+
+ pos++;
+ }
+ return sign*ret;
+}
diff --git a/src/3rdparty/clucene/src/CLucene/config/repl_tprintf.cpp b/src/3rdparty/clucene/src/CLucene/config/repl_tprintf.cpp
new file mode 100644
index 0000000..62cecb7
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/config/repl_tprintf.cpp
@@ -0,0 +1,149 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "CLucene/util/StringBuffer.h"
+
+#ifdef __CL_INCLUDE_TPRINTF
+
+CL_NS_USE(util)
+
+//print a variable argument to a stream
+//currently special number formatting is not supported. it is very minimalistic
+void lucene_vfnwprintf(StringBuffer* buffer, size_t count, const wchar_t * format, va_list& valist){
+ const wchar_t *iter = format;
+ StringBuffer* tmp = NULL;
+ if ( buffer == NULL )
+ tmp = _CLNEW StringBuffer;
+ else
+ tmp = buffer;
+
+ while (*iter)
+ {
+ while (*iter && *iter != '%')
+ {
+ tmp->appendChar(*iter++);
+ }
+ if (*iter == '%')
+ {
+ if (iter[1] == '%')
+ {
+ //just print a %
+ tmp->appendChar('%');
+ iter += 2;
+ continue;
+ }
+
+ iter++;
+ switch (*iter)
+ {
+ case 's':
+ {
+ //todo: this is faulty. it doesn't heed count
+
+ //print a string or null
+ TCHAR *wstr = va_arg(valist, TCHAR *);
+ if ( !wstr )
+ wstr = _T("(null)");
+
+ tmp->append(wstr);
+ iter++;
+ break;
+ }
+
+ case 'c':
+ tmp->appendChar((TCHAR)va_arg(valist, int));
+ iter++;
+ break;
+
+ default:
+ {
+ //todo: this is faulty. it doesn't heed count
+
+ if (*iter == 'p')
+ tmp->appendInt((int32_t)va_arg(valist, long));
+ else
+ {
+ if (*iter == 'a' || *iter == 'A' ||
+ *iter == 'e' || *iter == 'E' ||
+ *iter == 'f' || *iter == 'F' ||
+ *iter == 'g' || *iter == 'G')
+ tmp->appendFloat((qreal)va_arg(valist, double),8);
+ else if (*iter == 'd' || *iter == 'i' ){
+ tmp->appendInt((int32_t)va_arg(valist, int));
+ }else if (*iter == 'l' ){
+ TCHAR b[100];
+ _i64tot((int64_t)va_arg(valist, int64_t),b,10);
+ tmp->append(b);
+ }/*else{
+ TCHAR b[100];
+ _i64tot((int64_t)va_arg(valist, void*),b,10);
+ tmp->append(b);
+ }*/
+ }
+ iter++;
+ break;
+ }
+ }
+ }
+ }
+
+
+ if ( buffer == NULL ){
+ //we are supposed to be writing to the console
+#ifdef _UCS2
+ TCHAR* pointer = tmp->getBuffer();
+ char ob[MB_LEN_MAX];
+ size_t v;
+ size_t len = tmp->length();
+ for (size_t i=0;i<len;i++){
+ v = wctomb(ob,*pointer);
+ if ( v > 0 ){
+ ob[v]='\0';
+ fputs(ob,stdout);
+ }
+ pointer++;
+ }
+
+
+#else
+ fputs(tmp->getBuffer(),stdout);
+#endif
+ _CLDELETE(tmp);
+ }
+}
+
+//print a list of arguments to a string
+int lucene_snwprintf(wchar_t* strbuf, size_t count, const wchar_t * format, ...){
+ va_list ap;
+ va_start(ap, format);
+ StringBuffer buffer;
+ lucene_vfnwprintf(&buffer,count,format,ap);
+ va_end(ap);
+
+ size_t ret = min(count,(size_t)(buffer.length()+1));
+ _tcsncpy(strbuf,buffer.getBuffer(),ret);
+ return ret;
+}
+
+//print a list of arguments to the stdout
+void lucene_wprintf(const wchar_t * format, ...){
+ va_list ap;
+ va_start(ap, format);
+ lucene_vfnwprintf(NULL,LUCENE_INT32_MAX_SHOULDBE,format,ap);
+ va_end(ap);
+}
+
+//print a variable argument to a string
+int lucene_vsnwprintf(wchar_t * strbuf, size_t count, const wchar_t * format, va_list& ap){
+ StringBuffer buffer;
+ lucene_vfnwprintf(&buffer,count,format,ap);
+ int ret = min((int32_t)count,buffer.length()+1);
+ _tcsncpy(strbuf,buffer.getBuffer(),ret);
+ return ret;
+}
+
+#endif //__CL_INCLUDE_TPRINTF
diff --git a/src/3rdparty/clucene/src/CLucene/config/repl_wchar.h b/src/3rdparty/clucene/src/CLucene/config/repl_wchar.h
new file mode 100644
index 0000000..3e05c31
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/config/repl_wchar.h
@@ -0,0 +1,121 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_repl_wchar_h
+#define _lucene_repl_wchar_h
+
+#ifdef _UCS2
+
+#ifndef _CL_HAVE_WCSCPY
+ //copy a string to another string
+ #error wcscpy is not defined, and a licensed replacement has not been written yet
+#endif
+
+#ifndef _CL_HAVE_WCSNCPY
+ //copy a specified amount of one string to another string.
+ #error wcsncpy is not defined, and a licensed replacement has not been written yet
+#endif
+
+#ifndef _CL_HAVE_WCSCAT
+ //copy a string onto the end of the other string
+ #error wcscat is not defined, and a licensed replacement has not been written yet
+#endif
+
+#ifndef _CL_HAVE_WCSCHR
+ //find location of one character
+ #error wcschr is not defined, and a licensed replacement has not been written yet
+#endif
+
+#ifndef _CL_HAVE_WCSSTR
+ //find location of a string
+ #error wcspy is not defined, and a licensed replacement has not been written yet
+#endif
+
+#ifndef _CL_HAVE_WCSLEN
+ //get length of a string
+ #error wcslen is not defined, and a licensed replacement has not been written yet
+#endif
+
+#ifndef _CL_HAVE_WCSCMP
+ //case sensitive compare two strings
+ #error wcscmp is not defined, and a licensed replacement has not been written yet
+#endif
+
+#ifndef _CL_HAVE_WCSNCMP
+ //case sensitive compare two strings of a specified length
+ #error wcsncmp is not defined, and a licensed replacement has not been written yet
+#endif
+
+#ifndef _CL_HAVE_WCSCSPN
+ //Return the length of the maximum initial segment
+ //of WCS which contains only wide-characters not in REJECT.
+ #error wcscspn is not defined, and a licensed replacement has not been written yet
+#endif
+
+#endif //_UCS2
+
+//string function replacements
+#if defined(LUCENE_USE_INTERNAL_CHAR_FUNCTIONS) || (defined(_UCS2) && !defined(_CL_HAVE_WCSCASECMP)) || (defined(_ASCII) && !defined(_CL_HAVE_STRCASECMP))
+ int lucene_tcscasecmp(const TCHAR *, const TCHAR *);
+ #undef _tcsicmp
+ #define _tcsicmp lucene_tcscasecmp
+#endif
+#if defined(LUCENE_USE_INTERNAL_CHAR_FUNCTIONS) || (defined(_UCS2) && !defined(_CL_HAVE_WCSLWR)) || (defined(_ASCII) && !defined(_CL_HAVE_STRLWR))
+ TCHAR* lucene_tcslwr( TCHAR* str );
+ #undef _tcslwr
+ #define _tcslwr lucene_tcslwr
+#endif
+
+//conversion functions
+#if (defined(_ASCII) && !defined(_CL_HAVE_LLTOA)) || (defined(_UCS2) && !defined(_CL_HAVE_LLTOW))
+ TCHAR* lucene_i64tot( int64_t value, TCHAR* str, int radix);
+ #undef _i64tot
+ #define _i64tot lucene_i64tot
+#endif
+#if (defined(_UCS2) && !defined(_CL_HAVE_WCSTOLL)) || (defined(_ASCII) && !defined(_CL_HAVE_STRTOLL))
+ int64_t lucene_tcstoi64(const TCHAR* str, TCHAR**end, int radix);
+ #undef _tcstoi64
+ #define _tcstoi64 lucene_tcstoi64
+#endif
+#if defined(_UCS2) && !defined(_CL_HAVE_WCSTOD)
+ double lucene_tcstod(const TCHAR *value, TCHAR **end);
+ #undef _tcstod
+ #define _tcstod lucene_tcstod
+#endif
+
+//printf functions
+#if defined(_UCS2) && (!defined(_CL_HAVE_SNWPRINTF) || defined(_CL_HAVE_SWPRINTF_BUG) )
+ #undef _sntprintf
+ #define _sntprintf lucene_snwprintf
+ int lucene_snwprintf(wchar_t* strbuf, size_t count, const wchar_t * format, ...);
+
+ #ifndef __CL_INCLUDE_TPRINTF
+ #define __CL_INCLUDE_TPRINTF
+ #endif
+#endif
+#if defined(_UCS2) && !defined(_CL_HAVE_WPRINTF)
+ #undef _tprintf
+ #define _tprintf lucene_wprintf
+ void lucene_wprintf(const wchar_t * format, ...);
+
+ #ifndef __CL_INCLUDE_TPRINTF
+ #define __CL_INCLUDE_TPRINTF
+ #endif
+#endif
+#if defined(_UCS2) && (!defined(_CL_HAVE_VSNWPRINTF) || defined(_CL_HAVE_SWPRINTF_BUG) )
+ #undef _vsntprintf
+ #define _vsntprintf lucene_vsnwprintf
+ int lucene_vsnwprintf(wchar_t * strbuf, size_t count, const wchar_t * format, va_list& ap);
+
+ #ifndef __CL_INCLUDE_TPRINTF
+ #define __CL_INCLUDE_TPRINTF
+ #endif
+#endif
+
+//todo: if _CL_HAVE_SNPRINTF_BUG fails(snprintf overflow),we should use our own
+//function. but we don't have it currently, and our functions are dubious anyway...
+
+#endif //end of _lucene_repl_wchar_h
diff --git a/src/3rdparty/clucene/src/CLucene/config/threadCSection.h b/src/3rdparty/clucene/src/CLucene/config/threadCSection.h
new file mode 100644
index 0000000..ab18420
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/config/threadCSection.h
@@ -0,0 +1,71 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+//NOTE: do not include this file directly, it is included from lucene internally.
+
+#ifndef lucene_config_threadCSection_h
+#define lucene_config_threadCSection_h
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+CL_NS_DEF(util)
+
+ #if !defined(LUCENE_USE_WINDOWS_H) && !defined(_WINDOWS_) && !defined(__MINGW32__)
+ //we have not explicity included windows.h and windows.h has
+ //not been included (check _WINDOWS_), then we must define
+ //our own definitions to the thread locking functions:
+ struct CRITICAL_SECTION
+ {
+ struct critical_section_debug * DebugInfo;
+ long LockCount;
+ long RecursionCount;
+ void * OwningThread;
+ void * LockSemaphore;
+ #if defined(_WIN64)
+ unsigned __int64 SpinCount;
+ #else
+ unsigned long SpinCount;
+ #endif
+ };
+ #endif
+
+ ///a windows implementation of the lock mutex
+ ///todo: boost has a InterlockedExchange way of locking too. More backwards compatible/faster???
+ class mutex_win32
+ {
+ private:
+ CRITICAL_SECTION mtx;
+ public:
+ mutex_win32(const mutex_win32& clone);
+ mutex_win32();
+ ~mutex_win32();
+ void lock();
+ void unlock();
+ };
+
+ class CLuceneThreadIdCompare
+ {
+ public:
+
+ enum
+ { // parameters for hash table
+ bucket_size = 4, // 0 < bucket_size
+ min_buckets = 8
+ }; // min_buckets = 2 ^^ N, 0 < N
+
+ bool operator()( DWORD t1, DWORD t2 ) const{
+ return t1 < t2;
+ }
+ };
+
+ #define _LUCENE_SLEEP(x) Sleep(x)
+ #define _LUCENE_THREADMUTEX CL_NS(util)::mutex_win32
+ #define _LUCENE_CURRTHREADID GetCurrentThreadId()
+ #define _LUCENE_THREADID_TYPE DWORD
+CL_NS_END
+
+#endif //lucene_config_threadCSection_h
diff --git a/src/3rdparty/clucene/src/CLucene/config/threadPthread.h b/src/3rdparty/clucene/src/CLucene/config/threadPthread.h
new file mode 100644
index 0000000..d0ed9c4
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/config/threadPthread.h
@@ -0,0 +1,59 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+//NOTE: do not include this file directly, it is included from lucene internally.
+
+#ifndef lucene_config_threadPthread_h
+#define lucene_config_threadPthread_h
+
+#include <pthread.h>
+
+CL_NS_DEF(util)
+
+///a posix implementation of the lock mutex
+///todo: we need a spinlock implemenation for usage in reference counting
+class mutex_pthread
+{
+private:
+ pthread_mutex_t mtx;
+
+public:
+ mutex_pthread(const mutex_pthread& clone);
+ mutex_pthread();
+ ~mutex_pthread();
+ void lock();
+ void unlock();
+
+private:
+ #ifndef _CL_HAVE_PTHREAD_MUTEX_RECURSIVE
+ pthread_t lockOwner;
+ unsigned int lockCount;
+ #endif
+};
+
+#define _LUCENE_SLEEP(x) usleep(x*1000) //_LUCENE_SLEEP should be in millis, usleep is in micros
+#define _LUCENE_THREADMUTEX CL_NS(util)::mutex_pthread
+#define _LUCENE_CURRTHREADID pthread_self()
+#define _LUCENE_THREADID_TYPE pthread_t
+
+class CLuceneThreadIdCompare
+{
+public:
+ enum
+ { // parameters for hash table
+ bucket_size = 4, // 0 < bucket_size
+ min_buckets = 8
+ }; // min_buckets = 2 ^^ N, 0 < N
+
+ bool operator()( pthread_t t1, pthread_t t2 ) const{
+ return t1 < t2;
+ }
+};
+
+
+CL_NS_END
+
+#endif //lucene_config_threadPthread_h
diff --git a/src/3rdparty/clucene/src/CLucene/config/threads.cpp b/src/3rdparty/clucene/src/CLucene/config/threads.cpp
new file mode 100644
index 0000000..427e580
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/config/threads.cpp
@@ -0,0 +1,162 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+
+#ifndef _CL_DISABLE_MULTITHREADING
+CL_NS_DEF(util)
+
+
+mutexGuard::mutexGuard(const mutexGuard& clone){
+ //no autoclone
+ mrMutex = NULL;
+}
+mutexGuard::mutexGuard( _LUCENE_THREADMUTEX& rMutex ) :
+ mrMutex(&rMutex)
+{
+ mrMutex->lock();
+}
+mutexGuard::~mutexGuard()
+{
+ mrMutex->unlock();
+}
+
+#if defined(_LUCENE_DONTIMPLEMENT_THREADMUTEX)
+ //do nothing
+ #if defined(_LUCENE_PRAGMA_WARNINGS)
+ #pragma message ("==================Not implementing any thread mutex==================")
+ #else
+ #warning "==================Not implementing any thread mutex=================="
+ #endif
+
+
+
+#elif defined(_CL_HAVE_WIN32_THREADS)
+ #include "CLucene/config/threadCSection.h"
+
+ #if !defined(LUCENE_USE_WINDOWS_H) && !defined(_WINDOWS_)
+ //we have not explicity included windows.h and windows.h has
+ //not been included (check _WINDOWS_), then we must define
+ //our own definitions to the thread locking functions:
+ extern "C" __declspec(dllimport) void __stdcall InitializeCriticalSection(CRITICAL_SECTION *);
+ extern "C" __declspec(dllimport) void __stdcall EnterCriticalSection(CRITICAL_SECTION *);
+ extern "C" __declspec(dllimport) void __stdcall LeaveCriticalSection(CRITICAL_SECTION *);
+ extern "C" __declspec(dllimport) void __stdcall DeleteCriticalSection(CRITICAL_SECTION *);
+ extern "C" __declspec(dllimport) unsigned long __stdcall GetCurrentThreadId();
+ #endif
+
+ mutex_win32::mutex_win32(const mutex_win32& clone){
+ InitializeCriticalSection(&mtx);
+ }
+ mutex_win32::mutex_win32()
+ {
+ InitializeCriticalSection(&mtx);
+ }
+
+ mutex_win32::~mutex_win32()
+ {
+ DeleteCriticalSection(&mtx);
+ }
+
+ void mutex_win32::lock()
+ {
+ EnterCriticalSection(&mtx);
+ }
+
+ void mutex_win32::unlock()
+ {
+ LeaveCriticalSection(&mtx);
+ }
+
+
+
+#elif defined(_CL_HAVE_PTHREAD)
+ #include "CLucene/config/threadPthread.h"
+
+ #ifdef _CL_HAVE_PTHREAD_MUTEX_RECURSIVE
+ bool mutex_pthread_attr_initd=false;
+ pthread_mutexattr_t mutex_pthread_attr;
+ #endif
+
+ #ifdef _CL__CND_DEBUG
+ #define _CLPTHREAD_CHECK(c,m) CND_PRECONDITION(c==0,m)
+ #else
+ #define _CLPTHREAD_CHECK(c,m) c;
+ #endif
+
+ mutex_pthread::mutex_pthread(const mutex_pthread& clone){
+ #ifdef _CL_HAVE_PTHREAD_MUTEX_RECURSIVE
+ _CLPTHREAD_CHECK(pthread_mutex_init(&mtx, &mutex_pthread_attr), "mutex_pthread(clone) constructor failed")
+ #else
+ #if defined(__hpux) && defined(_DECTHREADS_)
+ _CLPTHREAD_CHECK(pthread_mutex_init(&mtx, pthread_mutexattr_default), "mutex_pthread(clone) constructor failed")
+ #else
+ _CLPTHREAD_CHECK(pthread_mutex_init(&mtx, 0), "mutex_pthread(clone) constructor failed")
+ #endif
+ lockCount=0;
+ lockOwner=0;
+ #endif
+ }
+ mutex_pthread::mutex_pthread()
+ {
+ #ifdef _CL_HAVE_PTHREAD_MUTEX_RECURSIVE
+ if ( mutex_pthread_attr_initd == false ){
+ pthread_mutexattr_init(&mutex_pthread_attr);
+ pthread_mutexattr_settype(&mutex_pthread_attr, PTHREAD_MUTEX_RECURSIVE);
+ mutex_pthread_attr_initd = true;
+ }
+ _CLPTHREAD_CHECK(pthread_mutex_init(&mtx, &mutex_pthread_attr), "mutex_pthread(clone) constructor failed")
+ #else
+ #if defined(__hpux) && defined(_DECTHREADS_)
+ _CLPTHREAD_CHECK(pthread_mutex_init(&mtx, pthread_mutexattr_default), "mutex_pthread(clone) constructor failed")
+ #else
+ _CLPTHREAD_CHECK(pthread_mutex_init(&mtx, 0), "mutex_pthread(clone) constructor failed")
+ #endif
+ lockCount=0;
+ lockOwner=0;
+ #endif
+ }
+
+ mutex_pthread::~mutex_pthread()
+ {
+ _CLPTHREAD_CHECK(pthread_mutex_destroy(&mtx), "~mutex_pthread destructor failed")
+ }
+
+ void mutex_pthread::lock()
+ {
+ #ifndef _CL_HAVE_PTHREAD_MUTEX_RECURSIVE
+ pthread_t currentThread = pthread_self();
+ if( pthread_equal( lockOwner, currentThread ) ) {
+ ++lockCount;
+ } else {
+ _CLPTHREAD_CHECK(pthread_mutex_lock(&mtx), "mutex_pthread::lock")
+ lockOwner = currentThread;
+ lockCount = 1;
+ }
+ #else
+ _CLPTHREAD_CHECK(pthread_mutex_lock(&mtx), "mutex_pthread::lock")
+ #endif
+ }
+
+ void mutex_pthread::unlock()
+ {
+ #ifndef _CL_HAVE_PTHREAD_MUTEX_RECURSIVE
+ --lockCount;
+ if( lockCount == 0 )
+ {
+ lockOwner = 0;
+ _CLPTHREAD_CHECK(pthread_mutex_unlock(&mtx), "mutex_pthread::unlock")
+ }
+ #else
+ _CLPTHREAD_CHECK(pthread_mutex_unlock(&mtx), "mutex_pthread::unlock")
+ #endif
+ }
+
+#endif //thread impl choice
+
+
+CL_NS_END
+#endif //!_CL_DISABLE_MULTITHREADING
diff --git a/src/3rdparty/clucene/src/CLucene/config/utf8.cpp b/src/3rdparty/clucene/src/CLucene/config/utf8.cpp
new file mode 100644
index 0000000..14ccf5a
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/config/utf8.cpp
@@ -0,0 +1,237 @@
+/*
+ * Copyright (C) 1999 Tom Tromey
+ * Copyright (C) 2000 Red Hat, Inc.
+ *
+ * This library 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 of the License, or (at your option) any later version.
+ *
+ * This library 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 library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ *
+ ************************************************
+ * Also licensed with permission from Tom Tromey
+ * and Owen Taylor under the Apache license.
+ * Original location:
+ * http://cvs.gnome.org/viewcvs/glib/glib/gutf8.c?rev=1.50&view=log
+ ************************************************
+ *
+ * Copyright 2003-2006 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ #include "CLucene/StdHeader.h"
+
+typedef unsigned long gunichar;
+typedef unsigned char guchar;
+
+#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); \
+ }
+
+
+/**
+ * lucene_wctoutf8:
+ * @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
+ **/
+size_t lucene_wctoutf8(char * outbuf, const wchar_t ch)
+{
+ gunichar c = ch;
+ guchar 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] = (char)((c & 0x3f) | 0x80);
+ c >>= 6;
+ }
+ outbuf[0] = c | first;
+ }
+
+ return len;
+}
+
+
+/**
+ * lucene_utf8towc:
+ * @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 lucene_utf8towc_validated()
+ * instead.
+ *
+ * Return value: the resulting character
+ **/
+size_t lucene_utf8towc(wchar_t *pwc, const char *p, size_t n)
+{
+ int i, mask = 0;
+ int result;
+ unsigned char c = (unsigned char) *p;
+ int len=0;
+
+ UTF8_COMPUTE (c, mask, len);
+ if (len == -1)
+ return 0;
+ UTF8_GET (result, p, i, mask, len);
+
+ *pwc = result;
+ return len;
+}
+
+
+//this function was not taken from gnome
+size_t lucene_wcstoutf8(char * result, const wchar_t * str, size_t result_length){
+ char *p=result;
+ int i = 0;
+
+ while (p < result + result_length-1 && str[i] != 0)
+ p += lucene_wctoutf8(p,str[i++]);
+
+ *p = '\0';
+
+ return p-result;
+}
+//this function was not taken from gnome
+size_t lucene_utf8towcs(wchar_t * result, const char * str, size_t result_length){
+ char *sp = (char*)str;
+ wchar_t *rp = result;
+ int i = 0;
+
+ while (rp < result + result_length && *sp!=0){
+ size_t r = lucene_utf8towc(rp,sp,6);
+ if ( r == -1 )
+ return 0;
+ sp += r;
+ rp++;
+ }
+
+ if ( sp-str < result_length )
+ *rp = '\0';
+
+ size_t ret = sp-str;
+ return ret;
+}
+//get the number of bytes that make up the utf8 character.
+//this function was not taken from gnome
+size_t lucene_utf8charlen(const char *p)
+{
+ int mask = 0;
+ int len=0;
+ unsigned char c = (unsigned char) *p;
+
+ UTF8_COMPUTE (c, mask, len);
+ return len;
+}
diff --git a/src/3rdparty/clucene/src/CLucene/debug/condition.cpp b/src/3rdparty/clucene/src/CLucene/debug/condition.cpp
new file mode 100644
index 0000000..8554194
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/debug/condition.cpp
@@ -0,0 +1,80 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "condition.h"
+#include "CLucene/util/Misc.h"
+#ifdef _CL__CND_DEBUG
+
+#define __CND_STR_PRECONDITION "PRECONDITION"
+#define __CND_STR_CONDITION "CONDITION"
+#define __CND_STR_WARNING "WARNING"
+#define __CND_STR_MESSAGE "MESSAGE"
+#define __CND_STR_DEBUGMESSAGE "DEBUG MESSAGE"
+#define __CND_STR_EXIT "EXIT"
+
+#ifndef _CND_DEBUG_DONTIMPLEMENT_OUTDEBUG
+void _Cnd_OutDebug( const char* FormattedMsg, const char* StrTitle, const char* File, int32_t Line, int32_t Title, const char* Mes2, int32_t fatal ){
+ #ifdef __WINDOWS_H
+ /*Display a standard messagebox*/
+ MessageBox(NULL, FormattedMsg, StrTitle, (fatal==1 ? MB_ICONSTOP:MB_ICONEXCLAMATION) | MB_OK | MB_TASKMODAL);
+ #else
+ printf("%s\n",FormattedMsg);
+ #endif
+
+ #if defined(_CND_DEBUG_WARN_DEBUGGER) /*attempt to signal windows debugger*/
+ OutputDebugString(FormattedMsg);
+ DebugBreak(); /*Position debugger just before exit program*/
+ #endif
+
+ if ( fatal )
+ debugFatalExit(1);
+}
+#endif
+
+void __cnd_FormatDebug( const char* File, int32_t Line, int32_t Title, const char* Mes2, int32_t fatal ) {
+ char M[512];
+ char* StrTitle = NULL;
+
+ if( Mes2 )
+ _snprintf(M,512,"file:%s line:%d\n%s",File,Line,Mes2);
+ else
+ _snprintf(M,512,"file:%s line:%d",File,Line);
+
+ /*Determine which title to use*/
+ switch( Title ) {
+ case CND_STR_PRECONDITION: {
+ StrTitle = __CND_STR_PRECONDITION;
+ break;
+ }
+ case CND_STR_CONDITION: {
+ StrTitle = __CND_STR_CONDITION;
+ break;
+ }
+ case CND_STR_WARNING: {
+ StrTitle = __CND_STR_WARNING;
+ break;
+ }
+ case CND_STR_MESSAGE: {
+ StrTitle = __CND_STR_MESSAGE;
+ break;
+ }
+ case CND_STR_DEBUGMESSAGE: {
+ StrTitle = __CND_STR_DEBUGMESSAGE;
+ break;
+ }
+ case CND_STR_EXIT: {
+ StrTitle = __CND_STR_EXIT;
+ break;
+ }
+ default:
+ break;
+ }/*switch*/
+
+ _Cnd_OutDebug(M, StrTitle, File, Line, Title, Mes2, fatal);
+}
+#endif
+
diff --git a/src/3rdparty/clucene/src/CLucene/debug/condition.h b/src/3rdparty/clucene/src/CLucene/debug/condition.h
new file mode 100644
index 0000000..ab227e5
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/debug/condition.h
@@ -0,0 +1,64 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef __CONDITION_H
+#define __CONDITION_H
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+/*
+To enable condition debugging uncomment _CND_DEBUG in CLConfig.h
+*/
+
+#ifdef _CL__CND_DEBUG /* Don't include the debug code */
+ #ifndef CND_STR_DEFINES
+ #define CND_STR_DEFINES
+ #define CND_STR_PRECONDITION 1
+ #define CND_STR_CONDITION 2
+ #define CND_STR_WARNING 3
+ #define CND_STR_MESSAGE 4
+ #define CND_STR_DEBUGMESSAGE 5
+ #define CND_STR_EXIT 6
+ #endif
+
+ /* _CL__CND_DEBUG defined, include debug code */
+
+ #ifdef _CND_NODEBUGTEXT
+ #define CND_PRECONDITION(cond,usermessage) CND__EXITCONDITION(cond,__FILE__,__LINE__,CND_STR_PRECONDITION,NULL)
+ #define CND_CONDITION(cond,usermessage) CND__EXITCONDITION(cond,__FILE__,__LINE__,CND_STR_CONDITION,NULL)
+ #define CND_WARNING(cond,usermessage) CND__CONDITION(cond,__FILE__,__LINE__,CND_STR_WARNING,NULL)
+ #define CND_MESSAGE(cond,usermessage) CND__CONDITION(cond,__FILE__,__LINE__,CND_STR_MESSAGE,NULL)
+ #define CND_DEBUGMESSAGE(usermessage) CND__MESSAGE(__FILE__,__LINE__,CND_STR_DEBUGMESSAGE,NULL)
+ #else
+ #define CND_PRECONDITION(cond,usermessage) CND__EXITCONDITION(cond,__FILE__,__LINE__,CND_STR_PRECONDITION,usermessage)
+ #define CND_CONDITION(cond,usermessage) CND__EXITCONDITION(cond,__FILE__,__LINE__,CND_STR_CONDITION,usermessage)
+ #define CND_WARNING(cond,usermessage) CND__CONDITION(cond,__FILE__,__LINE__,CND_STR_WARNING,usermessage)
+ #define CND_MESSAGE(cond,usermessage) CND__CONDITION(cond,__FILE__,__LINE__,CND_STR_MESSAGE,usermessage)
+ #define CND_DEBUGMESSAGE(usermessage) CND__MESSAGE(__FILE__,__LINE__,CND_STR_DEBUGMESSAGE,usermessage)
+ #endif
+
+ //if _CND_DEBUG_DONTIMPLEMENT_OUTDEBUG is defined, then you must implement
+ //this routine in the client application. The debug callback can then
+ //be better customised to the host application.
+ //Here is the default implementation:
+ void _Cnd_OutDebug( const char* FormattedMsg, const char* StrTitle, const char* File, int32_t Line, int32_t Title, const char* Mes2, int32_t fatal );
+
+ void __cnd_FormatDebug( const char* File, int32_t Line, int32_t Title, const char* Mes2, int32_t fatal );
+ #define CND__EXIT(file,line,title,mes2) {__cnd_FormatDebug(file,line,title,mes2,1);}
+ #define CND__EXITCONDITION(cond,file,line,title,mes2) {if(!(cond)){__cnd_FormatDebug(file,line,title,mes2,1);}}
+ #define CND__CONDITION(cond,file,line,title,mes2) {if(!(cond)){__cnd_FormatDebug(file,line,title,mes2,0);}}
+ #define CND__MESSAGE(file,line,title,mes2) {__cnd_FormatDebug(file,line,title,mes2,0);}
+#else
+ #define CND_PRECONDITION(cond, usermessage)
+ #define CND_CONDITION(cond, usermessage)
+ #define CND_WARNING(cond,usermessage)
+ #define CND_MESSAGE(cond,usermessage)
+ #define CND_DEBUGMESSAGE(usermessage)
+#endif
+
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/debug/error.cpp b/src/3rdparty/clucene/src/CLucene/debug/error.cpp
new file mode 100644
index 0000000..53ea0e9
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/debug/error.cpp
@@ -0,0 +1,73 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+
+CL_NS_USE(util)
+
+
+#ifdef _LUCENE_DISABLE_EXCEPTIONS
+ #ifdef _LUCENE_PRAGMA_WARNINGS
+ #pragma message ("==================Lucene exceptions are disabled==================")
+ #else
+ #warning "==================Lucene exceptions are disabled=================="
+ #endif
+#else
+ CLuceneError::CLuceneError(int num, const char* str, bool ownstr)
+ {
+ error_number = num;
+ _awhat=STRDUP_AtoA(str);
+ _twhat=NULL;
+ if ( ownstr )
+ _CLDELETE_CaARRAY(str);
+ }
+
+ CLuceneError::CLuceneError(const CLuceneError& clone)
+ {
+ this->error_number = clone.error_number;
+ this->_awhat = NULL;
+ this->_twhat = NULL;
+
+ if ( clone._awhat != NULL )
+ this->_awhat = STRDUP_AtoA(clone._awhat);
+ if ( clone._twhat != NULL )
+ this->_twhat = STRDUP_TtoT(clone._twhat);
+ }
+ CLuceneError::~CLuceneError() throw(){
+ _CLDELETE_CARRAY(_twhat);
+ _CLDELETE_CaARRAY(_awhat);
+ }
+ char* CLuceneError::what(){
+#ifdef _ASCII
+ if ( _twhat != NULL )
+ return _twhat;
+#endif
+ if ( _awhat == NULL )
+ _awhat = STRDUP_TtoA(_twhat);
+ return _awhat;
+ }
+ TCHAR* CLuceneError::twhat(){
+#ifdef _ASCII
+ if ( _awhat != NULL )
+ return _awhat;
+#endif
+ if ( _twhat == NULL )
+ _twhat = STRDUP_AtoT(_awhat);
+ return _twhat;
+ }
+
+#ifndef _ASCII
+ CLuceneError::CLuceneError(int num, const TCHAR* str, bool ownstr)
+ {
+ error_number = 0;
+ _awhat=NULL;
+ _twhat=STRDUP_TtoT(str);
+ if ( ownstr )
+ _CLDELETE_CARRAY(str);
+ }
+#endif
+
+#endif //_LUCENE_DISABLE_EXCEPTIONS
diff --git a/src/3rdparty/clucene/src/CLucene/debug/error.h b/src/3rdparty/clucene/src/CLucene/debug/error.h
new file mode 100644
index 0000000..5abcc80
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/debug/error.h
@@ -0,0 +1,74 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_debug_error_
+#define _lucene_debug_error_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#define CL_ERR_UNKNOWN -1
+#define CL_ERR_IO 1
+#define CL_ERR_NullPointer 2
+#define CL_ERR_Runtime 3
+#define CL_ERR_IllegalArgument 4
+#define CL_ERR_Parse 5
+#define CL_ERR_TokenMgr 6
+#define CL_ERR_UnsupportedOperation 7
+#define CL_ERR_InvalidState 8
+#define CL_ERR_IndexOutOfBounds 9
+#define CL_ERR_TooManyClauses 10
+#define CL_ERR_RAMTransaction 11
+#define CL_ERR_InvalidCast 12
+#define CL_ERR_IllegalState 13
+
+
+
+////////////////////////////////////////////////////////
+//error try/throw/catch definitions
+////////////////////////////////////////////////////////
+#ifdef _CL_DISABLE_NATIVE_EXCEPTIONS
+ /*#define try _jpr_Try
+ #define _CLCATCH _jpr_Catch
+ #define _CLFINALLY(x) xxxx
+ #define _CLTHROWA(y) _jpr_Throw
+ #define _THROWA_DEL(y) _jpr_Throw
+ #define _RETHROW(x) _jpr_Throw
+ #define _CLTHROWT(y) _jpr_Throw
+
+ #define _THROWS ,_jpr_Throws*/
+#else
+ class CLuceneError
+ {
+ int error_number;
+ char* _awhat;
+ TCHAR* _twhat;
+ public:
+ CLuceneError(const CLuceneError& clone);
+ CLuceneError(int num, const char* str, bool ownstr);
+#ifdef _UCS2
+ CLuceneError(int num, const TCHAR* str, bool ownstr);
+#endif
+ int number(){return error_number;}
+ char* what();
+ TCHAR* twhat();
+ ~CLuceneError() throw();
+ };
+
+ //#define _THROWS //does nothing
+ #define _CLFINALLY(x) catch(...){ x; throw; } x //note: code x is not run if return is called
+ #define _CLTHROWA(number, str) throw CLuceneError(number, str,false)
+ #define _CLTHROWT(number, str) throw CLuceneError(number, str,false)
+ #define _CLTHROWA_DEL(number, str) throw CLuceneError(number, str,true) //throw a string ensures the value is deleted
+ #define _CLTHROWT_DEL(number, str) throw CLuceneError(number, str,true) //throw a string ensures the value is deleted
+
+
+#endif //_LUCENE_DISABLE_EXCEPTIONS
+//
+////////////////////////////////////////////////////////
+
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/debug/lucenebase.h b/src/3rdparty/clucene/src/CLucene/debug/lucenebase.h
new file mode 100644
index 0000000..86cdae1
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/debug/lucenebase.h
@@ -0,0 +1,75 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_debug_lucenebase_
+#define _lucene_debug_lucenebase_
+
+#ifdef _LUCENE_PRAGMA_ONCE
+# pragma once
+#endif
+
+CL_NS_DEF(debug)
+
+//Lucenebase is the superclass of all clucene objects. It provides
+//memory debugging tracking and/or reference counting
+class LuceneBase{
+public:
+#ifdef LUCENE_ENABLE_MEMLEAKTRACKING
+ static void* operator new (size_t size);
+ static void operator delete (void *p);
+ int32_t __cl_initnum; ///< The order that the object was created at. This is then used to do a lookup in the objects list
+
+ static void* operator new (size_t size, char const * file, int32_t line);
+ static void operator delete (void *p, char const * file, int32_t line);
+
+ static void* __cl_voidpadd(void* data, const char* file, int line, size_t size); ///<add arbitary data to the lucenbase_list and returns the same data
+ static void __cl_voidpremove(const void* data, const char* file, int line);///<remove arbitary data to the lucenbase_list
+ static void __cl_unregister(const void* obj); ///<un register object from the mem leak and ref count system
+
+ static int32_t __cl_GetUnclosedObjectsCount(); ///< gets the number of unclosed objects
+ static const char* __cl_GetUnclosedObject(int32_t item); ///< get the name of the nth unclosed object
+ static char* __cl_GetUnclosedObjects(); ///< get a string with the names of the unclosed objects
+ static void __cl_PrintUnclosedObjects(); ///< print unclosed objects to the stdout
+
+ ///This will clear memory relating to refcounting
+ ///other tools can be used to more accurately identify
+ ///memory leaks. This should only be called just
+ ///before closing, and after retrieving the
+ ///unclosed object list
+ static void __cl_ClearMemory();
+
+#endif //LUCENE_ENABLE_MEMLEAKTRACKING
+
+ int __cl_refcount;
+ LuceneBase(){
+ __cl_refcount=1;
+ }
+ inline int __cl_getref(){
+ return __cl_refcount;
+ }
+ inline int __cl_addref(){
+ __cl_refcount++;
+ return __cl_refcount;
+ }
+ inline int __cl_decref(){
+ __cl_refcount--;
+ return __cl_refcount;
+ }
+ virtual ~LuceneBase(){};
+};
+
+class LuceneVoidBase{
+ public:
+ #ifdef _DEBUG
+ //a compile time check to make sure that _CLDELETE and _CLDECDELETE is being
+ //used correctly.
+ int dummy__see_mem_h_for_details;
+ #endif
+ virtual ~LuceneVoidBase(){};
+};
+
+CL_NS_END
+#endif //_lucene_debug_lucenebase_
diff --git a/src/3rdparty/clucene/src/CLucene/debug/mem.h b/src/3rdparty/clucene/src/CLucene/debug/mem.h
new file mode 100644
index 0000000..e15c3de
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/debug/mem.h
@@ -0,0 +1,130 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_debug_mem_h
+#define _lucene_debug_mem_h
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "lucenebase.h"
+
+//Macro for creating new objects
+#if defined(LUCENE_ENABLE_MEMLEAKTRACKING)
+ #define _CLNEW new(__FILE__, __LINE__)
+ #define LUCENE_BASE public CL_NS(debug)::LuceneBase
+#elif defined(LUCENE_ENABLE_REFCOUNT)
+ #define _CLNEW new
+ #define LUCENE_BASE public CL_NS(debug)::LuceneBase
+#else
+ #define _CLNEW new
+ #define LUCENE_BASE public CL_NS(debug)::LuceneVoidBase
+ #define LUCENE_BASE_CHECK(obj) (obj)->dummy__see_mem_h_for_details
+#endif
+#define _CL_POINTER(x) (x==NULL?NULL:(x->__cl_addref()>=0?x:x)) //return a add-ref'd object
+#define LUCENE_REFBASE public CL_NS(debug)::LuceneBase //this is the base of classes who *always* need refcounting
+
+#if defined(_DEBUG)
+ #if !defined(LUCENE_BASE_CHECK)
+ #define LUCENE_BASE_CHECK(x)
+ #endif
+#else
+ #undef LUCENE_BASE_CHECK
+ #define LUCENE_BASE_CHECK(x)
+#endif
+
+//Macro for creating new arrays
+#ifdef LUCENE_ENABLE_MEMLEAKTRACKING
+ #define _CL_NEWARRAY(type,size) (type*)CL_NS(debug)::LuceneBase::__cl_voidpadd(new type[(size_t)size],__FILE__,__LINE__,(size_t)size);
+ #define _CLDELETE_ARRAY(x) if (x!=NULL){CL_NS(debug)::LuceneBase::__cl_voidpremove((const void*)x,__FILE__,__LINE__); delete [] x; x=NULL;}
+ #define _CLDELETE_LARRAY(x) if (x!=NULL){CL_NS(debug)::LuceneBase::__cl_voidpremove((const void*)x,__FILE__,__LINE__);delete [] x;}
+ #ifndef _CLDELETE_CARRAY
+ #define _CLDELETE_CARRAY(x) if (x!=NULL){CL_NS(debug)::LuceneBase::__cl_voidpremove((const void*)x,__FILE__,__LINE__);delete [] x; x=NULL;}
+ #define _CLDELETE_LCARRAY(x) if (x!=NULL){CL_NS(debug)::LuceneBase::__cl_voidpremove((const void*)x,__FILE__,__LINE__);delete [] x;}
+ #endif
+#else
+ #define _CL_NEWARRAY(type,size) new type[size]
+ #define _CLDELETE_ARRAY(x) if (x!=NULL){delete [] x; x=NULL;}
+ #define _CLDELETE_LARRAY(x) if (x!=NULL){delete [] x;}
+ #ifndef _CLDELETE_CARRAY
+ #define _CLDELETE_CARRAY(x) if (x!=NULL){delete [] x; x=NULL;}
+ #define _CLDELETE_LCARRAY(x) if (x!=NULL){delete [] x;}
+ #endif
+#endif
+//a shortcut for deleting a carray and all its contents
+#define _CLDELETE_CARRAY_ALL(x) {if ( x!=NULL ){ for(int xcda=0;x[xcda]!=NULL;xcda++)_CLDELETE_CARRAY(x[xcda]);}_CLDELETE_ARRAY(x)};
+#define _CLDELETE_ARRAY_ALL(x) {if ( x!=NULL ){ for(int xcda=0;x[xcda]!=NULL;xcda++)_CLDELETE(x[xcda]);}_CLDELETE_ARRAY(x)};
+#ifndef _CLDELETE_CaARRAY
+ #define _CLDELETE_CaARRAY _CLDELETE_CARRAY
+ #define _CLDELETE_LCaARRAY _CLDELETE_LCARRAY
+#endif
+
+//Macro for deleting
+#ifdef LUCENE_ENABLE_REFCOUNT
+ #define _CLDELETE(x) if (x!=NULL){ CND_PRECONDITION((x)->__cl_refcount>=0,"__cl_refcount was < 0"); if ((x)->__cl_decref() <= 0)delete x; x=NULL; }
+ #define _CLLDELETE(x) if (x!=NULL){ CND_PRECONDITION((x)->__cl_refcount>=0,"__cl_refcount was < 0"); if ((x)->__cl_decref() <= 0)delete x; }
+#else
+ #define _CLDELETE(x) if (x!=NULL){ LUCENE_BASE_CHECK(x); delete x; x=NULL; }
+ #define _CLLDELETE(x) if (x!=NULL){ LUCENE_BASE_CHECK(x); delete x; }
+#endif
+
+//_CLDECDELETE deletes objects which are *always* refcounted
+#define _CLDECDELETE(x) if (x!=NULL){ CND_PRECONDITION((x)->__cl_refcount>=0,"__cl_refcount was < 0"); if ((x)->__cl_decref() <= 0)delete x; x=NULL; }
+#define _CLLDECDELETE(x) if (x!=NULL){ CND_PRECONDITION((x)->__cl_refcount>=0,"__cl_refcount was < 0"); if ((x)->__cl_decref() <= 0)delete x; }
+
+//_VDelete should be used for deleting non-clucene objects.
+//when using reference counting, _CLDELETE casts the object
+//into a LuceneBase*.
+#define _CLVDELETE(x) if(x!=NULL){delete x; x=NULL;}
+
+template<typename T>
+class Array: LUCENE_BASE{
+public:
+ T* values;
+ size_t length;
+
+ void deleteAll(){
+ for (size_t i=0;i<length;i++)
+ _CLDELETE(values[i]);
+ _CLDELETE_ARRAY(values);
+ }
+ void deleteArray(){
+ _CLDELETE_ARRAY(values);
+ }
+
+ Array(){
+ values = NULL;
+ length = 0;
+ }
+ Array(T* values, size_t length){
+ this->values = values;
+ this->length = length;
+ }
+ Array(size_t length){
+ this->values = _CL_NEWARRAY(T,length);
+ this->length = length;
+ }
+ ~Array(){}
+
+ const T operator[](size_t _Pos) const
+ {
+ if (length <= _Pos){
+ _CLTHROWA(CL_ERR_IllegalArgument,"vector subscript out of range");
+ }
+ return (*(values + _Pos));
+ }
+ T operator[](size_t _Pos)
+ {
+ if (length <= _Pos){
+ _CLTHROWA(CL_ERR_IllegalArgument,"vector subscript out of range");
+ }
+ return (*(values + _Pos));
+ }
+
+};
+
+#endif //_lucene_debug_lucenebase_
diff --git a/src/3rdparty/clucene/src/CLucene/debug/memtracking.cpp b/src/3rdparty/clucene/src/CLucene/debug/memtracking.cpp
new file mode 100644
index 0000000..544a125
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/debug/memtracking.cpp
@@ -0,0 +1,371 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "CLucene/util/Misc.h"
+
+bool _lucene_disable_debuglogging = true; //if LUCENE_ENABLE_CONSTRUCTOR_LOG is on, dont do log if this is true
+bool _lucene_run_objectcheck = false; //run a memory check before deleting objects
+int _lucene_counter_break = -1; //to break at this item, change this
+ //and put break points at points below
+
+CL_NS_USE(util)
+CL_NS_DEF(debug)
+
+#ifdef LUCENE_ENABLE_MEMLEAKTRACKING
+int32_t _instance_counter = 0; //counter for initnumber
+
+struct _file{
+ int32_t refcount; ///times this has been used
+ char* value; ///reference to the the basefile
+}; //structure for name counting
+struct _pointers{
+ _file* file;
+ int32_t initline;
+ int32_t initnumber;
+};//structure for pointer-filename references
+
+typedef CL_NS(util)::CLSet<const char*,_file*,Compare::Char,Deletor::Dummy,Deletor::Void<_file> > defFile;
+typedef CL_NS(util)::CLSet<LuceneBase*,_pointers*,Compare::Void<LuceneBase>,Deletor::Dummy,Deletor::Void<_pointers> > defPointer;
+typedef CL_NS(util)::CLSet<const void*,_pointers*,Compare::Void<const void>,Deletor::Dummy,Deletor::Void<_pointers> > defVoid;
+
+DEFINE_MUTEX(memleak_lock)
+defFile LuceneBase_Files(false,true); //list of filenames used
+defPointer LuceneBase_Pointers(false,true); //list of pointers counted
+defVoid LuceneBase_Voids(false,true); //list of arbitary data added
+
+//variables to trim filenames to just the base names
+char _files_trim_string[CL_MAX_DIR];
+int32_t _files_trim_start=-1;
+
+//trim the filename and return the refcounted _file* structure
+_file* get_file(const char* file){
+ if ( _files_trim_start == -1 ){
+ //this trims the start of the name file name so
+ //that the whole of the filename is not stored - more asthetic :)
+ //need to find the base
+ _files_trim_start = strlen(__FILE__) - 21; //(length of debug/memtracking.cpp)
+ strcpy(_files_trim_string,__FILE__);
+ _files_trim_string[_files_trim_start] = 0;
+ }
+ if ( strncmp(file,_files_trim_string,_files_trim_start) == 0 ){
+ //this file should be within the same directory area as we found lucenebase.cpp
+ //to be, lets trim the start
+ file+=_files_trim_start;
+ }
+
+ //now return an existing files structure (with refcount++) or create a new one
+ defFile::iterator itr = LuceneBase_Files.find((const char*)file);
+ if ( itr != LuceneBase_Files.end() ){
+ _file* bf = itr->second;
+ bf->refcount++;
+ return bf;
+ }else{
+ _file* ref = new _file;
+ ref->value = new char[strlen(file)+1]; //cannot use _CL_NEWARRAY otherwise recursion
+ strcpy(ref->value,file);
+
+ ref->refcount = 1;
+ LuceneBase_Files.insert(pair<const char*,_file*>(ref->value,ref));
+ return ref;
+ }
+}
+
+void remove_file(_file* bf){
+ bf->refcount--;
+ if ( bf->refcount <= 0 ){
+ defFile::iterator fi = LuceneBase_Files.find(bf->value);
+ CND_PRECONDITION(fi!=LuceneBase_Files.end(),"fi==NULL");
+ delete[] bf->value;
+ LuceneBase_Files.removeitr(fi);
+ }
+}
+
+#ifdef LUCENE_ENABLE_CONSTRUCTOR_LOG
+ void constructor_log(const char* type,const char* file,const int line, const int size){
+ if ( _lucene_disable_debuglogging ){
+ FILE* f = fopen("clucene.log","a");
+ char buf[CL_MAX_DIR+5];
+ sprintf(buf,"%s,%s,%d,%d\n",type,file,line,size);
+ fwrite(buf,sizeof(char),strlen(buf),f);
+ fclose(f);
+ }
+ }
+ #define CONSTRUCTOR_LOG(type,file,line,size) constructor_log(type,file,line,size)
+#else
+ #define CONSTRUCTOR_LOG(type,file,line,size)
+#endif
+
+////////////////////////////////////////////////////////////////////////////////
+// the _CLNEW&_CLDELETE new/delete operators
+////////////////////////////////////////////////////////////////////////////////
+void* LuceneBase::operator new (size_t size, const char * file, int32_t line)
+{
+ SCOPED_LOCK_MUTEX(memleak_lock)
+
+ void* p = malloc (size);
+ LuceneBase* lb = (LuceneBase*)p;
+
+ //create the pointer struct
+ _file* br = get_file(file);
+ _pointers* bp = new _pointers;
+ bp->file = br;
+ bp->initnumber = _instance_counter++;
+ bp->initline = line;
+
+ //associate this object with the pointer
+ lb->__cl_initnum = bp->initnumber;
+
+ //break if necessary
+ if ( _lucene_counter_break == lb->__cl_initnum )
+ CLDebugBreak(); //put break point here
+
+ //add the pointer object
+ LuceneBase_Pointers.insert(pair<LuceneBase*,_pointers*>(lb, bp));
+
+ CONSTRUCTOR_LOG("newobj",file,line,size);
+ return p;
+}
+void LuceneBase::operator delete (void *p, char const * file, int32_t line)
+{
+ SCOPED_LOCK_MUTEX(memleak_lock)
+
+ LuceneBase* lb=(LuceneBase*)p;
+
+ defPointer::iterator itr = LuceneBase_Pointers.find(lb);
+ if ( itr != LuceneBase_Pointers.end() ){
+ _pointers* bp = itr->second;
+ remove_file(bp->file);
+
+ LuceneBase_Pointers.removeitr(itr);
+ }else{
+ //break
+ }
+ free(p);
+}
+
+///////////////////////////////////////////////////////////////////////////
+// the generic new/delete operators
+///////////////////////////////////////////////////////////////////////////
+void* LuceneBase::operator new (size_t size)
+{
+ SCOPED_LOCK_MUTEX(memleak_lock)
+
+ void* p = malloc (size);
+ LuceneBase* lb = (LuceneBase*)p;
+
+ //create the pointer struct
+ _file* br = get_file("undefined");
+ _pointers* bp = new _pointers;
+ bp->file = br;
+ bp->initnumber = _instance_counter++;
+ bp->initline = -1;
+
+ //associate this object with the pointer
+ lb->__cl_initnum = bp->initnumber;
+
+ //break if necessary
+ if ( _lucene_counter_break == lb->__cl_initnum )
+ CLDebugBreak();
+
+ //add the pointer object
+ LuceneBase_Pointers.insert(pair<LuceneBase*,_pointers*>(lb,bp));
+
+ CONSTRUCTOR_LOG("newobj","unknown",-1,size);
+ return p;
+}
+void LuceneBase::operator delete (void *p)
+{
+ SCOPED_LOCK_MUTEX(memleak_lock)
+
+ LuceneBase* lb=(LuceneBase*)p;
+
+ defPointer::iterator itr = LuceneBase_Pointers.find(lb);
+ if ( itr != LuceneBase_Pointers.end() ){
+ _pointers* bp = itr->second;
+ remove_file(bp->file);
+ LuceneBase_Pointers.removeitr(itr);
+ }else{
+ CLDebugBreak();
+ }
+ free(p);
+}
+
+///////////////////////////////////////////////////////////////////////////
+// other memtracking functions
+///////////////////////////////////////////////////////////////////////////
+void LuceneBase::__cl_unregister(const void* obj){
+ SCOPED_LOCK_MUTEX(memleak_lock)
+
+ LuceneBase* lb=(LuceneBase*)obj;
+ defPointer::iterator itr = LuceneBase_Pointers.find(lb);
+ CND_PRECONDITION(itr != LuceneBase_Pointers.end(),"__cl_unregister object not found");
+ _pointers* bp = itr->second;
+ LuceneBase_Pointers.removeitr(itr);
+}
+
+void* LuceneBase::__cl_voidpadd(void* data, const char* file, int line,size_t size){
+ SCOPED_LOCK_MUTEX(memleak_lock)
+
+ _file* br = get_file(file);
+ _pointers* bp = new _pointers;
+ bp->file = br;
+ bp->initnumber = _instance_counter++;
+ bp->initline = line;
+
+ LuceneBase_Voids.insert(pair<void*,_pointers*>(data,bp));
+ CONSTRUCTOR_LOG("newarr",file,line,size);
+ return data;
+}
+void LuceneBase::__cl_voidpremove(const void* data, const char* file, int line){
+ SCOPED_LOCK_MUTEX(memleak_lock)
+ defVoid::iterator itr = LuceneBase_Voids.find(data);
+ if ( itr != LuceneBase_Voids.end() ){
+ _pointers* bp = itr->second;
+ remove_file(bp->file);
+ LuceneBase_Voids.removeitr(itr);
+ }else{
+ printf("Data deleted when not added with _CL_NEWARRAY in %s at %d\n",file,line);
+ }
+}
+
+
+////////////////////////////////////////////////////////////
+
+
+////////////////////////////////////////////////////////////
+//The lucene base memory leak printout functions
+////////////////////////////////////////////////////////////
+//static
+void __internalcl_PrintUnclosedObject(bool isObject, string& sb,_pointers* bp,_file* bf, bool print){
+ TCHAR ttmp[100];
+ char atmp[100];
+
+ sb.append(" ");
+ {
+ _i64tot(bp->initnumber,ttmp,10);
+ STRCPY_TtoA(atmp,ttmp,100);
+ sb.append(atmp);
+ }
+ if ( isObject ){
+ sb.append("(obj). ");
+ }else{
+ sb.append(". ");
+ }
+ sb.append(bf->value);
+ sb.append(", line ");
+ {
+ _i64tot(bp->initline,ttmp,10);
+ STRCPY_TtoA(atmp,ttmp,100);
+ sb.append(atmp);
+ }
+ sb.append("\n");
+
+ if ( print && sb.length() > 0 ){
+ printf("%s\n", sb.c_str());
+ sb = "";
+ }
+}
+char* __internalcl_GetUnclosedObjects(bool print){
+ TCHAR ttmp[100];
+ char atmp[100];
+ SCOPED_LOCK_MUTEX(memleak_lock)
+
+ string sb;
+ bool unknowns = false;
+ if ( LuceneBase_Pointers.size() > 0 ){
+ {
+ _i64tot(LuceneBase_Pointers.size(),ttmp,10);
+ STRCPY_TtoA(atmp,ttmp,100);
+ sb.append(atmp);
+ }
+ sb.append(" clucene objects are still open\n");
+
+ defPointer::iterator itr = LuceneBase_Pointers.begin();
+ while ( itr != LuceneBase_Pointers.end() ){
+ _pointers* bp = itr->second;
+ _file* bf = bp->file;
+
+ if ( bp->initline == -1 )
+ unknowns = true;
+ __internalcl_PrintUnclosedObject(true, sb,bp,bf,print);
+
+ ++itr;
+ }
+
+ defVoid::iterator itr2 = LuceneBase_Voids.begin();
+ while ( itr2 != LuceneBase_Voids.end() ){
+ _pointers* bp = itr2->second;
+ _file* bf = bp->file;
+
+ if ( bp->initline == -1 )
+ unknowns = true;
+ __internalcl_PrintUnclosedObject(false, sb,bp,bf,print);
+
+ itr2++;
+ }
+ }
+
+ if ( unknowns == true ){
+ sb.append("*** Some memory was not created with _CLNEW and was not tracked... ***\n");
+ sb.append("*** Use _CLNEW instead of new when creating CLucene objects ***\n");
+ sb.append("*** Memory may also have not been freed in the current context ***\n");
+ }
+
+ if ( print ){
+ if ( sb.length() > 0 ){
+ printf("%s\n", sb.c_str());
+ sb = "";
+ }
+ return NULL;
+ }else{
+ if ( sb.length() > 0 )
+ return STRDUP_AtoA(sb.c_str());
+ else
+ return NULL;
+ }
+}
+
+void LuceneBase::__cl_ClearMemory(){
+ SCOPED_LOCK_MUTEX(memleak_lock)
+
+ while ( LuceneBase_Files.size() > 0 ){
+ defFile::iterator fi = LuceneBase_Files.begin();
+ _file* f = fi->second;
+ delete[] f->value;
+ LuceneBase_Files.removeitr (fi);
+ }
+ LuceneBase_Pointers.clear();
+ LuceneBase_Voids.clear();
+}
+char* LuceneBase::__cl_GetUnclosedObjects(){
+ return __internalcl_GetUnclosedObjects(false);
+}
+//static
+int32_t LuceneBase::__cl_GetUnclosedObjectsCount(){
+ return LuceneBase_Pointers.size();
+}
+
+const char* LuceneBase::__cl_GetUnclosedObject(int32_t item){
+ SCOPED_LOCK_MUTEX(memleak_lock)
+
+ defPointer::iterator itr=LuceneBase_Pointers.begin();
+ int32_t i=0;
+ for ( ;itr!=LuceneBase_Pointers.end() && i<item ;itr++ ){
+ ++i;
+ }
+ if ( itr != LuceneBase_Pointers.end() )
+ return itr->second->file->value;
+ else
+ return NULL;
+}
+void LuceneBase::__cl_PrintUnclosedObjects(){
+ __internalcl_GetUnclosedObjects(true);
+}
+////////////////////////////////////////////////////////////
+
+#endif //LUCENE_ENABLE_MEMLEAKTRACKING
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/document/DateField.cpp b/src/3rdparty/clucene/src/CLucene/document/DateField.cpp
new file mode 100644
index 0000000..ff72b12
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/document/DateField.cpp
@@ -0,0 +1,60 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+
+#include "DateField.h"
+#include "CLucene/util/Misc.h"
+CL_NS_USE(util)
+CL_NS_DEF(document)
+
+DateField::~DateField(){
+}
+
+TCHAR* DateField::timeToString(const int64_t time) {
+ TCHAR* buf = _CL_NEWARRAY(TCHAR,DATEFIELD_DATE_LEN + 1);
+ timeToString(time,buf);
+ return buf;
+}
+void DateField::timeToString(const int64_t time, TCHAR* buf) {
+ CND_PRECONDITION (buf, "buf == NULL");
+ *buf = '\0';
+ if (time < 0)
+ _CLTHROWA (CL_ERR_IllegalArgument,"time too early"); //todo: make richer error
+
+ if (time > DATEFIELD_DATE_MAX)
+ _CLTHROWA (CL_ERR_IllegalArgument, "time too late (past DATEFIELD_DATE_MAX"); //todo: make richer error
+
+ _i64tot(time, buf, 36);
+ int32_t bufLen = _tcslen(buf);
+
+ CND_PRECONDITION (bufLen <= DATEFIELD_DATE_LEN, "timeToString length is greater than 9");
+
+ /* Supply leading zeroes if necessary. */
+ if (bufLen < DATEFIELD_DATE_LEN) {
+ const int32_t nMissingZeroes = DATEFIELD_DATE_LEN - bufLen;
+ /* Move buffer contents forward to make room for leading zeroes. */
+ for (int32_t i = DATEFIELD_DATE_LEN - 1; i >= nMissingZeroes; i--)
+ buf[i] = buf[i - nMissingZeroes];
+
+ /* Insert leading zeroes. */
+ {// MSVC6 scoping fix
+ for (int32_t i = 0; i < nMissingZeroes; i++)
+ buf[i] = '0';
+ }
+
+ buf[DATEFIELD_DATE_LEN] = 0;
+ }
+
+ CND_PRECONDITION (_tcslen(buf) == DATEFIELD_DATE_LEN, "timeToString return is not equal to DATEFIELD_DATE_LEN");
+}
+
+int64_t DateField::stringToTime(const TCHAR* time) {
+ TCHAR* end;
+ return _tcstoi64(time, &end, 36);
+}
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/document/DateField.h b/src/3rdparty/clucene/src/CLucene/document/DateField.h
new file mode 100644
index 0000000..712fe9b
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/document/DateField.h
@@ -0,0 +1,64 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_document_DateField_
+#define _lucene_document_DateField_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+CL_NS_DEF(document)
+
+//here are some constants used throughout clucene
+//make date strings long enough to last a millenium
+#define DATEFIELD_DATE_MAX _ILONGLONG(31536000000000) //1000L*365*24*60*60*1000
+
+#define DATEFIELD_DATE_LEN 9 ////Long.toString(DATEFIELD_DATE_MAX, Character.MAX_RADIX).length()
+
+/**
+* Provides support for converting dates to strings and vice-versa.
+* The strings are structured so that lexicographic sorting orders by date,
+* which makes them suitable for use as field values and search terms.
+*
+* <P>Note that this class saves dates with millisecond granularity,
+* which is bad for {@link RangeQuery} and {@link PrefixQuery}, as those
+* queries are expanded to a BooleanQuery with a potentially large number
+* of terms when searching. Thus you might want to use
+* {@link DateTools} instead.
+*
+* <P>
+* Note: dates before 1970 cannot be used, and therefore cannot be
+* indexed when using this class. See {@link DateTools} for an
+* alternative without such a limitation.
+*
+* @deprecated If you build a new index, use {@link DateTools} instead. This class is included for use with existing
+* indices and will be removed in a future release.
+*/
+class DateField :LUCENE_BASE {
+public:
+ ~DateField();
+
+ /**
+ * Converts a millisecond time to a string suitable for indexing.
+ * @throws RuntimeException if the time specified in the
+ * method argument is negative, that is, before 1970
+ */
+ static TCHAR* timeToString(const int64_t time);
+
+ /**
+ * Converts a millisecond time to a string suitable for indexing.
+ * @throws CL_ERR_IllegalArgument if the time specified in the
+ * method argument is negative, that is, before 1970
+ * @param str must be a character array DATEFIELD_DATE_LEN+1 or longer
+ */
+ static void timeToString(const int64_t time, TCHAR* str);
+
+ /** Converts a string-encoded date into a millisecond time. */
+ static int64_t stringToTime(const TCHAR* s);
+};
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/document/Document.cpp b/src/3rdparty/clucene/src/CLucene/document/Document.cpp
new file mode 100644
index 0000000..a0ce039
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/document/Document.cpp
@@ -0,0 +1,237 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "Document.h"
+#include "Field.h"
+#include "CLucene/util/StringBuffer.h"
+
+CL_NS_USE(util)
+CL_NS_DEF(document)
+
+ DocumentFieldEnumeration::DocumentFieldList::DocumentFieldList(Field* f, DocumentFieldList* n ) {
+ //Func - Constructor
+ //Pre - f != NULL
+ // n may be NULL
+ //Post - Instance has been created
+ CND_PRECONDITION(f != NULL, "f is NULL");
+
+ field = f;
+ next = n;
+ }
+ DocumentFieldEnumeration::DocumentFieldList::~DocumentFieldList(){
+ //Func - Destructor
+ //Pre - true
+ //Post - Instance has been destroyed
+
+ // Instead of recursively deleting the field list we do
+ // it iteratively to avoid stack overflows when
+ // dealing with several thousands of fields.
+
+ if (!field) {
+ return; // nothing to do; deleted by different invocation of dtor
+ }
+
+ DocumentFieldList* cur = next;
+ while (cur != NULL)
+ {
+ DocumentFieldList* temp = cur->next;
+ cur->next = NULL;
+
+ _CLDELETE(cur);
+ cur = temp;
+ }
+ _CLDELETE(field);
+ }
+
+
+ DocumentFieldEnumeration::DocumentFieldEnumeration(const DocumentFieldList* fl){
+ //Func - Constructor
+ //Pre - fl may be NULL
+ //Post - Instance has been created
+
+ fields = fl;
+ }
+
+ DocumentFieldEnumeration::~DocumentFieldEnumeration(){
+ //Func - Destructor
+ //Pre - true
+ //Post - Instance has been destroyed
+ }
+
+ bool DocumentFieldEnumeration::hasMoreElements() const {
+ return fields == NULL ? false : true;
+ }
+
+ Field* DocumentFieldEnumeration::nextElement() {
+ //Func - Return the next element in the enumeration
+ //Pre - true
+ //Post - The next element is returned or NULL
+
+
+ Field* result = NULL;
+ //Check if fields is still valid
+ if (fields){
+ result = fields->field;
+ fields = fields->next;
+ }
+ return result;
+ }
+
+ /** Constructs a new document with no fields. */
+ Document::Document(){
+ //Func - Constructor
+ //Pre - true
+ //Post - Instance has been created
+ boost = 1.0f;
+ fieldList = NULL;
+ }
+
+ Document::~Document(){
+ //Func - Destructor
+ //Pre - true
+ //Post - Instance has been destroyed
+ boost = 1.0f;
+ _CLDELETE(fieldList);
+ }
+
+ void Document::clear(){
+ _CLDELETE(fieldList);
+ }
+
+ void Document::add(Field& field) {
+ fieldList = _CLNEW DocumentFieldEnumeration::DocumentFieldList(&field, fieldList);
+ }
+
+ void Document::setBoost(qreal boost) {
+ this->boost = boost;
+ }
+
+ qreal Document::getBoost() const {
+ return boost;
+ }
+
+
+ Field* Document::getField(const TCHAR* name) const{
+ CND_PRECONDITION(name != NULL, "name is NULL");
+
+ for (DocumentFieldEnumeration::DocumentFieldList* list = fieldList; list != NULL; list = list->next)
+ //cannot use interning here, because name is probably not interned
+ if ( _tcscmp(list->field->name(), name) == 0 ){
+ return list->field;
+ }
+
+ return NULL;
+ }
+
+ const TCHAR* Document::get(const TCHAR* field) const {
+ CND_PRECONDITION(field != NULL, "field is NULL");
+ Field *f = getField(field);
+ if (f!=NULL)
+ return f->stringValue(); //this returns null it is a binary(reader)
+ else
+ return NULL;
+ }
+
+ DocumentFieldEnumeration* Document::fields() const {
+ return _CLNEW DocumentFieldEnumeration(fieldList);
+ }
+
+
+ TCHAR* Document::toString() const {
+ StringBuffer ret(_T("Document<"));
+ for (DocumentFieldEnumeration::DocumentFieldList* list = fieldList; list != NULL; list = list->next) {
+ TCHAR* tmp = list->field->toString();
+ ret.append( tmp );
+ if (list->next != NULL)
+ ret.append(_T(" "));
+ _CLDELETE_ARRAY( tmp );
+ }
+ ret.append(_T(">"));
+ return ret.toString();
+ }
+
+
+
+ void Document::removeField(const TCHAR* name) {
+ CND_PRECONDITION(name != NULL, "name is NULL");
+
+ DocumentFieldEnumeration::DocumentFieldList* previous = NULL;
+ DocumentFieldEnumeration::DocumentFieldList* current = fieldList;
+ while (current != NULL) {
+ //cannot use interning here, because name is probably not interned
+ if ( _tcscmp(current->field->name(),name) == 0 ){
+ if (previous){
+ previous->next = current->next;
+ }else
+ fieldList = current->next;
+ current->next=NULL; //ensure fieldlist destructor doesnt delete it
+ _CLDELETE(current);
+ return;
+ }
+ previous = current;
+ current = current->next;
+ }
+ }
+
+ void Document::removeFields(const TCHAR* name) {
+ CND_PRECONDITION(name != NULL, "name is NULL");
+
+ DocumentFieldEnumeration::DocumentFieldList* previous = NULL;
+ DocumentFieldEnumeration::DocumentFieldList* current = fieldList;
+ while (current != NULL) {
+ //cannot use interning here, because name is probably not interned
+ if ( _tcscmp(current->field->name(),name) == 0 ){
+ if (previous){
+ previous->next = current->next;
+ }else
+ fieldList = current->next;
+
+ current->next=NULL; //ensure fieldlist destructor doesnt delete it
+ _CLDELETE(current);
+
+ if ( previous )
+ current = previous->next;
+ else
+ current = fieldList;
+ }else{
+ previous = current;
+ current = current->next;
+ }
+ }
+ }
+
+ TCHAR** Document::getValues(const TCHAR* name) {
+ DocumentFieldEnumeration* it = fields();
+ int32_t count = 0;
+ while ( it->hasMoreElements() ){
+ Field* f = it->nextElement();
+ //cannot use interning here, because name is probably not interned
+ if ( _tcscmp(f->name(),name) == 0 && f->stringValue() != NULL )
+ count++;
+ }
+ _CLDELETE(it);
+ it = fields();
+
+ //todo: there must be a better way of doing this, we are doing two iterations of the fields
+ TCHAR** ret = NULL;
+ if ( count > 0 ){
+ //start again
+ ret = _CL_NEWARRAY(TCHAR*,count+1);
+ int32_t i=0;
+ while ( it->hasMoreElements() ){
+ Field* fld=it->nextElement();
+ if ( _tcscmp(fld->name(),name)== 0 && fld->stringValue() != NULL ){
+ ret[i] = stringDuplicate(fld->stringValue());
+ i++;
+ }
+ }
+ ret[count]=NULL;
+ }
+ _CLDELETE(it);
+ return ret;
+ }
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/document/Document.h b/src/3rdparty/clucene/src/CLucene/document/Document.h
new file mode 100644
index 0000000..ba7a283
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/document/Document.h
@@ -0,0 +1,158 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_document_Document_
+#define _lucene_document_Document_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "Field.h"
+
+///todo: jlucene has change from using DocumentFieldList/Enumeration
+///to using a java List... do we want to do this too?
+CL_NS_DEF(document)
+
+class Document; //predefine
+class DocumentFieldEnumeration :LUCENE_BASE{
+ class DocumentFieldList :LUCENE_BASE{
+ public:
+ DocumentFieldList(Field* f, DocumentFieldList* n);
+ ~DocumentFieldList();
+ Field* field;
+ DocumentFieldList* next;
+ };
+ friend class Document;
+private:
+ const DocumentFieldList* fields;
+public:
+ DocumentFieldEnumeration(const DocumentFieldList* fl);
+ ~DocumentFieldEnumeration();
+ bool hasMoreElements() const;
+ Field* nextElement();
+};
+
+/** Documents are the unit of indexing and search.
+*
+* A Document is a set of fields. Each field has a name and a textual value.
+* A field may be {@link Field#isStored() stored} with the document, in which
+* case it is returned with search hits on the document. Thus each document
+* should typically contain one or more stored fields which uniquely identify
+* it.
+*
+* <p>Note that fields which are <i>not</i> {@link Field#isStored() stored} are
+* <i>not</i> available in documents retrieved from the index, e.g. with {@link
+* Hits#doc(int32_t, Document*)}, {@link Searcher#doc(int32_t, Document*)} or {@link
+* IndexReader#document(int32_t, Document*)}.
+*/
+class Document:LUCENE_BASE {
+private:
+ DocumentFieldEnumeration::DocumentFieldList* fieldList;
+ qreal boost;
+public:
+ Document();
+ ~Document();
+
+ /**
+ * <p>Adds a field to a document. Several fields may be added with
+ * the same name. In this case, if the fields are indexed, their text is
+ * treated as though appended for the purposes of search.</p>
+ * <p> Note that add like the removeField(s) methods only makes sense
+ * prior to adding a document to an index. These methods cannot
+ * be used to change the content of an existing index! In order to achieve this,
+ * a document has to be deleted from an index and a new changed version of that
+ * document has to be added.</p>
+ *
+ */
+ void add(Field& field);
+ /** Returns a field with the given name if any exist in this document, or
+ * null. If multiple fields exists with this name, this method returns the
+ * first value added.
+ * Note: name is case sensitive
+ */
+ Field* getField(const TCHAR* name) const;
+
+ /** Returns the string value of the field with the given name if any exist in
+ * this document, or null. If multiple fields exist with this name, this
+ * method returns the first value added. If only binary fields with this name
+ * exist, returns null.
+ * Note: name is case sensitive
+ */
+ const TCHAR* get(const TCHAR* field) const;
+
+ /** Returns an Enumeration of all the fields in a document. */
+ DocumentFieldEnumeration* fields() const;
+ /** Prints the fields of a document for human consumption. */
+ TCHAR* toString() const;
+
+ /** Sets a boost factor for hits on any field of this document. This value
+ * will be multiplied into the score of all hits on this document.
+ *
+ * <p>Values are multiplied into the value of {@link Field#getBoost()} of
+ * each field in this document. Thus, this method in effect sets a default
+ * boost for the fields of this document.
+ *
+ * @see Field#setBoost(qreal)
+ */
+ void setBoost(qreal boost);
+
+ /** Returns the boost factor for hits on any field of this document.
+ *
+ * <p>The default value is 1.0.
+ *
+ * <p>Note: This value is not stored directly with the document in the index.
+ * Documents returned from {@link IndexReader#document(int32_t, Document*)} and
+ * {@link Hits#doc(int32_t, Document*)} may thus not have the same value present as when
+ * this document was indexed.
+ *
+ * @see #setBoost(qreal)
+ */
+ qreal getBoost() const;
+
+
+ /**
+ * <p>Removes field with the specified name from the document.
+ * If multiple fields exist with this name, this method removes the first field that has been added.
+ * If there is no field with the specified name, the document remains unchanged.</p>
+ * <p> Note that the removeField(s) methods like the add method only make sense
+ * prior to adding a document to an index. These methods cannot
+ * be used to change the content of an existing index! In order to achieve this,
+ * a document has to be deleted from an index and a new changed version of that
+ * document has to be added.</p>
+ * Note: name is case sensitive
+ */
+ void removeField(const TCHAR* name);
+
+ /**
+ * <p>Removes all fields with the given name from the document.
+ * If there is no field with the specified name, the document remains unchanged.</p>
+ * <p> Note that the removeField(s) methods like the add method only make sense
+ * prior to adding a document to an index. These methods cannot
+ * be used to change the content of an existing index! In order to achieve this,
+ * a document has to be deleted from an index and a new changed version of that
+ * document has to be added.</p>
+ * Note: name is case sensitive
+ */
+ void removeFields(const TCHAR* name);
+
+ /**
+ * Returns an array of values of the field specified as the method parameter.
+ * This method can return <code>null</code>.
+ * Note: name is case sensitive
+ *
+ * @param name the name of the field
+ * @return a <code>String[]</code> of field values
+ */
+ TCHAR** getValues(const TCHAR* name);
+
+ /**
+ * Empties out the document so that it can be reused
+ */
+ void clear();
+};
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/document/Field.cpp b/src/3rdparty/clucene/src/CLucene/document/Field.cpp
new file mode 100644
index 0000000..8cd88a3
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/document/Field.cpp
@@ -0,0 +1,315 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "CLucene/util/Reader.h"
+#include "Field.h"
+#include "CLucene/util/Misc.h"
+#include "CLucene/util/StringIntern.h"
+#include "CLucene/util/StringBuffer.h"
+
+CL_NS_USE(util)
+CL_NS_DEF(document)
+
+Field::Field(const TCHAR* Name, const TCHAR* String, bool store, bool index, bool token, const bool storeTermVector)
+{
+//Func - Constructor
+//Pre - Name != NULL and contains the name of the field
+// String != NULL and contains the value of the field
+// store indicates if the field must be stored
+// index indicates if the field must be indexed
+// token indicates if the field must be tokenized
+//Post - The instance has been created
+
+ CND_PRECONDITION(Name != NULL, "Name is NULL");
+ CND_PRECONDITION(String != NULL,"String is NULL");
+ CND_PRECONDITION(!(!index && storeTermVector),"cannot store a term vector for fields that are not indexed.");
+
+ _name = CLStringIntern::intern( Name CL_FILELINE);
+ _stringValue = stringDuplicate( String );
+ _readerValue = NULL;
+ _streamValue = NULL;
+ boost=1.0f;
+ omitNorms = false;
+
+ int cfg = 0;
+ if ( store )
+ cfg |= STORE_YES;
+ if ( index && token )
+ cfg |= INDEX_TOKENIZED;
+ else if ( index && !token )
+ cfg |= INDEX_UNTOKENIZED;
+
+ if ( storeTermVector )
+ _CLTHROWA(CL_ERR_IllegalArgument,"Stored term vector is deprecated with using this constructor");
+
+ setConfig(cfg);
+}
+
+Field::Field(const TCHAR* Name, Reader* reader, bool store, bool index, bool token, const bool storeTermVector)
+{
+//Func - Constructor
+//Pre - Name != NULL and contains the name of the field
+// reader != NULL and contains a Reader
+// store indicates if the field must be stored
+// index indicates if the field must be indexed
+// token indicates if the field must be tokenized
+//Post - The instance has been created
+
+ CND_PRECONDITION(Name != NULL, "Name is NULL");
+ CND_PRECONDITION(reader != NULL, "reader is NULL");
+
+ _name = CLStringIntern::intern( Name CL_FILELINE);
+ _stringValue = NULL;
+ _readerValue = reader;
+ _streamValue = NULL;
+ boost=1.0f;
+ omitNorms = false;
+
+ int cfg = 0;
+ if ( store )
+ cfg |= STORE_YES;
+ if ( index && token )
+ cfg |= INDEX_TOKENIZED;
+ else if ( index && !token )
+ cfg |= INDEX_UNTOKENIZED;
+
+ if ( storeTermVector )
+ _CLTHROWA(CL_ERR_IllegalArgument,"Stored term vector is deprecated with using this constructor");
+
+ setConfig(cfg);
+}
+
+Field::Field(const TCHAR* Name, Reader* reader, int config)
+{
+ CND_PRECONDITION(Name != NULL, "Name is NULL");
+ CND_PRECONDITION(reader != NULL, "reader is NULL");
+
+ _name = CLStringIntern::intern( Name CL_FILELINE);
+ _stringValue = NULL;
+ _readerValue = reader;
+ _streamValue = NULL;
+ boost=1.0f;
+ omitNorms = false;
+
+ setConfig(config);
+}
+
+
+Field::Field(const TCHAR* Name, const TCHAR* Value, int config)
+{
+ CND_PRECONDITION(Name != NULL, "Name is NULL");
+ CND_PRECONDITION(Value != NULL, "value is NULL");
+
+ _name = CLStringIntern::intern( Name CL_FILELINE);
+ _stringValue = stringDuplicate( Value );
+ _readerValue = NULL;
+ _streamValue = NULL;
+ boost=1.0f;
+ omitNorms = false;
+
+ setConfig(config);
+}
+
+Field::Field(const TCHAR* Name, jstreams::StreamBase<char>* Value, int config)
+{
+ CND_PRECONDITION(Name != NULL, "Name is NULL");
+ CND_PRECONDITION(Value != NULL, "value is NULL");
+
+ _name = CLStringIntern::intern( Name CL_FILELINE);
+ _stringValue = NULL;
+ _readerValue = NULL;
+ _streamValue = Value;
+ boost=1.0f;
+ omitNorms = false;
+
+ setConfig(config);
+}
+
+Field::~Field(){
+//Func - Destructor
+//Pre - true
+//Post - Instance has been destroyed
+
+ CLStringIntern::unintern(_name);
+ _CLDELETE_CARRAY(_stringValue);
+ _CLDELETE(_readerValue);
+ _CLVDELETE( _streamValue );
+}
+
+
+/*===============FIELDS=======================*/
+const TCHAR* Field::name() { return _name; } ///<returns reference
+TCHAR* Field::stringValue() { return _stringValue; } ///<returns reference
+Reader* Field::readerValue() { return _readerValue; } ///<returns reference
+jstreams::StreamBase<char>* Field::streamValue() { return _streamValue; } ///<returns reference
+
+bool Field::isStored() { return (config & STORE_YES) != 0; }
+bool Field::isIndexed() { return (config & INDEX_TOKENIZED)!=0 || (config & INDEX_UNTOKENIZED)!=0; }
+bool Field::isTokenized() { return (config & INDEX_TOKENIZED) != 0; }
+bool Field::isCompressed() { return (config & STORE_COMPRESS) != 0; }
+bool Field::isBinary() { return _streamValue!=NULL; }
+
+bool Field::isTermVectorStored() { return (config & TERMVECTOR_YES) != 0; }
+bool Field::isStoreOffsetWithTermVector() { return (config & TERMVECTOR_YES) != 0 && (config & TERMVECTOR_WITH_OFFSETS) != 0; }
+bool Field::isStorePositionWithTermVector() { return (config & TERMVECTOR_YES) != 0 && (config & TERMVECTOR_WITH_POSITIONS) != 0; }
+
+bool Field::getOmitNorms() { return omitNorms; }
+void Field::setOmitNorms(bool omitNorms) { this->omitNorms=omitNorms; }
+
+void Field::setBoost(qreal boost) { this->boost = boost; }
+qreal Field::getBoost() { return boost; }
+
+void Field::setConfig(int x){
+ int newConfig=0;
+
+ //set storage settings
+ if ( (x & STORE_YES) || (x & STORE_COMPRESS) ){
+ newConfig |= STORE_YES;
+ if ( x & STORE_COMPRESS )
+ newConfig |= STORE_COMPRESS;
+ }else
+ newConfig |= STORE_NO;
+
+ if ( (x & INDEX_NO)==0 ){
+ bool index=false;
+
+ if ( x & INDEX_NONORMS ){
+ newConfig |= INDEX_NONORMS;
+ index = true;
+ }
+
+ if ( x & INDEX_TOKENIZED && x & INDEX_UNTOKENIZED )
+ _CLTHROWA(CL_ERR_IllegalArgument,"it doesn't make sense to have an untokenised and tokenised field");
+ if ( x & INDEX_TOKENIZED ){
+ newConfig |= INDEX_TOKENIZED;
+ index = true;
+ }
+ if ( x & INDEX_UNTOKENIZED ){
+ newConfig |= INDEX_UNTOKENIZED;
+ index = true;
+ }
+ if ( !index )
+ newConfig |= INDEX_NO;
+ }else
+ newConfig |= INDEX_NO;
+
+ if ( newConfig & INDEX_NO && newConfig & STORE_NO )
+ _CLTHROWA(CL_ERR_IllegalArgument,"it doesn't make sense to have a field that is neither indexed nor stored");
+
+ //set termvector settings
+ if ( (x & TERMVECTOR_NO) == 0 ){
+ bool termVector=false;
+ if ( x & TERMVECTOR_YES ){
+ termVector=true;
+ }
+ if ( x & TERMVECTOR_WITH_OFFSETS ){
+ newConfig |= TERMVECTOR_WITH_OFFSETS;
+ termVector=true;
+ }
+ if ( x & TERMVECTOR_WITH_POSITIONS ){
+ newConfig |= TERMVECTOR_WITH_POSITIONS;
+ termVector=true;
+ }
+ if ( termVector ){
+ if ( newConfig & INDEX_NO )
+ _CLTHROWA(CL_ERR_IllegalArgument,"cannot store a term vector for fields that are not indexed.");
+
+ newConfig |= TERMVECTOR_YES;
+ }else
+ newConfig |= TERMVECTOR_NO;
+ }else
+ newConfig |= TERMVECTOR_NO;
+
+ config = newConfig;
+}
+
+TCHAR* Field::toString() {
+ CL_NS(util)::StringBuffer result;
+ if (isStored()) {
+ result.append( _T("stored") );
+ }
+ if (isIndexed()) {
+ if (result.length() > 0)
+ result.append( _T(",") );
+ result.append( _T("indexed") );
+ }
+ if (isTokenized()) {
+ if (result.length() > 0)
+ result.append( _T(",") );
+ result.append( _T("tokenized") );
+ }
+ if (isTermVectorStored()) {
+ if (result.length() > 0)
+ result.append( _T(",") );
+ result.append( _T("termVector") );
+ }
+ if (isStoreOffsetWithTermVector()) {
+ if (result.length() > 0)
+ result.appendChar( ',' );
+ result.append( _T("termVectorOffsets") );
+ }
+ if (isStorePositionWithTermVector()) {
+ if (result.length() > 0)
+ result.appendChar( ',' );
+ result.append( _T("termVectorPosition") );
+ }
+ if (isBinary()) {
+ if (result.length() > 0)
+ result.appendChar( ',' );
+ result.append( _T("binary") );
+ }
+ if (getOmitNorms()) {
+ result.append( _T(",omitNorms") );
+ }
+ result.appendChar('<');
+ result.append(name());
+ result.appendChar(':');
+
+ if (_stringValue != NULL)
+ result.append(_stringValue);
+ else if ( _readerValue != NULL )
+ result.append( _T("Reader") );
+ else if ( _streamValue != NULL )
+ result.append( _T("Stream") );
+ else
+ result.append( _T("NULL") );
+
+ result.appendChar('>');
+ return result.toString();
+}
+
+
+Field* Field::Keyword(const TCHAR* Name, const TCHAR* Value) {
+ return _CLNEW Field(Name,Value,Field::STORE_YES | Field::INDEX_UNTOKENIZED);
+}
+
+Field* Field::UnIndexed(const TCHAR* Name, const TCHAR* Value) {
+ return _CLNEW Field(Name,Value,Field::STORE_YES | Field::INDEX_NO);
+}
+
+Field* Field::Text(const TCHAR* Name, const TCHAR* Value, const bool storeTermVector) {
+ if ( storeTermVector )
+ return _CLNEW Field(Name,Value,Field::STORE_YES | Field::INDEX_TOKENIZED | Field::TERMVECTOR_YES);
+ else
+ return _CLNEW Field(Name,Value,Field::STORE_YES | Field::INDEX_TOKENIZED);
+}
+
+Field* Field::UnStored(const TCHAR* Name, const TCHAR* Value, const bool storeTermVector) {
+ if ( storeTermVector )
+ return _CLNEW Field(Name,Value,Field::STORE_NO | Field::INDEX_TOKENIZED | Field::TERMVECTOR_YES);
+ else
+ return _CLNEW Field(Name,Value,Field::STORE_NO | Field::INDEX_TOKENIZED);
+}
+
+Field* Field::Text(const TCHAR* Name, Reader* Value, const bool storeTermVector) {
+ if ( storeTermVector )
+ return _CLNEW Field(Name,Value,Field::INDEX_TOKENIZED | Field::TERMVECTOR_YES);
+ else
+ return _CLNEW Field(Name,Value,Field::INDEX_TOKENIZED);
+}
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/document/Field.h b/src/3rdparty/clucene/src/CLucene/document/Field.h
new file mode 100644
index 0000000..771a138
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/document/Field.h
@@ -0,0 +1,261 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_document_Field_
+#define _lucene_document_Field_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "CLucene/util/Reader.h"
+#include "CLucene/util/streambase.h"
+
+CL_NS_DEF(document)
+/**
+A field is a section of a Document. Each field has two parts, a name and a
+value. Values may be free text, provided as a String or as a Reader, or they
+may be atomic keywords, which are not further processed. Such keywords may
+be used to represent dates, urls, etc. Fields are optionally stored in the
+index, so that they may be returned with hits on the document.
+
+PORTING: CLucene doesn't directly support compressed fields. However, it is easy
+to reproduce this functionality by using the GZip streams in the contrib package.
+Also note that binary fields are not read immediately in CLucene, a substream
+is pointed directly to the field's data, in affect creating a lazy load ability.
+This means that large fields are best saved in binary format (even if they are
+text), so that they can be loaded lazily.
+*/
+class Field :LUCENE_BASE{
+private:
+ const TCHAR* _name;
+ TCHAR* _stringValue;
+ CL_NS(util)::Reader* _readerValue;
+ jstreams::StreamBase<char>* _streamValue;
+
+ int config;
+ qreal boost;
+ bool omitNorms;
+public:
+ enum Store{
+ /** Store the original field value in the index. This is useful for short texts
+ * like a document's title which should be displayed with the results. The
+ * value is stored in its original form, i.e. no analyzer is used before it is
+ * stored.
+ */
+ STORE_YES=1,
+ /** Do not store the field value in the index. */
+ STORE_NO=2,
+
+ /** Store the original field value in the index in a compressed form. This is
+ * useful for long documents and for binary valued fields.
+ * NOTE: CLucene does not directly support compressed fields, to store a
+ * compressed field.
+ * //TODO: need better documentation on how to add a compressed field
+ * //because actually we still need to write a GZipOutputStream...
+ */
+ STORE_COMPRESS=4
+ };
+
+ enum Index{
+ /** Do not index the field value. This field can thus not be searched,
+ * but one can still access its contents provided it is
+ * {@link Field::Store stored}. */
+ INDEX_NO=16,
+ /** Index the field's value so it can be searched. An Analyzer will be used
+ * to tokenize and possibly further normalize the text before its
+ * terms will be stored in the index. This is useful for common text.
+ */
+ INDEX_TOKENIZED=32,
+ /** Index the field's value without using an Analyzer, so it can be searched.
+ * As no analyzer is used the value will be stored as a single term. This is
+ * useful for unique Ids like product numbers.
+ */
+ INDEX_UNTOKENIZED=64,
+ /** Index the field's value without an Analyzer, and disable
+ * the storing of norms. No norms means that index-time boosting
+ * and field length normalization will be disabled. The benefit is
+ * less memory usage as norms take up one byte per indexed field
+ * for every document in the index.
+ */
+ INDEX_NONORMS=128
+ };
+
+ enum TermVector{
+ /** Do not store term vectors. */
+ TERMVECTOR_NO=256,
+ /** Store the term vectors of each document. A term vector is a list
+ * of the document's terms and their number of occurences in that document. */
+ TERMVECTOR_YES=512,
+ /**
+ * Store the term vector + token position information
+ *
+ * @see #YES
+ */
+ TERMVECTOR_WITH_POSITIONS=1024,
+ /**
+ * Store the term vector + Token offset information
+ *
+ * @see #YES
+ */
+ TERMVECTOR_WITH_OFFSETS=2048
+ };
+
+ _CL_DEPRECATED( another overload ) Field(const TCHAR* name, const TCHAR* value, bool store, bool index, bool token, const bool storeTermVector=false);
+ _CL_DEPRECATED( another overload ) Field(const TCHAR* name, CL_NS(util)::Reader* reader, bool store, bool index, bool token, const bool storeTermVector=false);
+
+ Field(const TCHAR* name, const TCHAR* value, int configs);
+ Field(const TCHAR* name, CL_NS(util)::Reader* reader, int configs);
+ Field(const TCHAR* name, jstreams::StreamBase<char>* stream, int configs);
+ ~Field();
+
+ /** Constructs a String-valued Field that is not tokenized, but is indexed
+ * and stored. Useful for non-text fields, e.g. date or url.
+ * @deprecated Use new Field(name,value,Field::STORE_YES | Field::INDEX_UNTOKENIZED)
+ */
+ _CL_DEPRECATED( new Field(*) ) static Field* Keyword(const TCHAR* name, const TCHAR* value);
+
+ /** Constructs a String-valued Field that is not tokenized nor indexed,
+ * but is stored in the index, for return with hits.
+ * @deprecated Use new Field(name,value,Field::STORE_YES | Field::INDEX_NO)
+ */
+ _CL_DEPRECATED( new Field(*) ) static Field* UnIndexed(const TCHAR* name, const TCHAR* value);
+
+ /** Constructs a String-valued Field that is tokenized and indexed,
+ * and is stored in the index, for return with hits. Useful for short text
+ * fields, like "title" or "subject".
+ * @deprecated Use new Field(name,value,Field::STORE_YES | Field::INDEX_TOKENIZED)
+ */
+ _CL_DEPRECATED( new Field(*) ) static Field* Text(const TCHAR* name, const TCHAR* value, const bool storeTermVector=false);
+
+ /** Constructs a String-valued Field that is tokenized and indexed,
+ * but that is not stored in the index.
+ * @deprecated Use new Field(name,value,Field::STORE_NO | Field::INDEX_TOKENIZED)
+ */
+ _CL_DEPRECATED( new Field(*) ) static Field* UnStored(const TCHAR* name, const TCHAR* value, const bool storeTermVector=false);
+
+ /** Constructs a Reader-valued Field that is tokenized and indexed, but is
+ * *not* stored in the index verbatim. Useful for longer text fields, like
+ * "body".
+ * @deprecated Use new Field(name,value, Field::INDEX_TOKENIZED)
+ */
+ _CL_DEPRECATED( new Field(*) ) static Field* Text(const TCHAR* name, CL_NS(util)::Reader* value, const bool storeTermVector=false);
+
+ /** The name of the field (e.g., "date", "subject", "title", "body", etc.)
+ * as an interned string. */
+ const TCHAR* name(); ///<returns reference
+
+ /** The value of the field as a String, or null. If null, the Reader value
+ * or binary value is used. Exactly one of stringValue(), readerValue() and
+ * streamValue() must be set. */
+ TCHAR* stringValue(); ///<returns reference
+
+ /** The value of the field as a reader, or null. If null, the String value
+ * or stream value is used. Exactly one of stringValue(), readerValue() and
+ * streamValue() must be set. */
+ CL_NS(util)::Reader* readerValue();
+
+ /** The value of the field as a String, or null. If null, the String value
+ * or Reader value is used. Exactly one of stringValue(), readerValue() and
+ * streamValue() must be set. */
+ jstreams::StreamBase<char>* streamValue();
+
+ // True iff the value of the field is to be stored in the index for return
+ // with search hits. It is an error for this to be true if a field is
+ // Reader-valued.
+ bool isStored();
+
+ // True iff the value of the field is to be indexed, so that it may be
+ // searched on.
+ bool isIndexed();
+
+ // True iff the value of the field should be tokenized as text prior to
+ // indexing. Un-tokenized fields are indexed as a single word and may not be
+ // Reader-valued.
+ bool isTokenized();
+
+ /** True if the value of the field is stored and compressed within the index
+ * NOTE: CLucene does not actually support compressed fields, Instead, a reader
+ * will be returned with a pointer to a SubIndexInputStream. A GZipInputStream
+ * and a UTF8 reader must be used to actually read the content. This flag
+ * will only be set if the index was created by another lucene implementation.
+ */
+ bool isCompressed();
+
+ //Set configs using XOR. This resets all the settings
+ //For example, to use term vectors with positions and offsets do:
+ //object->setConfig(TERMVECTOR_WITH_POSITIONS | TERMVECTOR_WITH_OFFSETS);
+ void setConfig(int termVector);
+
+ /** True iff the term or terms used to index this field are stored as a term
+ * vector, available from {@link IndexReader#getTermFreqVector(int32_t,TCHAR*)}.
+ * These methods do not provide access to the original content of the field,
+ * only to terms used to index it. If the original content must be
+ * preserved, use the <code>stored</code> attribute instead.
+ *
+ * @see IndexReader#getTermFreqVector(int32_t, String)
+ */
+ bool isTermVectorStored();
+
+ /**
+ * True iff terms are stored as term vector together with their offsets
+ * (start and end positon in source text).
+ */
+ bool isStoreOffsetWithTermVector();
+
+ /**
+ * True iff terms are stored as term vector together with their token positions.
+ */
+ bool isStorePositionWithTermVector();
+
+ /** Returns the boost factor for hits for this field.
+ *
+ * <p>The default value is 1.0.
+ *
+ * <p>Note: this value is not stored directly with the document in the index.
+ * Documents returned from {@link IndexReader#document(int)} and
+ * {@link Hits#doc(int)} may thus not have the same value present as when
+ * this field was indexed.
+ *
+ * @see #setBoost(float)
+ */
+ qreal getBoost();
+
+ /** Sets the boost factor hits on this field. This value will be
+ * multiplied into the score of all hits on this field of this document.
+ *
+ * <p>The boost is multiplied by {@link Document#getBoost()} of the document
+ * containing this field. If a document has multiple fields with the same
+ * name, all such values are multiplied together. This product is then
+ * multipled by the value {@link Similarity#lengthNorm(String,int)}, and
+ * rounded by {@link Similarity#encodeNorm(float)} before it is stored in the
+ * index. One should attempt to ensure that this product does not overflow
+ * the range of that encoding.
+ *
+ * @see Document#setBoost(float)
+ * @see Similarity#lengthNorm(String, int)
+ * @see Similarity#encodeNorm(float)
+ */
+ void setBoost(qreal value);
+
+ /** True iff the value of the filed is stored as binary */
+ bool isBinary();
+
+ /** True if norms are omitted for this indexed field */
+ bool getOmitNorms();
+
+ /** Expert:
+ *
+ * If set, omit normalization factors associated with this indexed field.
+ * This effectively disables indexing boosts and length normalization for this field.
+ */
+ void setOmitNorms(bool omitNorms);
+
+ // Prints a Field for human consumption.
+ TCHAR* toString();
+};
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/index/CompoundFile.cpp b/src/3rdparty/clucene/src/CLucene/index/CompoundFile.cpp
new file mode 100644
index 0000000..efa0e25
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/CompoundFile.cpp
@@ -0,0 +1,380 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+*
+* Changes are Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "CompoundFile.h"
+#include "CLucene/util/Misc.h"
+
+CL_NS_USE(store)
+CL_NS_USE(util)
+CL_NS_DEF(index)
+
+CompoundFileReader::CSIndexInput::CSIndexInput(CL_NS(store)::IndexInput* base,
+ const int64_t fileOffset, const int64_t length)
+{
+ this->base = base;
+ this->fileOffset = fileOffset;
+ this->_length = length;
+}
+
+void CompoundFileReader::CSIndexInput::readInternal(uint8_t* b, const int32_t len)
+{
+ SCOPED_LOCK_MUTEX(base->THIS_LOCK)
+
+ int64_t start = getFilePointer();
+ if(start + len > _length)
+ _CLTHROWA(CL_ERR_IO, "read past EOF");
+ base->seek(fileOffset + start);
+ base->readBytes(b, len);
+}
+
+CompoundFileReader::CSIndexInput::~CSIndexInput()
+{
+}
+
+IndexInput* CompoundFileReader::CSIndexInput::clone() const
+{
+ return _CLNEW CSIndexInput(*this);
+}
+
+CompoundFileReader::CSIndexInput::CSIndexInput(const CSIndexInput& clone)
+ : BufferedIndexInput(clone)
+{
+ this->base = clone.base; //no need to clone this..
+ this->fileOffset = clone.fileOffset;
+ this->_length = clone._length;
+}
+
+void CompoundFileReader::CSIndexInput::close()
+{
+}
+
+CompoundFileReader::CompoundFileReader(Directory* dir, const QString& name)
+ : entries(false, true)
+{
+ directory = dir;
+ fileName = name;
+
+ bool success = false;
+ try {
+ stream = dir->openInput(name);
+
+ // read the directory and init files
+ int32_t count = stream->readVInt();
+ FileEntry* entry = NULL;
+ TCHAR tid[CL_MAX_PATH];
+ for (int32_t i = 0; i < count; i++) {
+ int64_t offset = stream->readLong();
+ int32_t read = stream->readString(tid, CL_MAX_PATH);
+ QString aid(QString::fromWCharArray(tid, read));
+
+ // set length of the previous entry
+ if (entry != NULL)
+ entry->length = offset - entry->offset;
+
+ entry = _CLNEW FileEntry(offset);
+ entries.put(aid, entry);
+ }
+
+ // set the length of the final entry
+ if (entry != NULL)
+ entry->length = stream->length() - entry->offset;
+ success = true;
+ } _CLFINALLY (
+ if (!success && (stream != NULL)) {
+ try {
+ stream->close();
+ _CLDELETE(stream);
+ } catch (CLuceneError& err) {
+ if (err.number() != CL_ERR_IO)
+ throw err;
+ }
+ }
+ )
+}
+
+CompoundFileReader::~CompoundFileReader()
+{
+ close();
+}
+
+Directory* CompoundFileReader::getDirectory()
+{
+ return directory;
+}
+
+QString CompoundFileReader::getName() const
+{
+ return fileName;
+}
+
+void CompoundFileReader::close()
+{
+ SCOPED_LOCK_MUTEX(THIS_LOCK)
+
+ if (stream != NULL) {
+ entries.clear();
+ stream->close();
+ _CLDELETE(stream);
+ }
+}
+
+IndexInput* CompoundFileReader::openInput(const QString& id)
+{
+ SCOPED_LOCK_MUTEX(THIS_LOCK)
+
+ if (stream == NULL)
+ _CLTHROWA(CL_ERR_IO, "Stream closed");
+
+ const FileEntry* entry = entries.get(id);
+ if (entry == NULL) {
+ char buf[CL_MAX_PATH + 30];
+ strcpy(buf,"No sub-file with id ");
+ strncat(buf, id.toLocal8Bit().constData(), CL_MAX_PATH);
+ strcat(buf, " found");
+ _CLTHROWA(CL_ERR_IO,buf);
+ }
+ return _CLNEW CSIndexInput(stream, entry->offset, entry->length);
+}
+
+QStringList CompoundFileReader::list() const
+{
+ // for (EntriesType::const_iterator i=entries.begin();i!=entries.end();i++){
+ // names->push_back(i->first);
+ // ++i;
+ // }
+
+ QStringList names;
+ EntriesType::const_iterator itr;
+ // TODO: verify this, see old code above ???
+ for (itr = entries.begin(); itr != entries.end(); ++itr)
+ names.push_back(itr->first);
+
+ return names;
+}
+
+bool CompoundFileReader::fileExists(const QString& name) const
+{
+ return entries.exists(name);
+}
+
+int64_t CompoundFileReader::fileModified(const QString& name) const
+{
+ return directory->fileModified(fileName);
+}
+
+void CompoundFileReader::touchFile(const QString& name)
+{
+ directory->touchFile(fileName);
+}
+
+bool CompoundFileReader::doDeleteFile(const QString& name)
+{
+ _CLTHROWA(CL_ERR_UnsupportedOperation,
+ "UnsupportedOperationException: CompoundFileReader::doDeleteFile");
+}
+
+void CompoundFileReader::renameFile(const QString& from, const QString& to)
+{
+ _CLTHROWA(CL_ERR_UnsupportedOperation,
+ "UnsupportedOperationException: CompoundFileReader::renameFile");
+}
+
+int64_t CompoundFileReader::fileLength(const QString& name) const
+{
+ FileEntry* e = entries.get(name);
+ if (e == NULL) {
+ char buf[CL_MAX_PATH + 30];
+ strcpy(buf,"File ");
+ strncat(buf, name.toLocal8Bit().constData(), CL_MAX_PATH);
+ strcat(buf," does not exist");
+ _CLTHROWA(CL_ERR_IO,buf);
+ }
+ return e->length;
+}
+
+IndexOutput* CompoundFileReader::createOutput(const QString& name)
+{
+ _CLTHROWA(CL_ERR_UnsupportedOperation,
+ "UnsupportedOperationException: CompoundFileReader::createOutput");
+}
+
+LuceneLock* CompoundFileReader::makeLock(const QString& name)
+{
+ _CLTHROWA(CL_ERR_UnsupportedOperation,
+ "UnsupportedOperationException: CompoundFileReader::makeLock");
+}
+
+QString CompoundFileReader::toString() const
+{
+ QString ret(QLatin1String("CompoundFileReader@"));
+ return ret.append(fileName);
+}
+
+CompoundFileWriter::CompoundFileWriter(Directory* dir, const QString& name)
+ : ids(false)
+ , entries(true)
+{
+ if (dir == NULL)
+ _CLTHROWA(CL_ERR_NullPointer, "directory cannot be null");
+
+ if (name.isEmpty())
+ _CLTHROWA(CL_ERR_NullPointer, "name cannot be null");
+
+ merged = false;
+ directory = dir;
+ fileName = name;
+}
+
+CompoundFileWriter::~CompoundFileWriter()
+{
+}
+
+Directory* CompoundFileWriter::getDirectory()
+{
+ return directory;
+}
+
+/** Returns the name of the compound file. */
+QString CompoundFileWriter::getName() const
+{
+ return fileName;
+}
+
+void CompoundFileWriter::addFile(const QString& file)
+{
+ if (merged)
+ _CLTHROWA(CL_ERR_IO, "Can't add extensions after merge has been called");
+
+ if (file.isEmpty())
+ _CLTHROWA(CL_ERR_NullPointer, "file cannot be null");
+
+ if (ids.find(file) != ids.end()) {
+ char buf[CL_MAX_PATH + 30];
+ strcpy(buf, "File ");
+ strncat(buf, file.toLocal8Bit().constData(), CL_MAX_PATH);
+ strcat(buf," already added");
+ _CLTHROWA(CL_ERR_IO,buf);
+ }
+ ids.insert(file);
+ entries.push_back(_CLNEW WriterFileEntry(file));
+}
+
+void CompoundFileWriter::close()
+{
+ if (merged)
+ _CLTHROWA(CL_ERR_IO, "Merge already performed");
+
+ if (entries.size() == 0) // isEmpty()
+ _CLTHROWA(CL_ERR_IO, "No entries to merge have been defined");
+
+ merged = true;
+
+ // open the compound stream
+ IndexOutput* os = NULL;
+ try {
+ os = directory->createOutput(fileName);
+
+ // Write the number of entries
+ os->writeVInt(entries.size());
+
+ // Write the directory with all offsets at 0.
+ // Remember the positions of directory entries so that we can
+ // adjust the offsets later
+ { //msvc6 for scope fix
+ TCHAR tfile[CL_MAX_PATH];
+ for (CLLinkedList<WriterFileEntry*>::iterator i = entries.begin();
+ i != entries.end(); i++) {
+ WriterFileEntry* fe = *i;
+ fe->directoryOffset = os->getFilePointer();
+ os->writeLong(0); // for now
+ tfile[fe->file.toWCharArray(tfile)] = '\0';
+ os->writeString(tfile, _tcslen(tfile));
+ }
+ }
+
+ // Open the files and copy their data into the stream.
+ // Remember the locations of each file's data section.
+ { //msvc6 for scope fix
+ int32_t bufferLength = 1024;
+ uint8_t buffer[1024];
+ for (CLLinkedList<WriterFileEntry*>::iterator i = entries.begin();
+ i != entries.end(); i++) {
+ WriterFileEntry* fe = *i;
+ fe->dataOffset = os->getFilePointer();
+ copyFile(fe, os, buffer, bufferLength);
+ }
+ }
+
+ { //msvc6 for scope fix
+ // Write the data offsets into the directory of the compound stream
+ for (CLLinkedList<WriterFileEntry*>::iterator i = entries.begin();
+ i != entries.end(); i++) {
+ WriterFileEntry* fe = *i;
+ os->seek(fe->directoryOffset);
+ os->writeLong(fe->dataOffset);
+ }
+ }
+
+
+ } _CLFINALLY (
+ if (os != NULL) {
+ try {
+ os->close();
+ _CLDELETE(os);
+ } catch (...) { }
+ }
+ );
+}
+
+void CompoundFileWriter::copyFile(WriterFileEntry* source, IndexOutput* os,
+ uint8_t* buffer, int32_t bufferLength)
+{
+ IndexInput* is = NULL;
+ try {
+ int64_t startPtr = os->getFilePointer();
+
+ is = directory->openInput(source->file);
+ int64_t length = is->length();
+ int64_t remainder = length;
+ int32_t chunk = bufferLength;
+
+ while(remainder > 0) {
+ int32_t len = (int32_t)min((int64_t)chunk, remainder);
+ is->readBytes(buffer, len);
+ os->writeBytes(buffer, len);
+ remainder -= len;
+ }
+
+ // Verify that remainder is 0
+ if (remainder != 0) {
+ TCHAR buf[CL_MAX_PATH+100];
+ _sntprintf(buf, CL_MAX_PATH + 100, _T("Non-zero remainder length ")
+ _T("after copying: %d (id: %s, length: %d, buffer size: %d)"),
+ remainder, source->file.toLocal8Bit().constData(), length, chunk);
+ _CLTHROWT(CL_ERR_IO, buf);
+ }
+
+ // Verify that the output length diff is equal to original file
+ int64_t endPtr = os->getFilePointer();
+ int64_t diff = endPtr - startPtr;
+ if (diff != length) {
+ TCHAR buf[100];
+ _sntprintf(buf, 100, _T("Difference in the output file offsets %d ")
+ _T("does not match the original file length %d"), diff, length);
+ _CLTHROWT(CL_ERR_IO,buf);
+ }
+ } _CLFINALLY (
+ if (is != NULL) {
+ is->close();
+ _CLDELETE(is);
+ }
+ );
+}
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/index/CompoundFile.h b/src/3rdparty/clucene/src/CLucene/index/CompoundFile.h
new file mode 100644
index 0000000..84799a6
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/CompoundFile.h
@@ -0,0 +1,219 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+*/
+#ifndef _lucene_index_compoundfile_h
+#define _lucene_index_compoundfile_h
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include <QtCore/QString>
+#include <QtCore/QStringList>
+
+#include "CLucene/store/IndexInput.h"
+#include "CLucene/store/IndexOutput.h"
+#include "CLucene/store/Directory.h"
+#include "CLucene/store/Lock.h"
+#include "CLucene/util/VoidList.h"
+#include "CLucene/util/VoidMap.h"
+
+CL_NS_DEF(index)
+
+// Class for accessing a compound stream.
+// This class implements a directory, but is limited to only read operations.
+// Directory methods that would normally modify data throw an exception.
+class CompoundFileReader : public CL_NS(store)::Directory
+{
+private:
+ /** Implementation of an IndexInput that reads from a portion of the
+ * compound file. The visibility is left as "package" *only* because
+ * this helps with testing since JUnit test cases in a different class
+ * can then access package fields of this class.
+ */
+ class CSIndexInput : public CL_NS(store)::BufferedIndexInput
+ {
+ private:
+ CL_NS(store)::IndexInput* base;
+ int64_t fileOffset;
+ int64_t _length;
+ protected:
+ /** Expert: implements buffer refill. Reads uint8_ts from the current
+ * position in the input.
+ * @param b the array to read uint8_ts into
+ * @param length the number of uint8_ts to read
+ */
+ void readInternal(uint8_t* b, const int32_t len);
+ void seekInternal(const int64_t pos) {}
+
+ public:
+ CSIndexInput(CL_NS(store)::IndexInput* base, const int64_t fileOffset,
+ const int64_t length);
+ CSIndexInput(const CSIndexInput& clone);
+ ~CSIndexInput();
+
+ /** Closes the stream to futher operations. */
+ void close();
+ CL_NS(store)::IndexInput* clone() const;
+
+ int64_t length() { return _length; }
+
+ QString getDirectoryType() const {
+ return CompoundFileReader::DirectoryType(); }
+ };
+
+ class FileEntry : LUCENE_BASE
+ {
+ public:
+ FileEntry()
+ : offset(0), length(0) {}
+ FileEntry(int64_t _offset)
+ : offset(_offset), length(0) {}
+ ~FileEntry() {}
+
+ int64_t offset;
+ int64_t length;
+ };
+
+ // Base info
+ CL_NS(store)::Directory* directory;
+ QString fileName;
+
+ CL_NS(store)::IndexInput* stream;
+
+ typedef CL_NS(util)::CLHashMap<QString, FileEntry*,
+ CL_NS(util)::Compare::Qstring,
+ CL_NS(util)::Equals::Qstring,
+ CL_NS(util)::Deletor::DummyQString,
+ CL_NS(util)::Deletor::Object<FileEntry> > EntriesType;
+ EntriesType entries;
+protected:
+ // Removes an existing file in the directory->
+ bool doDeleteFile(const QString& name);
+
+public:
+ CompoundFileReader(CL_NS(store)::Directory* dir, const QString& name);
+ ~CompoundFileReader();
+ CL_NS(store)::Directory* getDirectory();
+ QString getName() const;
+
+ void close();
+ CL_NS(store)::IndexInput* openInput(const QString& id);
+
+ /** Returns an array of strings, one for each file in the directory-> */
+ QStringList list() const;
+ /** Returns true iff a file with the given name exists. */
+ bool fileExists(const QString& name) const;
+ /** Returns the time the named file was last modified. */
+ int64_t fileModified(const QString& name) const;
+ /** Set the modified time of an existing file to now. */
+ void touchFile(const QString& name);
+ /** Renames an existing file in the directory->
+ If a file already exists with the new name, then it is replaced.
+ This replacement should be atomic. */
+ void renameFile(const QString& from, const QString& to);
+ /** Returns the length of a file in the directory.
+ * @throws IOException if the file does not exist */
+ int64_t fileLength(const QString& name) const;
+ /** Not implemented
+ * @throws UnsupportedOperationException */
+ CL_NS(store)::IndexOutput* createOutput(const QString& name);
+ /** Not implemented
+ * @throws UnsupportedOperationException */
+ CL_NS(store)::LuceneLock* makeLock(const QString& name);
+
+ QString toString() const;
+
+ static QString DirectoryType() { return QLatin1String("CFS"); }
+ QString getDirectoryType() const { return DirectoryType(); }
+};
+
+
+
+// Combines multiple files into a single compound file.
+// The file format:<br>
+// <ul>
+// <li>VInt fileCount</li>
+// <li>{Directory}
+// fileCount entries with the following structure:</li>
+// <ul>
+// <li>int64_t dataOffset</li>
+// <li>UTFString extension</li>
+// </ul>
+// <li>{File Data}
+// fileCount entries with the raw data of the corresponding file</li>
+// </ul>
+// The fileCount integer indicates how many files are contained in this compound
+// file. The {directory} that follows has that many entries. Each directory entry
+// contains an encoding identifier, an int64_t pointer to the start of this file's
+// data section, and a UTF String with that file's extension.
+class CompoundFileWriter : LUCENE_BASE
+{
+ class WriterFileEntry : LUCENE_BASE {
+ public:
+ WriterFileEntry()
+ : dataOffset(0), directoryOffset(0) {}
+ WriterFileEntry(const QString& _file)
+ : file(_file), dataOffset(0), directoryOffset(0) {}
+ ~WriterFileEntry() {}
+
+ QString file;
+ // temporary holder for the start of this file's data section
+ int64_t dataOffset;
+ // temporary holder for the start of directory entry for this file
+ int64_t directoryOffset;
+ };
+
+ bool merged;
+ QString fileName;
+ CL_NS(store)::Directory* directory;
+
+ CL_NS(util)::CLHashSet<QString, CL_NS(util)::Compare::Qstring,
+ CL_NS(util)::Deletor::DummyQString> ids;
+
+ CL_NS(util)::CLLinkedList<WriterFileEntry*,
+ CL_NS(util)::Deletor::Object<WriterFileEntry> > entries;
+
+ // Copy the contents of the file with specified extension into the
+ // provided output stream. Use the provided buffer for moving data
+ // to reduce memory allocation.
+ void copyFile(WriterFileEntry* source, CL_NS(store)::IndexOutput* os,
+ uint8_t* buffer, int32_t bufferLength);
+
+public:
+ // Create the compound stream in the specified file. The file name is the
+ // entire name (no extensions are added).
+ CompoundFileWriter(CL_NS(store)::Directory* dir, const QString& name);
+ ~CompoundFileWriter();
+
+ // Returns the directory of the compound file.
+ CL_NS(store)::Directory* getDirectory();
+
+ QString getName() const ;
+ /* Add a source stream. <code>file</code> is the string by which the
+ * sub-stream will be known in the compound stream.
+ *
+ * @throws IllegalStateException if this writer is closed
+ * @throws NullPointerException if <code>file</code> is null
+ * @throws IllegalArgumentException if a file with the same name
+ * has been added already
+ */
+ void addFile(const QString& file);
+ /* Merge files with the extensions added up to now.
+ * All files with these extensions are combined sequentially into the
+ * compound stream. After successful merge, the source files
+ * @throws IllegalStateException if close() had been called before or
+ * if no file has been added to this object
+ * are deleted.
+ */
+ void close();
+};
+
+CL_NS_END
+
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/index/DocumentWriter.cpp b/src/3rdparty/clucene/src/CLucene/index/DocumentWriter.cpp
new file mode 100644
index 0000000..dcbc315
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/DocumentWriter.cpp
@@ -0,0 +1,571 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright(C) 2007, 2008 by Nokia Corporation and/or its subsidiary(-ies), all rights reserved.
+*/
+#include "CLucene/StdHeader.h"
+
+#include "DocumentWriter.h"
+#include "FieldInfos.h"
+#include "IndexWriter.h"
+#include "FieldsWriter.h"
+#include "Term.h"
+#include "TermInfo.h"
+#include "TermInfosWriter.h"
+
+#include "CLucene/analysis/AnalysisHeader.h"
+
+#include "CLucene/search/Similarity.h"
+#include "TermInfosWriter.h"
+#include "FieldsWriter.h"
+
+CL_NS_USE(util)
+CL_NS_USE(store)
+CL_NS_USE(analysis)
+CL_NS_USE(document)
+CL_NS_DEF(index)
+
+/*Posting*/
+
+DocumentWriter::Posting::Posting(Term* t, const int32_t position,
+ TermVectorOffsetInfo* offset)
+{
+ //Func - Constructor
+ //Pre - t contains a valid reference to a Term
+ //Post - Instance has been created
+ freq = 1;
+
+ term = _CL_POINTER(t);
+ positions.values = (int32_t*)malloc(sizeof(int32_t));
+ positions.values[0] = position;
+ positions.length = 1;
+
+ if ( offset != NULL ){
+ this->offsets.values =(TermVectorOffsetInfo*)malloc(sizeof(TermVectorOffsetInfo));
+ this->offsets.values[0] = *offset;
+ this->offsets.length = 1;
+ }
+}
+
+DocumentWriter::Posting::~Posting()
+{
+ //Func - Destructor
+ //Pre - true
+ //Post - The instance has been destroyed
+
+ free(positions.values);
+ if ( this->offsets.values != NULL )
+ free(this->offsets.values);
+ _CLDECDELETE(term);
+}
+
+DocumentWriter::DocumentWriter(Directory* d, Analyzer* a,
+ CL_NS(search)::Similarity* sim, const int32_t mfl)
+ : analyzer(a)
+ , directory(d)
+ , maxFieldLength(mfl)
+ , fieldInfos(NULL)
+ , fieldLengths(NULL)
+ , similarity(sim)
+ , termIndexInterval(IndexWriter::DEFAULT_TERM_INDEX_INTERVAL)
+ , fieldPositions(NULL)
+ , fieldBoosts(NULL)
+ , termBuffer(_CLNEW Term)
+{
+ //Pre - d contains a valid reference to a Directory
+ // d contains a valid reference to a Analyzer
+ // mfl > 0 and contains the maximum field length
+ //Post - Instance has been created
+
+ CND_PRECONDITION(((mfl > 0) || (mfl == IndexWriter::FIELD_TRUNC_POLICY__WARN)),
+ "mfl is 0 or smaller than IndexWriter::FIELD_TRUNC_POLICY__WARN")
+
+ fieldInfos = NULL;
+ fieldLengths = NULL;
+}
+
+DocumentWriter::DocumentWriter(CL_NS(store)::Directory* d,
+ CL_NS(analysis)::Analyzer* a, IndexWriter* writer)
+ : analyzer(a)
+ , directory(d)
+ , maxFieldLength(writer->getMaxFieldLength())
+ , fieldInfos(NULL)
+ , fieldLengths(NULL)
+ , similarity(writer->getSimilarity())
+ , termIndexInterval(writer->getTermIndexInterval())
+ , fieldPositions(NULL)
+ , fieldBoosts(NULL)
+ , termBuffer(_CLNEW Term)
+{
+ //Pre - d contains a valid reference to a Directory
+ // d contains a valid reference to a Analyzer
+ // mfl > 0 and contains the maximum field length
+ //Post - Instance has been created
+
+ CND_PRECONDITION(((maxFieldLength > 0)
+ || (maxFieldLength == IndexWriter::FIELD_TRUNC_POLICY__WARN)),
+ "mfl is 0 or smaller than IndexWriter::FIELD_TRUNC_POLICY__WARN")
+
+ fieldInfos = NULL;
+ fieldLengths = NULL;
+
+}
+
+DocumentWriter::~DocumentWriter()
+{
+ //Func - Destructor
+ //Pre - true
+ //Post - The instance has been destroyed
+ clearPostingTable();
+ _CLDELETE( fieldInfos );
+ _CLDELETE_ARRAY(fieldLengths);
+ _CLDELETE_ARRAY(fieldPositions);
+ _CLDELETE_ARRAY(fieldBoosts);
+ _CLDELETE_ARRAY(fieldOffsets);
+
+ _CLDECDELETE(termBuffer);
+}
+
+void DocumentWriter::clearPostingTable()
+{
+ PostingTableType::iterator itr = postingTable.begin();
+ while (itr != postingTable.end()){
+ _CLDELETE(itr->second);
+ _CLLDECDELETE(itr->first);
+ ++itr;
+ }
+ postingTable.clear();
+}
+
+void DocumentWriter::addDocument(const QString& segment, Document* doc)
+{
+ CND_PRECONDITION(fieldInfos == NULL, "fieldInfos!=NULL")
+
+ // write field names
+ fieldInfos = _CLNEW FieldInfos();
+ fieldInfos->add(doc);
+
+ QString buf = Misc::segmentname(segment, QLatin1String(".fnm"));
+ fieldInfos->write(directory, buf);
+
+ // write field values
+ FieldsWriter fieldsWriter(directory, segment, fieldInfos);
+ try {
+ fieldsWriter.addDocument(doc);
+ } _CLFINALLY (
+ fieldsWriter.close()
+ );
+
+ // clear postingTable
+ clearPostingTable();
+
+ int32_t fieldInfoSize = fieldInfos->size();
+ fieldLengths = _CL_NEWARRAY(int32_t, fieldInfoSize); // init fieldLengths
+ fieldPositions = _CL_NEWARRAY(int32_t, fieldInfoSize); // init fieldPositions
+ fieldOffsets = _CL_NEWARRAY(int32_t, fieldInfoSize); // init fieldOffsets
+ fieldBoosts = _CL_NEWARRAY(qreal, fieldInfoSize); // init fieldBoosts
+
+ qreal fbd = doc->getBoost();
+ for (int32_t i = 0; i < fieldInfoSize; ++i) {
+ fieldLengths[i] = 0;
+ fieldPositions[i] = 0;
+ fieldOffsets[i] = 0;
+ //initialise fieldBoost array with default boost
+ fieldBoosts[i] = fbd;
+ }
+
+ // invert doc into postingTable
+ invertDocument(doc);
+
+ // sort postingTable into an array
+ Posting** postings = NULL;
+ int32_t postingsLength = 0;
+ sortPostingTable(postings, postingsLength);
+
+ //DEBUG:
+ /*for (int32_t i = 0; i < postingsLength; i++) {
+ Posting* posting = postings[i];
+
+ TCHAR* b = posting->term->toString();
+ _cout << b << " freq=" << posting->freq;
+ _CLDELETE(b);
+
+ _cout << " pos=" << posting->positions[0];
+ for (int32_t j = 1; j < posting->freq; j++)
+ _cout <<"," << posting->positions[j];
+
+ _cout << endl;
+ }*/
+
+
+ // write postings
+ writePostings(postings, postingsLength, segment);
+
+ // write norms of indexed fields
+ writeNorms(segment);
+ _CLDELETE_ARRAY(postings);
+}
+
+void DocumentWriter::sortPostingTable(Posting**& array, int32_t& arraySize)
+{
+ // copy postingTable into an array
+ arraySize = postingTable.size();
+ array = _CL_NEWARRAY(Posting*,arraySize);
+ PostingTableType::iterator postings = postingTable.begin();
+ int32_t i=0;
+ while ( postings != postingTable.end() ){
+ array[i] = (Posting*)postings->second;
+ postings++;
+ i++;
+ }
+ // sort the array
+ quickSort(array, 0, i - 1);
+}
+
+
+void DocumentWriter::invertDocument(const Document* doc)
+{
+ DocumentFieldEnumeration* fields = doc->fields();
+ try {
+ while (fields->hasMoreElements()) {
+ Field* field = (Field*)fields->nextElement();
+ const TCHAR* fieldName = field->name();
+ const int32_t fieldNumber = fieldInfos->fieldNumber(fieldName);
+
+ int32_t length = fieldLengths[fieldNumber]; // length of field
+ int32_t position = fieldPositions[fieldNumber]; // position in field
+ if (length>0)
+ position+=analyzer->getPositionIncrementGap(fieldName);
+ int32_t offset = fieldOffsets[fieldNumber]; // offset field
+
+ if (field->isIndexed()) {
+ if (!field->isTokenized()) { // un-tokenized field
+ //FEATURE: this is bug in java: if using a Reader, then
+ //field value will not be added. With CLucene, an untokenized
+ //field with a reader will still be added (if it isn't stored,
+ //because if it's stored, then the reader has already been read.
+ const TCHAR* charBuf = NULL;
+ int64_t dataLen = 0;
+
+ if (field->stringValue() == NULL && !field->isStored() ) {
+ CL_NS(util)::Reader* r = field->readerValue();
+ // this call tries to read the entire stream
+ // this may invalidate the string for the further calls
+ // it may be better to do this via a FilterReader
+ // TODO make a better implementation of this
+ dataLen = r->read(charBuf, LUCENE_INT32_MAX_SHOULDBE);
+ if (dataLen == -1)
+ dataLen = 0;
+ //todo: would be better to pass the string length, in case
+ //a null char is passed, but then would need to test the output too.
+ } else {
+ charBuf = field->stringValue();
+ dataLen = _tcslen(charBuf);
+ }
+
+ if(field->isStoreOffsetWithTermVector()){
+ TermVectorOffsetInfo tio;
+ tio.setStartOffset(offset);
+ tio.setEndOffset(offset + dataLen);
+ addPosition(fieldName, charBuf, position++, &tio );
+ }else
+ addPosition(fieldName, charBuf, position++, NULL);
+ offset += dataLen;
+ length++;
+ } else { // field must be tokenized
+ CL_NS(util)::Reader* reader; // find or make Reader
+ bool delReader = false;
+ if (field->readerValue() != NULL) {
+ reader = field->readerValue();
+ } else if (field->stringValue() != NULL) {
+ reader = _CLNEW CL_NS(util)::StringReader(
+ field->stringValue(),_tcslen(field->stringValue()),
+ false);
+ delReader = true;
+ } else {
+ _CLTHROWA(CL_ERR_IO,"field must have either String or Reader value");
+ }
+
+ try {
+ // Tokenize field and add to postingTable.
+ CL_NS(analysis)::TokenStream* stream =
+ analyzer->tokenStream(fieldName, reader);
+
+ try {
+ CL_NS(analysis)::Token t;
+ int32_t lastTokenEndOffset = -1;
+ while (stream->next(&t)) {
+ position += (t.getPositionIncrement() - 1);
+
+ if(field->isStoreOffsetWithTermVector()){
+ TermVectorOffsetInfo tio;
+ tio.setStartOffset(offset + t.startOffset());
+ tio.setEndOffset(offset + t.endOffset());
+ addPosition(fieldName, t.termText(), position++, &tio);
+ } else
+ addPosition(fieldName, t.termText(), position++, NULL);
+
+ lastTokenEndOffset = t.endOffset();
+ length++;
+ // Apply field truncation policy.
+ if (maxFieldLength != IndexWriter::FIELD_TRUNC_POLICY__WARN) {
+ // The client programmer has explicitly authorized us to
+ // truncate the token stream after maxFieldLength tokens.
+ if ( length > maxFieldLength)
+ break;
+ } else if (length > IndexWriter::DEFAULT_MAX_FIELD_LENGTH) {
+ const TCHAR* errMsgBase =
+ _T("Indexing a huge number of tokens from a single")
+ _T(" field (\"%s\", in this case) can cause CLucene")
+ _T(" to use memory excessively.")
+ _T(" By default, CLucene will accept only %s tokens")
+ _T(" tokens from a single field before forcing the")
+ _T(" client programmer to specify a threshold at")
+ _T(" which to truncate the token stream.")
+ _T(" You should set this threshold via")
+ _T(" IndexReader::maxFieldLength (set to LUCENE_INT32_MAX")
+ _T(" to disable truncation, or a value to specify maximum number of fields).");
+
+ TCHAR defaultMaxAsChar[34];
+ _i64tot(IndexWriter::DEFAULT_MAX_FIELD_LENGTH,
+ defaultMaxAsChar, 10
+ );
+ int32_t errMsgLen = _tcslen(errMsgBase)
+ + _tcslen(fieldName)
+ + _tcslen(defaultMaxAsChar);
+ TCHAR* errMsg = _CL_NEWARRAY(TCHAR,errMsgLen+1);
+
+ _sntprintf(errMsg, errMsgLen,errMsgBase, fieldName, defaultMaxAsChar);
+
+ _CLTHROWT_DEL(CL_ERR_Runtime,errMsg);
+ }
+ } // while token->next
+
+ if(lastTokenEndOffset != -1 )
+ offset += lastTokenEndOffset + 1;
+ } _CLFINALLY (
+ stream->close();
+ _CLDELETE(stream);
+ );
+ } _CLFINALLY (
+ if (delReader) {
+ _CLDELETE(reader);
+ }
+ );
+ } // if/else field is to be tokenized
+ fieldLengths[fieldNumber] = length; // save field length
+ fieldPositions[fieldNumber] = position; // save field position
+ fieldBoosts[fieldNumber] *= field->getBoost();
+ fieldOffsets[fieldNumber] = offset;
+ } // if field is to beindexed
+ } // while more fields available
+ } _CLFINALLY (
+ _CLDELETE(fields);
+ );
+}
+
+void DocumentWriter::addPosition(const TCHAR* field, const TCHAR* text,
+ const int32_t position, TermVectorOffsetInfo* offset)
+{
+ termBuffer->set(field,text,false);
+
+ Posting* ti = postingTable.get(termBuffer);
+ if (ti != NULL) { // word seen before
+ int32_t freq = ti->freq;
+ if (ti->positions.length == freq) {
+ // positions array is full, realloc its size
+ ti->positions.length = freq*2;
+ ti->positions.values = (int32_t*)realloc(ti->positions.values, ti->positions.length * sizeof(int32_t));
+ }
+ ti->positions.values[freq] = position; // add new position
+
+ if (offset != NULL) {
+ if (ti->offsets.length == freq){
+ ti->offsets.length = freq*2;
+ ti->offsets.values = (TermVectorOffsetInfo*)realloc(ti->offsets.values, ti->offsets.length * sizeof(TermVectorOffsetInfo));
+ }
+ ti->offsets[freq] = *offset;
+ }
+
+ ti->freq = freq + 1; // update frequency
+ } else { // word not seen before
+ Term* term = _CLNEW Term( field, text, false);
+ postingTable.put(term, _CLNEW Posting(term, position, offset));
+ }
+}
+
+//static
+void DocumentWriter::quickSort(Posting**& postings, const int32_t lo, const int32_t hi)
+{
+ if(lo >= hi)
+ return;
+
+ int32_t mid = (lo + hi) / 2;
+
+ if(postings[lo]->term->compareTo(postings[mid]->term) > 0) {
+ Posting* tmp = postings[lo];
+ postings[lo] = postings[mid];
+ postings[mid] = tmp;
+ }
+
+ if(postings[mid]->term->compareTo(postings[hi]->term) > 0) {
+ Posting* tmp = postings[mid];
+ postings[mid] = postings[hi];
+ postings[hi] = tmp;
+
+ if(postings[lo]->term->compareTo(postings[mid]->term) > 0) {
+ Posting* tmp2 = postings[lo];
+ postings[lo] = postings[mid];
+ postings[mid] = tmp2;
+ }
+ }
+
+ int32_t left = lo + 1;
+ int32_t right = hi - 1;
+
+ if (left >= right)
+ return;
+
+ const Term* partition = postings[mid]->term; //not kept, so no need to finalize
+
+ for( ;; ) {
+ while(postings[right]->term->compareTo(partition) > 0)
+ --right;
+
+ while(left < right && postings[left]->term->compareTo(partition) <= 0)
+ ++left;
+
+ if(left < right) {
+ Posting* tmp = postings[left];
+ postings[left] = postings[right];
+ postings[right] = tmp;
+ --right;
+ } else {
+ break;
+ }
+ }
+
+ quickSort(postings, lo, left);
+ quickSort(postings, left + 1, hi);
+}
+
+void DocumentWriter::writePostings(Posting** postings,
+ const int32_t postingsLength, const QString& segment)
+{
+ #define __DOCLOSE(obj) \
+ if (obj!=NULL) { \
+ try { \
+ obj->close(); \
+ _CLDELETE(obj); \
+ } catch(CLuceneError &e) { \
+ ierr = e.number(); \
+ err = e.what(); \
+ } catch(...) { \
+ err = "Unknown error while closing posting tables"; \
+ } \
+ }
+
+ IndexOutput* freq = NULL;
+ IndexOutput* prox = NULL;
+ TermInfosWriter* tis = NULL;
+ TermVectorsWriter* termVectorWriter = NULL;
+ try {
+ //open files for inverse index storage
+ QString buf = Misc::segmentname(segment, QLatin1String(".frq"));
+ freq = directory->createOutput(buf);
+
+ buf = Misc::segmentname(segment, QLatin1String(".prx"));
+ prox = directory->createOutput(buf);
+
+ tis = _CLNEW TermInfosWriter(directory, segment, fieldInfos,
+ termIndexInterval);
+ TermInfo* ti = _CLNEW TermInfo();
+ const TCHAR* currentField = NULL;
+ for (int32_t i = 0; i < postingsLength; i++) {
+ Posting* posting = postings[i];
+
+ // add an entry to the dictionary with pointers to prox and freq files
+ ti->set(1, freq->getFilePointer(), prox->getFilePointer(), -1);
+ tis->add(posting->term, ti);
+
+ // add an entry to the freq file
+ int32_t postingFreq = posting->freq;
+ if (postingFreq == 1) // optimize freq=1
+ freq->writeVInt(1); // set low bit of doc num.
+ else {
+ freq->writeVInt(0); // the document number
+ freq->writeVInt(postingFreq); // frequency in doc
+ }
+
+ int32_t lastPosition = 0; // write positions
+ for (int32_t j = 0; j < postingFreq; ++j) { // use delta-encoding
+ prox->writeVInt(posting->positions.values[j] - lastPosition);
+ lastPosition = posting->positions.values[j];
+ }
+
+ // check to see if we switched to a new field
+ const TCHAR* termField = posting->term->field();
+ if ( currentField == NULL || _tcscmp(currentField,termField) != 0 ) {
+ //todo, can we do an intern'd check?
+ // changing field - see if there is something to save
+ currentField = termField;
+ FieldInfo* fi = fieldInfos->fieldInfo(currentField);
+
+ if (fi->storeTermVector) {
+ if (termVectorWriter == NULL) {
+ termVectorWriter = _CLNEW TermVectorsWriter(directory,
+ segment, fieldInfos);
+ termVectorWriter->openDocument();
+ }
+ termVectorWriter->openField(currentField);
+ } else if (termVectorWriter != NULL) {
+ termVectorWriter->closeField();
+ }
+ }
+ if (termVectorWriter != NULL && termVectorWriter->isFieldOpen()) {
+ termVectorWriter->addTerm(posting->term->text(), postingFreq,
+ &posting->positions, &posting->offsets);
+ }
+ }
+ if (termVectorWriter != NULL)
+ termVectorWriter->closeDocument();
+ _CLDELETE(ti);
+ } _CLFINALLY (
+ const char* err = NULL;
+ int32_t ierr = 0;
+
+ // make an effort to close all streams we can but remember and re-throw
+ // the first exception encountered in this process
+ __DOCLOSE(freq);
+ __DOCLOSE(prox);
+ __DOCLOSE(tis);
+ __DOCLOSE(termVectorWriter);
+ if (err != NULL)
+ _CLTHROWA(ierr,err);
+ );
+}
+
+void DocumentWriter::writeNorms(const QString& segment)
+{
+ for(int32_t n = 0; n < fieldInfos->size(); n++){
+ FieldInfo* fi = fieldInfos->fieldInfo(n);
+ if(fi->isIndexed && !fi->omitNorms) {
+ qreal norm = fieldBoosts[n] * similarity->lengthNorm(
+ fi->name, fieldLengths[n]);
+
+ QString fn(segment + QLatin1String(".f%1"));
+ IndexOutput* norms = directory->createOutput(fn.arg(n));
+ try {
+ norms->writeByte(CL_NS(search)::Similarity::encodeNorm(norm));
+ }_CLFINALLY (
+ norms->close();
+ _CLDELETE(norms);
+ )
+ }
+ }
+}
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/index/DocumentWriter.h b/src/3rdparty/clucene/src/CLucene/index/DocumentWriter.h
new file mode 100644
index 0000000..7096ba3e
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/DocumentWriter.h
@@ -0,0 +1,107 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright(C) 2007, 2008 by Nokia Corporation and/or its subsidiary(-ies), all rights reserved.
+*/
+#ifndef _lucene_index_DocumentWriter_
+#define _lucene_index_DocumentWriter_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include <QtCore/QString>
+
+#include "CLucene/analysis/AnalysisHeader.h"
+#include "CLucene/document/Document.h"
+#include "CLucene/store/Directory.h"
+#include "FieldInfos.h"
+#include "IndexWriter.h"
+#include "CLucene/util/VoidMap.h"
+#include "CLucene/document/Field.h"
+#include "TermInfo.h"
+#include "CLucene/search/Similarity.h"
+#include "TermInfosWriter.h"
+#include "FieldsWriter.h"
+#include "Term.h"
+
+CL_NS_DEF(index)
+
+class DocumentWriter : LUCENE_BASE
+{
+public:
+ // info about a Term in a doc
+ class Posting : LUCENE_BASE
+ {
+ public:
+ Term* term; // the Term
+ int32_t freq; // its frequency in doc
+ Array<int32_t> positions; // positions it occurs at
+ Array<TermVectorOffsetInfo> offsets;
+
+ Posting(Term* t, const int32_t position, TermVectorOffsetInfo* offset);
+ ~Posting();
+ };
+
+private:
+ CL_NS(analysis)::Analyzer* analyzer;
+ CL_NS(store)::Directory* directory;
+ FieldInfos* fieldInfos; //array
+ const int32_t maxFieldLength;
+ CL_NS(search)::Similarity* similarity;
+ int32_t termIndexInterval;
+
+ // Keys are Terms, values are Postings.
+ // Used to buffer a document before it is written to the index.
+ typedef CL_NS(util)::CLHashtable<Term*, Posting*, Term::Compare,
+ Term::Equals> PostingTableType;
+ PostingTableType postingTable;
+ int32_t* fieldLengths; //array
+ int32_t* fieldPositions; //array
+ int32_t* fieldOffsets; //array
+ qreal* fieldBoosts; //array
+
+ Term* termBuffer;
+public:
+ /** This ctor used by test code only.
+ *
+ * @param directory The directory to write the document information to
+ * @param analyzer The analyzer to use for the document
+ * @param similarity The Similarity function
+ * @param maxFieldLength The maximum number of tokens a field may have
+ */
+ DocumentWriter(CL_NS(store)::Directory* d, CL_NS(analysis)::Analyzer* a,
+ CL_NS(search)::Similarity* similarity, const int32_t maxFieldLength);
+
+ DocumentWriter(CL_NS(store)::Directory* directory,
+ CL_NS(analysis)::Analyzer* analyzer, IndexWriter* writer);
+ ~DocumentWriter();
+
+ void addDocument(const QString& segment, CL_NS(document)::Document* doc);
+
+
+private:
+ // Tokenizes the fields of a document into Postings.
+ void invertDocument(const CL_NS(document)::Document* doc);
+
+ void addPosition(const TCHAR* field, const TCHAR* text,
+ const int32_t position, TermVectorOffsetInfo* offset);
+
+ void sortPostingTable(Posting**& array, int32_t& arraySize);
+
+ static void quickSort(Posting**& postings, const int32_t lo, const int32_t hi);
+
+ void writePostings(Posting** postings, const int32_t postingsLength,
+ const QString& segment);
+
+ void writeNorms(const QString& segment);
+
+ void clearPostingTable();
+};
+
+CL_NS_END
+
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/index/FieldInfo.h b/src/3rdparty/clucene/src/CLucene/index/FieldInfo.h
new file mode 100644
index 0000000..387c4a6
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/FieldInfo.h
@@ -0,0 +1,16 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_index_FieldInfo_
+#define _lucene_index_FieldInfo_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#error "This header is deprecated, use FieldInfos.h instead"
+
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/index/FieldInfos.cpp b/src/3rdparty/clucene/src/CLucene/index/FieldInfos.cpp
new file mode 100644
index 0000000..0c66882
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/FieldInfos.cpp
@@ -0,0 +1,236 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright(C) 2007, 2008 by Nokia Corporation and/or its subsidiary(-ies), all rights reserved.
+*/
+#include "CLucene/StdHeader.h"
+#include "FieldInfos.h"
+
+#include "CLucene/store/Directory.h"
+#include "CLucene/document/Document.h"
+#include "CLucene/document/Field.h"
+#include "CLucene/util/VoidMap.h"
+#include "CLucene/util/Misc.h"
+#include "CLucene/util/StringIntern.h"
+
+CL_NS_USE(store)
+CL_NS_USE(document)
+CL_NS_USE(util)
+CL_NS_DEF(index)
+
+FieldInfo::FieldInfo(const TCHAR* _fieldName, bool _isIndexed,
+ int32_t _fieldNumber, bool _storeTermVector, bool _storeOffsetWithTermVector,
+ bool _storePositionWithTermVector, bool _omitNorms)
+ : name(CLStringIntern::intern(_fieldName CL_FILELINE))
+ , isIndexed(_isIndexed)
+ , number(_fieldNumber)
+ , storeTermVector(_storeTermVector)
+ , storeOffsetWithTermVector(_storeOffsetWithTermVector)
+ , storePositionWithTermVector(_storeTermVector)
+ , omitNorms(_omitNorms)
+{
+}
+
+FieldInfo::~FieldInfo()
+{
+ CL_NS(util)::CLStringIntern::unintern(name);
+}
+
+// #pragma mark -- FieldInfos
+
+FieldInfos::FieldInfos()
+ : byName(false, false)
+ , byNumber(true)
+{
+}
+
+FieldInfos::~FieldInfos()
+{
+ byName.clear();
+ byNumber.clear();
+}
+
+FieldInfos::FieldInfos(Directory* d, const QString& name)
+ : byName(false, false)
+ , byNumber(true)
+{
+ IndexInput* input = d->openInput(name);
+ try {
+ read(input);
+ } _CLFINALLY (
+ input->close();
+ _CLDELETE(input);
+ );
+}
+
+void FieldInfos::add(const Document* doc)
+{
+ DocumentFieldEnumeration* fields = doc->fields();
+ Field* field;
+ while (fields->hasMoreElements()) {
+ field = fields->nextElement();
+ add(field->name(), field->isIndexed(), field->isTermVectorStored());
+ }
+ _CLDELETE(fields);
+}
+
+void FieldInfos::add(const TCHAR* name, bool isIndexed, bool storeTermVector,
+ bool storePositionWithTermVector, bool storeOffsetWithTermVector, bool omitNorms)
+{
+ FieldInfo* fi = fieldInfo(name);
+ if (fi == NULL) {
+ addInternal(name, isIndexed, storeTermVector,
+ storePositionWithTermVector,
+ storeOffsetWithTermVector, omitNorms);
+ } else {
+ if (fi->isIndexed != isIndexed) {
+ // once indexed, always index
+ fi->isIndexed = true;
+ }
+
+ if (fi->storeTermVector != storeTermVector) {
+ // once vector, always vector
+ fi->storeTermVector = true;
+ }
+
+ if (fi->storePositionWithTermVector != storePositionWithTermVector) {
+ // once vector, always vector
+ fi->storePositionWithTermVector = true;
+ }
+
+ if (fi->storeOffsetWithTermVector != storeOffsetWithTermVector) {
+ // once vector, always vector
+ fi->storeOffsetWithTermVector = true;
+ }
+
+ if (fi->omitNorms != omitNorms) {
+ // once norms are stored, always store
+ fi->omitNorms = false;
+ }
+ }
+}
+
+void FieldInfos::add(const TCHAR** names, bool isIndexed, bool storeTermVectors,
+ bool storePositionWithTermVector, bool storeOffsetWithTermVector, bool omitNorms)
+{
+ int32_t i=0;
+ while (names[i] != NULL) {
+ add(names[i], isIndexed, storeTermVectors, storePositionWithTermVector,
+ storeOffsetWithTermVector, omitNorms);
+ ++i;
+ }
+}
+
+int32_t FieldInfos::fieldNumber(const TCHAR* fieldName) const
+{
+ FieldInfo* fi = fieldInfo(fieldName);
+ return (fi != NULL) ? fi->number : -1;
+}
+
+FieldInfo* FieldInfos::fieldInfo(const TCHAR* fieldName) const
+{
+ return byName.get(fieldName);
+}
+
+const TCHAR* FieldInfos::fieldName(const int32_t fieldNumber) const
+{
+ FieldInfo* fi = fieldInfo(fieldNumber);
+ return (fi == NULL) ? LUCENE_BLANK_STRING : fi->name;
+}
+
+FieldInfo* FieldInfos::fieldInfo(const int32_t fieldNumber) const
+{
+ if (fieldNumber < 0 || (size_t)fieldNumber >= byNumber.size())
+ return NULL;
+ return byNumber[fieldNumber];
+}
+
+int32_t FieldInfos::size() const
+{
+ return byNumber.size();
+}
+
+void FieldInfos::write(Directory* d, const QString& name) const
+{
+ IndexOutput* output = d->createOutput(name);
+ try {
+ write(output);
+ } _CLFINALLY (
+ output->close();
+ _CLDELETE(output);
+ );
+}
+
+void FieldInfos::write(IndexOutput* output) const
+{
+ output->writeVInt(size());
+ FieldInfo* fi;
+ uint8_t bits;
+ for (int32_t i = 0; i < size(); ++i) {
+ fi = fieldInfo(i);
+ bits = 0x0;
+ if (fi->isIndexed)
+ bits |= IS_INDEXED;
+
+ if (fi->storeTermVector)
+ bits |= STORE_TERMVECTOR;
+
+ if (fi->storePositionWithTermVector)
+ bits |= STORE_POSITIONS_WITH_TERMVECTOR;
+
+ if (fi->storeOffsetWithTermVector)
+ bits |= STORE_OFFSET_WITH_TERMVECTOR;
+
+ if (fi->omitNorms)
+ bits |= OMIT_NORMS;
+
+ output->writeString(fi->name, _tcslen(fi->name));
+ output->writeByte(bits);
+ }
+}
+
+void FieldInfos::read(IndexInput* input)
+{
+ int32_t size = input->readVInt();
+ for (int32_t i = 0; i < size; ++i) {
+ // we could read name into a string buffer, but we can't be sure what
+ // the maximum field length will be.
+ TCHAR* name = input->readString();
+ uint8_t bits = input->readByte();
+ bool isIndexed = (bits & IS_INDEXED) != 0;
+ bool storeTermVector = (bits & STORE_TERMVECTOR) != 0;
+ bool storePositionsWithTermVector =
+ (bits & STORE_POSITIONS_WITH_TERMVECTOR) != 0;
+ bool storeOffsetWithTermVector = (bits & STORE_OFFSET_WITH_TERMVECTOR) != 0;
+ bool omitNorms = (bits & OMIT_NORMS) != 0;
+
+ addInternal(name, isIndexed, storeTermVector,
+ storePositionsWithTermVector, storeOffsetWithTermVector, omitNorms);
+ _CLDELETE_CARRAY(name);
+ }
+}
+
+void FieldInfos::addInternal(const TCHAR* name, bool isIndexed,
+ bool storeTermVector, bool storePositionWithTermVector,
+ bool storeOffsetWithTermVector, bool omitNorms)
+{
+ FieldInfo* fi = _CLNEW FieldInfo(name, isIndexed, byNumber.size(),
+ storeTermVector, storePositionWithTermVector, storeOffsetWithTermVector,
+ omitNorms);
+ byNumber.push_back(fi);
+ byName.put(fi->name, fi);
+}
+
+bool FieldInfos::hasVectors() const
+{
+ for (int32_t i = 0; i < size(); i++) {
+ if (fieldInfo(i)->storeTermVector)
+ return true;
+ }
+ return false;
+}
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/index/FieldInfos.h b/src/3rdparty/clucene/src/CLucene/index/FieldInfos.h
new file mode 100644
index 0000000..7b6d0f5
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/FieldInfos.h
@@ -0,0 +1,171 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright(C) 2007, 2008 by Nokia Corporation and/or its subsidiary(-ies), all rights reserved.
+*/
+#ifndef _lucene_index_FieldInfos_
+#define _lucene_index_FieldInfos_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include <QtCore/QString>
+
+#include "CLucene/store/Directory.h"
+#include "CLucene/document/Document.h"
+#include "CLucene/util/VoidMap.h"
+#include "CLucene/util/VoidList.h"
+
+CL_NS_DEF(index)
+
+class FieldInfo : LUCENE_BASE
+{
+ public:
+ //name of the field
+ const TCHAR* name;
+
+ //Is field indexed? true = yes false = no
+ bool isIndexed;
+
+ //field number
+ const int32_t number;
+
+ // true if term vector for this field should be stored
+ bool storeTermVector;
+ bool storeOffsetWithTermVector;
+ bool storePositionWithTermVector;
+
+ bool omitNorms; // omit norms associated with indexed fields
+
+ //Func - Constructor
+ // Initialises FieldInfo.
+ // na holds the name of the field
+ // tk indicates whether this field is indexed or not
+ // nu indicates its number
+ //Pre - na != NULL and holds the name of the field
+ // tk is true or false
+ // number >= 0
+ //Post - The FieldInfo instance has been created and initialized.
+ // name holds the duplicated string of na
+ // isIndexed = tk
+ // number = nu
+ FieldInfo(const TCHAR* fieldName, bool isIndexed, int32_t fieldNumber,
+ bool storeTermVector, bool storeOffsetWithTermVector,
+ bool storePositionWithTermVector, bool omitNorms);
+
+ //Func - Destructor
+ //Pre - true
+ //Post - The instance has been destroyed
+ ~FieldInfo();
+};
+
+/* Access to the Field Info file that describes document fields and whether or
+ * not they are indexed. Each segment has a separate Field Info file. Objects
+ * of this class are thread-safe for multiple readers, but only one thread can
+ * be adding documents at a time, with no other reader or writer threads
+ * accessing this object.
+*/
+class FieldInfos : LUCENE_BASE
+{
+private:
+ // we now use internd field names, so we can use the voidCompare to
+ // directly compare the strings
+ typedef CL_NS(util)::CLHashMap<const TCHAR*, FieldInfo*,
+ CL_NS(util)::Compare::TChar,CL_NS(util)::Equals::TChar > defByName;
+ defByName byName;
+
+ CL_NS(util)::CLArrayList<FieldInfo*,
+ CL_NS(util)::Deletor::Object<FieldInfo> > byNumber;
+
+public:
+ enum {
+ IS_INDEXED = 0x1,
+ STORE_TERMVECTOR = 0x2,
+ STORE_POSITIONS_WITH_TERMVECTOR = 0x4,
+ STORE_OFFSET_WITH_TERMVECTOR = 0x8,
+ OMIT_NORMS = 0x10
+ };
+
+ FieldInfos();
+ ~FieldInfos();
+
+ // Construct a FieldInfos object using the directory and the name of the
+ // file IndexInput
+ // @param d The directory to open the IndexInput from
+ // @param name Name of the file to open the IndexInput from in the Directory
+ // @throws IOException
+ // @see #read
+ FieldInfos(CL_NS(store)::Directory* d, const QString& name);
+
+ int32_t fieldNumber(const TCHAR* fieldName)const;
+
+ // Return the fieldinfo object referenced by the fieldNumber.
+ // @param fieldNumber
+ // @return the FieldInfo object or null when the given fieldNumber
+ // doesn't exist.
+ FieldInfo* fieldInfo(const TCHAR* fieldName) const;
+
+ // Return the fieldName identified by its number.
+ // @param fieldNumber
+ // @return the fieldName or an empty string when the field
+ // with the given number doesn't exist.
+ const TCHAR* fieldName(const int32_t fieldNumber) const;
+
+ FieldInfo* fieldInfo(const int32_t fieldNumber) const;
+
+ int32_t size()const;
+
+ bool hasVectors() const;
+
+ // Adds field info for a Document.
+ void add(const CL_NS(document)::Document* doc);
+
+ // Merges in information from another FieldInfos.
+ void add(FieldInfos* other);
+
+
+ /** If the field is not yet known, adds it. If it is known, checks to make
+ * sure that the isIndexed flag is the same as was given previously for this
+ * field. If not - marks it as being indexed. Same goes for the TermVector
+ * parameters.
+ *
+ * @param name The name of the field
+ * @param isIndexed true if the field is indexed
+ * @param storeTermVector true if the term vector should be stored
+ * @param storePositionWithTermVector true if the term vector with positions should be stored
+ * @param storeOffsetWithTermVector true if the term vector with offsets should be stored
+ */
+ void add(const TCHAR* name, bool isIndexed, bool storeTermVector = false,
+ bool storePositionWithTermVector = false,
+ bool storeOffsetWithTermVector = false, bool omitNorms = false);
+
+ /**
+ * Assumes the fields are not storing term vectors
+ * @param names The names of the fields
+ * @param isIndexed true if the field is indexed
+ * @param storeTermVector true if the term vector should be stored
+ *
+ * @see #add(String, boolean)
+ */
+ void add(const TCHAR** names, bool isIndexed, bool storeTermVector = false,
+ bool storePositionWithTermVector = false,
+ bool storeOffsetWithTermVector = false, bool omitNorms = false);
+
+ void write(CL_NS(store)::Directory* d, const QString& name) const;
+ void write(CL_NS(store)::IndexOutput* output) const;
+
+private:
+ void read(CL_NS(store)::IndexInput* input);
+ void addInternal(const TCHAR* name, bool isIndexed, bool storeTermVector,
+ bool storePositionWithTermVector, bool storeOffsetWithTermVector,
+ bool omitNorms);
+
+};
+
+CL_NS_END
+
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/index/FieldsReader.cpp b/src/3rdparty/clucene/src/CLucene/index/FieldsReader.cpp
new file mode 100644
index 0000000..e3f9d1c
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/FieldsReader.cpp
@@ -0,0 +1,231 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright(C) 2007, 2008 by Nokia Corporation and/or its subsidiary(-ies), all rights reserved.
+*/
+#include "CLucene/StdHeader.h"
+#include "FieldsReader.h"
+
+#include "CLucene/util/VoidMap.h"
+#include "CLucene/util/Misc.h"
+#include "CLucene/store/Directory.h"
+#include "CLucene/document/Document.h"
+#include "CLucene/document/Field.h"
+#include "FieldInfos.h"
+#include "FieldsWriter.h"
+
+CL_NS_USE(store)
+CL_NS_USE(document)
+CL_NS_USE(util)
+CL_NS_DEF(index)
+
+FieldsReader::FieldsReader(Directory* d, const QString& segment, FieldInfos* fn)
+ : fieldInfos(fn)
+{
+ //Func - Constructor
+ //Pre - d contains a valid reference to a Directory
+ // segment != NULL
+ // fn contains a valid reference to a FieldInfos
+ //Post - The instance has been created
+
+ CND_PRECONDITION(!segment.isEmpty(), "segment != NULL");
+
+ QString buf = Misc::segmentname(segment, QLatin1String(".fdt"));
+ fieldsStream = d->openInput(buf);
+
+ buf = Misc::segmentname(segment, QLatin1String(".fdx"));
+ indexStream = d->openInput(buf);
+
+ _size = (int32_t)indexStream->length() / 8;
+}
+
+FieldsReader::~FieldsReader()
+{
+ //Func - Destructor
+ //Pre - true
+ //Post - The instance has been destroyed
+ close();
+}
+
+void FieldsReader::close()
+{
+ //Func - Closes the FieldsReader
+ //Pre - true
+ //Post - The FieldsReader has been closed
+ if (fieldsStream) {
+ fieldsStream->close();
+ _CLDELETE(fieldsStream);
+ }
+
+ if(indexStream) {
+ indexStream->close();
+ _CLDELETE(indexStream);
+ }
+}
+
+int32_t FieldsReader::size() const
+{
+ return _size;
+}
+
+bool FieldsReader::doc(int32_t n, Document* doc)
+{
+ if ( n * 8L > indexStream->length() )
+ return false;
+
+ indexStream->seek(n * 8L);
+ int64_t position = indexStream->readLong();
+ fieldsStream->seek(position);
+
+ int32_t numFields = fieldsStream->readVInt();
+ for (int32_t i = 0; i < numFields; i++) {
+ int32_t fieldNumber = fieldsStream->readVInt();
+ FieldInfo* fi = fieldInfos->fieldInfo(fieldNumber);
+
+ if ( fi == NULL )
+ _CLTHROWA(CL_ERR_IO, "Field stream is invalid");
+
+ uint8_t bits = fieldsStream->readByte();
+ if ((bits & FieldsWriter::FIELD_IS_BINARY) != 0) {
+ int32_t fieldLen = fieldsStream->readVInt();
+ FieldsReader::FieldsStreamHolder* subStream = new
+ FieldsReader::FieldsStreamHolder(fieldsStream, fieldLen);
+ uint8_t bits = Field::STORE_YES;
+ Field* f = _CLNEW Field(
+ fi->name, // name
+ subStream, // read value
+ bits);
+
+ doc->add(*f);
+
+ //now skip over the rest of the field
+ if (fieldsStream->getFilePointer() + fieldLen
+ == fieldsStream->length()) {
+ // set to eof
+ fieldsStream->seek(fieldsStream->getFilePointer() + fieldLen - 1);
+ fieldsStream->readByte();
+ } else {
+ fieldsStream->seek(fieldsStream->getFilePointer() + fieldLen);
+ }
+ } else {
+ uint8_t bits = Field::STORE_YES;
+ if (fi->isIndexed && (bits & FieldsWriter::FIELD_IS_TOKENIZED)!=0 )
+ bits |= Field::INDEX_TOKENIZED;
+ else if (fi->isIndexed && (bits & FieldsWriter::FIELD_IS_TOKENIZED) == 0)
+ bits |= Field::INDEX_UNTOKENIZED;
+ else
+ bits |= Field::INDEX_NO;
+
+ if (fi->storeTermVector) {
+ if (fi->storeOffsetWithTermVector) {
+ if (fi->storePositionWithTermVector) {
+ bits |= Field::TERMVECTOR_WITH_OFFSETS;
+ bits |= Field::TERMVECTOR_WITH_POSITIONS;
+ } else {
+ bits |= Field::TERMVECTOR_WITH_OFFSETS;
+ }
+ } else if (fi->storePositionWithTermVector) {
+ bits |= Field::TERMVECTOR_WITH_POSITIONS;
+ } else {
+ bits |= Field::TERMVECTOR_YES;
+ }
+ } else {
+ bits |= Field::TERMVECTOR_NO;
+ }
+
+ if ( (bits & FieldsWriter::FIELD_IS_COMPRESSED) != 0 ) {
+ bits |= Field::STORE_COMPRESS;
+ int32_t fieldLen = fieldsStream->readVInt();
+ FieldsStreamHolder* subStream = new
+ FieldsStreamHolder(fieldsStream, fieldLen);
+
+ // TODO: we dont have gzip inputstream available, must alert
+ // user to somehow use a gzip inputstream
+ Field* f = _CLNEW Field(
+ fi->name, // name
+ subStream, // read value
+ bits);
+
+ f->setOmitNorms(fi->omitNorms);
+ doc->add(*f);
+
+ // now skip over the rest of the field
+ if (fieldsStream->getFilePointer() + fieldLen
+ == fieldsStream->length()) {
+ //set to eof
+ fieldsStream->seek(fieldsStream->getFilePointer() + fieldLen - 1);
+ fieldsStream->readByte();
+ } else {
+ fieldsStream->seek(fieldsStream->getFilePointer() + fieldLen);
+ }
+ } else {
+ TCHAR* fvalue = fieldsStream->readString(true);
+ Field* f = _CLNEW Field(
+ fi->name, // name
+ fvalue, // read value
+ bits);
+ // TODO: could optimise this
+ _CLDELETE_CARRAY(fvalue);
+ f->setOmitNorms(fi->omitNorms);
+ doc->add(*f);
+ }
+ }
+ }
+ return true;
+}
+
+FieldsReader::FieldsStreamHolder::FieldsStreamHolder(IndexInput* indexInput,
+ int32_t subLength)
+{
+ this->indexInput = indexInput->clone();
+ this->indexInputStream = new IndexInputStream(this->indexInput);
+ this->subStream = new jstreams::SubInputStream<char>(indexInputStream,
+ subLength);
+
+ this->size = subStream->getSize();
+ this->position = subStream->getPosition();
+ this->error = subStream->getError();
+ this->status = subStream->getStatus();
+}
+
+FieldsReader::FieldsStreamHolder::~FieldsStreamHolder()
+{
+ delete subStream;
+ delete indexInputStream;
+
+ indexInput->close();
+ _CLDELETE(indexInput);
+}
+
+int32_t FieldsReader::FieldsStreamHolder::read(const char*& start, int32_t _min,
+ int32_t _max)
+{
+ int32_t ret = subStream->read(start,_min,_max);
+ this->position = subStream->getPosition();
+ this->error = subStream->getError();
+ this->status = subStream->getStatus();
+ return ret;
+}
+
+int64_t FieldsReader::FieldsStreamHolder::skip(int64_t ntoskip)
+{
+ int64_t ret = subStream->skip(ntoskip);
+ this->position = subStream->getPosition();
+ this->error = subStream->getError();
+ this->status = subStream->getStatus();
+ return ret;
+}
+
+int64_t FieldsReader::FieldsStreamHolder::reset(int64_t pos)
+{
+ int64_t ret = subStream->reset(pos);
+ this->position = subStream->getPosition();
+ this->error = subStream->getError();
+ this->status = subStream->getStatus();
+ return ret;
+}
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/index/FieldsReader.h b/src/3rdparty/clucene/src/CLucene/index/FieldsReader.h
new file mode 100644
index 0000000..53589a5
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/FieldsReader.h
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright(C) 2007, 2008 by Nokia Corporation and/or its subsidiary(-ies), all rights reserved.
+*/
+#ifndef _lucene_index_FieldsReader_
+#define _lucene_index_FieldsReader_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include <QtCore/QString>
+
+#include "CLucene/store/Directory.h"
+#include "CLucene/document/Document.h"
+#include "CLucene/util/subinputstream.h"
+#include "CLucene/store/IndexInput.h"
+
+CL_NS_DEF(index)
+
+class FieldInfos;
+
+class FieldsReader : LUCENE_BASE
+{
+private:
+ const FieldInfos* fieldInfos;
+ CL_NS(store)::IndexInput* fieldsStream;
+ CL_NS(store)::IndexInput* indexStream;
+ int32_t _size;
+
+ class FieldsStreamHolder : public jstreams::StreamBase<char>
+ {
+ CL_NS(store)::IndexInput* indexInput;
+ CL_NS(store)::IndexInputStream* indexInputStream;
+ jstreams::SubInputStream<char>* subStream;
+
+ public:
+ FieldsStreamHolder(CL_NS(store)::IndexInput* indexInput, int32_t subLength);
+ ~FieldsStreamHolder();
+ int32_t read(const char*& start, int32_t _min, int32_t _max);
+ int64_t skip(int64_t ntoskip);
+ int64_t reset(int64_t pos);
+ };
+
+public:
+ FieldsReader(CL_NS(store)::Directory* d, const QString& segment, FieldInfos* fn);
+ ~FieldsReader();
+ void close();
+ int32_t size() const;
+ // loads the fields from n'th document into doc. returns true on success.
+ bool doc(int32_t n, CL_NS(document)::Document* doc);
+};
+
+CL_NS_END
+
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/index/FieldsWriter.cpp b/src/3rdparty/clucene/src/CLucene/index/FieldsWriter.cpp
new file mode 100644
index 0000000..ceb6735
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/FieldsWriter.cpp
@@ -0,0 +1,186 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright(C) 2007, 2008 by Nokia Corporation and/or its subsidiary(-ies), all rights reserved.
+*/
+#include "CLucene/StdHeader.h"
+#include "FieldsWriter.h"
+
+#include "CLucene/util/VoidMap.h"
+#include "CLucene/util/Reader.h"
+#include "CLucene/util/Misc.h"
+#include "CLucene/store/Directory.h"
+#include "CLucene/store/IndexOutput.h"
+#include "CLucene/document/Document.h"
+#include "CLucene/document/Field.h"
+#include "FieldInfos.h"
+
+CL_NS_USE(store)
+CL_NS_USE(util)
+CL_NS_USE(document)
+CL_NS_DEF(index)
+
+FieldsWriter::FieldsWriter(Directory* d, const QString& segment, FieldInfos* fn)
+ : fieldInfos(fn)
+{
+ //Func - Constructor
+ //Pre - d contains a valid reference to a directory
+ // segment != NULL and contains the name of the segment
+ //Post - fn contains a valid reference toa a FieldInfos
+
+ CND_PRECONDITION(!segment.isEmpty(), "segment is NULL");
+
+ QString buf = Misc::segmentname(segment, QLatin1String(".fdt"));
+ fieldsStream = d->createOutput(buf);
+
+ buf = Misc::segmentname(segment, QLatin1String(".fdx"));
+ indexStream = d->createOutput(buf);
+
+ CND_CONDITION(indexStream != NULL, "indexStream is NULL");
+}
+
+FieldsWriter::~FieldsWriter()
+{
+ //Func - Destructor
+ //Pre - true
+ //Post - Instance has been destroyed
+
+ close();
+}
+
+void FieldsWriter::close()
+{
+ //Func - Closes all streams and frees all resources
+ //Pre - true
+ //Post - All streams have been closed all resources have been freed
+
+ //Check if fieldsStream is valid
+ if (fieldsStream) {
+ //Close fieldsStream
+ fieldsStream->close();
+ _CLDELETE(fieldsStream);
+ }
+
+ //Check if indexStream is valid
+ if (indexStream) {
+ //Close indexStream
+ indexStream->close();
+ _CLDELETE(indexStream);
+ }
+}
+
+void FieldsWriter::addDocument(Document* doc)
+{
+ //Func - Adds a document
+ //Pre - doc contains a valid reference to a Document
+ // indexStream != NULL
+ // fieldsStream != NULL
+ //Post - The document doc has been added
+
+ CND_PRECONDITION(indexStream != NULL, "indexStream is NULL");
+ CND_PRECONDITION(fieldsStream != NULL, "fieldsStream is NULL");
+
+ indexStream->writeLong(fieldsStream->getFilePointer());
+
+ int32_t storedCount = 0;
+ DocumentFieldEnumeration* fields = doc->fields();
+ while (fields->hasMoreElements()) {
+ Field* field = fields->nextElement();
+ if (field->isStored())
+ storedCount++;
+ }
+ _CLDELETE(fields);
+ fieldsStream->writeVInt(storedCount);
+
+ fields = doc->fields();
+ while (fields->hasMoreElements()) {
+ Field* field = fields->nextElement();
+ if (field->isStored()) {
+ fieldsStream->writeVInt(fieldInfos->fieldNumber(field->name()));
+
+ uint8_t bits = 0;
+ if (field->isTokenized())
+ bits |= FieldsWriter::FIELD_IS_TOKENIZED;
+ if (field->isBinary())
+ bits |= FieldsWriter::FIELD_IS_BINARY;
+ if (field->isCompressed())
+ bits |= FieldsWriter::FIELD_IS_COMPRESSED;
+
+ fieldsStream->writeByte(bits);
+
+ if ( field->isCompressed()) {
+ _CLTHROWA(CL_ERR_Runtime,
+ "CLucene does not directly support compressed fields. "
+ "Write a compressed byte array instead");
+ } else {
+ // FEATURE: this problem in Java Lucene too, if using Reader,
+ // data is not stored.
+ //
+ // TODO: this is a logic bug...
+ // if the field is stored, and indexed, and is using a reader
+ // the field wont get indexed
+ //
+ // if we could write zero prefixed vints (therefore static
+ // length), then we could write a reader directly to the field
+ // indexoutput and then go back and write the data length.
+ // however this is not supported in lucene yet...
+ // if this is ever implemented, then it would make sense to
+ // also be able to combine the FieldsWriter and
+ // DocumentWriter::invertDocument process, and use a
+ // streamfilter to write the field data while the documentwrite
+ // analyses the document! how cool would that be! it would cut
+ // out all these buffers!!!
+
+ // compression is disabled for the current field
+ if (field->isBinary()) {
+ // TODO: since we currently don't support static length vints,
+ // we have to read the entire stream into memory first.... ugly!
+ jstreams::StreamBase<char>* stream = field->streamValue();
+ const char* sd;
+ // how do we make sure we read the entire index in now???
+ // TODO: we need to have a max amount, and guarantee its all
+ // in or throw an error...
+ int32_t rl = stream->read(sd,10000000,0);
+
+ if ( rl < 0 ) {
+ // TODO: could we detect this earlier and not actually
+ // write the field??
+ fieldsStream->writeVInt(0);
+ } else {
+ // TODO: if this int could be written with a constant
+ // length, then the stream could be read and written a
+ // bit at a time then the length is re-written at the end.
+ fieldsStream->writeVInt(rl);
+ fieldsStream->writeBytes((uint8_t*)sd, rl);
+ }
+ } else if (field->stringValue() == NULL ) {
+ // we must be using readerValue
+ CND_PRECONDITION(!field->isIndexed(),
+ "Cannot store reader if it is indexed too")
+ Reader* r = field->readerValue();
+
+ //read the entire string
+ const TCHAR* rv;
+ int64_t rl = r->read(rv, LUCENE_INT32_MAX_SHOULDBE);
+ if ( rl > LUCENE_INT32_MAX_SHOULDBE )
+ _CLTHROWA(CL_ERR_Runtime, "Field length too long");
+ else if ( rl < 0 )
+ rl = 0;
+
+ fieldsStream->writeString( rv, (int32_t)rl);
+ } else if (field->stringValue() != NULL ) {
+ fieldsStream->writeString(field->stringValue(),
+ _tcslen(field->stringValue()));
+ } else {
+ _CLTHROWA(CL_ERR_Runtime, "No values are set for the field");
+ }
+ }
+ }
+ }
+ _CLDELETE(fields);
+}
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/index/FieldsWriter.h b/src/3rdparty/clucene/src/CLucene/index/FieldsWriter.h
new file mode 100644
index 0000000..7dde5f2
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/FieldsWriter.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright(C) 2007, 2008 by Nokia Corporation and/or its subsidiary(-ies), all rights reserved.
+*/
+#ifndef _lucene_index_FieldsWriter_
+#define _lucene_index_FieldsWriter_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include <QtCore/QString>
+
+#include "CLucene/document/Document.h"
+#include "CLucene/store/Directory.h"
+#include "CLucene/store/IndexOutput.h"
+
+CL_NS_DEF(index)
+
+class FieldInfos;
+
+class FieldsWriter : LUCENE_BASE
+{
+private:
+ FieldInfos* fieldInfos;
+
+ CL_NS(store)::IndexOutput* fieldsStream;
+ CL_NS(store)::IndexOutput* indexStream;
+
+public:
+ LUCENE_STATIC_CONSTANT(uint8_t, FIELD_IS_TOKENIZED = 0x1);
+ LUCENE_STATIC_CONSTANT(uint8_t, FIELD_IS_BINARY = 0x2);
+ LUCENE_STATIC_CONSTANT(uint8_t, FIELD_IS_COMPRESSED = 0x4);
+
+ FieldsWriter(CL_NS(store)::Directory* d, const QString& segment, FieldInfos* fn);
+ ~FieldsWriter();
+
+ void close();
+
+ void addDocument(CL_NS(document)::Document* doc);
+};
+
+CL_NS_END
+
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/index/IndexModifier.cpp b/src/3rdparty/clucene/src/CLucene/index/IndexModifier.cpp
new file mode 100644
index 0000000..1423cc7
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/IndexModifier.cpp
@@ -0,0 +1,254 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright(C) 2007, 2008 by Nokia Corporation and/or its subsidiary(-ies), all rights reserved.
+*/
+#include "CLucene/StdHeader.h"
+#include "IndexModifier.h"
+
+#include "Term.h"
+#include "IndexWriter.h"
+#include "IndexReader.h"
+
+CL_NS_DEF(index)
+CL_NS_USE(util)
+CL_NS_USE(store)
+CL_NS_USE(analysis)
+CL_NS_USE(document)
+
+IndexModifier::IndexModifier(Directory* directory, Analyzer* analyzer, bool create) {
+ init(directory, analyzer, create);
+}
+
+IndexModifier::IndexModifier(const QString& dirName, Analyzer* analyzer, bool create) {
+ Directory* dir = FSDirectory::getDirectory(dirName, create);
+ init(dir, analyzer, create);
+}
+
+void IndexModifier::init(Directory* directory, Analyzer* analyzer, bool create) {
+ indexWriter = NULL;
+ indexReader = NULL;
+ this->analyzer = analyzer;
+ open = false;
+
+ useCompoundFile = true;
+ int32_t maxBufferedDocs = IndexWriter::DEFAULT_MAX_BUFFERED_DOCS;
+ this->maxFieldLength = IndexWriter::DEFAULT_MAX_FIELD_LENGTH;
+ int32_t mergeFactor = IndexWriter::DEFAULT_MERGE_FACTOR;
+
+ this->directory = _CL_POINTER(directory);
+ createIndexReader();
+ open = true;
+}
+
+IndexModifier::~IndexModifier(){
+ close();
+}
+
+void IndexModifier::assureOpen() const{
+ if (!open) {
+ _CLTHROWA(CL_ERR_IllegalState,"Index is closed");
+ }
+}
+
+void IndexModifier::createIndexWriter() {
+ if (indexWriter == NULL) {
+ if (indexReader != NULL) {
+ indexReader->close();
+ _CLDELETE(indexReader);
+ }
+ indexWriter = _CLNEW IndexWriter(directory, analyzer, false);
+ indexWriter->setUseCompoundFile(useCompoundFile);
+ //indexWriter->setMaxBufferedDocs(maxBufferedDocs);
+ indexWriter->setMaxFieldLength(maxFieldLength);
+ //indexWriter->setMergeFactor(mergeFactor);
+ }
+}
+
+void IndexModifier::createIndexReader() {
+ if (indexReader == NULL) {
+ if (indexWriter != NULL) {
+ indexWriter->close();
+ _CLDELETE(indexWriter);
+ }
+ indexReader = IndexReader::open(directory);
+ }
+}
+
+void IndexModifier::flush() {
+ SCOPED_LOCK_MUTEX(directory->THIS_LOCK)
+ assureOpen();
+ if (indexWriter != NULL) {
+ indexWriter->close();
+ _CLDELETE(indexWriter);
+ createIndexWriter();
+ } else {
+ indexReader->close();
+ _CLDELETE(indexReader);
+ createIndexReader();
+ }
+}
+
+void IndexModifier::addDocument(Document* doc, Analyzer* docAnalyzer) {
+ SCOPED_LOCK_MUTEX(directory->THIS_LOCK)
+ assureOpen();
+ createIndexWriter();
+ if (docAnalyzer != NULL)
+ indexWriter->addDocument(doc, docAnalyzer);
+ else
+ indexWriter->addDocument(doc);
+}
+
+int32_t IndexModifier::deleteDocuments(Term* term) {
+ SCOPED_LOCK_MUTEX(directory->THIS_LOCK)
+ assureOpen();
+ createIndexReader();
+ return indexReader->deleteDocuments(term);
+}
+
+void IndexModifier::deleteDocument(int32_t docNum) {
+ SCOPED_LOCK_MUTEX(directory->THIS_LOCK)
+ assureOpen();
+ createIndexReader();
+ indexReader->deleteDocument(docNum);
+}
+
+int32_t IndexModifier::docCount() {
+ SCOPED_LOCK_MUTEX(directory->THIS_LOCK)
+ assureOpen();
+ if (indexWriter != NULL)
+ return indexWriter->docCount();
+ else
+ return indexReader->numDocs();
+}
+
+void IndexModifier::optimize() {
+ SCOPED_LOCK_MUTEX(directory->THIS_LOCK)
+ assureOpen();
+ createIndexWriter();
+ indexWriter->optimize();
+}
+
+void IndexModifier::setUseCompoundFile(bool useCompoundFile) {
+ SCOPED_LOCK_MUTEX(directory->THIS_LOCK)
+ assureOpen();
+ if (indexWriter != NULL)
+ indexWriter->setUseCompoundFile(useCompoundFile);
+ this->useCompoundFile = useCompoundFile;
+}
+
+bool IndexModifier::getUseCompoundFile() {
+ SCOPED_LOCK_MUTEX(directory->THIS_LOCK)
+ assureOpen();
+ createIndexWriter();
+ return indexWriter->getUseCompoundFile();
+}
+
+void IndexModifier::setMaxFieldLength(int32_t maxFieldLength) {
+ SCOPED_LOCK_MUTEX(directory->THIS_LOCK)
+ assureOpen();
+ if (indexWriter != NULL)
+ indexWriter->setMaxFieldLength(maxFieldLength);
+ this->maxFieldLength = maxFieldLength;
+}
+
+int32_t IndexModifier::getMaxFieldLength() {
+ SCOPED_LOCK_MUTEX(directory->THIS_LOCK)
+ assureOpen();
+ createIndexWriter();
+ return indexWriter->getMaxFieldLength();
+}
+
+void IndexModifier::setMaxBufferedDocs(int32_t maxBufferedDocs) {
+ SCOPED_LOCK_MUTEX(directory->THIS_LOCK)
+ assureOpen();
+ if (indexWriter != NULL)
+ indexWriter->setMaxBufferedDocs(maxBufferedDocs);
+ this->maxBufferedDocs = maxBufferedDocs;
+}
+
+int32_t IndexModifier::getMaxBufferedDocs() {
+ SCOPED_LOCK_MUTEX(directory->THIS_LOCK)
+ assureOpen();
+ createIndexWriter();
+ return indexWriter->getMaxBufferedDocs();
+}
+void IndexModifier::setMergeFactor(int32_t mergeFactor) {
+ SCOPED_LOCK_MUTEX(directory->THIS_LOCK)
+ assureOpen();
+ if (indexWriter != NULL)
+ indexWriter->setMergeFactor(mergeFactor);
+ this->mergeFactor = mergeFactor;
+}
+
+int32_t IndexModifier::getMergeFactor() {
+ SCOPED_LOCK_MUTEX(directory->THIS_LOCK)
+ assureOpen();
+ createIndexWriter();
+ return indexWriter->getMergeFactor();
+}
+
+void IndexModifier::close() {
+ SCOPED_LOCK_MUTEX(directory->THIS_LOCK)
+ if (indexWriter != NULL) {
+ indexWriter->close();
+ _CLDELETE(indexWriter);
+ } else {
+ indexReader->close();
+ _CLDELETE(indexReader);
+ }
+ _CLDECDELETE(directory)
+ open = false;
+}
+
+QString IndexModifier::toString() const
+{
+ QString ret(QLatin1String("Index@"));
+ return ret.append(directory->toString());
+}
+
+
+
+int64_t IndexModifier::getCurrentVersion() const{
+ SCOPED_LOCK_MUTEX(directory->THIS_LOCK)
+ return IndexReader::getCurrentVersion(directory);
+}
+
+TermDocs* IndexModifier::termDocs(Term* term){
+ SCOPED_LOCK_MUTEX(directory->THIS_LOCK)
+ assureOpen();
+ createIndexReader();
+ return indexReader->termDocs(term);
+}
+
+TermEnum* IndexModifier::terms(Term* term){
+ SCOPED_LOCK_MUTEX(directory->THIS_LOCK)
+ assureOpen();
+ createIndexReader();
+ if ( term != NULL )
+ return indexReader->terms(term);
+ else
+ return indexReader->terms();
+}
+
+
+ CL_NS(document)::Document* IndexModifier::document(const int32_t n){
+ Document* ret = _CLNEW Document;
+ if (!document(n,ret) )
+ _CLDELETE(ret);
+ return ret;
+ }
+bool IndexModifier::document(int32_t n, CL_NS(document)::Document* doc){
+ SCOPED_LOCK_MUTEX(directory->THIS_LOCK)
+ assureOpen();
+ createIndexReader();
+ return indexReader->document(n, doc);
+}
+CL_NS(store)::Directory* IndexModifier::getDirectory(){
+ return directory;
+}
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/index/IndexModifier.h b/src/3rdparty/clucene/src/CLucene/index/IndexModifier.h
new file mode 100644
index 0000000..4e9963f
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/IndexModifier.h
@@ -0,0 +1,316 @@
+/*
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+*
+* Changes are Copyright(C) 2007, 2008 by Nokia Corporation and/or its subsidiary(-ies), all rights reserved.
+*/
+#ifndef _lucene_index_IndexModifier_
+#define _lucene_index_IndexModifier_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include <QtCore/QString>
+
+#include "CLucene/store/Directory.h"
+#include "CLucene/document/Document.h"
+#include "CLucene/analysis/AnalysisHeader.h"
+
+CL_NS_DEF(index)
+
+class IndexReader;
+class IndexWriter;
+class Term;
+class TermDocs;
+class TermEnum;
+
+/**
+* A class to modify an index, i.e. to delete and add documents. This
+* class hides {@link IndexReader} and {@link IndexWriter} so that you
+* do not need to care about implementation details such as that adding
+* documents is done via IndexWriter and deletion is done via IndexReader.
+*
+* <p>Note that you cannot create more than one <code>IndexModifier</code> object
+* on the same directory at the same time.
+*
+* <p>Example usage:
+*
+* <div align="left" class="java">
+* <table border="0" cellpadding="3" cellspacing="0" bgcolor="#ffffff">
+* <tr>
+* <td nowrap="nowrap" valign="top" align="left">
+* <code>
+* //note this code will leak memory :)
+* Analyzer* analyzer = <b>new</b> StandardAnalyzer();<br/>
+* // create an index in /tmp/index, overwriting an existing one:<br/>
+* IndexModifier* indexModifier = <b>new</b> IndexModifier("/tmp/index", analyzer, <b>true</b>);<br/>
+* Document* doc = <b>new </b>Document*();<br/>
+* doc->add(*<b>new </b>Field("id", "1", Field::STORE_YES| Field::INDEX_UNTOKENIZED));<br/>
+* doc->add(*<b>new </b>Field("body", "a simple test", Field::STORE_YES, Field::INDEX_TOKENIZED));<br/>
+* indexModifier->addDocument(doc);<br/>
+* <b>int32_t </b>deleted = indexModifier->deleteDocuments(<b>new </b>Term("id", "1"));<br/>
+* printf("Deleted %d document", deleted);<br/>
+* indexModifier->flush();<br/>
+* printf( "$d docs in index", indexModifier->docCount() );<br/>
+* indexModifier->close();
+* </code></td>
+* </tr>
+* </table>
+* </div>
+*
+* <p>Not all methods of IndexReader and IndexWriter are offered by this
+* class. If you need access to additional methods, either use those classes
+* directly or implement your own class that extends <code>IndexModifier</code>.
+*
+* <p>Although an instance of this class can be used from more than one
+* thread, you will not get the best performance. You might want to use
+* IndexReader and IndexWriter directly for that (but you will need to
+* care about synchronization yourself then).
+*
+* <p>While you can freely mix calls to add() and delete() using this class,
+* you should batch you calls for best performance. For example, if you
+* want to update 20 documents, you should first delete all those documents,
+* then add all the new documents.
+*
+*/
+class IndexModifier : LUCENE_BASE
+{
+protected:
+ IndexWriter* indexWriter;
+ IndexReader* indexReader;
+
+ CL_NS(store)::Directory* directory;
+ CL_NS(analysis)::Analyzer* analyzer;
+ bool open;
+
+ // Lucene defaults:
+ bool useCompoundFile;
+ int32_t maxBufferedDocs;
+ int32_t maxFieldLength;
+ int32_t mergeFactor;
+
+public:
+
+ /**
+ * Open an index with write access.
+ *
+ * @param directory the index directory
+ * @param analyzer the analyzer to use for adding new documents
+ * @param create <code>true</code> to create the index or overwrite
+ * the existing one; <code>false</code> to append to the existing index
+ */
+ IndexModifier(CL_NS(store)::Directory* directory,
+ CL_NS(analysis)::Analyzer* analyzer, bool create);
+
+ ~IndexModifier();
+
+ /**
+ * Open an index with write access.
+ *
+ * @param dirName the index directory
+ * @param analyzer the analyzer to use for adding new documents
+ * @param create <code>true</code> to create the index or overwrite
+ * the existing one; <code>false</code> to append to the existing index
+ */
+ IndexModifier(const QString& dirName, CL_NS(analysis)::Analyzer* analyzer,
+ bool create);
+
+protected:
+
+ // Initialize an IndexWriter. @throws IOException
+ void init(CL_NS(store)::Directory* directory,
+ CL_NS(analysis)::Analyzer* analyzer, bool create);
+
+ // Throw an IllegalStateException if the index is closed.
+ // @throws IllegalStateException
+ void assureOpen() const;
+
+ // Close the IndexReader and open an IndexWriter. @throws IOException
+ void createIndexWriter();
+
+ // Close the IndexWriter and open an IndexReader. @throws IOException
+ void createIndexReader();
+
+public:
+ // Make sure all changes are written to disk. @throws IOException
+ void flush();
+
+ // Adds a document to this index, using the provided analyzer instead of
+ // the one specific in the constructor. If the document contains more than
+ // {@link #setMaxFieldLength(int32_t)} terms for a given field, the
+ // remainder are discarded.
+ // @see IndexWriter#addDocument(Document*, Analyzer*)
+ // @throws IllegalStateException if the index is closed
+ void addDocument(CL_NS(document)::Document* doc, CL_NS(analysis)::Analyzer*
+ docAnalyzer = NULL);
+
+
+ /**
+ * Deletes all documents containing <code>term</code>.
+ * This is useful if one uses a document field to hold a unique ID string for
+ * the document. Then to delete such a document, one merely constructs a
+ * term with the appropriate field and the unique ID string as its text and
+ * passes it to this method. Returns the number of documents deleted.
+ * @return the number of documents deleted
+ * @see IndexReader#deleteDocuments(Term*)
+ * @throws IllegalStateException if the index is closed
+ */
+ int32_t deleteDocuments(Term* term);
+
+ /**
+ * Deletes the document numbered <code>docNum</code>.
+ * @see IndexReader#deleteDocument(int32_t)
+ * @throws IllegalStateException if the index is closed
+ */
+ void deleteDocument(int32_t docNum);
+
+ /**
+ * Returns the number of documents currently in this index.
+ * @see IndexWriter#docCount()
+ * @see IndexReader#numDocs()
+ * @throws IllegalStateException if the index is closed
+ */
+ int32_t docCount();
+
+ /**
+ * Merges all segments together into a single segment, optimizing an index
+ * for search.
+ * @see IndexWriter#optimize()
+ * @throws IllegalStateException if the index is closed
+ */
+ void optimize();
+
+ /**
+ * Setting to turn on usage of a compound file. When on, multiple files
+ * for each segment are merged into a single file once the segment creation
+ * is finished. This is done regardless of what directory is in use.
+ * @see IndexWriter#setUseCompoundFile(bool)
+ * @throws IllegalStateException if the index is closed
+ */
+ void setUseCompoundFile(bool useCompoundFile);
+
+ /**
+ * @throws IOException
+ * @see IndexModifier#setUseCompoundFile(bool)
+ */
+ bool getUseCompoundFile();
+
+ /**
+ * The maximum number of terms that will be indexed for a single field in a
+ * document. This limits the amount of memory required for indexing, so that
+ * collections with very large files will not crash the indexing process by
+ * running out of memory.<p/>
+ * Note that this effectively truncates large documents, excluding from the
+ * index terms that occur further in the document. If you know your source
+ * documents are large, be sure to set this value high enough to accomodate
+ * the expected size. If you set it to Integer.MAX_VALUE, then the only limit
+ * is your memory, but you should anticipate an OutOfMemoryError.<p/>
+ * By default, no more than 10,000 terms will be indexed for a field.
+ * @see IndexWriter#setMaxFieldLength(int32_t)
+ * @throws IllegalStateException if the index is closed
+ */
+ void setMaxFieldLength(int32_t maxFieldLength);
+
+ /**
+ * @throws IOException
+ * @see IndexModifier#setMaxFieldLength(int32_t)
+ */
+ int32_t getMaxFieldLength();
+
+ /*
+ * The maximum number of terms that will be indexed for a single field in a
+ * document. This limits the amount of memory required for indexing, so that
+ * collections with very large files will not crash the indexing process by
+ * running out of memory.<p/>
+ * Note that this effectively truncates large documents, excluding from the
+ * index terms that occur further in the document. If you know your source
+ * documents are large, be sure to set this value high enough to accomodate
+ * the expected size. If you set it to Integer.MAX_VALUE, then the only limit
+ * is your memory, but you should anticipate an OutOfMemoryError.<p/>
+ * By default, no more than 10,000 terms will be indexed for a field.
+ * @see IndexWriter#setMaxBufferedDocs(int32_t)
+ * @throws IllegalStateException if the index is closed
+ */
+ void setMaxBufferedDocs(int32_t maxBufferedDocs);
+
+ // @see IndexModifier#setMaxBufferedDocs(int32_t) @throws IOException
+ int32_t getMaxBufferedDocs();
+
+ /*
+ * Determines how often segment indices are merged by addDocument(). With
+ * smaller values, less RAM is used while indexing, and searches on
+ * unoptimized indices are faster, but indexing speed is slower. With larger
+ * values, more RAM is used during indexing, and while searches on unoptimized
+ * indices are slower, indexing is faster. Thus larger values (&gt; 10) are
+ * best for batch index creation, and smaller values (&lt; 10) for indices
+ * that are interactively maintained.
+ * <p>This must never be less than 2. The default value is 10.
+ *
+ * @see IndexWriter#setMergeFactor(int32_t)
+ * @throws IllegalStateException if the index is closed
+ */
+ void setMergeFactor(int32_t mergeFactor);
+
+ /**
+ * @throws IOException
+ * @see IndexModifier#setMergeFactor(int32_t)
+ */
+ int32_t getMergeFactor();
+
+ /**
+ * Close this index, writing all pending changes to disk.
+ *
+ * @throws IllegalStateException if the index has been closed before already
+ */
+ void close();
+
+ QString toString() const;
+
+ /**
+ * Gets the version number of the currently open index.
+ */
+ int64_t getCurrentVersion() const;
+
+ /**
+ * Returns an enumeration of all the documents which contain term.
+ *
+ * Warning: This is not threadsafe. Make sure you lock the modifier object
+ * while using the TermDocs. If the IndexReader that the modifier manages
+ * is closed, the TermDocs object will fail.
+ */
+ TermDocs* termDocs(Term* term = NULL);
+
+ /**
+ * Returns an enumeration of all terms after a given term.
+ * If no term is given, an enumeration of all the terms
+ * in the index is returned.
+ * The enumeration is ordered by Term.compareTo(). Each term
+ * is greater than all that precede it in the enumeration.
+ *
+ * Warning: This is not threadsafe. Make sure you lock the modifier object
+ * while using the TermDocs. If the IndexReader that the modifier manages
+ * is closed, the Document will be invalid
+ */
+ TermEnum* terms(Term* term = NULL);
+
+ /**
+ * Returns the stored fields of the n-th Document in this index.
+ *
+ * Warning: This is not threadsafe. Make sure you lock the modifier object
+ * while using the TermDocs. If the IndexReader that the modifier manages
+ * is closed, the Document will be invalid
+ */
+ bool document(const int32_t n, CL_NS(document)::Document* doc);
+ _CL_DEPRECATED(document(i, document))
+ CL_NS(document)::Document* document(const int32_t n);
+
+ // Returns the directory used by this index.
+ CL_NS(store)::Directory* getDirectory();
+};
+
+CL_NS_END
+
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/index/IndexReader.cpp b/src/3rdparty/clucene/src/CLucene/index/IndexReader.cpp
new file mode 100644
index 0000000..91c7356
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/IndexReader.cpp
@@ -0,0 +1,668 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright(C) 2007, 2008 by Nokia Corporation and/or its subsidiary(-ies), all rights reserved.
+*/
+# include <QtCore/QFile>
+# include <QtCore/QStringList>
+
+#include "CLucene/StdHeader.h"
+#include "IndexReader.h"
+#include "IndexWriter.h"
+
+#include "CLucene/store/Directory.h"
+#include "CLucene/store/FSDirectory.h"
+#include "CLucene/store/Lock.h"
+#include "CLucene/document/Document.h"
+#include "CLucene/search/Similarity.h"
+#include "SegmentInfos.h"
+#include "MultiReader.h"
+#include "Terms.h"
+
+CL_NS_USE(util)
+CL_NS_USE(store)
+CL_NS_DEF(index)
+
+IndexReader::IndexReader(Directory* dir)
+ : stale(false)
+ , hasChanges(false)
+ , closeDirectory(false)
+ , directoryOwner(false)
+ , segmentInfos(NULL)
+ , directory(_CL_POINTER(dir))
+ , writeLock(NULL)
+{
+}
+
+IndexReader::IndexReader(Directory* dir, SegmentInfos* infos, bool close)
+ : stale(false)
+ , hasChanges(false)
+ , closeDirectory(close)
+ , directoryOwner(true)
+ , segmentInfos(infos)
+ , directory(_CL_POINTER(dir))
+ , writeLock(NULL)
+{
+}
+
+IndexReader::~IndexReader()
+{
+ if (writeLock != NULL) {
+ writeLock->release();
+ _CLDELETE(writeLock);
+ }
+ _CLDELETE(segmentInfos);
+ _CLDECDELETE(directory);
+}
+
+IndexReader* IndexReader::open(const QString& path)
+{
+ //Func - Static method.
+ // Returns an IndexReader reading the index in an FSDirectory in the named path.
+ //Pre - path != NULL and contains the path of the index for which an IndexReader must be
+ // instantiated
+ // closeDir indicates if the directory needs to be closed
+ //Post - An IndexReader has been returned that reads tnhe index located at path
+
+ CND_PRECONDITION(!path.isEmpty(), "path is NULL");
+
+ Directory* dir = FSDirectory::getDirectory(path, false);
+ IndexReader* reader = open(dir, true);
+ //because fsdirectory will now have a refcount of 1 more than
+ //if the reader had been opened with a directory object,
+ //we need to do a refdec
+ _CLDECDELETE(dir);
+ return reader;
+}
+
+IndexReader* IndexReader::open(Directory* directory, bool closeDirectory)
+{
+ //Func - Static method.
+ // Returns an IndexReader reading the index in an FSDirectory in the named path.
+ //Pre - directory represents a directory
+ // closeDir indicates if the directory needs to be closed
+ //Post - An IndexReader has been returned that reads the index located at directory
+
+ // in- & inter-process sync
+ SCOPED_LOCK_MUTEX(directory->THIS_LOCK)
+
+ //Instantiate an IndexReader::LockWith which can produce an IndexReader
+ LuceneLock* lock = directory->makeLock(QLatin1String("commit.lock"));
+ IndexReader::LockWith with(lock, directory);
+
+ IndexReader* ret = NULL;
+ try {
+ //Create an IndexReader reading the index
+ ret = with.runAndReturn();
+ } _CLFINALLY (
+ _CLDELETE(lock);
+ );
+
+ CND_CONDITION(ret != NULL, "ret is NULL");
+ ret->closeDirectory = closeDirectory;
+
+ return ret;
+}
+
+CL_NS(document)::Document* IndexReader::document(const int32_t n)
+{
+ CL_NS(document)::Document* ret = _CLNEW CL_NS(document)::Document;
+ if (!document(n, ret))
+ _CLDELETE(ret);
+ return ret;
+}
+
+IndexReader* IndexReader::LockWith::doBody()
+{
+ //Func - Reads the segmentinfo file and depending on the number of segments found
+ // it returns a SegmentsReader or a SegmentReader
+ //Pre - directory != NULL
+ //Post - Depending on the number of Segments present in directory this method
+ // returns an empty SegmentsReader when there are no segments, a SegmentReader when
+ // directory contains 1 segment and a nonempty SegmentsReader when directory
+ // contains multiple segements
+
+ CND_PRECONDITION(directory != NULL, "directory is NULL");
+
+ //Instantiate SegmentInfos
+ SegmentInfos* infos = _CLNEW SegmentInfos;
+ try {
+ //Have SegmentInfos read the segments file in directory
+ infos->read(directory);
+ } catch(...) {
+ //make sure infos is cleaned up
+ _CLDELETE(infos);
+ throw;
+ }
+
+ // If there is at least one segment (if infos.size() >= 1), the last
+ // SegmentReader object will close the directory when the SegmentReader
+ // object itself is closed (see SegmentReader::doClose).
+ // If there are no segments, there will be no "last SegmentReader object"
+ // to fulfill this responsibility, so we need to explicitly close the
+ // directory in the segmentsreader.close
+
+ //Count the number segments in the directory
+ const uint32_t nSegs = infos->size();
+
+ if (nSegs == 1 ) {
+ // index is optimized
+ return _CLNEW SegmentReader(infos, infos->info(0));
+ } else {
+ //Instantiate an array of pointers to SegmentReaders of size nSegs (The number of segments in the index)
+ IndexReader** readers = NULL;
+
+ if (nSegs > 0){
+ uint32_t infosize = infos->size();
+ readers = _CL_NEWARRAY(IndexReader*,infosize+1);
+ for (uint32_t i = 0; i < infosize; ++i) {
+ //Instantiate a SegementReader responsible for reading the i-th segment and store it in
+ //the readers array
+ readers[i] = _CLNEW SegmentReader(infos->info(i));
+ }
+ readers[infosize] = NULL;
+ }
+
+ //return an instance of SegmentsReader which is a reader that manages all Segments
+ return _CLNEW MultiReader(directory, infos, readers);
+ }// end if
+}
+
+uint64_t IndexReader::lastModified(const QString& directory)
+{
+ //Func - Static method
+ // Returns the time the index in the named directory was last modified.
+ //Pre - directory != NULL and contains the path name of the directory to check
+ //Post - The last modified time of the index has been returned
+
+ CND_PRECONDITION(!directory.isEmpty(), "directory is NULL");
+
+ return FSDirectory::fileModified(directory, QLatin1String("segments"));
+}
+
+int64_t IndexReader::getCurrentVersion(Directory* directory)
+{
+ // in- & inter-process sync
+ SCOPED_LOCK_MUTEX(directory->THIS_LOCK)
+
+ int64_t ret = 0;
+ bool locked = false;
+ LuceneLock* commitLock = directory->makeLock(IndexWriter::COMMIT_LOCK_NAME);
+ try {
+ locked = commitLock->obtain(IndexWriter::COMMIT_LOCK_TIMEOUT);
+ ret = SegmentInfos::readCurrentVersion(directory);
+ } _CLFINALLY (
+ if (locked)
+ commitLock->release();
+ _CLDELETE(commitLock);
+ )
+ return ret;
+}
+
+int64_t IndexReader::getCurrentVersion(const QString& directory)
+{
+ Directory* dir = FSDirectory::getDirectory(directory, false);
+ int64_t version = getCurrentVersion(dir);
+ dir->close();
+ _CLDECDELETE(dir);
+ return version;
+}
+
+int64_t IndexReader::getVersion()
+{
+ return segmentInfos->getVersion();
+}
+
+bool IndexReader::isCurrent()
+{
+ // in- & inter-process sync
+ SCOPED_LOCK_MUTEX(directory->THIS_LOCK)
+
+ bool ret = false;
+ bool locked = false;
+ LuceneLock* commitLock = directory->makeLock(IndexWriter::COMMIT_LOCK_NAME);
+ try {
+ locked = commitLock->obtain(IndexWriter::COMMIT_LOCK_TIMEOUT);
+ ret = SegmentInfos::readCurrentVersion(directory)
+ == segmentInfos->getVersion();
+ } _CLFINALLY(
+ if (locked)
+ commitLock->release();
+ _CLDELETE(commitLock);
+ )
+ return ret;
+}
+
+uint64_t IndexReader::lastModified(const Directory* directory)
+{
+ //Func - Static method
+ // Returns the time the index in this directory was last modified.
+ //Pre - directory contains a valid reference
+ //Post - The last modified time of the index has been returned
+
+ return directory->fileModified(QLatin1String("segments"));
+}
+
+
+bool IndexReader::indexExists(const QString& directory)
+{
+ //Func - Static method
+ // Checks if an index exists in the named directory
+ //Pre - directory != NULL
+ //Post - Returns true if an index exists at the specified directory->
+ // If the directory does not exist or if there is no index in it.
+ // false is returned.
+
+ CND_PRECONDITION(!directory.isEmpty(), "directory is NULL");
+ return QFile(directory + QLatin1String("/segments")).exists();
+}
+
+
+void IndexReader::setNorm(int32_t doc, const TCHAR* field, uint8_t value)
+{
+ SCOPED_LOCK_MUTEX(THIS_LOCK)
+ if(directoryOwner)
+ aquireWriteLock();
+ doSetNorm(doc, field, value);
+ hasChanges = true;
+}
+
+void IndexReader::aquireWriteLock()
+{
+ if (stale) {
+ _CLTHROWA(CL_ERR_IO,
+ "IndexReader out of date and no longer valid for delete, "
+ "undelete, or setNorm operations");
+ }
+
+ if (writeLock == NULL) {
+ LuceneLock* writeLock = directory->makeLock(QLatin1String("write.lock"));
+ if (!writeLock->obtain(IndexWriter::WRITE_LOCK_TIMEOUT)) // obtain write lock
+ _CLTHROWA(CL_ERR_IO,"Index locked for write"); // + writeLock
+ this->writeLock = writeLock;
+
+ // we have to check whether index has changed since this reader was opened.
+ // if so, this reader is no longer valid for deletion
+ if (SegmentInfos::readCurrentVersion(directory) > segmentInfos->getVersion()) {
+ stale = true;
+ this->writeLock->release();
+ _CLDELETE(this->writeLock);
+ _CLTHROWA(CL_ERR_IO,"IndexReader out of date and no longer valid "
+ "for delete, undelete, or setNorm operations");
+ }
+ }
+}
+
+
+void IndexReader::setNorm(int32_t doc, const TCHAR* field, qreal value)
+{
+ setNorm(doc, field, CL_NS(search)::Similarity::encodeNorm(value));
+}
+
+bool IndexReader::indexExists(const Directory* directory)
+{
+ //Func - Static method
+ // Checks if an index exists in the directory
+ //Pre - directory is a valid reference
+ //Post - Returns true if an index exists at the specified directory->
+ // If the directory does not exist or if there is no index in it.
+ // false is returned.
+
+ return directory->fileExists(QLatin1String("segments"));
+}
+
+TermDocs* IndexReader::termDocs(Term* term) const
+{
+ //Func - Returns an enumeration of all the documents which contain
+ // term. For each document, the document number, the frequency of
+ // the term in that document is also provided, for use in search scoring.
+ // Thus, this method implements the mapping:
+ //
+ // Term => <docNum, freq>*
+ // The enumeration is ordered by document number. Each document number
+ // is greater than all that precede it in the enumeration.
+ //Pre - term != NULL
+ //Post - A reference to TermDocs containing an enumeration of all found documents
+ // has been returned
+
+ CND_PRECONDITION(term != NULL, "term is NULL");
+
+ //Reference an instantiated TermDocs instance
+ TermDocs* _termDocs = termDocs();
+ //Seek all documents containing term
+ _termDocs->seek(term);
+ //return the enumaration
+ return _termDocs;
+}
+
+TermPositions* IndexReader::termPositions(Term* term) const
+{
+ //Func - Returns an enumeration of all the documents which contain term. For each
+ // document, in addition to the document number and frequency of the term in
+ // that document, a list of all of the ordinal positions of the term in the document
+ // is available. Thus, this method implements the mapping:
+ //
+ // Term => <docNum, freq,<pos 1, pos 2, ...pos freq-1>>*
+ //
+ // This positional information faciliates phrase and proximity searching.
+ // The enumeration is ordered by document number. Each document number is greater than
+ // all that precede it in the enumeration.
+ //Pre - term != NULL
+ //Post - A reference to TermPositions containing an enumeration of all found documents
+ // has been returned
+
+ CND_PRECONDITION(term != NULL, "term is NULL");
+
+ //Reference an instantiated termPositions instance
+ TermPositions* _termPositions = termPositions();
+ //Seek all documents containing term
+ _termPositions->seek(term);
+ //return the enumeration
+ return _termPositions;
+}
+
+void IndexReader::deleteDocument(const int32_t docNum)
+{
+ //Func - Deletes the document numbered docNum. Once a document is deleted it will not appear
+ // in TermDocs or TermPostitions enumerations. Attempts to read its field with the document
+ // method will result in an error. The presence of this document may still be reflected in
+ // the docFreq statistic, though this will be corrected eventually as the index is further modified.
+ //Pre - docNum >= 0
+ //Post - If successful the document identified by docNum has been deleted. If no writelock
+ // could be obtained an exception has been thrown stating that the index was locked or has no write access
+
+ SCOPED_LOCK_MUTEX(THIS_LOCK)
+
+ CND_PRECONDITION(docNum >= 0, "docNum is negative");
+
+ if (directoryOwner)
+ aquireWriteLock();
+
+ //Have the document identified by docNum deleted
+ doDelete(docNum);
+ hasChanges = true;
+}
+
+/**
+* Commit changes resulting from delete, undeleteAll, or setNorm operations
+*
+* @throws IOException
+*/
+void IndexReader::commit()
+{
+ SCOPED_LOCK_MUTEX(THIS_LOCK)
+ if(hasChanges){
+ if(directoryOwner){
+ {
+ SCOPED_LOCK_MUTEX(directory->THIS_LOCK) // in- & inter-process sync
+
+ LuceneLock* commitLock = directory->makeLock(QLatin1String("commit.lock"));
+ IndexReader::CommitLockWith cl(commitLock,this);
+ cl.run();
+ _CLDELETE(commitLock);
+
+ }
+ if (writeLock != NULL) {
+ writeLock->release(); // release write lock
+ _CLDELETE(writeLock);
+ }
+ }else
+ doCommit();
+ }
+ hasChanges = false;
+}
+
+
+void IndexReader::undeleteAll()
+{
+ SCOPED_LOCK_MUTEX(THIS_LOCK)
+ if(directoryOwner)
+ aquireWriteLock();
+ doUndeleteAll();
+ hasChanges = true;
+}
+
+int32_t IndexReader::deleteDocuments(Term* term)
+{
+ //Func - Deletes all documents containing term. This is useful if one uses a
+ // document field to hold a unique ID string for the document. Then to delete such
+ // a document, one merely constructs a term with the appropriate field and the unique
+ // ID string as its text and passes it to this method.
+ //Pre - term != NULL
+ //Post - All documents containing term have been deleted. The number of deleted documents
+ // has been returned
+
+ CND_PRECONDITION(term != NULL, "term is NULL");
+
+ //Search for the documents contain term
+ TermDocs* docs = termDocs(term);
+
+ //Check if documents have been found
+ if ( docs == NULL ){
+ return 0;
+ }
+
+ //initialize
+ int32_t Counter = 0;
+ try {
+ //iterate through the found documents
+ while (docs->next()) {
+ //Delete the document
+ deleteDocument(docs->doc());
+ ++Counter;
+ }
+ }_CLFINALLY(
+ //Close the enumeration
+ docs->close();
+ );
+
+ //Delete the enumeration of found documents
+ _CLDELETE( docs );
+
+ //Return the number of deleted documents
+ return Counter;
+}
+
+TCHAR** IndexReader::getFieldNames()
+{
+ CL_NS(util)::StringArrayWithDeletor array;
+ getFieldNames(IndexReader::ALL, array);
+
+ array.setDoDelete(false);
+ TCHAR** ret = _CL_NEWARRAY(TCHAR*,array.size()+1);
+ int j=0;
+ CL_NS(util)::StringArrayWithDeletor::iterator itr = array.begin();
+ while ( itr != array.end() ){
+ ret[j]=*itr;
+ ++j;++itr;
+ }
+ ret[j]=NULL;
+ return ret;
+}
+
+TCHAR** IndexReader::getFieldNames(bool indexed)
+{
+ CL_NS(util)::StringArrayWithDeletor array;
+ getFieldNames(indexed?IndexReader::INDEXED:IndexReader::UNINDEXED, array);
+
+ array.setDoDelete(false);
+ TCHAR** ret = _CL_NEWARRAY(TCHAR*,array.size()+1);
+ int j=0;
+ CL_NS(util)::StringArrayWithDeletor::iterator itr = array.begin();
+ while ( itr != array.end() ){
+ ret[j]=*itr;
+ ++j;++itr;
+ }
+ ret[j]=NULL;
+ return ret;
+}
+
+void IndexReader::close()
+{
+ //Func - Closes files associated with this index and also saves any new deletions to disk.
+ // No other methods should be called after this has been called.
+ //Pre - true
+ //Post - All files associated with this index have been deleted and new deletions have been
+ // saved to disk
+ SCOPED_LOCK_MUTEX(THIS_LOCK)
+
+ CloseCallbackMap::iterator iter;
+ for (iter = closeCallbacks.begin(); iter != closeCallbacks.end(); iter++) {
+ CloseCallback callback = *iter->first;
+ callback(this, iter->second);
+ }
+
+ commit();
+ doClose();
+
+ if(closeDirectory) {
+ directory->close();
+ _CLDECDELETE(directory);
+ }
+}
+
+bool IndexReader::isLocked(Directory* directory)
+{
+ //Func - Static method
+ // Checks if the index in the directory is currently locked.
+ //Pre - directory is a valid reference to a directory to check for a lock
+ //Post - Returns true if the index in the named directory is locked otherwise false
+
+ //Check the existence of the file write.lock and return true when it does and false
+ //when it doesn't
+ LuceneLock* l1 = directory->makeLock(QLatin1String("write.lock"));
+ LuceneLock* l2 = directory->makeLock(QLatin1String("commit.lock"));
+
+ bool ret = l1->isLocked() || l2->isLocked();
+
+ _CLDELETE(l1);
+ _CLDELETE(l2);
+ return ret;
+}
+
+bool IndexReader::isLocked(const QString& directory)
+{
+ //Func - Static method
+ // Checks if the index in the named directory is currently locked.
+ //Pre - directory != NULL and contains the directory to check for a lock
+ //Post - Returns true if the index in the named directory is locked otherwise false
+
+ CND_PRECONDITION(!directory.isEmpty(), "directory is NULL");
+
+ Directory* dir = FSDirectory::getDirectory(directory, false);
+ bool ret = isLocked(dir);
+ dir->close();
+ _CLDECDELETE(dir);
+
+ return ret;
+}
+
+/** Returns true if there are norms stored for this field. */
+bool IndexReader::hasNorms(const TCHAR* field)
+{
+ // backward compatible implementation.
+ // SegmentReader has an efficient implementation.
+ return norms(field) != NULL;
+}
+
+void IndexReader::unlock(const QString& path)
+{
+ FSDirectory* dir = FSDirectory::getDirectory(path, false);
+ unlock(dir);
+ dir->close();
+ _CLDECDELETE(dir);
+}
+
+void IndexReader::unlock(Directory* directory)
+{
+ //Func - Static method
+ // Forcibly unlocks the index in the named directory->
+ // Caution: this should only be used by failure recovery code,
+ // when it is known that no other process nor thread is in fact
+ // currently accessing this index.
+ //Pre - directory is a valid reference to a directory
+ //Post - The directory has been forcibly unlocked
+ LuceneLock* lock;
+
+ lock = directory->makeLock(QLatin1String("write.lock"));
+ lock->release();
+ _CLDELETE(lock);
+
+ lock = directory->makeLock(QLatin1String("commit.lock"));
+ lock->release();
+ _CLDELETE(lock);
+}
+
+bool IndexReader::isLuceneFile(const QString& filename)
+{
+ if (filename.isNull() || filename.isEmpty())
+ return false;
+
+ size_t len = filename.length();
+ if (len < 6) //need at least x.frx
+ return false;
+
+ if (filename == QLatin1String("segments"))
+ return true;
+
+ if (filename == QLatin1String("segments.new"))
+ return true;
+
+ if (filename == QLatin1String("deletable"))
+ return true;
+
+ QStringList extList;
+ extList << QLatin1String(".cfs")
+ << QLatin1String(".fnm") << QLatin1String(".fdx") << QLatin1String(".fdt")
+ << QLatin1String(".tii") << QLatin1String(".tis") << QLatin1String(".frq")
+ << QLatin1String(".prx") << QLatin1String(".del") << QLatin1String(".tvx")
+ << QLatin1String(".tvd") << QLatin1String(".tvf") << QLatin1String(".tvp");
+
+ QString suffix = filename.right(4);
+ if (extList.contains(suffix, Qt::CaseInsensitive))
+ return true;
+
+ if (suffix.leftRef(2) == QLatin1String(".f")) {
+ suffix = suffix.remove(0, 2);
+ if (suffix.length() > 0) {
+ for (int i = 0; i < suffix.length(); ++i) {
+ if (!suffix.at(i).isDigit())
+ return false;
+ }
+ return true;
+ }
+ }
+ return false;
+}
+
+void IndexReader::addCloseCallback(CloseCallback callback, void* parameter)
+{
+ closeCallbacks.put(callback, parameter);
+}
+
+// #pragma mark -- IndexReader::LockWith
+
+IndexReader::LockWith::LockWith(CL_NS(store)::LuceneLock* lock, CL_NS(store)::Directory* dir)
+ : CL_NS(store)::LuceneLockWith<IndexReader*>(lock, IndexWriter::COMMIT_LOCK_TIMEOUT)
+{
+ this->directory = dir;
+}
+
+// #pragma mark -- IndexReader::CommitLockWith
+
+IndexReader::CommitLockWith::CommitLockWith(CL_NS(store)::LuceneLock* lock, IndexReader* r)
+ : CL_NS(store)::LuceneLockWith<void>(lock,IndexWriter::COMMIT_LOCK_TIMEOUT)
+ , reader(r)
+{
+}
+
+void IndexReader::CommitLockWith::doBody()
+{
+ reader->doCommit();
+ reader->segmentInfos->write(reader->getDirectory());
+}
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/index/IndexReader.h b/src/3rdparty/clucene/src/CLucene/index/IndexReader.h
new file mode 100644
index 0000000..352d16e
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/IndexReader.h
@@ -0,0 +1,485 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright(C) 2007, 2008 by Nokia Corporation and/or its subsidiary(-ies), all rights reserved.
+*/
+#ifndef _lucene_index_IndexReader_
+#define _lucene_index_IndexReader_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include <QtCore/QString>
+
+#include "CLucene/store/Directory.h"
+#include "CLucene/store/FSDirectory.h"
+#include "CLucene/store/Lock.h"
+#include "CLucene/document/Document.h"
+#include "CLucene/index/TermVector.h"
+#include "SegmentInfos.h"
+#include "Terms.h"
+
+
+CL_NS_DEF(index)
+
+
+/** IndexReader is an abstract class, providing an interface for accessing an
+ index. Search of an index is done entirely through this abstract interface,
+ so that any subclass which implements it is searchable.
+
+ <p> Concrete subclasses of IndexReader are usually constructed with a call to
+ one of the static <code>open()</code> methods, e.g. {@link #open(String)}.
+
+ <p> For efficiency, in this API documents are often referred to via
+ <i>document numbers</i>, non-negative integers which each name a unique
+ document in the index. These document numbers are ephemeral--they may change
+ as documents are added to and deleted from an index. Clients should thus not
+ rely on a given document having the same number between sessions.
+
+ <p> An IndexReader can be opened on a directory for which an IndexWriter is
+ opened already, but it cannot be used to delete documents from the index then.
+*/
+class IndexReader : LUCENE_BASE
+{
+public:
+ //Callback for classes that need to know if IndexReader is closing.
+ typedef void (*CloseCallback)(IndexReader*, void*);
+
+ class CloseCallbackCompare:public CL_NS(util)::Compare::_base{
+ public:
+ bool operator()( CloseCallback t1, CloseCallback t2 ) const{
+ return t1 > t2;
+ }
+ static void doDelete(CloseCallback dummy){
+ }
+ };
+
+
+ enum FieldOption {
+ // all fields
+ ALL = 1,
+ // all indexed fields
+ INDEXED = 2,
+ // all fields which are not indexed
+ UNINDEXED = 4,
+ // all fields which are indexed with termvectors enables
+ INDEXED_WITH_TERMVECTOR = 8,
+ // all fields which are indexed but don't have termvectors enabled
+ INDEXED_NO_TERMVECTOR = 16,
+ // all fields where termvectors are enabled. Please note that only standard termvector fields are returned
+ TERMVECTOR = 32,
+ // all field with termvectors wiht positions enabled
+ TERMVECTOR_WITH_POSITION = 64,
+ // all fields where termvectors with offset position are set
+ TERMVECTOR_WITH_OFFSET = 128,
+ // all fields where termvectors with offset and position values set
+ TERMVECTOR_WITH_POSITION_OFFSET = 256
+ };
+
+
+private:
+ bool stale;
+ bool hasChanges;
+ bool closeDirectory;
+ bool directoryOwner;
+
+ SegmentInfos* segmentInfos;
+ CL_NS(store)::Directory* directory;
+ CL_NS(store)::LuceneLock* writeLock;
+
+ typedef CL_NS(util)::CLSet<CloseCallback, void*, CloseCallbackCompare,
+ CloseCallbackCompare> CloseCallbackMap;
+ CloseCallbackMap closeCallbacks;
+
+ /** Internal use. Implements commit */
+ virtual void doCommit() = 0;
+
+ /**
+ * Tries to acquire the WriteLock on this directory.
+ * this method is only valid if this IndexReader is directory owner.
+ *
+ * @throws IOException If WriteLock cannot be acquired.
+ */
+ void aquireWriteLock();
+protected:
+ /**
+ * Constructor used if IndexReader is not owner of its directory.
+ * This is used for IndexReaders that are used within other IndexReaders that take care or locking directories.
+ *
+ * @param directory Directory where IndexReader files reside.
+ */
+ IndexReader(CL_NS(store)::Directory* dir);
+
+ /**
+ * Constructor used if IndexReader is owner of its directory.
+ * If IndexReader is owner of its directory, it locks its directory in case of write operations.
+ *
+ * @param directory Directory where IndexReader files reside.
+ * @param segmentInfos Used for write-l
+ * @param closeDirectory
+ */
+ IndexReader(CL_NS(store)::Directory* directory, SegmentInfos* segmentInfos, bool closeDirectory);
+
+
+ /// Implements close.
+ virtual void doClose() = 0;
+
+ /** Implements setNorm in subclass.*/
+ virtual void doSetNorm(int32_t doc, const TCHAR* field, uint8_t value) = 0;
+
+ /** Implements actual undeleteAll() in subclass. */
+ virtual void doUndeleteAll() = 0;
+
+
+ /** Implements deletion of the document numbered <code>docNum</code>.
+ * Applications should call {@link #deleteDocument(int32_t)} or {@link #deleteDocuments(Term*)}.
+ */
+ virtual void doDelete(const int32_t docNum) = 0;
+
+public:
+
+ DEFINE_MUTEX(THIS_LOCK)
+
+ ///Do not access this directly, only public so that MultiReader can access it
+ virtual void commit();
+
+
+ /** Undeletes all documents currently marked as deleted in this index.*/
+ void undeleteAll();
+
+ /**
+ * Get a list of unique field names that exist in this index and have the specified
+ * field option information.
+ * @param fldOption specifies which field option should be available for the returned fields
+ * @return Collection of Strings indicating the names of the fields.
+ * @see IndexReader.FieldOption
+ */
+ virtual void getFieldNames(FieldOption fldOption, CL_NS(util)::StringArrayWithDeletor& retarray) = 0;
+
+ _CL_DEPRECATED( getFieldNames(FieldOption, StringArrayWithDeletor&) ) virtual TCHAR** getFieldNames();
+ _CL_DEPRECATED( getFieldNames(FieldOption, StringArrayWithDeletor&) ) virtual TCHAR** getFieldNames(bool indexed);
+
+ /** Returns the byte-encoded normalization factor for the named field of
+ * every document. This is used by the search code to score documents.
+ *
+ * The number of bytes returned is the size of the IndexReader->maxDoc()
+ * MEMORY: The values are cached, so don't delete the returned byte array.
+ * @see Field#setBoost(qreal)
+ */
+ virtual uint8_t* norms(const TCHAR* field) = 0;
+
+
+ /** Reads the byte-encoded normalization factor for the named field of every
+ * document. This is used by the search code to score documents.
+ *
+ * @see Field#setBoost(qreal)
+ */
+ virtual void norms(const TCHAR* field, uint8_t* bytes) = 0;
+
+ /** Expert: Resets the normalization factor for the named field of the named
+ * document.
+ *
+ * @see #norms(TCHAR*)
+ * @see Similarity#decodeNorm(uint8_t)
+ */
+ void setNorm(int32_t doc, const TCHAR* field, qreal value);
+
+ /** Expert: Resets the normalization factor for the named field of the named
+ * document. The norm represents the product of the field's {@link
+ * Field#setBoost(qreal) boost} and its {@link Similarity#lengthNorm(TCHAR*,
+ * int32_t) length normalization}. Thus, to preserve the length normalization
+ * values when resetting this, one should base the new value upon the old.
+ *
+ * @see #norms(TCHAR*)
+ * @see Similarity#decodeNorm(uint8_t)
+ */
+ void setNorm(int32_t doc, const TCHAR* field, uint8_t value);
+
+ /// Release the write lock, if needed.
+ virtual ~IndexReader();
+
+ /// Returns an IndexReader reading the index in an FSDirectory in the named path.
+ static IndexReader* open(const QString& path);
+
+ /// Returns an IndexReader reading the index in the given Directory.
+ static IndexReader* open( CL_NS(store)::Directory* directory, bool closeDirectory=false);
+
+ /**
+ * Returns the time the index in the named directory was last modified.
+ * Do not use this to check whether the reader is still up-to-date, use
+ * {@link #isCurrent()} instead.
+ */
+ static uint64_t lastModified(const QString& directory);
+
+ /**
+ * Returns the time the index in the named directory was last modified.
+ * Do not use this to check whether the reader is still up-to-date, use
+ * {@link #isCurrent()} instead.
+ */
+ static uint64_t lastModified(const CL_NS(store)::Directory* directory);
+
+
+ /**
+ * Reads version number from segments files. The version number is
+ * initialized with a timestamp and then increased by one for each change of
+ * the index.
+ *
+ * @param directory where the index resides.
+ * @return version number.
+ * @throws IOException if segments file cannot be read
+ */
+ static int64_t getCurrentVersion(CL_NS(store)::Directory* directory);
+
+ /**
+ * Reads version number from segments files. The version number is
+ * initialized with a timestamp and then increased by one for each change of
+ * the index.
+ *
+ * @param directory where the index resides.
+ * @return version number.
+ * @throws IOException if segments file cannot be read
+ */
+ static int64_t getCurrentVersion(const QString& directory);
+
+ /**
+ * Version number when this IndexReader was opened.
+ */
+ int64_t getVersion();
+
+ /**
+ * Check whether this IndexReader still works on a current version of the index.
+ * If this is not the case you will need to re-open the IndexReader to
+ * make sure you see the latest changes made to the index.
+ *
+ * @throws IOException
+ */
+ bool isCurrent();
+
+
+ /**
+ * Return an array of term frequency vectors for the specified document.
+ * The array contains a vector for each vectorized field in the document.
+ * Each vector contains terms and frequencies for all terms in a given vectorized field.
+ * If no such fields existed, the method returns null. The term vectors that are
+ * returned my either be of type TermFreqVector or of type TermPositionsVector if
+ * positions or offsets have been stored.
+ *
+ * @param docNumber document for which term frequency vectors are returned
+ * @return array of term frequency vectors. May be null if no term vectors have been
+ * stored for the specified document.
+ * @throws IOException if index cannot be accessed
+ * @see org.apache.lucene.document.Field.TermVector
+ */
+ virtual bool getTermFreqVectors(int32_t docNumber, Array<TermFreqVector*>& result) =0;
+
+ /**
+ * Return a term frequency vector for the specified document and field. The
+ * returned vector contains terms and frequencies for the terms in
+ * the specified field of this document, if the field had the storeTermVector
+ * flag set. If termvectors had been stored with positions or offsets, a
+ * TermPositionsVector is returned.
+ *
+ * @param docNumber document for which the term frequency vector is returned
+ * @param field field for which the term frequency vector is returned.
+ * @return term frequency vector May be null if field does not exist in the specified
+ * document or term vector was not stored.
+ * @throws IOException if index cannot be accessed
+ * @see org.apache.lucene.document.Field.TermVector
+ */
+ virtual TermFreqVector* getTermFreqVector(int32_t docNumber, const TCHAR* field) = 0;
+
+ /**
+ * Returns <code>true</code> if an index exists at the specified directory.
+ * If the directory does not exist or if there is no index in it.
+ * @param directory the directory to check for an index
+ * @return <code>true</code> if an index exists; <code>false</code> otherwise
+ */
+ static bool indexExists(const QString& directory);
+
+ /**
+ * Returns <code>true</code> if an index exists at the specified directory.
+ * If the directory does not exist or if there is no index in it.
+ * @param directory the directory to check for an index
+ * @return <code>true</code> if an index exists; <code>false</code> otherwise
+ * @throws IOException if there is a problem with accessing the index
+ */
+ static bool indexExists(const CL_NS(store)::Directory* directory);
+
+ /** Returns the number of documents in this index. */
+ virtual int32_t numDocs() = 0;
+
+ /** Returns one greater than the largest possible document number.
+ * This may be used to, e.g., determine how big to allocate an array which
+ * will have an element for every document number in an index.
+ */
+ virtual int32_t maxDoc() const = 0;
+
+ /** Gets the stored fields of the <code>n</code><sup>th</sup>
+ * <code>Document</code> in this index.
+ * The fields are not cleared before retrieving the document, so the
+ * object should be new or just cleared.
+ */
+ virtual bool document(int32_t n, CL_NS(document)::Document*) =0;
+
+ _CL_DEPRECATED( document(i, document) ) CL_NS(document)::Document* document(const int32_t n);
+
+ /** Returns true if document <i>n</i> has been deleted */
+ virtual bool isDeleted(const int32_t n) = 0;
+
+ /** Returns true if any documents have been deleted */
+ virtual bool hasDeletions() const = 0;
+
+ /** Returns true if there are norms stored for this field. */
+ virtual bool hasNorms(const TCHAR* field);
+
+ /** Returns an enumeration of all the terms in the index.
+ * The enumeration is ordered by Term.compareTo(). Each term
+ * is greater than all that precede it in the enumeration.
+ * @memory Caller must clean up
+ */
+ virtual TermEnum* terms() const =0;
+
+ /** Returns an enumeration of all terms after a given term.
+ * The enumeration is ordered by Term.compareTo(). Each term
+ * is greater than all that precede it in the enumeration.
+ * @memory Caller must clean up
+ */
+ virtual TermEnum* terms(const Term* t) const = 0;
+
+ /** Returns the number of documents containing the term <code>t</code>. */
+ virtual int32_t docFreq(const Term* t) const = 0;
+
+ /* Returns an unpositioned TermPositions enumerator.
+ * @memory Caller must clean up
+ */
+ virtual TermPositions* termPositions() const = 0;
+
+ /** Returns an enumeration of all the documents which contain
+ * <code>term</code>. For each document, in addition to the document number
+ * and frequency of the term in that document, a list of all of the ordinal
+ * positions of the term in the document is available. Thus, this method
+ * implements the mapping:
+ *
+ * <p><ul>
+ * Term &nbsp;&nbsp; =&gt; &nbsp;&nbsp; &lt;docNum, freq,
+ * &lt;pos<sub>1</sub>, pos<sub>2</sub>, ...
+ * pos<sub>freq-1</sub>&gt;
+ * &gt;<sup>*</sup>
+ * </ul>
+ * <p> This positional information faciliates phrase and proximity searching.
+ * <p>The enumeration is ordered by document number. Each document number is
+ * greater than all that precede it in the enumeration.
+ * @memory Caller must clean up
+ */
+ TermPositions* termPositions(Term* term) const;
+
+ /** Returns an unpositioned {@link TermDocs} enumerator.
+ * @memory Caller must clean up
+ */
+ virtual TermDocs* termDocs() const = 0;
+
+ /** Returns an enumeration of all the documents which contain
+ * <code>term</code>. For each document, the document number, the frequency of
+ * the term in that document is also provided, for use in search scoring.
+ * Thus, this method implements the mapping:
+ * <p><ul>Term &nbsp;&nbsp; =&gt; &nbsp;&nbsp; &lt;docNum, freq&gt;<sup>*</sup></ul>
+ * <p>The enumeration is ordered by document number. Each document number
+ * is greater than all that precede it in the enumeration.
+ * @memory Caller must clean up
+ */
+ TermDocs* termDocs(Term* term) const;
+
+ /** Deletes the document numbered <code>docNum</code>. Once a document is
+ * deleted it will not appear in TermDocs or TermPostitions enumerations.
+ * Attempts to read its field with the {@link #document}
+ * method will result in an error. The presence of this document may still be
+ * reflected in the {@link #docFreq} statistic, though
+ * this will be corrected eventually as the index is further modified.
+ */
+ void deleteDocument(const int32_t docNum);
+
+ ///@deprecated. Use deleteDocument instead.
+ _CL_DEPRECATED( deleteDocument ) void deleteDoc(const int32_t docNum)
+ { deleteDocument(docNum); }
+
+ /** Deletes all documents containing <code>term</code>.
+ * This is useful if one uses a document field to hold a unique ID string for
+ * the document. Then to delete such a document, one merely constructs a
+ * term with the appropriate field and the unique ID string as its text and
+ * passes it to this method.
+ * See {@link #deleteDocument(int)} for information about when this deletion will
+ * become effective.
+ * @return the number of documents deleted
+ */
+ int32_t deleteDocuments(Term* term);
+
+ ///@deprecated. Use deleteDocuments instead.
+ _CL_DEPRECATED( deleteDocuments ) int32_t deleteTerm(Term* term){ return deleteDocuments(term); }
+
+ /**
+ * Closes files associated with this index and also saves any new deletions to disk.
+ * No other methods should be called after this has been called.
+ */
+ void close();
+
+ ///Checks if the index in the named directory is currently locked.
+ static bool isLocked(CL_NS(store)::Directory* directory);
+
+ ///Checks if the index in the named directory is currently locked.
+ static bool isLocked(const QString& directory);
+
+
+ ///Forcibly unlocks the index in the named directory.
+ ///Caution: this should only be used by failure recovery code,
+ ///when it is known that no other process nor thread is in fact
+ ///currently accessing this index.
+ static void unlock(CL_NS(store)::Directory* directory);
+ static void unlock(const QString& path);
+
+ /** Returns the directory this index resides in. */
+ CL_NS(store)::Directory* getDirectory() { return directory; }
+
+ /** Returns true if the file is a lucene filename (based on extension or filename) */
+ static bool isLuceneFile(const QString& filename);
+
+ /**
+ * For classes that need to know when the IndexReader closes (such as caches, etc),
+ * should pass their callback function to this.
+ */
+ void addCloseCallback(CloseCallback callback, void* parameter);
+
+protected:
+ class LockWith : public CL_NS(store)::LuceneLockWith<IndexReader*>
+ {
+ public:
+ LockWith(CL_NS(store)::LuceneLock* lock, CL_NS(store)::Directory* dir);
+
+ //Reads the segmentinfo file and depending on the number of segments found
+ //it returns a MultiReader or a SegmentReader
+ IndexReader* doBody();
+
+ private:
+ CL_NS(store)::Directory* directory;
+ };
+ friend class IndexReader::LockWith;
+
+ class CommitLockWith : public CL_NS(store)::LuceneLockWith<void>
+ {
+ public:
+ CommitLockWith(CL_NS(store)::LuceneLock* lock, IndexReader* r);
+ void doBody();
+
+ private:
+ IndexReader* reader;
+ };
+ friend class IndexReader::CommitLockWith;
+};
+
+CL_NS_END
+#endif
+
+
diff --git a/src/3rdparty/clucene/src/CLucene/index/IndexWriter.cpp b/src/3rdparty/clucene/src/CLucene/index/IndexWriter.cpp
new file mode 100644
index 0000000..5504cf6
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/IndexWriter.cpp
@@ -0,0 +1,697 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright(C) 2007, 2008 by Nokia Corporation and/or its subsidiary(-ies), all rights reserved.
+*/
+#include "CLucene/StdHeader.h"
+#include "IndexWriter.h"
+
+#include "CLucene/document/Document.h"
+#include "CLucene/store/Directory.h"
+#include "CLucene/store/Lock.h"
+#include "CLucene/util/VoidList.h"
+#include "DocumentWriter.h"
+#include "SegmentInfos.h"
+#include "SegmentMerger.h"
+
+CL_NS_USE(store)
+CL_NS_USE(util)
+CL_NS_USE(document)
+CL_NS_USE(analysis)
+CL_NS_DEF(index)
+
+const QLatin1String IndexWriter::WRITE_LOCK_NAME("write.lock");
+const QLatin1String IndexWriter::COMMIT_LOCK_NAME("commit.lock");
+
+IndexWriter::IndexWriter(const QString& path, Analyzer* a, const bool create,
+ const bool _closeDir)
+ : directory(FSDirectory::getDirectory(path, create))
+ , analyzer(a)
+ , segmentInfos(true)
+ , closeDir(_closeDir)
+{
+ //Func - Constructor
+ // Constructs an IndexWriter for the index in path.
+ //Pre - path != NULL and contains a named directory path
+ // a holds a valid reference to an analyzer and analyzes the text to
+ // be indexed create indicates if the indexWriter must create a new
+ // index located at path or just open it
+ //Post - If create is true, then a new, empty index has been created in
+ // path, replacing the index already there, if any. The named
+ // directory path is owned by this Instance
+
+ CND_PRECONDITION(!path.isEmpty(), "path is NULL");
+
+ //Continue initializing the instance by _IndexWriter
+ _IndexWriter(create);
+}
+
+IndexWriter::IndexWriter(Directory* d, Analyzer* a, const bool create,
+ const bool _closeDir)
+ : directory(_CL_POINTER(d))
+ , analyzer(a)
+ , segmentInfos(true)
+ , closeDir(_closeDir)
+{
+ //Func - Constructor
+ // Constructs an IndexWriter for the index in path.
+ //Pre - d contains a valid reference to a directory
+ // a holds a valid reference to an analyzer and analyzes the text to
+ // be indexed create indicates if the indexWriter must create a new
+ // index located at path or just open it
+ //Post - If create is true, then a new, empty index has been created in
+ // path, replacing the index already there, if any. The directory d
+ // is not owned by this Instance
+
+ //Continue initializing the instance by _IndexWriter
+ _IndexWriter ( create );
+}
+
+void IndexWriter::_IndexWriter(const bool create)
+{
+ //Func - Initialises the instances
+ //Pre - create indicates if the indexWriter must create a new index
+ // located at path or just open it
+
+ similarity = CL_NS(search)::Similarity::getDefault();
+
+ useCompoundFile = true;
+ if ( directory->getDirectoryType() == RAMDirectory::DirectoryType() )
+ useCompoundFile = false;
+
+ //Create a ramDirectory
+ ramDirectory = _CLNEW TransactionalRAMDirectory;
+
+ CND_CONDITION(ramDirectory != NULL, "ramDirectory is NULL");
+
+ //Initialize the writeLock to
+ writeLock = NULL;
+
+ //initialise the settings...
+ maxFieldLength = DEFAULT_MAX_FIELD_LENGTH;
+ mergeFactor = DEFAULT_MERGE_FACTOR;
+ maxMergeDocs = DEFAULT_MAX_MERGE_DOCS;
+ writeLockTimeout = WRITE_LOCK_TIMEOUT;
+ commitLockTimeout = COMMIT_LOCK_TIMEOUT;
+ minMergeDocs = DEFAULT_MAX_BUFFERED_DOCS;
+ termIndexInterval = DEFAULT_TERM_INDEX_INTERVAL;
+
+ //Create a new lock using the name "write.lock"
+ LuceneLock* newLock = directory->makeLock(IndexWriter::WRITE_LOCK_NAME);
+
+ //Condition check to see if newLock has been allocated properly
+ CND_CONDITION(newLock != NULL,
+ "No memory could be allocated for LuceneLock newLock");
+
+ //Try to obtain a write lock
+ if (!newLock->obtain(writeLockTimeout)){
+ //Write lock could not be obtained so delete it
+ _CLDELETE(newLock);
+ //Reset the instance
+ _finalize();
+ //throw an exception because no writelock could be created or obtained
+ _CLTHROWA(CL_ERR_IO, "Index locked for write or no write access." );
+ }
+
+ //The Write Lock has been obtained so save it for later use
+ this->writeLock = newLock;
+
+ //Create a new lock using the name "commit.lock"
+ LuceneLock* lock = directory->makeLock(IndexWriter::COMMIT_LOCK_NAME);
+
+ //Condition check to see if lock has been allocated properly
+ CND_CONDITION(lock != NULL, "No memory could be allocated for LuceneLock lock");
+
+ LockWith2 with(lock, commitLockTimeout, this, NULL, create);
+ {
+ SCOPED_LOCK_MUTEX(directory->THIS_LOCK) // in- & inter-process sync
+ with.run();
+ }
+
+ //Release the commit lock
+ _CLDELETE(lock);
+
+ isOpen = true;
+}
+
+IndexWriter::~IndexWriter()
+{
+ //Func - Destructor
+ //Pre - true
+ //Post - The instance has been destroyed
+ close();
+ _finalize();
+}
+
+void IndexWriter::close()
+{
+ //Func - Flushes all changes to an index, closes all associated files, and
+ // closes the directory that the index is stored in.
+ //Pre - closeDir indicates if the directory must be closed or not
+ //Post - All the changes have been flushed to disk and the write lock has
+ // been released. The ramDirectory has also been closed. The
+ // directory has been closed if the reference count of the directory
+ // reaches zero
+
+ SCOPED_LOCK_MUTEX(THIS_LOCK)
+ if (isOpen) {
+ //Flush the Ram Segments
+ flushRamSegments();
+ //Close the ram directory
+ if (ramDirectory != NULL) {
+ ramDirectory->close();
+ _CLDECDELETE(ramDirectory);
+ }
+
+ //Check if this instance must close the directory
+ if (closeDir)
+ directory->close();
+ _CLDECDELETE(directory);
+
+ // release write lock
+ if (writeLock != NULL) {
+ writeLock->release();
+ _CLDELETE(writeLock);
+ }
+ isOpen = false;
+ }
+}
+
+void IndexWriter::_finalize()
+{
+ //Func - Releases all the resources of the instance
+ //Pre - true
+ //Post - All the releases have been released
+
+ if(writeLock != NULL) {
+ //release write lock
+ writeLock->release();
+ _CLDELETE( writeLock );
+ }
+
+ //Delete the ramDirectory
+ if (ramDirectory != NULL) {
+ ramDirectory->close();
+ _CLDECDELETE(ramDirectory);
+ }
+}
+
+int32_t IndexWriter::docCount()
+{
+ //Func - Counts the number of documents in the index
+ //Pre - true
+ //Post - The number of documents have been returned
+
+ SCOPED_LOCK_MUTEX(THIS_LOCK)
+
+ //Initialize count
+ int32_t count = 0;
+
+ //Iterate through all segmentInfos
+ for (int32_t i = 0; i < segmentInfos.size(); i++) {
+ //Get the i-th SegmentInfo
+ SegmentInfo* si = segmentInfos.info(i);
+ //Retrieve the number of documents of the segment and add it to count
+ count += si->docCount;
+ }
+ return count;
+}
+
+void IndexWriter::addDocument(Document* doc, Analyzer* analyzer)
+{
+ //Func - Adds a document to the index
+ //Pre - doc contains a valid reference to a document
+ // ramDirectory != NULL
+ //Post - The document has been added to the index of this IndexWriter
+ CND_PRECONDITION(ramDirectory != NULL, "ramDirectory is NULL");
+
+ if (analyzer == NULL)
+ analyzer = this->analyzer;
+
+ ramDirectory->transStart();
+ try {
+ QString segmentName = newSegmentName();
+ CND_CONDITION(!segmentName.isEmpty(), "segmentName is NULL");
+ try {
+ //Create the DocumentWriter using a ramDirectory and analyzer
+ // supplied by the IndexWriter (this).
+ DocumentWriter* dw = _CLNEW DocumentWriter(ramDirectory, analyzer,
+ this );
+ CND_CONDITION(dw != NULL, "dw is NULL");
+ try {
+ //Add the client-supplied document to the new segment.
+ dw->addDocument(segmentName, doc);
+ } _CLFINALLY (
+ _CLDELETE(dw);
+ );
+
+ //Create a new SegmentInfo instance about this new segment.
+ SegmentInfo* si = _CLNEW SegmentInfo(segmentName, 1, ramDirectory);
+ CND_CONDITION(si != NULL, "Si is NULL");
+ {
+ SCOPED_LOCK_MUTEX(THIS_LOCK)
+
+ //Add the info object for this particular segment to the list
+ // of all segmentInfos->
+ segmentInfos.add(si);
+
+ //Check to see if the segments must be merged
+ maybeMergeSegments();
+ }
+ } _CLFINALLY()
+ } catch (...) {
+ ramDirectory->transAbort();
+ throw;
+}
+ ramDirectory->transCommit();
+}
+
+void IndexWriter::optimize()
+{
+ //Func - Optimizes the index for which this Instance is responsible
+ //Pre - true
+ //Post -
+ SCOPED_LOCK_MUTEX(THIS_LOCK)
+
+ //Flush the RamSegments to disk
+ flushRamSegments();
+ while (segmentInfos.size() > 1
+ || (segmentInfos.size() == 1
+ && (SegmentReader::hasDeletions(segmentInfos.info(0))
+ || segmentInfos.info(0)->getDir()!=directory
+ || (useCompoundFile
+ && (!SegmentReader::usesCompoundFile(segmentInfos.info(0))
+ || SegmentReader::hasSeparateNorms(segmentInfos.info(0))))))) {
+ int32_t minSegment = segmentInfos.size() - mergeFactor;
+ mergeSegments(minSegment < 0 ? 0 : minSegment);
+ }
+}
+
+
+QString IndexWriter::newSegmentName()
+{
+ SCOPED_LOCK_MUTEX(THIS_LOCK)
+ return QLatin1Char('_') + QString::number(segmentInfos.counter++, 36);
+}
+
+void IndexWriter::flushRamSegments()
+{
+ //Func - Merges all RAM-resident segments.
+ //Pre - ramDirectory != NULL
+ //Post - The RAM-resident segments have been merged to disk
+
+ CND_PRECONDITION(ramDirectory != NULL, "ramDirectory is NULL");
+
+ int32_t minSegment = segmentInfos.size()-1; //don't make this unsigned...
+ CND_CONDITION(minSegment >= -1, "minSegment must be >= -1");
+
+ int32_t docCount = 0;
+ //Iterate through all the segements and check if the directory is a ramDirectory
+ while (minSegment >= 0 &&
+ segmentInfos.info(minSegment)->getDir() == ramDirectory) {
+ docCount += segmentInfos.info(minSegment)->docCount;
+ minSegment--;
+ }
+ if (minSegment < 0 || // add one FS segment?
+ (docCount + segmentInfos.info(minSegment)->docCount) > mergeFactor ||
+ !(segmentInfos.info(segmentInfos.size()-1)->getDir() == ramDirectory))
+ minSegment++;
+
+ CND_CONDITION(minSegment >= 0, "minSegment must be >= 0");
+ if (minSegment >= segmentInfos.size())
+ return; // none to merge
+ mergeSegments(minSegment);
+}
+
+void IndexWriter::maybeMergeSegments() {
+ //Func - Incremental Segment Merger
+ //Pre -
+ //Post -
+
+ int64_t targetMergeDocs = minMergeDocs;
+
+ // find segments smaller than current target size
+ while (targetMergeDocs <= maxMergeDocs) {
+ int32_t minSegment = segmentInfos.size();
+ int32_t mergeDocs = 0;
+
+ while (--minSegment >= 0) {
+ SegmentInfo* si = segmentInfos.info(minSegment);
+ if (si->docCount >= targetMergeDocs)
+ break;
+ mergeDocs += si->docCount;
+ }
+
+ if (mergeDocs >= targetMergeDocs){
+ // found a merge to do
+ mergeSegments(minSegment+1);
+ }else
+ break;
+
+ //increase target size
+ targetMergeDocs *= mergeFactor;
+ }
+}
+
+void IndexWriter::mergeSegments(const uint32_t minSegment)
+{
+ mergeSegments(minSegment, segmentInfos.size());
+}
+
+void IndexWriter::mergeSegments(const uint32_t minSegment, const uint32_t end)
+{
+ CLVector<SegmentReader*> segmentsToDelete(false);
+ QString mergedName = newSegmentName();
+#ifdef _CL_DEBUG_INFO
+ fprintf(_CL_DEBUG_INFO, "merging segments\n");
+#endif
+ SegmentMerger merger(this, mergedName);
+ for (size_t i = minSegment; i < end; i++) {
+ SegmentInfo* si = segmentInfos.info(i);
+#ifdef _CL_DEBUG_INFO
+ fprintf(_CL_DEBUG_INFO, " %s (%d docs)\n",
+ si->name.toLocal8Bit().constData(), si->docCount);
+#endif
+ SegmentReader* reader = _CLNEW SegmentReader(si);
+ merger.add(reader);
+ // if we own the directory
+ if ((reader->getDirectory() == this->directory)
+ || (reader->getDirectory() == this->ramDirectory)) {
+ // queue segment for deletion
+ segmentsToDelete.push_back(reader);
+ }
+ }
+
+ int32_t mergedDocCount = merger.merge();
+
+#ifdef _CL_DEBUG_INFO
+ fprintf(_CL_DEBUG_INFO, "\n into %s (%d docs)\n",
+ mergedName.toLocal8Bit().constData(), mergedDocCount);
+#endif
+
+ segmentInfos.clearto(minSegment);// remove old infos & add new
+ segmentInfos.add(_CLNEW SegmentInfo(mergedName, mergedDocCount, directory));
+
+ // close readers before we attempt to delete now-obsolete segments
+ merger.closeReaders();
+
+ LuceneLock* lock = directory->makeLock(IndexWriter::COMMIT_LOCK_NAME);
+ LockWith2 with (lock, commitLockTimeout, this, &segmentsToDelete, true);
+ {
+ SCOPED_LOCK_MUTEX(directory->THIS_LOCK) // in- & inter-process sync
+ with.run();
+ }
+ _CLDELETE( lock );
+
+ if (useCompoundFile) {
+ QStringList filesToDelete;
+ merger.createCompoundFile(mergedName + QLatin1String(".tmp"), filesToDelete);
+
+ LuceneLock* lock = directory->makeLock(IndexWriter::COMMIT_LOCK_NAME);
+ LockWithCFS with(lock, commitLockTimeout, directory, this, mergedName,
+ filesToDelete);
+ {
+ SCOPED_LOCK_MUTEX(directory->THIS_LOCK) // in- & inter-process sync
+ with.run();
+ }
+ _CLDELETE(lock);
+ }
+}
+
+void IndexWriter::deleteSegments(CLVector<SegmentReader*>* segments)
+{
+ QStringList deletable;
+
+ {//scope delete deleteArray object
+ QStringList deleteArray;
+ readDeleteableFiles(deleteArray);
+ deleteFiles(deleteArray, deletable); // try to delete deleteable
+ }
+
+ QStringList files;
+ for (uint32_t i = 0; i < segments->size(); i++) {
+ SegmentReader* reader = (*segments)[i];
+ files.clear();
+ reader->files(files);
+ if (reader->getDirectory() == this->directory)
+ deleteFiles(files, deletable); // try to delete our files
+ else
+ deleteFiles(files, reader->getDirectory()); // delete, eg, RAM files
+ }
+
+ writeDeleteableFiles(deletable); // note files we can't delete
+}
+
+void IndexWriter::deleteFiles(const QStringList& files)
+{
+ QStringList currentDeletable;
+ readDeleteableFiles(currentDeletable);
+
+ // try to delete deleteable
+ QStringList deletable;
+ deleteFiles(currentDeletable, deletable);
+
+ // try to delete our files
+ deleteFiles(files, deletable);
+
+ // note files we can't delete
+ writeDeleteableFiles(deletable);
+}
+
+void IndexWriter::readDeleteableFiles(QStringList& result)
+{
+ if (!directory->fileExists(QLatin1String("deletable")))
+ return;
+
+ IndexInput* input = directory->openInput(QLatin1String("deletable"));
+ try {
+ // read file names
+ TCHAR tname[CL_MAX_PATH];
+ for (int32_t i = input->readInt(); i > 0; i--) {
+ int32_t read = input->readString(tname, CL_MAX_PATH);
+ result.push_back(QString::fromWCharArray(tname, read));
+ }
+ } _CLFINALLY (
+ input->close();
+ _CLDELETE(input);
+ );
+}
+
+void IndexWriter::deleteFiles(const QStringList& files, QStringList& deletable)
+{
+ QStringList::const_iterator itr;
+ for (itr = files.begin(); itr != files.end(); ++itr) {
+ if (!getDirectory()->fileExists((*itr)))
+ continue;
+
+ if (!getDirectory()->deleteFile((*itr), false)) {
+ if (directory->fileExists((*itr))) {
+#ifdef _CL_DEBUG_INFO
+ fprintf(_CL_DEBUG_INFO, "%s; Will re-try later.\n", err.what());
+#endif
+ // add to deletable
+ deletable.push_back((*itr));
+ }
+ }
+ }
+}
+
+void IndexWriter::deleteFiles(const QStringList& files, Directory* directory)
+{
+ QStringList::const_iterator itr;
+ for (itr = files.begin(); itr != files.end(); ++itr)
+ directory->deleteFile((*itr), true);
+}
+
+void IndexWriter::writeDeleteableFiles(const QStringList& files)
+{
+ IndexOutput* output = directory->createOutput(QLatin1String("deleteable.new"));
+ try {
+ output->writeInt(files.size());
+
+ TCHAR tfile[CL_MAX_PATH];
+ QStringList::const_iterator itr;
+ for (itr = files.begin(); itr != files.end(); ++itr) {
+ tfile[(*itr).toWCharArray(tfile)] = '\0';
+ output->writeString(tfile, _tcslen(tfile));
+ }
+ } _CLFINALLY (
+ output->close();
+ _CLDELETE(output);
+ );
+
+ directory->renameFile(QLatin1String("deleteable.new"),
+ QLatin1String("deletable"));
+}
+
+void IndexWriter::addIndexes(Directory** dirs)
+{
+ //Func - Add several indexes located in different directories into the current
+ // one managed by this instance
+ //Pre - dirs != NULL and contains directories of several indexes
+ // dirsLength > 0 and contains the number of directories
+ //Post - The indexes located in the directories in dirs have been merged with
+ // the pre(current) index. The Resulting index has also been optimized
+
+ SCOPED_LOCK_MUTEX(THIS_LOCK)
+
+ CND_PRECONDITION(dirs != NULL, "dirs is NULL");
+
+ // start with zero or 1 seg so optimize the current
+ optimize();
+
+ int32_t start = segmentInfos.size();
+
+ //Iterate through the directories
+ for (int32_t i = 0; dirs[i] != NULL; ++i) {
+ // DSR: Changed SegmentInfos constructor arg (see bug discussion below).
+ SegmentInfos sis(false);
+ sis.read(dirs[i]);
+ for (int32_t j = 0; j < sis.size(); j++)
+ segmentInfos.add(sis.info(j)); // add each info
+ }
+
+ // commented out by tbusch to solve a bug and to be conform with
+ // java lucene
+
+ // merge newly added segments in log(n) passes
+ //while (segmentInfos.size() > start + mergeFactor) {
+ // for (int32_t base = start; base < segmentInfos.size(); base++) {
+ // int32_t end = min(segmentInfos.size(), base + mergeFactor);
+ // if (end - base > 1)
+ // mergeSegments(base, end);
+ // }
+ //}
+
+ // cleanup
+ optimize();
+}
+
+
+void IndexWriter::addIndexes(IndexReader** readers)
+{
+ SCOPED_LOCK_MUTEX(THIS_LOCK)
+ optimize(); // start with zero or 1 seg
+
+ QString mergedName = newSegmentName();
+ SegmentMerger merger(this, mergedName);
+
+ CLVector<SegmentReader*> segmentsToDelete;
+ SegmentReader* sReader = NULL;
+ if (segmentInfos.size() == 1) { // add existing index, if any
+ sReader = _CLNEW SegmentReader(segmentInfos.info(0));
+ merger.add(sReader);
+ segmentsToDelete.push_back(sReader); // queue segment for deletion
+ }
+
+ int32_t readersLength = 0;
+ while (readers[readersLength] != NULL)
+ merger.add(readers[readersLength++]);
+
+ int32_t docCount = merger.merge(); // merge 'em
+
+ // pop old infos & add new
+ segmentInfos.clearto(0);
+ segmentInfos.add(_CLNEW SegmentInfo(mergedName, docCount, directory));
+
+ if (sReader != NULL) {
+ sReader->close();
+ _CLDELETE(sReader);
+ }
+
+ LuceneLock* lock = directory->makeLock(IndexWriter::COMMIT_LOCK_NAME);
+ LockWith2 with(lock, commitLockTimeout, this, &segmentsToDelete, true);
+ {
+ // in- & inter-process sync
+ SCOPED_LOCK_MUTEX(directory->THIS_LOCK)
+ with.run();
+ }
+ _CLDELETE(lock);
+
+ if (useCompoundFile) {
+ QStringList filesToDelete;
+ merger.createCompoundFile(mergedName + QLatin1String(".tmp"),
+ filesToDelete);
+
+ LuceneLock* cfslock = directory->makeLock(IndexWriter::COMMIT_LOCK_NAME);
+ LockWithCFS with(cfslock, commitLockTimeout, directory, this, mergedName,
+ filesToDelete);
+ {
+ // in- & inter-process sync
+ SCOPED_LOCK_MUTEX(directory->THIS_LOCK)
+ with.run();
+ }
+ _CLDELETE(cfslock);
+ }
+}
+
+// #pragma mark -- IndexWriter::LockWith2
+
+IndexWriter::LockWith2::LockWith2(CL_NS(store)::LuceneLock* lock,
+ int64_t lockWaitTimeout,
+ IndexWriter* indexWriter,
+ CL_NS(util)::CLVector<SegmentReader*>* std,
+ bool _create)
+ : CL_NS(store)::LuceneLockWith<void>(lock, lockWaitTimeout)
+ , create(_create)
+ , writer(indexWriter)
+ , segmentsToDelete(std)
+{
+}
+
+void IndexWriter::LockWith2::doBody()
+{
+ //Func - Writes segmentInfos to or reads segmentInfos from disk
+ //Pre - writer != NULL
+ //Post - if create is true then segementInfos has been written to disk
+ // otherwise segmentInfos has been read from disk
+
+ CND_PRECONDITION(writer != NULL, "writer is NULL");
+
+ if (create) {
+ writer->segmentInfos.write(writer->getDirectory());
+ // delete now-unused segments
+ if (segmentsToDelete != NULL)
+ writer->deleteSegments(segmentsToDelete);
+ } else {
+ writer->segmentInfos.read(writer->getDirectory());
+ }
+}
+
+// #pragma mark -- IndexWriter::LockWithCFS
+
+IndexWriter::LockWithCFS::LockWithCFS(CL_NS(store)::LuceneLock* lock,
+ int64_t lockWaitTimeout,
+ CL_NS(store)::Directory* dir,
+ IndexWriter* indexWriter,
+ const QString& segmentName,
+ const QStringList& ftd)
+ : CL_NS(store)::LuceneLockWith<void>(lock, lockWaitTimeout)
+ , segName(segmentName)
+ , writer(indexWriter)
+ , directory(dir)
+ , filesToDelete(ftd)
+{
+}
+
+void IndexWriter::LockWithCFS::doBody()
+{
+ //Func - Writes segmentInfos to or reads segmentInfos from disk
+ //Pre - writer != NULL
+ //Post - if create is true then segementInfos has been written to disk
+ // otherwise segmentInfos has been read from disk
+
+ CND_PRECONDITION(directory != NULL, "directory is NULL");
+ CND_PRECONDITION(!segName.isEmpty(), "mergedName is NULL");
+
+ // make compound file visible for SegmentReaders
+ directory->renameFile(segName + QLatin1String(".tmp"),
+ segName + QLatin1String(".cfs"));
+ // delete now unused files of segment
+ writer->deleteFiles(filesToDelete);
+}
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/index/IndexWriter.h b/src/3rdparty/clucene/src/CLucene/index/IndexWriter.h
new file mode 100644
index 0000000..80476c8
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/IndexWriter.h
@@ -0,0 +1,425 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright(C) 2007, 2008 by Nokia Corporation and/or its subsidiary(-ies), all rights reserved.
+*/
+#ifndef _lucene_index_IndexWriter_
+#define _lucene_index_IndexWriter_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include <QtCore/QString>
+#include <QtCore/QStringList>
+
+#include "CLucene/analysis/AnalysisHeader.h"
+#include "CLucene/util/VoidList.h"
+#include "CLucene/search/Similarity.h"
+#include "CLucene/store/Lock.h"
+#include "CLucene/store/TransactionalRAMDirectory.h"
+
+#include "SegmentHeader.h"
+
+CL_NS_DEF(index)
+
+/**
+An IndexWriter creates and maintains an index.
+
+The third argument to the
+<a href="#IndexWriter(org.apache.lucene.store.Directory, org.apache.lucene.analysis.Analyzer, boolean)"><b>constructor</b></a>
+determines whether a new index is created, or whether an existing index is
+opened for the addition of new documents.
+
+In either case, documents are added with the <a
+href="#addDocument(org.apache.lucene.document.Document)"><b>addDocument</b></a> method.
+When finished adding documents, <a href="#close()"><b>close</b></a> should be called.
+
+<p>If an index will not have more documents added for a while and optimal search
+performance is desired, then the <a href="#optimize()"><b>optimize</b></a>
+method should be called before the index is closed.
+
+<p>Opening an IndexWriter creates a lock file for the directory in use. Trying to open
+another IndexWriter on the same directory will lead to an IOException. The IOException
+is also thrown if an IndexReader on the same directory is used to delete documents
+from the index.
+
+@see IndexModifier IndexModifier supports the important methods of IndexWriter plus deletion
+*/
+class IndexWriter : LUCENE_BASE
+{
+ class LockWith2 : public CL_NS(store)::LuceneLockWith<void>
+ {
+ public:
+ LockWith2(CL_NS(store)::LuceneLock* lock,
+ int64_t lockWaitTimeout,
+ IndexWriter* wr,
+ CL_NS(util)::CLVector<SegmentReader*>* std,
+ bool create);
+
+ ~LockWith2() {}
+
+ void doBody();
+
+ private:
+ bool create;
+ IndexWriter* writer;
+ CL_NS(util)::CLVector<SegmentReader*>* segmentsToDelete;
+ };
+ friend class LockWith2;
+
+ class LockWithCFS : public CL_NS(store)::LuceneLockWith<void>
+ {
+ public:
+ LockWithCFS(CL_NS(store)::LuceneLock* lock,
+ int64_t lockWaitTimeout,
+ CL_NS(store)::Directory* dir,
+ IndexWriter* wr,
+ const QString& segName,
+ const QStringList& ftd);
+
+ ~LockWithCFS() {}
+
+ void doBody();
+
+ private:
+ QString segName;
+ IndexWriter* writer;
+ CL_NS(store)::Directory* directory;
+ QStringList filesToDelete;
+ };
+ friend class IndexWriter::LockWithCFS;
+
+ // indicates if the writers is open - this way close can be called multiple
+ // times
+ bool isOpen;
+
+ // how to analyze text
+ CL_NS(analysis)::Analyzer* analyzer;
+
+ CL_NS(search)::Similarity* similarity; // how to normalize
+
+ /** Use compound file setting. Normally defaults to true, except when
+ * using a RAMDirectory. This minimizes the number of files used.
+ * Setting this to false may improve indexing performance, but
+ * may also cause file handle problems.
+ */
+ bool useCompoundFile;
+ bool closeDir;
+
+ // for temp segs
+ CL_NS(store)::TransactionalRAMDirectory* ramDirectory;
+
+ CL_NS(store)::LuceneLock* writeLock;
+
+ void _IndexWriter(const bool create);
+
+ void _finalize();
+
+ // where this index resides
+ CL_NS(store)::Directory* directory;
+
+
+ int32_t getSegmentsCounter() { return segmentInfos.counter; }
+ int32_t maxFieldLength;
+ int32_t mergeFactor;
+ int32_t minMergeDocs;
+ int32_t maxMergeDocs;
+ int32_t termIndexInterval;
+
+ int64_t writeLockTimeout;
+ int64_t commitLockTimeout;
+public:
+ DEFINE_MUTEX(THIS_LOCK)
+
+ // Release the write lock, if needed.
+ SegmentInfos segmentInfos;
+
+ // Release the write lock, if needed.
+ ~IndexWriter();
+
+ /**
+ * The Java implementation of Lucene silently truncates any tokenized
+ * field if the number of tokens exceeds a certain threshold. Although
+ * that threshold is adjustable, it is easy for the client programmer
+ * to be unaware that such a threshold exists, and to become its
+ * unwitting victim.
+ * CLucene implements a less insidious truncation policy. Up to
+ * DEFAULT_MAX_FIELD_LENGTH tokens, CLucene behaves just as JLucene
+ * does. If the number of tokens exceeds that threshold without any
+ * indication of a truncation preference by the client programmer,
+ * CLucene raises an exception, prompting the client programmer to
+ * explicitly set a truncation policy by adjusting maxFieldLength.
+ */
+ LUCENE_STATIC_CONSTANT(int32_t, DEFAULT_MAX_FIELD_LENGTH = 10000);
+ LUCENE_STATIC_CONSTANT(int32_t, FIELD_TRUNC_POLICY__WARN = -1);
+ int32_t getMaxFieldLength() const{ return maxFieldLength; }
+ void setMaxFieldLength(int32_t val){ maxFieldLength = val; }
+
+ /**
+ * Default value is 10. Change using {@link #setMaxBufferedDocs(int)}.
+ */
+ LUCENE_STATIC_CONSTANT(int32_t, DEFAULT_MAX_BUFFERED_DOCS = 10);
+ /** Determines the minimal number of documents required before the buffered
+ * in-memory documents are merging and a new Segment is created.
+ * Since Documents are merged in a {@link RAMDirectory},
+ * large value gives faster indexing. At the same time, mergeFactor limits
+ * the number of files open in a FSDirectory.
+ *
+ * <p> The default value is DEFAULT_MAX_BUFFERED_DOCS.*/
+ void setMaxBufferedDocs(int32_t val){ minMergeDocs = val; }
+ /**
+ * @see #setMaxBufferedDocs
+ */
+ int32_t getMaxBufferedDocs(){ return minMergeDocs; }
+
+ /**
+ * Default value for the write lock timeout (1,000).
+ */
+ LUCENE_STATIC_CONSTANT(int64_t, WRITE_LOCK_TIMEOUT = 1000);
+ /**
+ * Sets the maximum time to wait for a write lock (in milliseconds).
+ */
+ void setWriteLockTimeout(int64_t writeLockTimeout)
+ { this->writeLockTimeout = writeLockTimeout; }
+ /**
+ * @see #setWriteLockTimeout
+ */
+ int64_t getWriteLockTimeout() { return writeLockTimeout; }
+
+ /**
+ * Default value for the commit lock timeout (10,000).
+ */
+ LUCENE_STATIC_CONSTANT(int64_t, COMMIT_LOCK_TIMEOUT = 10000);
+ /**
+ * Sets the maximum time to wait for a commit lock (in milliseconds).
+ */
+ void setCommitLockTimeout(int64_t commitLockTimeout)
+ { this->commitLockTimeout = commitLockTimeout; }
+ /**
+ * @see #setCommitLockTimeout
+ */
+ int64_t getCommitLockTimeout() { return commitLockTimeout; }
+
+ static const QLatin1String WRITE_LOCK_NAME; //"write.lock";
+ static const QLatin1String COMMIT_LOCK_NAME; //"commit.lock";
+
+ /**
+ * Default value is 10. Change using {@link #setMergeFactor(int)}.
+ */
+ LUCENE_STATIC_CONSTANT(int32_t, DEFAULT_MERGE_FACTOR = 10);
+ /* Determines how often segment indices are merged by addDocument(). With
+ * smaller values, less RAM is used while indexing, and searches on
+ * unoptimized indices are faster, but indexing speed is slower. With larger
+ * values more RAM is used while indexing and searches on unoptimized indices
+ * are slower, but indexing is faster. Thus larger values (> 10) are best
+ * for batched index creation, and smaller values (< 10) for indices that are
+ * interactively maintained.
+ *
+ * <p>This must never be less than 2. The default value is 10.
+ */
+ int32_t getMergeFactor() const{ return mergeFactor; }
+ void setMergeFactor(int32_t val){ mergeFactor = val; }
+
+
+ /** Expert: The fraction of terms in the "dictionary" which should be stored
+ * in RAM. Smaller values use more memory, but make searching slightly
+ * faster, while larger values use less memory and make searching slightly
+ * slower. Searching is typically not dominated by dictionary lookup, so
+ * tweaking this is rarely useful.
+ */
+ LUCENE_STATIC_CONSTANT(int32_t, DEFAULT_TERM_INDEX_INTERVAL = 128);
+ /** Expert: Set the interval between indexed terms. Large values cause less
+ * memory to be used by IndexReader, but slow random-access to terms. Small
+ * values cause more memory to be used by an IndexReader, and speed
+ * random-access to terms.
+ *
+ * This parameter determines the amount of computation required per query
+ * term, regardless of the number of documents that contain that term. In
+ * particular, it is the maximum number of other terms that must be
+ * scanned before a term is located and its frequency and position information
+ * may be processed. In a large index with user-entered query terms, query
+ * processing time is likely to be dominated not by term lookup but rather
+ * by the processing of frequency and positional data. In a small index
+ * or when many uncommon query terms are generated (e.g., by wildcard
+ * queries) term lookup may become a dominant cost.
+ *
+ * In particular, <code>numUniqueTerms/interval</code> terms are read into
+ * memory by an IndexReader, and, on average, <code>interval/2</code> terms
+ * must be scanned for each random term access.
+ *
+ * @see #DEFAULT_TERM_INDEX_INTERVAL
+ */
+ void setTermIndexInterval(int32_t interval) { termIndexInterval = interval; }
+ /** Expert: Return the interval between indexed terms.
+ *
+ * @see #setTermIndexInterval(int)
+ */
+ int32_t getTermIndexInterval() { return termIndexInterval; }
+
+ /** Determines the minimal number of documents required before the buffered
+ * in-memory documents are merging and a new Segment is created.
+ * Since Documents are merged in a {@link RAMDirectory},
+ * large value gives faster indexing. At the same time, mergeFactor limits
+ * the number of files open in a FSDirectory.
+ *
+ * <p> The default value is 10.*/
+ int32_t getMinMergeDocs() const{ return minMergeDocs; }
+ void setMinMergeDocs(int32_t val){ minMergeDocs = val; }
+
+ /** Determines the largest number of documents ever merged by addDocument().
+ * Small values (e.g., less than 10,000) are best for interactive indexing,
+ * as this limits the length of pauses while indexing to a few seconds.
+ * Larger values are best for batched indexing and speedier searches.
+ *
+ * <p>The default value is {@link #DEFAULT_MAX_MERGE_DOCS}.
+ */
+ LUCENE_STATIC_CONSTANT(int32_t, DEFAULT_MAX_MERGE_DOCS = LUCENE_INT32_MAX_SHOULDBE);
+ /**Determines the largest number of documents ever merged by addDocument().
+ * Small values (e.g., less than 10,000) are best for interactive indexing,
+ * as this limits the length of pauses while indexing to a few seconds.
+ * Larger values are best for batched indexing and speedier searches.
+ *
+ * <p>The default value is {@link Integer#MAX_VALUE}.
+ */
+ int32_t getMaxMergeDocs() const{ return maxMergeDocs; }
+ void setMaxMergeDocs(int32_t val){ maxMergeDocs = val; }
+
+ /**
+ * Constructs an IndexWriter for the index in <code>path</code>.
+ * Text will be analyzed with <code>a</code>. If <code>create</code>
+ * is true, then a new, empty index will be created in
+ * <code>path</code>, replacing the index already there, if any.
+ *
+ * @param path the path to the index directory
+ * @param a the analyzer to use
+ * @param create <code>true</code> to create the index or overwrite
+ * the existing one; <code>false</code> to append to the existing
+ * index
+ * @throws IOException if the directory cannot be read/written to, or
+ * if it does not exist, and <code>create</code> is
+ * <code>false</code>
+ */
+ IndexWriter(const QString& path, CL_NS(analysis)::Analyzer* a,
+ const bool create, const bool closeDir = true);
+
+
+ /**Constructs an IndexWriter for the index in <code>d</code>. Text will be
+ * analyzed with <code>a</code>. If <code>create</code> is true, then a new,
+ * empty index will be created in <code>d</code>, replacing the index already
+ * there, if any.
+ */
+ IndexWriter(CL_NS(store)::Directory* d, CL_NS(analysis)::Analyzer* a,
+ const bool create, const bool closeDir = false);
+
+ // Flushes all changes to an index, closes all associated files, and closes
+ // the directory that the index is stored in.
+ void close();
+
+ // Returns the number of documents currently in this index. synchronized
+ int32_t docCount();
+
+
+ // Adds a document to this index, using the provided analyzer instead of
+ // the value of {@link #getAnalyzer()}. If the document contains more than
+ // {@link #setMaxFieldLength(int)} terms for a given field, the remainder
+ // are discarded.
+ void addDocument(CL_NS(document)::Document* doc,
+ CL_NS(analysis)::Analyzer* analyzer = NULL);
+
+
+ // Merges all segments together into a single segment, optimizing an index
+ // for search. synchronized
+ void optimize();
+
+
+ /**Merges all segments from an array of indices into this index.
+ *
+ * <p>This may be used to parallelize batch indexing. A large document
+ * collection can be broken into sub-collections. Each sub-collection can be
+ * indexed in parallel, on a different thread, process or machine. The
+ * complete index can then be created by merging sub-collection indices
+ * with this method.
+ *
+ * <p>After this completes, the index is optimized.
+ *@synchronized
+ */
+ void addIndexes(CL_NS(store)::Directory** dirs);
+
+ /** Merges the provided indexes into this index.
+ * <p>After this completes, the index is optimized. </p>
+ * <p>The provided IndexReaders are not closed.</p>
+ */
+ void addIndexes(IndexReader** readers);
+
+
+ /** Returns the directory this index resides in. */
+ CL_NS(store)::Directory* getDirectory() { return directory; }
+
+ /** Get the current setting of whether to use the compound file format.
+ * Note that this just returns the value you set with setUseCompoundFile(boolean)
+ * or the default. You cannot use this to query the status of an existing index.
+ * @see #setUseCompoundFile(boolean)
+ */
+ bool getUseCompoundFile() { return useCompoundFile; }
+
+ /** Setting to turn on usage of a compound file. When on, multiple files
+ * for each segment are merged into a single file once the segment creation
+ * is finished. This is done regardless of what directory is in use.
+ */
+ void setUseCompoundFile(bool value) { useCompoundFile = value; }
+
+
+ /** Expert: Set the Similarity implementation used by this IndexWriter.
+ *
+ * @see Similarity#setDefault(Similarity)
+ */
+ void setSimilarity(CL_NS(search)::Similarity* similarity)
+ { this->similarity = similarity; }
+
+ /** Expert: Return the Similarity implementation used by this IndexWriter.
+ *
+ * <p>This defaults to the current value of {@link Similarity#getDefault()}.
+ */
+ CL_NS(search)::Similarity* getSimilarity() { return this->similarity; }
+
+ /** Returns the analyzer used by this index. */
+ CL_NS(analysis)::Analyzer* getAnalyzer() { return analyzer; }
+
+private:
+ /** Merges all RAM-resident segments. */
+ void flushRamSegments();
+
+ /** Incremental segment merger. */
+ void maybeMergeSegments();
+
+ // Pops segments off of segmentInfos stack down to minSegment, merges them,
+ // and pushes the merged index onto the top of the segmentInfos stack.
+ void mergeSegments(const uint32_t minSegment);
+
+ // Merges the named range of segments, replacing them in the stack with a
+ // single segment.
+ void mergeSegments(const uint32_t minSegment, const uint32_t end);
+
+ // Some operating systems (e.g. Windows) don't permit a file to be deleted
+ // while it is opened for read (e.g. by another process or thread). So we
+ // assume that when a delete fails it is because the file is open in another
+ // process, and queue the file for subsequent deletion.
+ void deleteSegments(CL_NS(util)::CLVector<SegmentReader*>* segments);
+
+ void deleteFiles(const QStringList& files);
+ void readDeleteableFiles(QStringList& files);
+ void deleteFiles(const QStringList& files, QStringList& deletable);
+ void deleteFiles(const QStringList& files, CL_NS(store)::Directory* directory);
+ void writeDeleteableFiles(const QStringList& files);
+
+ // synchronized
+ QString newSegmentName();
+};
+
+CL_NS_END
+
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/index/MultiReader.cpp b/src/3rdparty/clucene/src/CLucene/index/MultiReader.cpp
new file mode 100644
index 0000000..1260d04
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/MultiReader.cpp
@@ -0,0 +1,722 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "MultiReader.h"
+
+#include "IndexReader.h"
+#include "CLucene/document/Document.h"
+#include "Terms.h"
+#include "SegmentMergeQueue.h"
+
+CL_NS_USE(store)
+CL_NS_USE(util)
+CL_NS_DEF(index)
+
+MultiReader::MultiReader(IndexReader** subReaders):
+ IndexReader(subReaders == NULL || subReaders[0] == NULL ? NULL : subReaders[0]->getDirectory()),
+ normsCache(true, true)
+{
+ initialize(subReaders);
+}
+
+MultiReader::MultiReader(Directory* directory, SegmentInfos* sis, IndexReader** subReaders):
+ IndexReader(directory, sis, false),
+ normsCache(true, true)
+{
+ initialize(subReaders);
+}
+
+
+MultiReader::~MultiReader() {
+//Func - Destructor
+//Pre - true
+//Post - The instance has been destroyed all IndexReader instances
+// this instance managed have been destroyed to
+
+ _CLDELETE_ARRAY(ones);
+ _CLDELETE_ARRAY(starts);
+
+ //Iterate through the subReaders and destroy each reader
+ if (subReaders && subReadersLength > 0) {
+ for (int32_t i = 0; i < subReadersLength; i++) {
+ _CLDELETE(subReaders[i]);
+ }
+ }
+ //Destroy the subReaders array
+ _CLDELETE_ARRAY(subReaders);
+}
+
+void MultiReader::initialize(IndexReader** subReaders){
+ this->subReadersLength = 0;
+ this->subReaders = subReaders;
+
+ //count the subReaders size
+ if ( subReaders != NULL ){
+ while ( subReaders[subReadersLength] != NULL ){
+ subReadersLength++;
+ }
+ }
+ _maxDoc = 0;
+ _numDocs = -1;
+ ones = NULL;
+
+ starts = _CL_NEWARRAY(int32_t,subReadersLength + 1); // build starts array
+ for (int32_t i = 0; i < subReadersLength; i++) {
+ starts[i] = _maxDoc;
+
+ // compute maxDocs
+ _maxDoc += subReaders[i]->maxDoc();
+ if (subReaders[i]->hasDeletions())
+ _hasDeletions = true;
+ }
+ starts[subReadersLength] = _maxDoc;
+}
+
+bool MultiReader::getTermFreqVectors(int32_t n, Array<TermFreqVector*>& result){
+ int32_t i = readerIndex(n); // find segment num
+ return subReaders[i]->getTermFreqVectors(n - starts[i], result); // dispatch to segment
+}
+
+TermFreqVector* MultiReader::getTermFreqVector(int32_t n, const TCHAR* field){
+ int32_t i = readerIndex(n); // find segment num
+ return subReaders[i]->getTermFreqVector(n - starts[i], field);
+}
+
+
+int32_t MultiReader::numDocs() {
+ SCOPED_LOCK_MUTEX(THIS_LOCK)
+ if (_numDocs == -1) { // check cache
+ int32_t n = 0; // cache miss--recompute
+ for (int32_t i = 0; i < subReadersLength; i++)
+ n += subReaders[i]->numDocs(); // sum from readers
+ _numDocs = n;
+ }
+ return _numDocs;
+}
+
+int32_t MultiReader::maxDoc() const {
+ return _maxDoc;
+}
+
+bool MultiReader::document(int32_t n, CL_NS(document)::Document* doc){
+ int32_t i = readerIndex(n); // find segment num
+ return subReaders[i]->document(n - starts[i],doc); // dispatch to segment reader
+}
+
+bool MultiReader::isDeleted(const int32_t n) {
+ int32_t i = readerIndex(n); // find segment num
+ return subReaders[i]->isDeleted(n - starts[i]); // dispatch to segment reader
+}
+
+uint8_t* MultiReader::norms(const TCHAR* field){
+ SCOPED_LOCK_MUTEX(THIS_LOCK)
+ uint8_t* bytes;
+ bytes = normsCache.get(field);
+ if (bytes != NULL){
+ return bytes; // cache hit
+ }
+
+ if ( !hasNorms(field) )
+ return fakeNorms();
+
+ bytes = _CL_NEWARRAY(uint8_t,maxDoc());
+ for (int32_t i = 0; i < subReadersLength; i++)
+ subReaders[i]->norms(field, bytes + starts[i]);
+
+ //Unfortunately the data in the normCache can get corrupted, since it's being loaded with string
+ //keys that may be deleted while still in use by the map. To prevent this field is duplicated
+ //and then stored in the normCache
+ TCHAR* key = STRDUP_TtoT(field);
+ //update cache
+ normsCache.put(key, bytes);
+
+ return bytes;
+}
+
+void MultiReader::norms(const TCHAR* field, uint8_t* result) {
+ SCOPED_LOCK_MUTEX(THIS_LOCK)
+ uint8_t* bytes = normsCache.get(field);
+ if (bytes==NULL && !hasNorms(field))
+ bytes=fakeNorms();
+
+ if (bytes != NULL){ // cache hit
+ int32_t len = maxDoc();
+ memcpy(result,bytes,len * sizeof(int32_t));
+ }
+
+ for (int32_t i = 0; i < subReadersLength; i++) // read from segments
+ subReaders[i]->norms(field, result + starts[i]);
+}
+
+
+void MultiReader::doSetNorm(int32_t n, const TCHAR* field, uint8_t value){
+ normsCache.remove(field); // clear cache
+ int32_t i = readerIndex(n); // find segment num
+ subReaders[i]->setNorm(n-starts[i], field, value); // dispatch
+}
+
+TermEnum* MultiReader::terms() const {
+ return _CLNEW MultiTermEnum(subReaders, starts, NULL);
+}
+
+TermEnum* MultiReader::terms(const Term* term) const {
+ return _CLNEW MultiTermEnum(subReaders, starts, term);
+}
+
+int32_t MultiReader::docFreq(const Term* t) const {
+ int32_t total = 0; // sum freqs in Multi
+ for (int32_t i = 0; i < subReadersLength; i++)
+ total += subReaders[i]->docFreq(t);
+ return total;
+}
+
+TermDocs* MultiReader::termDocs() const {
+ TermDocs* ret = _CLNEW MultiTermDocs(subReaders, starts);
+ return ret;
+}
+
+TermPositions* MultiReader::termPositions() const {
+ TermPositions* ret = (TermPositions*)_CLNEW MultiTermPositions(subReaders, starts);
+ return ret;
+}
+
+void MultiReader::doDelete(const int32_t n) {
+ _numDocs = -1; // invalidate cache
+ int32_t i = readerIndex(n); // find segment num
+ subReaders[i]->deleteDocument(n - starts[i]); // dispatch to segment reader
+ _hasDeletions = true;
+}
+
+int32_t MultiReader::readerIndex(const int32_t n) const { // find reader for doc n:
+ int32_t lo = 0; // search starts array
+ int32_t hi = subReadersLength - 1; // for first element less
+ // than n, return its index
+ while (hi >= lo) {
+ int32_t mid = (lo + hi) >> 1;
+ int32_t midValue = starts[mid];
+ if (n < midValue)
+ hi = mid - 1;
+ else if (n > midValue)
+ lo = mid + 1;
+ else{ // found a match
+ while (mid+1 < subReadersLength && starts[mid+1] == midValue) {
+ mid++; // scan to last match
+ }
+ return mid;
+ }
+ }
+ return hi;
+}
+
+bool MultiReader::hasNorms(const TCHAR* field) {
+ for (int i = 0; i < subReadersLength; i++) {
+ if (subReaders[i]->hasNorms(field))
+ return true;
+ }
+ return false;
+}
+uint8_t* MultiReader::fakeNorms() {
+ if (ones==NULL)
+ ones=SegmentReader::createFakeNorms(maxDoc());
+ return ones;
+}
+
+void MultiReader::doUndeleteAll(){
+ for (int32_t i = 0; i < subReadersLength; i++)
+ subReaders[i]->undeleteAll();
+ _hasDeletions = false;
+ _numDocs = -1;
+}
+void MultiReader::doCommit() {
+ for (int32_t i = 0; i < subReadersLength; i++)
+ subReaders[i]->commit();
+}
+
+void MultiReader::doClose() {
+ SCOPED_LOCK_MUTEX(THIS_LOCK)
+ for (int32_t i = 0; i < subReadersLength; i++){
+ subReaders[i]->close();
+ }
+}
+
+
+void MultiReader::getFieldNames(FieldOption fldOption, StringArrayWithDeletor& retarray){
+ StringArrayWithDeletor temp;
+ CLHashList<TCHAR*> hashList;
+ for (int32_t i = 0; i < subReadersLength; i++) {
+ IndexReader* reader = subReaders[i];
+ reader->getFieldNames(fldOption, temp);
+
+ //create a unique list of names.
+ StringArrayWithDeletor::iterator itr = temp.begin();
+ while ( itr != temp.end() ){
+ if ( hashList.find(*itr) == hashList.end() )
+ hashList.insert(STRDUP_TtoT(*itr));
+ itr++;
+ }
+ }
+ //move the items into the return
+ CLHashList<TCHAR*>::iterator itr = hashList.begin();
+ while ( itr != hashList.end() ){
+ retarray.push_back(*itr);//no need to copy, already done!
+ itr++;
+ }
+}
+
+
+MultiTermDocs::MultiTermDocs(){
+//Func - Default constructor
+// Initialises an empty MultiTermDocs.
+// This constructor is needed to allow the constructor of MultiTermPositions
+// initialise the instance by itself
+//Pre - true
+//Post - An empty
+
+ subReaders = NULL;
+ subReadersLength = 0;
+ starts = NULL;
+ base = 0;
+ pointer = 0;
+ current = NULL;
+ term = NULL;
+ readerTermDocs = NULL;
+}
+
+MultiTermDocs::MultiTermDocs(IndexReader** r, const int32_t* s){
+//Func - Constructor
+//Pre - if r is NULL then rLen must be 0 else if r != NULL then rLen > 0
+// s != NULL
+//Post - The instance has been created
+
+ //count readers
+ subReadersLength = 0;
+ subReaders = r;
+
+ CND_PRECONDITION(s != NULL, "s is NULL");
+
+ if ( subReaders != NULL ){
+ while ( subReaders[subReadersLength] != NULL )
+ subReadersLength++;
+ }
+
+ starts = s;
+ base = 0;
+ pointer = 0;
+ current = NULL;
+ term = NULL;
+
+ readerTermDocs = NULL;
+
+ //Check if there are subReaders
+ if(subReaders != NULL && subReadersLength > 0){
+ readerTermDocs = _CL_NEWARRAY(TermDocs*, subReadersLength+1);
+
+ CND_CONDITION(readerTermDocs != NULL,"No memory could be allocated for readerTermDocs");
+
+ //Initialize the readerTermDocs pointer array to NULLs
+ for ( int32_t i=0;i<subReadersLength+1;i++){
+ readerTermDocs[i]=NULL;
+ }
+ }
+}
+
+MultiTermDocs::~MultiTermDocs(){
+//Func - Destructor
+//Pre - true
+//Post - The instance has been destroyed
+
+ close();
+}
+
+
+TermPositions* MultiTermDocs::__asTermPositions(){
+ return NULL;
+}
+
+int32_t MultiTermDocs::doc() const {
+ CND_PRECONDITION(current!=NULL,"current==NULL, check that next() was called");
+ return base + current->doc();
+}
+int32_t MultiTermDocs::freq() const {
+ CND_PRECONDITION(current!=NULL,"current==NULL, check that next() was called");
+ return current->freq();
+}
+
+void MultiTermDocs::seek(TermEnum* termEnum){
+ seek(termEnum->term(false));
+}
+
+void MultiTermDocs::seek( Term* tterm) {
+//Func - Resets the instance for a new search
+//Pre - tterm != NULL
+//Post - The instance has been reset for a new search
+
+ CND_PRECONDITION(tterm != NULL, "tterm is NULL");
+
+ //Assigning tterm is done as below for a reason
+ //The construction ensures that if seek is called from within
+ //MultiTermDocs with as argument this->term (seek(this->term)) that the assignment
+ //will succeed and all referencecounters represent the correct situation
+
+ //Get a pointer from tterm and increase its reference counter
+ Term *TempTerm = _CL_POINTER(tterm);
+
+ //Finialize term to ensure we decrease the reference counter of the instance which term points to
+ _CLDECDELETE(term);
+
+ //Assign TempTerm to term
+ term = TempTerm;
+
+ base = 0;
+ pointer = 0;
+ current = NULL;
+}
+
+bool MultiTermDocs::next() {
+ if (current != NULL && current->next()) {
+ return true;
+ } else if (pointer < subReadersLength) {
+ base = starts[pointer];
+ current = termDocs(pointer++);
+ return next();
+ } else
+ return false;
+}
+
+int32_t MultiTermDocs::read(int32_t* docs, int32_t* freqs, int32_t length) {
+ while (true) {
+ while (current == NULL) {
+ if (pointer < subReadersLength) { // try next segment
+ base = starts[pointer];
+ current = termDocs(pointer++);
+ } else {
+ return 0;
+ }
+ }
+ int32_t end = current->read(docs, freqs,length);
+ if (end == 0) { // none left in segment
+ current = NULL;
+ } else { // got some
+ int32_t b = base; // adjust doc numbers
+ for (int32_t i = 0; i < end; i++)
+ docs[i] += b;
+ return end;
+ }
+ }
+}
+
+bool MultiTermDocs::skipTo(const int32_t target) {
+ do {
+ if (!next())
+ return false;
+ } while (target > doc());
+ return true;
+}
+
+void MultiTermDocs::close() {
+//Func - Closes all MultiTermDocs managed by this instance
+//Pre - true
+//Post - All the MultiTermDocs have been closed
+
+
+ //Check if readerTermDocs is valid
+ if (readerTermDocs){
+ TermDocs* curTD = NULL;
+ //iterate through the readerTermDocs array
+ for (int32_t i = 0; i < subReadersLength; i++) {
+ //Retrieve the i-th TermDocs instance
+ curTD = readerTermDocs[i];
+
+ //Check if it is a valid pointer
+ if (curTD != NULL) {
+ //Close it
+ curTD->close();
+ _CLDELETE(curTD);
+ }
+ }
+
+ _CLDELETE_ARRAY(readerTermDocs);
+ }
+
+ //current previously pointed to a member of readerTermDocs; ensure that
+ //it doesn't now point to invalid memory.
+ current = NULL;
+ base = 0;
+ pointer = 0;
+
+ _CLDECDELETE(term);
+}
+
+TermDocs* MultiTermDocs::termDocs(const IndexReader* reader) const {
+ TermDocs* ret = reader->termDocs();
+ return ret;
+}
+
+TermDocs* MultiTermDocs::termDocs(const int32_t i) const {
+ if (term == NULL)
+ return NULL;
+ TermDocs* result = readerTermDocs[i];
+ if (result == NULL){
+ readerTermDocs[i] = termDocs(subReaders[i]);
+ result = readerTermDocs[i];
+ }
+ result->seek(term);
+
+ return result;
+}
+
+
+MultiTermEnum::MultiTermEnum(
+ IndexReader** subReaders, const int32_t *starts, const Term* t){
+//Func - Constructor
+// Opens all enumerations of all readers
+//Pre - readers != NULL and contains an array of IndexReader instances each responsible for
+// reading a single segment
+// subReadersLength >= 0 and represents the number of readers in the readers array
+// starts is an array of
+//Post - An instance of has been created
+
+//Pre - if readers is NULL then subReadersLength must be 0 else if readers != NULL then subReadersLength > 0
+// s != NULL
+//Post - The instance has been created
+
+ int32_t subReadersLength = 0;
+ if ( subReaders != NULL ){
+ while ( subReaders[subReadersLength] != NULL )
+ subReadersLength++;
+ }
+ CND_PRECONDITION(starts != NULL,"starts is NULL");
+
+ //Temporary variables
+ IndexReader* reader = NULL;
+ TermEnum* termEnum = NULL;
+ SegmentMergeInfo* smi = NULL;
+ _docFreq = 0;
+ _term = NULL;
+ queue = _CLNEW SegmentMergeQueue(subReadersLength);
+
+ CND_CONDITION (queue != NULL, "Could not allocate memory for queue");
+
+ //iterate through all the readers
+ for ( int32_t i=0;i<subReadersLength;i++ ) {
+ //Get the i-th reader
+ reader = subReaders[i];
+
+ //Check if the enumeration must start from term t
+ if (t != NULL) {
+ //termEnum is an enumeration of terms starting at or after the named term t
+ termEnum = reader->terms(t);
+ }else{
+ //termEnum is an enumeration of all the Terms and TermInfos in the set.
+ termEnum = reader->terms();
+ }
+
+ //Instantiate an new SegmentMerginfo
+ smi = _CLNEW SegmentMergeInfo(starts[i], termEnum, reader);
+
+ // Note that in the call termEnum->getTerm(false) below false is required because
+ // otherwise a reference is leaked. By passing false getTerm is
+ // ordered to return an unowned reference instead. (Credits for DSR)
+ if (t == NULL ? smi->next() : termEnum->term(false) != NULL){
+ // initialize queue
+ queue->put(smi);
+ } else{
+ //Close the SegmentMergeInfo
+ smi->close();
+ //And have it deleted
+ _CLDELETE(smi);
+ }
+ }
+
+ //Check if the queue has elements
+ if (t != NULL && queue->size() > 0) {
+ next();
+ }
+}
+
+MultiTermEnum::~MultiTermEnum(){
+//Func - Destructor
+//Pre - true
+//Post - All the resource have been freed and the instance has been deleted
+
+ //Close the enumeration
+ close();
+
+ //Delete the queue
+ _CLDELETE(queue);
+}
+
+bool MultiTermEnum::next(){
+//Func - Move the current term to the next in the set of enumerations
+//Pre - true
+//Post - Returns true if term has been moved to the next in the set of enumerations
+// Returns false if this was not possible
+
+ SegmentMergeInfo* top = queue->top();
+ if (top == NULL) {
+ _CLDECDELETE(_term);
+ _term = NULL;
+ return false;
+ }
+
+ //The getTerm method requires the client programmer to indicate whether he
+ // owns the returned reference, so we can discard ours
+ // right away.
+ _CLDECDELETE(_term);
+
+ //Assign term the term of top and make sure the reference counter is increased
+ _term = _CL_POINTER(top->term);
+ _docFreq = 0;
+
+ //Find the next term
+ while (top != NULL && _term->compareTo(top->term) == 0) {
+ //don't delete, this is the top
+ queue->pop();
+ // increment freq
+ _docFreq += top->termEnum->docFreq();
+ if (top->next()){
+ // restore queue
+ queue->put(top);
+ }else{
+ // done with a segment
+ top->close();
+ _CLDELETE(top);
+ }
+ top = queue->top();
+ }
+
+ return true;
+}
+
+
+Term* MultiTermEnum::term() {
+//Func - Returns the current term of the set of enumerations
+//Pre - pointer is true or false and indicates if the reference counter
+// of term must be increased or not
+// next() must have been called once!
+//Post - pointer = true -> term has been returned with an increased reference counter
+// pointer = false -> term has been returned
+
+ return _CL_POINTER(_term);
+}
+
+Term* MultiTermEnum::term(bool pointer) {
+ if ( pointer )
+ return _CL_POINTER(_term);
+ else
+ return _term;
+}
+
+int32_t MultiTermEnum::docFreq() const {
+//Func - Returns the document frequency of the current term in the set
+//Pre - termInfo != NULL
+// next() must have been called once
+//Post - The document frequency of the current enumerated term has been returned
+
+ return _docFreq;
+}
+
+
+void MultiTermEnum::close() {
+//Func - Closes the set of enumerations in the queue
+//Pre - queue holds a valid reference to a SegmentMergeQueue
+//Post - The queue has been closed all SegmentMergeInfo instance have been deleted by
+// the closing of the queue
+// term has been finalized and reset to NULL
+
+ // Needed when this enumeration hasn't actually been exhausted yet
+ _CLDECDELETE(_term);
+
+ //Close the queue This will destroy all SegmentMergeInfo instances!
+ queue->close();
+
+}
+
+
+
+
+
+MultiTermPositions::MultiTermPositions(IndexReader** r, const int32_t* s){
+//Func - Constructor
+//Pre - if r is NULL then rLen must be 0 else if r != NULL then rLen > 0
+// s != NULL
+//Post - The instance has been created
+
+ subReaders = r;
+ subReadersLength = 0;
+ if ( subReaders != NULL ){
+ while ( subReaders[subReadersLength] != NULL )
+ subReadersLength ++ ;
+ }
+
+ CND_PRECONDITION(s != NULL, "s is NULL");
+
+ starts = s;
+ base = 0;
+ pointer = 0;
+ current = NULL;
+ term = NULL;
+
+ readerTermDocs = NULL;
+
+ //Check if there are readers
+ if(subReaders != NULL && subReadersLength > 0){
+ readerTermDocs = (TermDocs**)_CL_NEWARRAY(SegmentTermPositions*,subReadersLength);
+
+ CND_CONDITION(readerTermDocs != NULL,"No memory could be allocated for readerTermDocs");
+
+ //Initialize the readerTermDocs pointer array
+ for ( int32_t i=0;i<subReadersLength;i++){
+ readerTermDocs[i]=NULL;
+ }
+ }
+}
+
+
+TermDocs* MultiTermPositions::__asTermDocs(){
+ return (TermDocs*) this;
+}
+TermPositions* MultiTermPositions::__asTermPositions(){
+ return (TermPositions*) this;
+}
+
+
+TermDocs* MultiTermPositions::termDocs(const IndexReader* reader) const {
+// Here in the MultiTermPositions class, we want this->current to always
+// be a SegmentTermPositions rather than merely a SegmentTermDocs.
+// To that end, we override the termDocs(IndexReader&) method to produce
+// a SegmentTermPositions via the underlying reader's termPositions method
+// rather merely producing a SegmentTermDocs via the reader's termDocs
+// method.
+
+ TermPositions* tp = reader->termPositions();
+ TermDocs* ret = tp->__asTermDocs();
+
+ CND_CONDITION(ret != NULL,
+ "Dynamic downcast in MultiTermPositions::termDocs from"
+ " TermPositions to TermDocs failed."
+ );
+ return ret;
+ }
+
+int32_t MultiTermPositions::nextPosition() {
+ //Func -
+ //Pre - current != NULL
+ //Post -
+ CND_PRECONDITION(current != NULL,"current is NULL");
+
+ TermPositions* curAsTP = current->__asTermPositions();
+
+ CND_CONDITION(curAsTP != NULL,
+ "Dynamic downcast in MultiTermPositions::nextPosition from"
+ " SegmentTermDocs to TermPositions failed."
+ )
+ return curAsTP->nextPosition();
+}
+
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/index/MultiReader.h b/src/3rdparty/clucene/src/CLucene/index/MultiReader.h
new file mode 100644
index 0000000..1d76814
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/MultiReader.h
@@ -0,0 +1,202 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_index_MultiReader
+#define _lucene_index_MultiReader
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "SegmentHeader.h"
+#include "IndexReader.h"
+#include "CLucene/document/Document.h"
+#include "Terms.h"
+#include "SegmentMergeQueue.h"
+
+CL_NS_DEF(index)
+
+/** An IndexReader which reads multiple indexes, appending their content.
+*/
+class MultiTermDocs:public virtual TermDocs {
+private:
+protected:
+ TermDocs** readerTermDocs;
+
+ IndexReader** subReaders;
+ int32_t subReadersLength;
+ const int32_t* starts;
+ Term* term;
+
+ int32_t base;
+ int32_t pointer;
+
+ TermDocs* current; // == segTermDocs[pointer]
+public:
+ MultiTermDocs();
+ MultiTermDocs(IndexReader** subReaders, const int32_t* s);
+ virtual ~MultiTermDocs();
+
+ int32_t doc() const;
+ int32_t freq() const;
+
+ void seek(TermEnum* termEnum);
+ void seek(Term* tterm);
+ bool next();
+
+ /** Optimized implementation. */
+ int32_t read(int32_t* docs, int32_t* freqs, int32_t length);
+
+ /** As yet unoptimized implementation. */
+ bool skipTo(const int32_t target);
+
+ void close();
+
+ virtual TermPositions* __asTermPositions();
+protected:
+ virtual TermDocs* termDocs(const IndexReader* reader) const;
+private:
+ TermDocs* termDocs(const int32_t i) const;
+
+};
+
+
+//MultiTermEnum represents the enumeration of all terms of all readers
+class MultiTermEnum:public TermEnum {
+private:
+ SegmentMergeQueue* queue;
+
+ Term* _term;
+ int32_t _docFreq;
+public:
+ //Constructor
+ //Opens all enumerations of all readers
+ MultiTermEnum(IndexReader** subReaders, const int32_t* starts, const Term* t);
+
+ //Destructor
+ ~MultiTermEnum();
+
+ //Move the current term to the next in the set of enumerations
+ bool next();
+
+ //Returns a pointer to the current term of the set of enumerations
+ Term* term();
+ Term* term(bool pointer);
+
+ //Returns the document frequency of the current term in the set
+ int32_t docFreq() const;
+
+ //Closes the set of enumerations in the queue
+ void close();
+
+
+ const char* getObjectName(){ return MultiTermEnum::getClassName(); }
+ static const char* getClassName(){ return "MultiTermEnum"; }
+};
+
+
+class MultiTermPositions:public MultiTermDocs,public TermPositions {
+public:
+ MultiTermPositions(IndexReader** subReaders, const int32_t* s);
+ ~MultiTermPositions() {};
+ int32_t nextPosition();
+
+
+ virtual TermDocs* __asTermDocs();
+ virtual TermPositions* __asTermPositions();
+protected:
+ TermDocs* termDocs(const IndexReader* reader) const;
+};
+
+
+class MultiReader:public IndexReader{
+private:
+ bool _hasDeletions;
+ IndexReader** subReaders;
+ int32_t subReadersLength;
+ int32_t* starts; // 1st docno for each segment
+
+ CL_NS(util)::CLHashtable<const TCHAR*,uint8_t*,
+ CL_NS(util)::Compare::TChar,
+ CL_NS(util)::Equals::TChar,
+ CL_NS(util)::Deletor::tcArray,
+ CL_NS(util)::Deletor::Array<uint8_t> > normsCache;
+ int32_t _maxDoc;
+ int32_t _numDocs;
+ void initialize(IndexReader** subReaders);
+
+ int32_t readerIndex(const int32_t n) const;
+
+ bool hasNorms(const TCHAR* field);
+ uint8_t* ones;
+ uint8_t* fakeNorms();
+protected:
+ void doSetNorm(int32_t n, const TCHAR* field, uint8_t value);
+ void doUndeleteAll();
+ void doCommit();
+ // synchronized
+ void doClose();
+
+ // synchronized
+ void doDelete(const int32_t n);
+public:
+ /** Construct reading the named set of readers. */
+ MultiReader(CL_NS(store)::Directory* directory, SegmentInfos* sis, IndexReader** subReaders);
+
+ /**
+ * <p>Construct a MultiReader aggregating the named set of (sub)readers.
+ * Directory locking for delete, undeleteAll, and setNorm operations is
+ * left to the subreaders. </p>
+ * <p>Note that all subreaders are closed if this Multireader is closed.</p>
+ * @param subReaders set of (sub)readers
+ * @throws IOException
+ */
+ MultiReader(IndexReader** subReaders);
+
+ ~MultiReader();
+
+ /** Return an array of term frequency vectors for the specified document.
+ * The array contains a vector for each vectorized field in the document.
+ * Each vector vector contains term numbers and frequencies for all terms
+ * in a given vectorized field.
+ * If no such fields existed, the method returns null.
+ */
+ bool getTermFreqVectors(int32_t n, Array<TermFreqVector*>& result);
+ TermFreqVector* getTermFreqVector(int32_t n, const TCHAR* field);
+
+
+ // synchronized
+ int32_t numDocs();
+
+ int32_t maxDoc() const;
+
+ bool document(int32_t n, CL_NS(document)::Document* doc);
+
+ bool isDeleted(const int32_t n);
+ bool hasDeletions() const{ return _hasDeletions; }
+
+ // synchronized
+ uint8_t* norms(const TCHAR* field);
+ void norms(const TCHAR* field, uint8_t* result);
+
+ TermEnum* terms() const;
+ TermEnum* terms(const Term* term) const;
+
+ //Returns the document frequency of the current term in the set
+ int32_t docFreq(const Term* t=NULL) const;
+ TermDocs* termDocs() const;
+ TermPositions* termPositions() const;
+
+
+ /**
+ * @see IndexReader#getFieldNames(IndexReader.FieldOption fldOption)
+ */
+ void getFieldNames(FieldOption fldOption, CL_NS(util)::StringArrayWithDeletor& retarray);
+};
+
+
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/index/SegmentHeader.h b/src/3rdparty/clucene/src/CLucene/index/SegmentHeader.h
new file mode 100644
index 0000000..00b0899
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/SegmentHeader.h
@@ -0,0 +1,314 @@
+/*
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+*
+* Changes are Copyright(C) 2007, 2008 by Nokia Corporation and/or its subsidiary(-ies), all rights reserved.
+*/
+#ifndef _lucene_index_SegmentHeader_
+#define _lucene_index_SegmentHeader_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include <QtCore/QString>
+#include <QtCore/QStringList>
+
+#include "SegmentInfos.h"
+#include "CLucene/util/BitSet.h"
+#include "CLucene/util/VoidMap.h"
+#include "Term.h"
+#include "FieldInfos.h"
+#include "FieldsReader.h"
+#include "IndexReader.h"
+#include "TermInfosReader.h"
+#include "CompoundFile.h"
+#include "CLucene/util/ThreadLocal.h"
+
+CL_NS_DEF(index)
+
+class SegmentReader;
+
+class SegmentTermDocs : public virtual TermDocs
+{
+ int32_t _doc;
+ int32_t skipInterval;
+ int32_t numSkips;
+ int32_t skipCount;
+ CL_NS(store)::IndexInput* skipStream;
+ int32_t skipDoc;
+ int64_t freqPointer;
+ int64_t proxPointer;
+ int64_t skipPointer;
+ bool haveSkipped;
+
+protected:
+ // SegmentReader parent
+ const SegmentReader* parent;
+ CL_NS(store)::IndexInput* freqStream;
+ int32_t count;
+ int32_t df;
+ int32_t _freq;
+ CL_NS(util)::BitSet* deletedDocs;
+public:
+ virtual ~SegmentTermDocs();
+
+ virtual void seek(TermEnum* termEnum);
+ virtual void seek(Term* term);
+ virtual void seek(const TermInfo* ti);
+
+ virtual void close();
+ virtual int32_t doc()const;
+ virtual int32_t freq()const;
+
+ virtual bool next();
+
+ /** Optimized implementation. */
+ virtual int32_t read(int32_t* docs, int32_t* freqs, int32_t length);
+
+ /** Optimized implementation. */
+ virtual bool skipTo(const int32_t target);
+
+ virtual TermPositions* __asTermPositions();
+
+ // \param Parent must be a segment reader
+ SegmentTermDocs( const SegmentReader* Parent);
+protected:
+ virtual void skippingDoc(){}
+ virtual void skipProx(int64_t proxPointer){}
+};
+
+
+class SegmentTermPositions : public SegmentTermDocs, public TermPositions
+{
+private:
+ CL_NS(store)::IndexInput* proxStream;
+ int32_t proxCount;
+ int32_t position;
+
+public:
+ // \param Parent must be a segment reader
+ SegmentTermPositions(const SegmentReader* Parent);
+ ~SegmentTermPositions();
+
+ void seek(const TermInfo* ti);
+ void close();
+ int32_t nextPosition();
+ bool next();
+ int32_t read(int32_t* docs, int32_t* freqs, int32_t length);
+ virtual TermDocs* __asTermDocs();
+ virtual TermPositions* __asTermPositions();
+
+ //resolve SegmentTermDocs/TermPositions ambiguity
+ void seek(Term* term){ SegmentTermDocs::seek(term); }
+ void seek(TermEnum* termEnum){ SegmentTermDocs::seek(termEnum); }
+ int32_t doc() const{ return SegmentTermDocs::doc(); }
+ int32_t freq() const{ return SegmentTermDocs::freq(); }
+ bool skipTo(const int32_t target){ return SegmentTermDocs::skipTo(target); }
+
+protected:
+ void skippingDoc();
+ /** Called by super.skipTo(). */
+ void skipProx(int64_t proxPointer);
+};
+
+// An IndexReader responsible for reading 1 segment of an index
+class SegmentReader : public IndexReader
+{
+ /**
+ * The class Norm represents the normalizations for a field.
+ * These normalizations are read from an IndexInput in into an array of bytes called bytes
+ */
+ class Norm : LUCENE_BASE
+ {
+ int32_t number;
+ SegmentReader* reader;
+ QString segment; // segment name
+
+ public:
+ CL_NS(store)::IndexInput* in;
+ uint8_t* bytes;
+ bool dirty;
+ //Constructor
+ Norm(CL_NS(store)::IndexInput* instrm, int32_t number,
+ SegmentReader* reader, const QString& segment);
+ //Destructor
+ ~Norm();
+
+ void reWrite();
+ };
+ friend class SegmentReader::Norm;
+
+ //Holds the name of the segment that is being read
+ QString segment;
+
+ //Indicates if there are documents marked as deleted
+ bool deletedDocsDirty;
+ bool normsDirty;
+ bool undeleteAll;
+
+ //Holds all norms for all fields in the segment
+ typedef CL_NS(util)::CLHashtable<const TCHAR*,
+ Norm*,CL_NS(util)::Compare::TChar, CL_NS(util)::Equals::TChar> NormsType;
+ NormsType _norms;
+
+ uint8_t* ones;
+ uint8_t* fakeNorms();
+
+ // Compound File Reader when based on a compound file segment
+ CompoundFileReader* cfsReader;
+ // Reads the Field Info file
+ FieldsReader* fieldsReader;
+ TermVectorsReader* termVectorsReaderOrig;
+ CL_NS(util)::ThreadLocal<TermVectorsReader*,
+ CL_NS(util)::Deletor::Object<TermVectorsReader> >termVectorsLocal;
+
+ void initialize(SegmentInfo* si);
+
+ // Create a clone from the initial TermVectorsReader and store it in the
+ // ThreadLocal. @return TermVectorsReader
+ TermVectorsReader* getTermVectorsReader();
+
+protected:
+ // Marks document docNum as deleted
+ void doDelete(const int32_t docNum);
+ void doUndeleteAll();
+ void doCommit();
+ void doSetNorm(int32_t doc, const TCHAR* field, uint8_t value);
+
+ // can return null if norms aren't stored
+ uint8_t* getNorms(const TCHAR* field);
+
+public:
+ /**
+ Func - Constructor.
+ Opens all files of a segment
+ .fnm -> Field Info File
+ Field names are stored in the field info file, with suffix .fnm.
+ .frq -> Frequency File
+ The .frq file contains the lists of documents which contain
+ each term, along with the frequency of the term in that document.
+ .prx -> Prox File
+ The prox file contains the lists of positions that each term occurs
+ at within documents.
+ .tis -> Term Info File
+ This file is sorted by Term. Terms are ordered first lexicographically
+ by the term's field name, and within that lexicographically by the term's text.
+ .del -> Deletion File
+ The .del file is optional, and only exists when a segment contains deletions
+ .f[0-9]* -> Norm File
+ Contains s, for each document, a byte that encodes a value that is
+ multiplied into the score for hits on that field:
+ */
+ SegmentReader(SegmentInfo* si);
+
+ SegmentReader(SegmentInfos* sis, SegmentInfo* si);
+ // Destructor.
+ virtual ~SegmentReader();
+
+ // Closes all streams to the files of a single segment
+ void doClose();
+
+ // Checks if a segment managed by SegmentInfo si has deletions
+ static bool hasDeletions(const SegmentInfo* si);
+ bool hasDeletions() const;
+ bool hasNorms(const TCHAR* field) const;
+
+ // Returns all file names managed by this SegmentReader
+ void files(QStringList& retarray);
+ // Returns an enumeration of all the Terms and TermInfos in the set.
+ TermEnum* terms() const;
+ // Returns an enumeration of terms starting at or after the named term t
+ TermEnum* terms(const Term* t) const;
+
+ // Gets the document identified by n
+ bool document(int32_t n, CL_NS(document)::Document* doc);
+
+ // Checks if the n-th document has been marked deleted
+ bool isDeleted(const int32_t n);
+
+ // Returns an unpositioned TermDocs enumerator.
+ TermDocs* termDocs() const;
+ // Returns an unpositioned TermPositions enumerator.
+ TermPositions* termPositions() const;
+
+ // Returns the number of documents which contain the term t
+ int32_t docFreq(const Term* t) const;
+
+ // Returns the actual number of documents in the segment
+ int32_t numDocs();
+ // Returns the number of all the documents in the segment including the
+ // ones that have been marked deleted
+ int32_t maxDoc() const;
+
+ // Returns the bytes array that holds the norms of a named field.
+ // Returns fake norms if norms aren't available
+ uint8_t* norms(const TCHAR* field);
+
+ // Reads the Norms for field from disk
+ void norms(const TCHAR* field, uint8_t* bytes);
+
+ // concatenating segment with ext and x
+ QString SegmentName(const QString& ext, const int32_t x = -1);
+ // Creates a filename in buffer by concatenating segment with ext and x
+ void SegmentName(QString& buffer, int32_t bufferLen, const QString& ext,
+ const int32_t x = -1);
+
+ /**
+ * @see IndexReader#getFieldNames(IndexReader.FieldOption fldOption)
+ */
+ void getFieldNames(FieldOption fldOption, CL_NS(util)::StringArrayWithDeletor& retarray);
+
+ static bool usesCompoundFile(SegmentInfo* si);
+
+ /** Return a term frequency vector for the specified document and field. The
+ * vector returned contains term numbers and frequencies for all terms in
+ * the specified field of this document, if the field had storeTermVector
+ * flag set. If the flag was not set, the method returns null.
+ * @throws IOException
+ */
+ TermFreqVector* getTermFreqVector(int32_t docNumber, const TCHAR* field = NULL);
+
+ /** Return an array of term frequency vectors for the specified document.
+ * The array contains a vector for each vectorized field in the document.
+ * Each vector vector contains term numbers and frequencies for all terms
+ * in a given vectorized field.
+ * If no such fields existed, the method returns null.
+ * @throws IOException
+ */
+ bool getTermFreqVectors(int32_t docNumber, Array<TermFreqVector*>& result);
+
+private:
+ //Open all norms files for all fields
+ void openNorms(CL_NS(store)::Directory* cfsDir);
+ //Closes all norms files
+ void closeNorms();
+
+ // a bitVector that manages which documents have been deleted
+ CL_NS(util)::BitSet* deletedDocs;
+ // an IndexInput to the frequency file
+ CL_NS(store)::IndexInput* freqStream;
+ // For reading the fieldInfos file
+ FieldInfos* fieldInfos;
+ // For reading the Term Dictionary .tis file
+ TermInfosReader* tis;
+ // an IndexInput to the prox file
+ CL_NS(store)::IndexInput* proxStream;
+
+ static bool hasSeparateNorms(SegmentInfo* si);
+ static uint8_t* createFakeNorms(int32_t size);
+
+ // allow various classes to access the internals of this. this allows us
+ // to have a more tight idea of the package
+ friend class IndexReader;
+ friend class IndexWriter;
+ friend class SegmentTermDocs;
+ friend class SegmentTermPositions;
+ friend class MultiReader;
+};
+
+CL_NS_END
+
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/index/SegmentInfos.cpp b/src/3rdparty/clucene/src/CLucene/index/SegmentInfos.cpp
new file mode 100644
index 0000000..f62c406
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/SegmentInfos.cpp
@@ -0,0 +1,259 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+*/
+#include "CLucene/StdHeader.h"
+#include "SegmentInfos.h"
+
+#include "CLucene/store/Directory.h"
+#include "CLucene/util/Misc.h"
+
+CL_NS_USE(store)
+CL_NS_USE(util)
+CL_NS_DEF(index)
+
+SegmentInfo::SegmentInfo(const QString& Name, const int32_t DocCount,
+ CL_NS(store)::Directory* Dir)
+ : docCount(DocCount)
+ , dir(Dir)
+{
+ //Func - Constructor. Initialises SegmentInfo.
+ //Pre - Name holds the unique name in the directory Dir
+ // DocCount holds the number of documents in the segment
+ // Dir holds the Directory where the segment resides
+ //Post - The instance has been created. name contains the duplicated string
+ // Name. docCount = DocCount and dir references Dir
+ name = Name;
+}
+
+SegmentInfo::~SegmentInfo()
+{
+}
+
+SegmentInfos::SegmentInfos(bool _deleteMembers)
+ : deleteMembers(_deleteMembers)
+{
+ //Func - Constructor
+ //Pre - deleteMembers indicates if the instance to be created must delete
+ // all SegmentInfo instances it manages when the instance is destroyed
+ // or not true -> must delete, false may not delete
+ //Post - An instance of SegmentInfos has been created.
+
+ //initialize counter to 0
+ counter = 0;
+ version = Misc::currentTimeMillis();
+}
+
+SegmentInfos::~SegmentInfos()
+{
+ //Func - Destructor
+ //Pre - true
+ //Post - The instance has been destroyed. Depending on the constructor used
+ // the SegmentInfo instances that this instance managed have been
+ // deleted or not.
+
+ if (deleteMembers) {
+ segmentInfosType::iterator it;
+ for (it = infos.begin(); it != infos.end(); ++it)
+ _CLLDELETE(*it);
+ }
+ //Clear the list of SegmentInfo instances - make sure everything is deleted
+ infos.clear();
+}
+
+SegmentInfo* SegmentInfos::info(int32_t i) const
+{
+ //Func - Returns a reference to the i-th SegmentInfo in the list.
+ //Pre - i >= 0
+ //Post - A reference to the i-th SegmentInfo instance has been returned
+
+ CND_PRECONDITION(i >= 0, "i contains negative number");
+
+ //Get the i-th SegmentInfo instance
+ SegmentInfo *ret = infos.value(i, 0);
+
+ //Condition check to see if the i-th SegmentInfo has been retrieved
+ CND_CONDITION(ret != NULL, "No SegmentInfo instance found");
+
+ return ret;
+}
+
+void SegmentInfos::clearto(size_t _min)
+{
+ // Make sure we actually need to remove
+ if (infos.size() > _min) {
+ segmentInfosType::iterator itr;
+ segmentInfosType::iterator eitr = infos.end();
+ segmentInfosType::iterator bitr = infos.begin() + _min;
+
+ for(itr = bitr; itr != eitr; ++itr)
+ _CLLDELETE((*itr));
+ infos.erase(bitr, eitr);
+ }
+}
+
+void SegmentInfos::add(SegmentInfo* info)
+{
+ infos.push_back(info);
+}
+
+int32_t SegmentInfos::size() const
+{
+ return infos.size();
+}
+
+void SegmentInfos::read(Directory* directory)
+{
+ //Func - Reads segments file that resides in directory.
+ //Pre - directory contains a valid reference
+ //Post - The segments file has been read and for each segment found
+ // a SegmentsInfo intance has been created and stored.
+
+ //Open an IndexInput to the segments file and check if valid
+ IndexInput* input = directory->openInput(QLatin1String("segments"));
+ if (input) {
+ try {
+ int32_t format = input->readInt();
+ // file contains explicit format info
+ if (format < 0) {
+ // check that it is a format we can understand
+ if (format < FORMAT) {
+ TCHAR err[30];
+ _sntprintf(err, 30, _T("Unknown format version: %d"), format);
+ _CLTHROWT(CL_ERR_Runtime, err);
+ }
+ // read version
+ version = input->readLong();
+ // read counter
+ counter = input->readInt();
+ } else {
+ // file is in old format without explicit format info
+ counter = format;
+ }
+
+ //Temporary variable for storing the name of the segment
+ char aname[CL_MAX_PATH] = { 0 };
+ TCHAR tname[CL_MAX_PATH] = { 0 };
+
+ //read segmentInfos
+ for (int32_t i = input->readInt(); i > 0; --i) {
+ // read the name of the segment
+ input->readString(tname, CL_MAX_PATH);
+ STRCPY_TtoA(aname, tname, CL_MAX_PATH);
+
+ //Instantiate a new SegmentInfo Instance
+ SegmentInfo* si = _CLNEW SegmentInfo(QLatin1String(aname),
+ input->readInt(), directory);
+
+ //Condition check to see if si points to an instance
+ CND_CONDITION(si != NULL, "Memory allocation for si failed") ;
+
+ //store SegmentInfo si
+ infos.push_back(si);
+ }
+
+ if (format >= 0) {
+ // in old format the version number may be at the end of the file
+ if (input->getFilePointer() >= input->length()) {
+ // old file format without version number
+ version = Misc::currentTimeMillis();
+ } else {
+ // read version
+ version = input->readLong();
+ }
+ }
+ } _CLFINALLY (
+ //destroy the inputStream input. The destructor of IndexInput will
+ //also close the Inputstream input
+ _CLDELETE(input);
+ );
+ }
+}
+
+void SegmentInfos::write(Directory* directory)
+{
+ //Func - Writes a new segments file based upon the SegmentInfo instances it manages
+ //Pre - directory is a valid reference to a Directory
+ //Post - The new segment has been written to disk
+
+ //Open an IndexOutput to the segments file and check if valid
+ IndexOutput* output = directory->createOutput(QLatin1String("segments.new"));
+ if (output) {
+ try {
+ // write FORMAT
+ output->writeInt(FORMAT);
+ // every write changes the index
+ output->writeLong(++version);
+ // Write the counter
+ output->writeInt(counter);
+
+ // Write the number of SegmentInfo Instances which is equal to the number
+ // of segments in directory as each SegmentInfo manages a single segment
+ output->writeInt(infos.size());
+
+ //temporary value for wide segment name
+ TCHAR tname[CL_MAX_PATH];
+
+ //Iterate through all the SegmentInfo instances
+ for (uint32_t i = 0; i < infos.size(); ++i) {
+ //Retrieve the SegmentInfo
+ SegmentInfo *si = infos.value(i, 0);
+ //Condition check to see if si has been retrieved
+ CND_CONDITION(si != NULL, "No SegmentInfo instance found");
+
+ //Write the name of the current segment
+ int32_t count = si->name.toWCharArray(tname);
+ tname[count] = '\0';
+ output->writeString(tname, _tcslen(tname));
+
+ //Write the number of documents in the segment
+ output->writeInt(si->docCount);
+ }
+ } _CLFINALLY(
+ output->close();
+ _CLDELETE(output);
+ );
+
+ // install new segment info
+ directory->renameFile(QLatin1String("segments.new"),
+ QLatin1String("segments"));
+ }
+}
+
+
+int64_t SegmentInfos::readCurrentVersion(Directory* directory)
+{
+ int32_t format = 0;
+ int64_t version = 0;
+ IndexInput* input = directory->openInput(QLatin1String("segments"));
+ try {
+ format = input->readInt();
+ if (format < 0){
+ if (format < FORMAT) {
+ TCHAR err[30];
+ _sntprintf(err, 30, _T("Unknown format version: %d"), format);
+ _CLTHROWT(CL_ERR_Runtime, err);
+ }
+ // read version
+ version = input->readLong();
+ }
+ } _CLFINALLY (
+ input->close();
+ _CLDELETE(input);
+ );
+
+ if (format < 0)
+ return version;
+
+ // We cannot be sure about the format of the file. Therefore we have to
+ // read the whole file and cannot simply seek to the version entry.
+ SegmentInfos segmentInfos;
+ segmentInfos.read(directory);
+ return segmentInfos.getVersion();
+}
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/index/SegmentInfos.h b/src/3rdparty/clucene/src/CLucene/index/SegmentInfos.h
new file mode 100644
index 0000000..ce71838
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/SegmentInfos.h
@@ -0,0 +1,128 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+*/
+#ifndef _lucene_index_SegmentInfos_
+#define _lucene_index_SegmentInfos_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include <QtCore/QString>
+#include <QtCore/QVector>
+
+#include "CLucene/store/Directory.h"
+
+CL_NS_DEF(index)
+
+class SegmentInfo : LUCENE_BASE
+{
+public:
+ SegmentInfo(const QString& Name, const int32_t DocCount,
+ CL_NS(store)::Directory* Dir);
+ ~SegmentInfo();
+
+ ///Gets the Directory where the segment resides
+ CL_NS(store)::Directory* getDir() const { return dir; }
+
+ //Unique name in directory dir
+ QString name;
+
+ //Number of docs in the segment
+ const int32_t docCount;
+
+private:
+ //Directory where the segment resides
+ CL_NS(store)::Directory* dir;
+};
+
+typedef QVector<SegmentInfo*> segmentInfosType;
+
+//SegmentInfos manages a list of SegmentInfo instances
+//Each SegmentInfo contains information about a segment in a directory.
+//
+//The active segments in the index are stored in the segment info file.
+//An index only has a single file in this format, and it is named "segments".
+//This lists each segment by name, and also contains the size of each segment.
+//The format of the file segments is defined as follows:
+//
+// SegCount
+//Segments --> SegCount, <SegName, SegSize>
+//
+//SegCount, SegSize --> UInt32
+//
+//SegName --> String
+//
+//SegName is the name of the segment, and is used as the file name prefix
+//for all of the files that compose the segment's index.
+//
+//SegSize is the number of documents contained in the segment index.
+//
+//Note:
+//At http://jakarta.apache.org/lucene/docs/fileformats.html the definition
+//of all file formats can be found. Note that java lucene currently
+//defines Segments as follows:
+//
+//Segments --> Format, Version, SegCount, <SegName, SegSize>SegCount
+//
+//Format, SegCount, SegSize --> UInt32
+//
+//Format and Version have not been implemented yet
+class SegmentInfos : LUCENE_BASE
+{
+public:
+ SegmentInfos(bool deleteMembers = true);
+ ~SegmentInfos();
+
+ //delete and clears objects 'from' from to 'to'
+ void clearto(size_t to);
+
+ //count of segment infos
+ int32_t size() const;
+
+ //add a segment info
+ void add(SegmentInfo* info);
+
+ //Returns a reference to the i-th SegmentInfo in the list.
+ SegmentInfo* info(int32_t i) const;
+
+ // version number when this SegmentInfos was generated.
+ int64_t getVersion() const { return version; }
+
+ static int64_t readCurrentVersion(CL_NS(store)::Directory* directory);
+
+ //Reads segments file that resides in directory
+ void read(CL_NS(store)::Directory* directory);
+
+ //Writes a new segments file based upon the SegmentInfo instances it manages
+ void write(CL_NS(store)::Directory* directory);
+
+private:
+ // The file format version, a negative number.
+ // Works since counter, the old 1st entry, is always >= 0
+ LUCENE_STATIC_CONSTANT(int32_t, FORMAT = -1);
+
+ // counts how often the index has been changed by adding or deleting docs.
+ // starting with the current time in milliseconds forces to create unique
+ // version numbers.
+ int64_t version;
+
+ segmentInfosType infos;
+
+ // used to name new segments
+ int32_t counter;
+
+ // allow IndexWriter to use counter
+ friend class IndexWriter;
+
+ bool deleteMembers;
+};
+
+CL_NS_END
+
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/index/SegmentMergeInfo.cpp b/src/3rdparty/clucene/src/CLucene/index/SegmentMergeInfo.cpp
new file mode 100644
index 0000000..85ac784
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/SegmentMergeInfo.cpp
@@ -0,0 +1,104 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "SegmentMergeInfo.h"
+
+#include "SegmentTermEnum.h"
+#include "SegmentHeader.h"
+
+CL_NS_DEF(index)
+
+SegmentMergeInfo::SegmentMergeInfo(const int32_t b, TermEnum* te, IndexReader* r):
+ reader(r),termEnum(te),base(b), docMap(NULL) {
+//Func - Constructor
+//Pre - b >= 0
+// te contains a valid reference to a SegmentTermEnum instance
+// r contains a valid reference to a SegmentReader instance
+//Post - The instance has been created
+
+ CND_PRECONDITION(b >= 0, "b is a negative number");
+
+ postings=NULL;
+ term = te->term();
+}
+
+SegmentMergeInfo::~SegmentMergeInfo(){
+//Func - Destructor
+//Pre - true
+//Post - The instance has been destroyed
+
+ close();
+}
+
+int32_t* SegmentMergeInfo::getDocMap(){
+ if ( docMap == NULL ){
+ // build array which maps document numbers around deletions
+ if (reader->hasDeletions()) {
+ //Get the total number of documents managed by the reader including the deleted ones
+ int32_t maxDoc = reader->maxDoc();
+ //Create a map for all documents
+ docMap = _CL_NEWARRAY(int32_t,maxDoc);
+ int32_t j = 0;
+ //Iterate through all the document numbers
+ for (int32_t i = 0; i < maxDoc; i++) {
+ //Check if document i is marked deleted
+ if (reader->isDeleted(i)){
+ //Document i has not been marked deleted so assign -1
+ docMap[i] = -1;
+ }else{
+ docMap[i] = j++;
+ }
+ }
+ }
+ }
+ return docMap;
+}
+
+TermPositions* SegmentMergeInfo::getPositions() {
+ if (postings == NULL) {
+ postings = reader->termPositions();
+ }
+ return postings;
+}
+
+
+bool SegmentMergeInfo::next() {
+//Func - Moves the current term of the enumeration termEnum to the next and term
+// points to this new current term
+//Pre - true
+//Post - Returns true if the term has been moved to the next otherwise false
+ if (termEnum->next()) {
+ _CLDECDELETE(term);
+ term = termEnum->term();
+ return true;
+ } else {
+ _CLDECDELETE(term); //TODO: test HighFreqTerms errors with this
+ term = NULL;
+ return false;
+ }
+}
+
+void SegmentMergeInfo::close() {
+//Func - Closes the the resources
+//Pre - true
+//Post - The resources have been closed
+
+ //First make sure posting has been closed
+ if ( postings != NULL ){
+ postings->close();
+ _CLVDELETE(postings); //todo: not a clucene object... should be
+ }
+
+ if ( termEnum != NULL ){
+ termEnum->close();
+ _CLDELETE(termEnum);
+ }
+ _CLDECDELETE(term);
+ _CLDELETE_ARRAY(docMap);
+}
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/index/SegmentMergeInfo.h b/src/3rdparty/clucene/src/CLucene/index/SegmentMergeInfo.h
new file mode 100644
index 0000000..7ffd46a
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/SegmentMergeInfo.h
@@ -0,0 +1,47 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_index_SegmentMergeInfo_
+#define _lucene_index_SegmentMergeInfo_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "SegmentTermEnum.h"
+#include "SegmentHeader.h"
+
+CL_NS_DEF(index)
+class SegmentMergeInfo:LUCENE_BASE {
+ int32_t* docMap; // maps around deleted docs
+ TermPositions* postings;
+public:
+ TermEnum* termEnum;
+ Term* term;
+ int32_t base;
+ IndexReader* reader;
+
+ //Constructor
+ SegmentMergeInfo(const int32_t b, TermEnum* te, IndexReader* r);
+
+ //Destructor
+ ~SegmentMergeInfo();
+
+ //Moves the current term of the enumeration termEnum to the next and term
+ //points to this new current term
+ bool next();
+
+ //Closes the the resources
+ void close();
+
+ // maps around deleted docs
+ int32_t* getDocMap();
+
+ TermPositions* getPositions();
+};
+CL_NS_END
+#endif
+
diff --git a/src/3rdparty/clucene/src/CLucene/index/SegmentMergeQueue.cpp b/src/3rdparty/clucene/src/CLucene/index/SegmentMergeQueue.cpp
new file mode 100644
index 0000000..8797812
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/SegmentMergeQueue.cpp
@@ -0,0 +1,74 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "SegmentMergeQueue.h"
+
+#include "SegmentMergeInfo.h"
+CL_NS_DEF(index)
+
+
+ SegmentMergeQueue::SegmentMergeQueue(const int32_t size) {
+ //Func - Constructor
+ // Creates a queue of length size
+ //Pre - size >= 0
+ //Post - The queue has been created of length size
+
+ //BVK: bug. changed condition from size > 0 to size >= 0
+ //if size is 0, as it is when retrieving a TermEnum
+ //from an empty index this should this should not fail.
+ CND_PRECONDITION(size >= 0, "size is too small");
+
+ //Call the initialize method of its superclass. The boolean value passed here
+ //indicates that the superclass PriorityQueue takes the responsibility to have its elements deleted
+ //The destructor of SegmentMergInfo will make sure that each intstance it will be closed properly
+ //before it is deleted
+ initialize(size,true);
+ }
+
+ SegmentMergeQueue::~SegmentMergeQueue(){
+ //Func - Destructor
+ // Does nothing as its parent class will clean up everything
+ //Pre - true
+ //Post - true
+ close();
+ }
+
+ void SegmentMergeQueue::close() {
+ //Func - Closes and destroyes all SegmentMergeInfo Instances in the queue
+ //Pre - true
+ //post - All SegmentMergeInfo Instances in the queue have been closed and deleted
+ // The queue is now empty but can still be used
+
+ //call the clear method of the parent class PriorityQueue
+ clear();
+ }
+
+ bool SegmentMergeQueue::lessThan(SegmentMergeInfo* stiA, SegmentMergeInfo* stiB) {
+ //Func - Overloaded method that implements the lessThan operator for the parent class
+ // This method is used by the parent class Priority queue to reorder its internal
+ // data structures. This implementation check if stiA is less than the current term of stiB.
+ //Pre - stiA != NULL
+ // stiB != NULL
+ //Post - true is returned if stiA < stiB otherwise false
+
+ CND_PRECONDITION(stiA != NULL, "stiA is NULL");
+ CND_PRECONDITION(stiB != NULL, "stiB is NULL");
+
+ //Compare the two terms
+ int32_t comparison = stiA->term->compareTo(stiB->term);
+ //Check if they match
+ if (comparison == 0){ //todo: can we do an optimized compare here? compare using equals, then compare properly?
+ //If the match check if the base of stiA is smaller than the base of stiB
+ //Note that different bases means that the terms of stiA an stiB ly in different segments
+ return stiA->base < stiB->base;
+ }else{
+ //Terms didn't match so return the difference in positions
+ return comparison < 0;
+ }
+ }
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/index/SegmentMergeQueue.h b/src/3rdparty/clucene/src/CLucene/index/SegmentMergeQueue.h
new file mode 100644
index 0000000..faa6902
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/SegmentMergeQueue.h
@@ -0,0 +1,38 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_index_SegmentMergeQueue_
+#define _lucene_index_SegmentMergeQueue_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "CLucene/util/PriorityQueue.h"
+#include "SegmentMergeInfo.h"
+
+CL_NS_DEF(index)
+ class SegmentMergeQueue :public CL_NS(util)::PriorityQueue<SegmentMergeInfo*,CL_NS(util)::Deletor::Object<SegmentMergeInfo> > {
+ public:
+ //Constructor
+ //Creates a queue of length size
+ SegmentMergeQueue(const int32_t size);
+
+ //Destructor
+ //Does nothing as its parent class will clean up everything
+ ~SegmentMergeQueue();
+
+ //Closes and destroyes all SegmentMergeInfo Instances in the queue
+ void close();
+ protected:
+ //Overloaded method that implements the lessThan operator for the parent class
+ //This method is used by the parent class Priority queue to reorder its internal
+ //data structures. This implementation check if stiA is less than the current term of stiB.
+ bool lessThan(SegmentMergeInfo* stiA, SegmentMergeInfo* stiB);
+
+ };
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/index/SegmentMerger.cpp b/src/3rdparty/clucene/src/CLucene/index/SegmentMerger.cpp
new file mode 100644
index 0000000..40814da
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/SegmentMerger.cpp
@@ -0,0 +1,723 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright(C) 2007, 2008 by Nokia Corporation and/or its subsidiary(-ies), all rights reserved.
+*/
+#include "CLucene/StdHeader.h"
+#include "SegmentMerger.h"
+
+CL_NS_USE(util)
+CL_NS_USE(document)
+CL_NS_USE(store)
+CL_NS_DEF(index)
+
+// File extensions of old-style index files
+int COMPOUND_EXTENSIONS_LENGTH = 7;
+const char* COMPOUND_EXTENSIONS = "fnm\0" "frq\0" "prx\0" "fdx\0" "fdt\0" "tii\0" "tis\0";
+
+int VECTOR_EXTENSIONS_LENGTH = 3;
+const char* VECTOR_EXTENSIONS = "tvx\0" "tvd\0" "tvf\0";
+
+SegmentMerger::SegmentMerger(IndexWriter* writer, const QString& name)
+{
+ //Func - Constructor
+ //Pre - dir holds a valid reference to a Directory
+ // name != NULL
+ //Post - Instance has been created
+
+ CND_PRECONDITION(!name.isEmpty(), "name is NULL");
+
+ freqOutput = NULL;
+ proxOutput = NULL;
+ termInfosWriter = NULL;
+ queue = NULL;
+ fieldInfos = NULL;
+ useCompoundFile = writer->getUseCompoundFile();
+ skipBuffer = _CLNEW CL_NS(store)::RAMIndexOutput();
+
+ segment = name;
+ directory = writer->getDirectory();
+ termIndexInterval = writer->getTermIndexInterval();
+
+ lastSkipDoc=0;
+ lastSkipFreqPointer=0;
+ lastSkipProxPointer=0;
+ skipInterval=0;
+}
+
+SegmentMerger::~SegmentMerger()
+{
+ //Func - Destructor
+ //Pre - true
+ //Post - The instance has been destroyed
+
+ //Clear the readers set
+ readers.clear();
+
+ //Delete field Infos
+ _CLDELETE(fieldInfos);
+ //Close and destroy the IndexOutput to the Frequency File
+ if (freqOutput != NULL) {
+ freqOutput->close();
+ _CLDELETE(freqOutput);
+ }
+ //Close and destroy the IndexOutput to the Prox File
+ if (proxOutput != NULL) {
+ proxOutput->close();
+ _CLDELETE(proxOutput);
+ }
+ //Close and destroy the termInfosWriter
+ if (termInfosWriter != NULL) {
+ termInfosWriter->close();
+ _CLDELETE(termInfosWriter);
+ }
+ //Close and destroy the queue
+ if (queue != NULL) {
+ queue->close();
+ _CLDELETE(queue);
+ }
+ //close and destory the skipBuffer
+ if (skipBuffer != NULL) {
+ skipBuffer->close();
+ _CLDELETE(skipBuffer);
+ }
+}
+
+void SegmentMerger::add(IndexReader* reader)
+{
+ //Func - Adds a IndexReader to the set of readers
+ //Pre - reader contains a valid reference to a IndexReader
+ //Post - The SegementReader reader has been added to the set of readers
+
+ readers.push_back(reader);
+}
+
+IndexReader* SegmentMerger::segmentReader(const int32_t i)
+{
+ //Func - Returns a reference to the i-th IndexReader
+ //Pre - 0 <= i < readers.size()
+ //Post - A reference to the i-th IndexReader has been returned
+
+ CND_PRECONDITION(i >= 0, "i is a negative number");
+ CND_PRECONDITION((size_t)i < readers.size(),
+ "i is bigger than the number of IndexReader instances");
+
+ //Retrieve the i-th IndexReader
+ IndexReader* ret = readers[i];
+ CND_CONDITION(ret != NULL, "No IndexReader found");
+
+ return ret;
+}
+
+int32_t SegmentMerger::merge()
+{
+ int32_t value = mergeFields();
+ mergeTerms();
+ mergeNorms();
+
+ if (fieldInfos->hasVectors())
+ mergeVectors();
+
+ return value;
+}
+
+void SegmentMerger::closeReaders()
+{
+ for (uint32_t i = 0; i < readers.size(); i++) {
+ // close readers
+ IndexReader* reader = readers[i];
+ reader->close();
+ }
+}
+
+void SegmentMerger::createCompoundFile(const QString& filename, QStringList& files)
+{
+ CompoundFileWriter* cfsWriter = _CLNEW CompoundFileWriter(directory, filename);
+
+ { //msvc6 scope fix
+ // Basic files
+ for (int32_t i = 0; i < COMPOUND_EXTENSIONS_LENGTH; i++) {
+ files.push_back(Misc::qjoin(segment, QLatin1String("."),
+ QLatin1String(COMPOUND_EXTENSIONS+(i*4))));
+ }
+ }
+
+ { //msvc6 scope fix
+ // Field norm files
+ for (int32_t i = 0; i < fieldInfos->size(); i++) {
+ FieldInfo* fi = fieldInfos->fieldInfo(i);
+ if (fi->isIndexed && !fi->omitNorms) {
+ TCHAR tbuf[10];
+ char abuf[10];
+ _i64tot(i, tbuf, 10);
+ STRCPY_TtoA(abuf, tbuf, 10);
+
+ files.push_back(Misc::qjoin(segment, QLatin1String(".f"),
+ QLatin1String(abuf)));
+ }
+ }
+ }
+
+ // Vector files
+ if (fieldInfos->hasVectors()) {
+ for (int32_t i = 0; i < VECTOR_EXTENSIONS_LENGTH; i++) {
+ files.push_back(Misc::qjoin(segment, QLatin1String("."),
+ QLatin1String(VECTOR_EXTENSIONS+(i*4))));
+ }
+ }
+
+ { //msvc6 scope fix
+ // Now merge all added files
+ for (size_t i=0;i<files.size();i++) {
+ cfsWriter->addFile(files[i]);
+ }
+ }
+
+ // Perform the merge
+ cfsWriter->close();
+ _CLDELETE(cfsWriter);
+}
+
+void SegmentMerger::addIndexed(IndexReader* reader, FieldInfos* fieldInfos,
+ StringArrayWithDeletor& names, bool storeTermVectors,
+ bool storePositionWithTermVector, bool storeOffsetWithTermVector)
+{
+ StringArrayWithDeletor::const_iterator itr = names.begin();
+ while (itr != names.end()) {
+ fieldInfos->add(*itr, true,
+ storeTermVectors, storePositionWithTermVector,
+ storeOffsetWithTermVector, !reader->hasNorms(*itr));
+ ++itr;
+ }
+}
+
+int32_t SegmentMerger::mergeFields()
+{
+ //Func - Merge the fields of all segments
+ //Pre - true
+ //Post - The field infos and field values of all segments have been merged.
+
+ //Create a new FieldInfos
+ fieldInfos = _CLNEW FieldInfos(); // merge field names
+
+ //Condition check to see if fieldInfos points to a valid instance
+ CND_CONDITION(fieldInfos != NULL, "Memory allocation for fieldInfos failed");
+
+ IndexReader* reader = NULL;
+
+ int32_t docCount = 0;
+
+ //Iterate through all readers
+ for (uint32_t i = 0; i < readers.size(); i++) {
+ //get the i-th reader
+ reader = readers[i];
+ //Condition check to see if reader points to a valid instance
+ CND_CONDITION(reader != NULL,"No IndexReader found");
+
+ StringArrayWithDeletor tmp;
+
+ tmp.clear();
+ reader->getFieldNames(IndexReader::TERMVECTOR_WITH_POSITION_OFFSET, tmp);
+ addIndexed(reader, fieldInfos, tmp, true, true, true);
+
+ tmp.clear();
+ reader->getFieldNames(IndexReader::TERMVECTOR_WITH_POSITION, tmp);
+ addIndexed(reader, fieldInfos, tmp, true, true, false);
+
+ tmp.clear();
+ reader->getFieldNames(IndexReader::TERMVECTOR_WITH_OFFSET, tmp);
+ addIndexed(reader, fieldInfos, tmp, true, false, true);
+
+ tmp.clear();
+ reader->getFieldNames(IndexReader::TERMVECTOR, tmp);
+ addIndexed(reader, fieldInfos, tmp, true, false, false);
+
+ tmp.clear();
+ reader->getFieldNames(IndexReader::INDEXED, tmp);
+ addIndexed(reader, fieldInfos, tmp, false, false, false);
+
+ tmp.clear();
+ reader->getFieldNames(IndexReader::UNINDEXED, tmp);
+ if (tmp.size() > 0) {
+ TCHAR** arr = _CL_NEWARRAY(TCHAR*,tmp.size()+1);
+ tmp.toArray(arr);
+ fieldInfos->add((const TCHAR**)arr, false);
+ _CLDELETE_ARRAY(arr);
+ //no need to delete the contents, since tmp is responsible for it
+ }
+ }
+
+ //Create the filename of the new FieldInfos file
+ QString buf = Misc::segmentname(segment, QLatin1String(".fnm"));
+ //Write the new FieldInfos file to the directory
+ fieldInfos->write(directory, buf);
+
+ // merge field values
+ // Instantiate Fieldswriter which will write in directory for the segment
+ // name segment using the new merged fieldInfos
+ FieldsWriter* fieldsWriter = _CLNEW FieldsWriter(directory, segment, fieldInfos);
+
+ //Condition check to see if fieldsWriter points to a valid instance
+ CND_CONDITION(fieldsWriter != NULL, "Memory allocation for fieldsWriter failed");
+
+ try {
+ IndexReader* reader = NULL;
+ int32_t maxDoc = 0;
+ //Iterate through all readers
+ for (uint32_t i = 0; i < readers.size(); i++) {
+ // get the i-th reader
+ reader = readers[i];
+
+
+ // Condition check to see if reader points to a valid instance
+ CND_CONDITION(reader != NULL, "No IndexReader found");
+
+ // Get the total number documents including the documents that have
+ // been marked deleted
+ int32_t maxDoc = reader->maxDoc();
+
+ //document buffer
+ Document doc;
+
+ //Iterate through all the documents managed by the current reader
+ for (int32_t j = 0; j < maxDoc; j++) {
+ //Check if the j-th document has been deleted, if so skip it
+ if (!reader->isDeleted(j)) {
+ //Get the document
+ if (reader->document(j, &doc)) {
+ //Add the document to the new FieldsWriter
+ fieldsWriter->addDocument(&doc);
+ docCount++;
+ //doc is cleard for re-use
+ doc.clear();
+ }
+ }
+ }
+ }
+ } _CLFINALLY (
+ //Close the fieldsWriter
+ fieldsWriter->close();
+ //And have it deleted as it not used any more
+ _CLDELETE(fieldsWriter);
+ );
+
+ return docCount;
+}
+
+void SegmentMerger::mergeVectors()
+{
+ TermVectorsWriter* termVectorsWriter =
+ _CLNEW TermVectorsWriter(directory, segment, fieldInfos);
+
+ try {
+ for (uint32_t r = 0; r < readers.size(); r++) {
+ IndexReader* reader = readers[r];
+ int32_t maxDoc = reader->maxDoc();
+ for (int32_t docNum = 0; docNum < maxDoc; docNum++) {
+ // skip deleted docs
+ if (reader->isDeleted(docNum))
+ continue;
+
+ Array<TermFreqVector*> tmp;
+ if (reader->getTermFreqVectors(docNum, tmp))
+ termVectorsWriter->addAllDocVectors(tmp);
+ tmp.deleteAll();
+ }
+ }
+ } _CLFINALLY (
+ _CLDELETE(termVectorsWriter);
+ );
+}
+
+
+void SegmentMerger::mergeTerms()
+{
+ //Func - Merge the terms of all segments
+ //Pre - fieldInfos != NULL
+ //Post - The terms of all segments have been merged
+
+ CND_PRECONDITION(fieldInfos != NULL, "fieldInfos is NULL");
+
+ try{
+ //create a filename for the new Frequency File for segment
+ QString buf = Misc::segmentname(segment, QLatin1String(".frq"));
+ //Open an IndexOutput to the new Frequency File
+ freqOutput = directory->createOutput(buf);
+
+ //create a filename for the new Prox File for segment
+ buf = Misc::segmentname(segment, QLatin1String(".prx"));
+ //Open an IndexOutput to the new Prox File
+ proxOutput = directory->createOutput(buf);
+
+ //Instantiate a new termInfosWriter which will write in directory
+ //for the segment name segment using the new merged fieldInfos
+ termInfosWriter = _CLNEW TermInfosWriter(directory, segment, fieldInfos,
+ termIndexInterval);
+
+ //Condition check to see if termInfosWriter points to a valid instance
+ CND_CONDITION(termInfosWriter != NULL,
+ "Memory allocation for termInfosWriter failed");
+
+ skipInterval = termInfosWriter->skipInterval;
+ queue = _CLNEW SegmentMergeQueue(readers.size());
+
+ //And merge the Term Infos
+ mergeTermInfos();
+ } _CLFINALLY (
+ //Close and destroy the IndexOutput to the Frequency File
+ if (freqOutput != NULL) {
+ freqOutput->close(); _CLDELETE(freqOutput);
+ }
+
+ //Close and destroy the IndexOutput to the Prox File
+ if (proxOutput != NULL)
+ {
+ proxOutput->close();
+ _CLDELETE(proxOutput);
+ }
+
+ //Close and destroy the termInfosWriter
+ if (termInfosWriter != NULL) {
+ termInfosWriter->close();
+ _CLDELETE(termInfosWriter);
+ }
+
+ //Close and destroy the queue
+ if (queue != NULL) {
+ queue->close();
+ _CLDELETE(queue);
+ }
+ );
+}
+
+void SegmentMerger::mergeTermInfos()
+{
+ //Func - Merges all TermInfos into a single segment
+ //Pre - true
+ //Post - All TermInfos have been merged into a single segment
+
+ //Condition check to see if queue points to a valid instance
+ CND_CONDITION(queue != NULL, "Memory allocation for queue failed");
+
+ //base is the id of the first document in a segment
+ int32_t base = 0;
+
+ IndexReader* reader = NULL;
+ SegmentMergeInfo* smi = NULL;
+
+ //iterate through all the readers
+ for (uint32_t i = 0; i < readers.size(); i++) {
+ //Get the i-th reader
+ reader = readers[i];
+
+ //Condition check to see if reader points to a valid instance
+ CND_CONDITION(reader != NULL, "No IndexReader found");
+
+ //Get the term enumeration of the reader
+ TermEnum* termEnum = reader->terms();
+ //Instantiate a new SegmentMerginfo for the current reader and enumeration
+ smi = _CLNEW SegmentMergeInfo(base, termEnum, reader);
+
+ //Condition check to see if smi points to a valid instance
+ CND_CONDITION(smi != NULL, "Memory allocation for smi failed") ;
+
+ //Increase the base by the number of documents that have not been marked deleted
+ //so base will contain a new value for the first document of the next iteration
+ base += reader->numDocs();
+ //Get the next current term
+ if (smi->next()) {
+ //Store the SegmentMergeInfo smi with the initialized SegmentTermEnum TermEnum
+ //into the queue
+ queue->put(smi);
+ } else {
+ //Apparently the end of the TermEnum of the SegmentTerm has been reached so
+ //close the SegmentMergeInfo smi
+ smi->close();
+ //And destroy the instance and set smi to NULL (It will be used later in this method)
+ _CLDELETE(smi);
+ }
+ }
+
+ //Instantiate an array of SegmentMergeInfo instances called match
+ SegmentMergeInfo** match = _CL_NEWARRAY(SegmentMergeInfo*,readers.size()+1);
+
+ //Condition check to see if match points to a valid instance
+ CND_CONDITION(match != NULL, "Memory allocation for match failed") ;
+
+ SegmentMergeInfo* top = NULL;
+
+ //As long as there are SegmentMergeInfo instances stored in the queue
+ while (queue->size() > 0) {
+ int32_t matchSize = 0;
+
+ // pop matching terms
+
+ //Pop the first SegmentMergeInfo from the queue
+ match[matchSize++] = queue->pop();
+ //Get the Term of match[0]
+ Term* term = match[0]->term;
+
+ //Condition check to see if term points to a valid instance
+ CND_CONDITION(term != NULL,"term is NULL") ;
+
+ //Get the current top of the queue
+ top = queue->top();
+
+ //For each SegmentMergInfo still in the queue
+ //Check if term matches the term of the SegmentMergeInfo instances in the queue
+ while (top != NULL && term->equals(top->term)) {
+ //A match has been found so add the matching SegmentMergeInfo to the match array
+ match[matchSize++] = queue->pop();
+ //Get the next SegmentMergeInfo
+ top = queue->top();
+ }
+ match[matchSize]=NULL;
+
+ //add new TermInfo
+ mergeTermInfo(match); //matchSize
+
+ //Restore the SegmentTermInfo instances in the match array back into the queue
+ while (matchSize > 0) {
+ smi = match[--matchSize];
+
+ //Condition check to see if smi points to a valid instance
+ CND_CONDITION(smi != NULL, "smi is NULL");
+
+ //Move to the next term in the enumeration of SegmentMergeInfo smi
+ if (smi->next()) {
+ //There still are some terms so restore smi in the queue
+ queue->put(smi);
+
+ } else {
+ //Done with a segment
+ //No terms anymore so close this SegmentMergeInfo instance
+ smi->close();
+ _CLDELETE(smi);
+ }
+ }
+ }
+
+ _CLDELETE_ARRAY(match);
+}
+
+void SegmentMerger::mergeTermInfo(SegmentMergeInfo** smis)
+{
+ //Func - Merge the TermInfo of a term found in one or more segments.
+ //Pre - smis != NULL and it contains segments that are positioned at the same term.
+ // n is equal to the number of SegmentMergeInfo instances in smis
+ // freqOutput != NULL
+ // proxOutput != NULL
+ //Post - The TermInfo of a term has been merged
+
+ CND_PRECONDITION(smis != NULL, "smis is NULL");
+ CND_PRECONDITION(freqOutput != NULL, "freqOutput is NULL");
+ CND_PRECONDITION(proxOutput != NULL, "proxOutput is NULL");
+
+ //Get the file pointer of the IndexOutput to the Frequency File
+ int64_t freqPointer = freqOutput->getFilePointer();
+ //Get the file pointer of the IndexOutput to the Prox File
+ int64_t proxPointer = proxOutput->getFilePointer();
+
+ //Process postings from multiple segments all positioned on the same term.
+ int32_t df = appendPostings(smis);
+
+ int64_t skipPointer = writeSkip();
+
+ //df contains the number of documents across all segments where this term was found
+ if (df > 0) {
+ //add an entry to the dictionary with pointers to prox and freq files
+ termInfo.set(df, freqPointer, proxPointer, (int32_t)(skipPointer - freqPointer));
+ //Precondition check for to be sure that the reference to
+ //smis[0]->term will be valid
+ CND_PRECONDITION(smis[0]->term != NULL, "smis[0]->term is NULL");
+ //Write a new TermInfo
+ termInfosWriter->add(smis[0]->term, &termInfo);
+ }
+}
+
+
+int32_t SegmentMerger::appendPostings(SegmentMergeInfo** smis)
+{
+ //Func - Process postings from multiple segments all positioned on the
+ // same term. Writes out merged entries into freqOutput and
+ // the proxOutput streams.
+ //Pre - smis != NULL and it contains segments that are positioned at the same term.
+ // n is equal to the number of SegmentMergeInfo instances in smis
+ // freqOutput != NULL
+ // proxOutput != NULL
+ //Post - Returns number of documents across all segments where this term was found
+
+ CND_PRECONDITION(smis != NULL, "smis is NULL");
+ CND_PRECONDITION(freqOutput != NULL, "freqOutput is NULL");
+ CND_PRECONDITION(proxOutput != NULL, "proxOutput is NULL");
+
+ int32_t lastDoc = 0;
+ int32_t df = 0; //Document Counter
+
+ resetSkip();
+ SegmentMergeInfo* smi = NULL;
+
+ //Iterate through all SegmentMergeInfo instances in smis
+ int32_t i = 0;
+ while ((smi=smis[i]) != NULL) {
+ //Get the i-th SegmentMergeInfo
+
+ //Condition check to see if smi points to a valid instance
+ CND_PRECONDITION(smi != NULL, " is NULL");
+
+ //Get the term positions
+ TermPositions* postings = smi->getPositions();
+ //Get the base of this segment
+ int32_t base = smi->base;
+ //Get the docMap so we can see which documents have been deleted
+ int32_t* docMap = smi->getDocMap();
+ //Seek the termpost
+ postings->seek(smi->termEnum);
+ while (postings->next()) {
+ int32_t doc = postings->doc();
+ //Check if there are deletions
+ if (docMap != NULL)
+ doc = docMap[doc]; // map around deletions
+ doc += base; // convert to merged space
+
+ //Condition check to see doc is eaqual to or bigger than lastDoc
+ CND_CONDITION(doc >= lastDoc,"docs out of order");
+
+ //Increase the total frequency over all segments
+ df++;
+
+ if ((df % skipInterval) == 0) {
+ bufferSkip(lastDoc);
+ }
+
+ //Calculate a new docCode
+ //use low bit to flag freq=1
+ int32_t docCode = (doc - lastDoc) << 1;
+ lastDoc = doc;
+
+ //Get the frequency of the Term
+ int32_t freq = postings->freq();
+ if (freq == 1) {
+ //write doc & freq=1
+ freqOutput->writeVInt(docCode | 1);
+ } else {
+ //write doc
+ freqOutput->writeVInt(docCode);
+ //write frequency in doc
+ freqOutput->writeVInt(freq);
+ }
+
+ int32_t lastPosition = 0;
+ // write position deltas
+ for (int32_t j = 0; j < freq; j++) {
+ //Get the next position
+ int32_t position = postings->nextPosition();
+ //Write the difference between position and the last position
+ proxOutput->writeVInt(position - lastPosition);
+ lastPosition = position;
+ }
+ }
+
+ i++;
+ }
+
+ //Return total number of documents across all segments where term was found
+ return df;
+}
+
+void SegmentMerger::resetSkip()
+{
+ skipBuffer->reset();
+ lastSkipDoc = 0;
+ lastSkipFreqPointer = freqOutput->getFilePointer();
+ lastSkipProxPointer = proxOutput->getFilePointer();
+}
+
+void SegmentMerger::bufferSkip(int32_t doc)
+{
+ int64_t freqPointer = freqOutput->getFilePointer();
+ int64_t proxPointer = proxOutput->getFilePointer();
+
+ skipBuffer->writeVInt(doc - lastSkipDoc);
+ skipBuffer->writeVInt((int32_t) (freqPointer - lastSkipFreqPointer));
+ skipBuffer->writeVInt((int32_t) (proxPointer - lastSkipProxPointer));
+
+ lastSkipDoc = doc;
+ lastSkipFreqPointer = freqPointer;
+ lastSkipProxPointer = proxPointer;
+}
+
+int64_t SegmentMerger::writeSkip()
+{
+ int64_t skipPointer = freqOutput->getFilePointer();
+ skipBuffer->writeTo(freqOutput);
+ return skipPointer;
+}
+
+// Func - Merges the norms for all fields
+// Pre - fieldInfos != NULL
+// Post - The norms for all fields have been merged
+void SegmentMerger::mergeNorms()
+{
+ CND_PRECONDITION(fieldInfos != NULL, "fieldInfos is NULL");
+
+ //iterate through all the Field Infos instances
+ for (int32_t i = 0; i < fieldInfos->size(); i++) {
+ //Get the i-th FieldInfo
+ FieldInfo* fi = fieldInfos->fieldInfo(i);
+ //Is this Field indexed?
+ if (fi->isIndexed && !fi->omitNorms) {
+ //Create and Instantiate an IndexOutput to that norm file
+ QString buf = Misc::segmentname(segment, QLatin1String(".f"), i);
+ IndexOutput* output = directory->createOutput(buf);
+
+ //Condition check to see if output points to a valid instance
+ CND_CONDITION(output != NULL, "No Outputstream retrieved");
+
+ uint8_t* input = NULL;
+ try {
+ for (uint32_t j = 0; j < readers.size(); ++j) {
+ // get the next index reader + condition check
+ IndexReader* reader = readers[j];
+ CND_CONDITION(reader != NULL, "No reader found");
+
+ // Get the total number of documents including the documents
+ // that have been marked deleted
+ int32_t maxDoc = reader->maxDoc();
+ if (maxDoc > 0) {
+ // if there are docs, allocate buffer to read it's norms
+ uint8_t* data = (uint8_t*)realloc(input, maxDoc *
+ sizeof(uint8_t));
+ if (data) {
+ input = data;
+ memset(input, 0, maxDoc * sizeof(uint8_t));
+ // Get an IndexInput to the norm file for this
+ // field in this segment
+ reader->norms(fi->name, input);
+
+ //Iterate through all the documents
+ for(int32_t k = 0; k < maxDoc; k++) {
+ //Check if document k is deleted
+ if (!reader->isDeleted(k)) {
+ //write the new norm
+ output->writeByte(input[k]);
+ }
+ }
+ }
+ }
+ }
+ } _CLFINALLY (
+ if (output != NULL) {
+ output->close();
+ _CLDELETE(output);
+ }
+ free(input);
+ );
+ }
+ }
+}
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/index/SegmentMerger.h b/src/3rdparty/clucene/src/CLucene/index/SegmentMerger.h
new file mode 100644
index 0000000..230843b
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/SegmentMerger.h
@@ -0,0 +1,169 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright(C) 2007, 2008 by Nokia Corporation and/or its subsidiary(-ies), all rights reserved.
+*/
+#ifndef _lucene_index_SegmentMerger_
+#define _lucene_index_SegmentMerger_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include <QtCore/QString>
+#include <QtCore/QStringList>
+
+#include "CLucene/store/Directory.h"
+#include "CLucene/store/RAMDirectory.h"
+#include "CLucene/util/VoidList.h"
+#include "SegmentMergeInfo.h"
+#include "SegmentMergeQueue.h"
+#include "IndexWriter.h"
+#include "FieldInfos.h"
+#include "FieldsWriter.h"
+#include "TermInfosWriter.h"
+
+CL_NS_DEF(index)
+
+/**
+* The SegmentMerger class combines two or more Segments, represented by an IndexReader ({@link #add},
+* into a single Segment. After adding the appropriate readers, call the merge method to combine the
+* segments.
+*<P>
+* If the compoundFile flag is set, then the segments will be merged into a compound file.
+*
+*
+* @see #merge
+* @see #add
+*/
+class SegmentMerger : LUCENE_BASE
+{
+ bool useCompoundFile;
+
+ CL_NS(store)::RAMIndexOutput* skipBuffer;
+ int32_t lastSkipDoc;
+ int64_t lastSkipFreqPointer;
+ int64_t lastSkipProxPointer;
+
+ void resetSkip();
+ void bufferSkip(int32_t doc);
+ int64_t writeSkip();
+
+ //Directory of the segment
+ CL_NS(store)::Directory* directory;
+ //name of the new segment
+ QString segment;
+ //Set of IndexReaders
+ CL_NS(util)::CLVector<IndexReader*,
+ CL_NS(util)::Deletor::Object<IndexReader> > readers;
+ //Field Infos for t he FieldInfo instances of all fields
+ FieldInfos* fieldInfos;
+
+ //The queue that holds SegmentMergeInfo instances
+ SegmentMergeQueue* queue;
+ //IndexOutput to the new Frequency File
+ CL_NS(store)::IndexOutput* freqOutput;
+ //IndexOutput to the new Prox File
+ CL_NS(store)::IndexOutput* proxOutput;
+ //Writes Terminfos that have been merged
+ TermInfosWriter* termInfosWriter;
+ TermInfo termInfo; //(new) minimize consing
+
+ int32_t termIndexInterval;
+ int32_t skipInterval;
+
+public:
+ /**
+ *
+ * @param dir The Directory to merge the other segments into
+ * @param name The name of the new segment
+ * @param compoundFile true if the new segment should use a compoundFile
+ */
+ SegmentMerger( IndexWriter* writer, const QString& name );
+
+ //Destructor
+ ~SegmentMerger();
+
+ /**
+ * Add an IndexReader to the collection of readers that are to be merged
+ * @param reader
+ */
+ void add(IndexReader* reader);
+
+ /**
+ *
+ * @param i The index of the reader to return
+ * @return The ith reader to be merged
+ */
+ IndexReader* segmentReader(const int32_t i);
+
+ /**
+ * Merges the readers specified by the {@link #add} method into the
+ * directory passed to the constructor
+ * @return The number of documents that were merged
+ * @throws IOException
+ */
+ int32_t merge();
+ /**
+ * close all IndexReaders that have been added.
+ * Should not be called before merge().
+ * @throws IOException
+ */
+ void closeReaders();
+private:
+ void addIndexed(IndexReader* reader, FieldInfos* fieldInfos,
+ CL_NS(util)::StringArrayWithDeletor& names,
+ bool storeTermVectors, bool storePositionWithTermVector,
+ bool storeOffsetWithTermVector);
+
+ /**
+ * Merge the fields of all segments
+ * @return The number of documents in all of the readers
+ * @throws IOException
+ */
+ int32_t mergeFields();
+
+ /**
+ * Merge the TermVectors from each of the segments into the new one.
+ * @throws IOException
+ */
+ void mergeVectors();
+
+ /** Merge the terms of all segments */
+ void mergeTerms();
+
+ /** Merges all TermInfos into a single segment */
+ void mergeTermInfos();
+
+ /** Merge one term found in one or more segments. The array <code>smis</code>
+ * contains segments that are positioned at the same term. <code>N</code>
+ * is the number of cells in the array actually occupied.
+ *
+ * @param smis array of segments
+ * @param n number of cells in the array actually occupied
+ */
+ void mergeTermInfo( SegmentMergeInfo** smis);
+
+ /** Process postings from multiple segments all positioned on the
+ * same term. Writes out merged entries into freqOutput and
+ * the proxOutput streams.
+ *
+ * @param smis array of segments
+ * @param n number of cells in the array actually occupied
+ * @return number of documents across all segments where this term was found
+ */
+ int32_t appendPostings(SegmentMergeInfo** smis);
+
+ //Merges the norms for all fields
+ void mergeNorms();
+
+ void createCompoundFile(const QString& filename, QStringList& files);
+ friend class IndexWriter; //allow IndexWriter to use createCompoundFile
+};
+
+CL_NS_END
+
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/index/SegmentReader.cpp b/src/3rdparty/clucene/src/CLucene/index/SegmentReader.cpp
new file mode 100644
index 0000000..ba06171
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/SegmentReader.cpp
@@ -0,0 +1,816 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+*/
+#include "CLucene/StdHeader.h"
+#include "SegmentHeader.h"
+
+#include "FieldInfos.h"
+#include "FieldsReader.h"
+#include "IndexReader.h"
+#include "TermInfosReader.h"
+#include "Terms.h"
+#include "CLucene/search/Similarity.h"
+
+CL_NS_USE(util)
+CL_NS_USE(store)
+CL_NS_USE(document)
+CL_NS_USE(search)
+CL_NS_DEF(index)
+
+SegmentReader::Norm::Norm(IndexInput* instrm, int32_t n, SegmentReader* r,
+ const QString& seg)
+ : number(n)
+ , reader(r)
+ , segment(seg)
+ , in(instrm)
+ , bytes(NULL)
+ , dirty(false)
+{
+ //Func - Constructor
+ //Pre - instrm is a valid reference to an IndexInput
+ //Post - A Norm instance has been created with an empty bytes array
+ bytes = NULL;
+ dirty = false;
+}
+
+SegmentReader::Norm::~Norm()
+{
+ //Func - Destructor
+ //Pre - true
+ //Post - The IndexInput in has been deleted (and closed by its destructor)
+ // and the array too.
+
+ //Close and destroy the inputstream in-> The inputstream will be closed
+ // by its destructor. Note that the IndexInput 'in' actually is a pointer!!!!!
+ _CLDELETE(in);
+
+ //Delete the bytes array
+ _CLDELETE_ARRAY(bytes);
+
+}
+
+void SegmentReader::Norm::reWrite()
+{
+ QString buf(segment + QLatin1String(".tmp"));
+
+ // NOTE: norms are re-written in regular directory, not cfs
+ IndexOutput* out = reader->getDirectory()->createOutput(buf);
+ try {
+ out->writeBytes(bytes, reader->maxDoc());
+ } _CLFINALLY (
+ out->close();
+ _CLDELETE(out)
+ );
+
+ QString fileName(segment);
+ if (reader->cfsReader == NULL)
+ fileName.append(QLatin1String(".f%1")).arg(number);
+ else // use a different file name if we have compound format
+ fileName.append(QLatin1String(".s%1")).arg(number);
+
+ reader->getDirectory()->renameFile(buf, fileName);
+ this->dirty = false;
+}
+
+SegmentReader::SegmentReader(SegmentInfo* si)
+ : IndexReader(si->getDir())
+ , _norms(false, false)
+{
+ initialize(si);
+}
+
+SegmentReader::SegmentReader(SegmentInfos* sis, SegmentInfo* si)
+ : IndexReader(si->getDir(), sis, false)
+ , _norms(false, false)
+{
+ initialize(si);
+}
+
+void SegmentReader::initialize(SegmentInfo* si)
+{
+ //Pre - si-> is a valid reference to SegmentInfo instance
+ // identified by si->
+ //Post - All files of the segment have been read
+
+ deletedDocs = NULL;
+ ones = NULL;
+ //There are no documents yet marked as deleted
+ deletedDocsDirty = false;
+
+ normsDirty=false;
+ undeleteAll=false;
+
+ //Duplicate the name of the segment from SegmentInfo to segment
+ segment = si->name;
+ // make sure that all index files have been read or are kept open
+ // so that if an index update removes them we'll still have them
+ freqStream = NULL;
+ proxStream = NULL;
+
+ //instantiate a buffer large enough to hold a directory path
+ QString buf;
+
+ // Use compound file directory for some files, if it exists
+ Directory* cfsDir = getDirectory();
+ SegmentName(buf, CL_MAX_PATH, QLatin1String(".cfs"));
+ if (cfsDir->fileExists(buf)) {
+ cfsReader = _CLNEW CompoundFileReader(cfsDir, buf);
+ cfsDir = cfsReader;
+ }else
+ cfsReader = NULL;
+
+ // Create the name of the field info file with suffix .fnm in buf
+ SegmentName(buf, CL_MAX_PATH, QLatin1String(".fnm"));
+ fieldInfos = _CLNEW FieldInfos(cfsDir, buf );
+
+ // Condition check to see if fieldInfos points to a valid instance
+ CND_CONDITION(fieldInfos != NULL,
+ "No memory could be allocated for fieldInfos");
+
+ // Create the name of the frequence file with suffix .frq in buf
+ SegmentName(buf ,CL_MAX_PATH, QLatin1String(".frq"));
+
+ // Open an IndexInput freqStream to the frequency file
+ freqStream = cfsDir->openInput( buf );
+
+ // Condition check to see if freqStream points to a valid instance and was
+ // able to open the frequency file
+ CND_CONDITION(freqStream != NULL,
+ "IndexInput freqStream could not open the frequency file");
+
+ // Create the name of the prox file with suffix .prx in buf
+ SegmentName(buf, CL_MAX_PATH, QLatin1String(".prx"));
+
+ // Open an IndexInput proxStream to the prox file
+ proxStream = cfsDir->openInput( buf );
+
+ // Condition check to see if proxStream points to a valid instance and was
+ // able to open the prox file
+ CND_CONDITION(proxStream != NULL,
+ "IndexInput proxStream could not open proximity file");
+
+ // Instantiate a FieldsReader for reading the Field Info File
+ fieldsReader = _CLNEW FieldsReader(cfsDir, segment, fieldInfos);
+
+ // Condition check to see if fieldsReader points to a valid instance
+ CND_CONDITION(fieldsReader != NULL,
+ "No memory could be allocated for fieldsReader");
+
+ //Instantiate a TermInfosReader for reading the Term Dictionary .tis file
+ tis = _CLNEW TermInfosReader(cfsDir, segment, fieldInfos);
+
+ //Condition check to see if tis points to a valid instance
+ CND_CONDITION(tis != NULL,"No memory could be allocated for tis");
+
+ // Check if the segment has deletion according to the SegmentInfo instance
+ // si-> NOTE: the bitvector is stored using the regular directory, not cfs
+ if (hasDeletions(si)) {
+ //Create a deletion file with suffix .del
+ SegmentName(buf, CL_MAX_PATH, QLatin1String(".del"));
+ // Instantiate a BitVector that manages which documents have been deleted
+ deletedDocs = _CLNEW BitSet(getDirectory(), buf);
+ }
+
+ // Open the norm file. There's a norm file for each indexed field with a
+ // byte for each document. The .f[0-9]* file contains, for each document,
+ // a byte that encodes a value that is multiplied into the score for hits
+ // on that field
+ openNorms(cfsDir);
+
+ termVectorsReaderOrig = NULL;
+ if (fieldInfos->hasVectors()) // open term vector files only as needed
+ termVectorsReaderOrig = _CLNEW TermVectorsReader(cfsDir, segment, fieldInfos);
+}
+
+SegmentReader::~SegmentReader()
+{
+ //Func - Destructor.
+ //Pre - doClose has been invoked!
+ //Post - the instance has been destroyed
+
+ doClose(); //this means that index reader doesn't need to be closed manually
+
+ _CLDELETE(fieldInfos);
+ _CLDELETE(fieldsReader);
+ _CLDELETE(tis);
+ _CLDELETE(freqStream);
+ _CLDELETE(proxStream);
+ _CLDELETE(deletedDocs);
+ _CLDELETE_ARRAY(ones);
+ _CLDELETE(termVectorsReaderOrig);
+ _CLDECDELETE(cfsReader);
+}
+
+void SegmentReader::doCommit()
+{
+ QString bufdel(segment + QLatin1String(".del"));
+
+ if (deletedDocsDirty) { // re-write deleted
+ QString buftmp(segment + QLatin1String(".tmp"));
+ deletedDocs->write(getDirectory(), buftmp);
+ getDirectory()->renameFile(buftmp, bufdel);
+ }
+
+ if(undeleteAll && getDirectory()->fileExists(bufdel))
+ getDirectory()->deleteFile(bufdel, true);
+
+ if (normsDirty) { // re-write norms
+ NormsType::iterator itr = _norms.begin();
+ while (itr != _norms.end()) {
+ Norm* norm = itr->second;
+ if (norm->dirty) {
+ norm->reWrite();
+ }
+ ++itr;
+ }
+ }
+ deletedDocsDirty = false;
+ normsDirty = false;
+ undeleteAll = false;
+}
+
+void SegmentReader::doClose()
+{
+ //Func - Closes all streams to the files of a single segment
+ //Pre - fieldsReader != NULL
+ // tis != NULL
+ //Post - All streams to files have been closed
+
+ CND_PRECONDITION(fieldsReader != NULL, "fieldsReader is NULL");
+ CND_PRECONDITION(tis != NULL, "tis is NULL");
+
+ //Close the fieldsReader
+ fieldsReader->close();
+ //Close the TermInfosReader
+ tis->close();
+
+ //Close the frequency stream
+ if (freqStream != NULL){
+ freqStream->close();
+ }
+ //Close the prox stream
+ if (proxStream != NULL){
+ proxStream->close();
+ }
+
+ //Close the norm file
+ closeNorms();
+
+ if (termVectorsReaderOrig != NULL)
+ termVectorsReaderOrig->close();
+
+ if (cfsReader != NULL)
+ cfsReader->close();
+}
+
+bool SegmentReader::hasDeletions() const
+{
+ return deletedDocs != NULL;
+}
+
+//static
+bool SegmentReader::usesCompoundFile(SegmentInfo* si)
+{
+ return si->getDir()->fileExists(si->name + QLatin1String(".cfs"));
+}
+
+//static
+bool SegmentReader::hasSeparateNorms(SegmentInfo* si)
+{
+ QString pattern(si->name);
+ pattern.append(QLatin1String(".s"));
+ size_t patternLength = pattern.length();
+
+ QStringList names = si->getDir()->list();
+ foreach (const QString& name, names) {
+ int length = name.length();
+ if (length > patternLength && name.left(patternLength) == pattern) {
+ if (name.at(patternLength) >= QLatin1Char('0')
+ && name.at(patternLength) <= QLatin1Char('9')) {
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+bool SegmentReader::hasDeletions(const SegmentInfo* si)
+{
+ //Func - Static method
+ // Checks if a segment managed by SegmentInfo si-> has deletions
+ //Pre - si-> holds a valid reference to an SegmentInfo instance
+ //Post - if the segement contains deleteions true is returned otherwise flas
+
+ //Check if the deletion file exists and return the result
+ QString f;
+ Misc::segmentname(f, CL_MAX_PATH, si->name, QLatin1String(".del"), -1);
+ return si->getDir()->fileExists(f);
+}
+
+//synchronized
+void SegmentReader::doDelete(const int32_t docNum)
+{
+ //Func - Marks document docNum as deleted
+ //Pre - docNum >=0 and DocNum < maxDoc()
+ // docNum contains the number of the document that must be
+ // marked deleted
+ //Post - The document identified by docNum has been marked deleted
+
+ SCOPED_LOCK_MUTEX(THIS_LOCK)
+
+ CND_PRECONDITION(docNum >= 0, "docNum is a negative number");
+ CND_PRECONDITION(docNum < maxDoc(),
+ "docNum is bigger than the total number of documents");
+
+ //Check if deletedDocs exists
+ if (deletedDocs == NULL) {
+ deletedDocs = _CLNEW BitSet(maxDoc());
+
+ //Condition check to see if deletedDocs points to a valid instance
+ CND_CONDITION(deletedDocs != NULL,
+ "No memory could be allocated for deletedDocs");
+ }
+ //Flag that there are documents marked deleted
+ deletedDocsDirty = true;
+ undeleteAll = false;
+ //Mark document identified by docNum as deleted
+ deletedDocs->set(docNum);
+
+}
+
+void SegmentReader::doUndeleteAll()
+{
+ _CLDELETE(deletedDocs);
+ deletedDocsDirty = false;
+ undeleteAll = true;
+}
+
+void SegmentReader::files(QStringList& retarray)
+{
+ //Func - Returns all file names managed by this SegmentReader
+ //Pre - segment != NULL
+ //Post - All filenames managed by this SegmentRead have been returned
+
+ CND_PRECONDITION(segment != NULL, "segment is NULL");
+
+ QString temp;
+ #define _ADD_SEGMENT(ext) \
+ temp = SegmentName(ext); \
+ if (getDirectory()->fileExists(temp)) \
+ retarray.push_back(temp);
+
+ //Add the name of the Field Info file
+ _ADD_SEGMENT(QLatin1String(".cfs"));
+ _ADD_SEGMENT(QLatin1String(".fnm"));
+ _ADD_SEGMENT(QLatin1String(".fdx"));
+ _ADD_SEGMENT(QLatin1String(".fdt"));
+ _ADD_SEGMENT(QLatin1String(".tii"));
+ _ADD_SEGMENT(QLatin1String(".tis"));
+ _ADD_SEGMENT(QLatin1String(".frq"));
+ _ADD_SEGMENT(QLatin1String(".prx"));
+ _ADD_SEGMENT(QLatin1String(".del"));
+ _ADD_SEGMENT(QLatin1String(".tvx"));
+ _ADD_SEGMENT(QLatin1String(".tvd"));
+ _ADD_SEGMENT(QLatin1String(".tvf"));
+ _ADD_SEGMENT(QLatin1String(".tvp"));
+
+ //iterate through the field infos
+ for (int32_t i = 0; i < fieldInfos->size(); ++i) {
+ //Get the field info for the i-th field
+ FieldInfo* fi = fieldInfos->fieldInfo(i);
+ //Check if the field has been indexed
+ if (fi->isIndexed && !fi->omitNorms) {
+ QString name;
+ if (cfsReader == NULL)
+ name = SegmentName(QLatin1String(".f"), i);
+ else
+ name = SegmentName(QLatin1String(".s"), i);
+
+ //The field has been indexed so add its norm file
+ if (getDirectory()->fileExists(name))
+ retarray.push_back(name);
+ }
+ }
+}
+
+TermEnum* SegmentReader::terms() const
+{
+ //Func - Returns an enumeration of all the Terms and TermInfos in the set.
+ //Pre - tis != NULL
+ //Post - An enumeration of all the Terms and TermInfos in the set has been returned
+
+ CND_PRECONDITION(tis != NULL, "tis is NULL");
+
+ return tis->terms();
+}
+
+TermEnum* SegmentReader::terms(const Term* t) const
+{
+ //Func - Returns an enumeration of terms starting at or after the named term t
+ //Pre - t != NULL
+ // tis != NULL
+ //Post - An enumeration of terms starting at or after the named term t
+
+ CND_PRECONDITION(t != NULL, "t is NULL");
+ CND_PRECONDITION(tis != NULL, "tis is NULL");
+
+ return tis->terms(t);
+}
+
+bool SegmentReader::document(int32_t n, Document* doc)
+{
+ //Func - Returns a document identified by n
+ //Pre - n >=0 and identifies the document n
+ //Post - if the document has been deleted then an exception has been thrown
+ // otherwise a reference to the found document has been returned
+
+ SCOPED_LOCK_MUTEX(THIS_LOCK)
+
+ CND_PRECONDITION(n >= 0, "n is a negative number");
+
+ //Check if the n-th document has been marked deleted
+ if (isDeleted(n))
+ _CLTHROWA(CL_ERR_InvalidState, "attempt to access a deleted document" );
+
+ //Retrieve the n-th document
+ return fieldsReader->doc(n, doc);
+}
+
+bool SegmentReader::isDeleted(const int32_t n)
+{
+ //Func - Checks if the n-th document has been marked deleted
+ //Pre - n >=0 and identifies the document n
+ //Post - true has been returned if document n has been deleted otherwise fralse
+
+ SCOPED_LOCK_MUTEX(THIS_LOCK)
+
+ CND_PRECONDITION(n >= 0, "n is a negative number");
+
+ //Is document n deleted
+ return (deletedDocs != NULL && deletedDocs->get(n));
+}
+
+TermDocs* SegmentReader::termDocs() const
+{
+ //Func - Returns an unpositioned TermDocs enumerator.
+ //Pre - true
+ //Post - An unpositioned TermDocs enumerator has been returned
+
+ return _CLNEW SegmentTermDocs(this);
+}
+
+TermPositions* SegmentReader::termPositions() const
+{
+ //Func - Returns an unpositioned TermPositions enumerator.
+ //Pre - true
+ //Post - An unpositioned TermPositions enumerator has been returned
+
+ return _CLNEW SegmentTermPositions(this);
+}
+
+int32_t SegmentReader::docFreq(const Term* t) const
+{
+ //Func - Returns the number of documents which contain the term t
+ //Pre - t holds a valid reference to a Term
+ //Post - The number of documents which contain term t has been returned
+
+ //Get the TermInfo ti for Term t in the set
+ TermInfo* ti = tis->get(t);
+ //Check if an TermInfo has been returned
+ if (ti) {
+ //Get the frequency of the term
+ int32_t ret = ti->docFreq;
+ //TermInfo ti is not needed anymore so delete it
+ _CLDELETE( ti );
+ //return the number of documents which containt term t
+ return ret;
+ }
+
+ //No TermInfo returned so return 0
+ return 0;
+}
+
+int32_t SegmentReader::numDocs()
+{
+ //Func - Returns the actual number of documents in the segment
+ //Pre - true
+ //Post - The actual number of documents in the segments
+
+ //Get the number of all the documents in the segment including the ones that have
+ //been marked deleted
+ int32_t n = maxDoc();
+
+ //Check if there any deleted docs
+ if (deletedDocs != NULL)
+ //Substract the number of deleted docs from the number returned by maxDoc
+ n -= deletedDocs->count();
+
+ //return the actual number of documents in the segment
+ return n;
+}
+
+int32_t SegmentReader::maxDoc() const
+{
+ //Func - Returns the number of all the documents in the segment including
+ // the ones that have been marked deleted
+ //Pre - true
+ //Post - The total number of documents in the segment has been returned
+
+ return fieldsReader->size();
+}
+
+void SegmentReader::getFieldNames(FieldOption fldOption,
+ StringArrayWithDeletor& retarray)
+{
+ size_t len = fieldInfos->size();
+ for (size_t i = 0; i < len; i++) {
+ bool v = false;
+ FieldInfo* fi = fieldInfos->fieldInfo(i);
+ if (fldOption & IndexReader::ALL) {
+ v = true;
+ } else {
+ if (!fi->isIndexed && (fldOption & IndexReader::UNINDEXED)) {
+ v = true;
+ }
+
+ if (fi->isIndexed && (fldOption & IndexReader::INDEXED)) {
+ v = true;
+ }
+
+ if (fi->isIndexed && fi->storeTermVector == false
+ && (fldOption & IndexReader::INDEXED_NO_TERMVECTOR)) {
+ v = true;
+ }
+
+ if ((fldOption & IndexReader::TERMVECTOR)
+ && fi->storeTermVector == true
+ && fi->storePositionWithTermVector == false
+ && fi->storeOffsetWithTermVector == false) {
+ v = true;
+ }
+
+ if (fi->isIndexed && fi->storeTermVector
+ && (fldOption & IndexReader::INDEXED_WITH_TERMVECTOR)) {
+ v = true;
+ }
+
+ if (fi->storePositionWithTermVector
+ && fi->storeOffsetWithTermVector == false
+ && (fldOption & IndexReader::TERMVECTOR_WITH_POSITION)) {
+ v = true;
+ }
+
+ if (fi->storeOffsetWithTermVector
+ && fi->storePositionWithTermVector == false
+ && (fldOption & IndexReader::TERMVECTOR_WITH_OFFSET)) {
+ v = true;
+ }
+
+ if ((fi->storeOffsetWithTermVector && fi->storePositionWithTermVector)
+ && (fldOption & IndexReader::TERMVECTOR_WITH_POSITION_OFFSET)) {
+ v = true;
+ }
+ }
+
+ if (v)
+ retarray.push_back(STRDUP_TtoT(fi->name));
+ }
+}
+
+bool SegmentReader::hasNorms(const TCHAR* field) const
+{
+ return _norms.find(field) != _norms.end();
+}
+
+
+void SegmentReader::norms(const TCHAR* field, uint8_t* bytes)
+{
+ //Func - Reads the Norms for field from disk starting at offset in the inputstream
+ //Pre - field != NULL
+ // bytes != NULL is an array of bytes which is to be used to read the norms into.
+ // it is advisable to have bytes initalized by zeroes!
+ //Post - The if an inputstream to the norm file could be retrieved the bytes have been read
+ // You are never sure whether or not the norms have been read into bytes properly!!!!!!!!!!!!!!!!!
+
+ CND_PRECONDITION(field != NULL, "field is NULL");
+ CND_PRECONDITION(bytes != NULL, "field is NULL");
+
+ SCOPED_LOCK_MUTEX(THIS_LOCK)
+
+ Norm* norm = _norms.get(field);
+ if ( norm == NULL ){
+ memcpy(bytes, fakeNorms(), maxDoc());
+ return;
+ }
+
+ if (norm->bytes != NULL) { // can copy from cache
+ memcpy(bytes, norm->bytes, maxDoc());
+ return;
+ }
+
+ IndexInput* _normStream = norm->in->clone();
+ CND_PRECONDITION(_normStream != NULL, "normStream==NULL")
+
+ // read from disk
+ try {
+ _normStream->seek(0);
+ _normStream->readBytes(bytes, maxDoc());
+ } _CLFINALLY (
+ //Have the normstream closed
+ _normStream->close();
+ //Destroy the normstream
+ _CLDELETE( _normStream );
+ );
+}
+
+uint8_t* SegmentReader::createFakeNorms(int32_t size)
+{
+ uint8_t* ones = _CL_NEWARRAY(uint8_t,size);
+ memset(ones, DefaultSimilarity::encodeNorm(1.0f), size);
+ return ones;
+}
+
+uint8_t* SegmentReader::fakeNorms()
+{
+ if (ones == NULL)
+ ones = createFakeNorms(maxDoc());
+ return ones;
+}
+
+// can return null if norms aren't stored
+uint8_t* SegmentReader::getNorms(const TCHAR* field)
+{
+ SCOPED_LOCK_MUTEX(THIS_LOCK)
+ Norm* norm = _norms.get(field);
+ if (norm == NULL)
+ return NULL; // not indexed, or norms not stored
+
+ if (norm->bytes == NULL) { // value not yet read
+ uint8_t* bytes = _CL_NEWARRAY(uint8_t, maxDoc());
+ norms(field, bytes);
+ norm->bytes = bytes; // cache it
+ }
+ return norm->bytes;
+}
+
+uint8_t* SegmentReader::norms(const TCHAR* field)
+{
+ //Func - Returns the bytes array that holds the norms of a named field
+ //Pre - field != NULL and contains the name of the field for which the norms
+ // must be retrieved
+ //Post - If there was norm for the named field then a bytes array has been allocated
+ // and returned containing the norms for that field. If the named field is unknown NULL is returned.
+
+ CND_PRECONDITION(field != NULL, "field is NULL");
+
+ SCOPED_LOCK_MUTEX(THIS_LOCK)
+
+ uint8_t* bytes = getNorms(field);
+ if (bytes == NULL)
+ bytes = fakeNorms();
+ return bytes;
+}
+
+void SegmentReader::doSetNorm(int32_t doc, const TCHAR* field, uint8_t value)
+{
+ Norm* norm = _norms.get(field);
+ if (norm == NULL) // not an indexed field
+ return;
+
+ norm->dirty = true; // mark it dirty
+ normsDirty = true;
+
+ uint8_t* bits = norms(field);
+ bits[doc] = value; // set the value
+}
+
+QString SegmentReader::SegmentName(const QString& ext, const int32_t x)
+{
+ //Func - Returns an allocated buffer in which it creates a filename by
+ // concatenating segment with ext and x
+ //Pre ext != NULL and holds the extension
+ // x contains a number
+ //Post - A buffer has been instantiated an when x = -1 buffer contains the concatenation of
+ // segment and ext otherwise buffer contains the contentation of segment, ext and x
+
+ CND_PRECONDITION(!ext.isEmpty(), "ext is NULL");
+
+ QString buf;
+ SegmentName(buf, CL_MAX_PATH, ext, x);
+ return buf;
+}
+
+void SegmentReader::SegmentName(QString& buffer, int32_t bufferLen,
+ const QString& ext, const int32_t x)
+{
+ //Func - Creates a filename in buffer by concatenating segment with ext and x
+ //Pre - buffer != NULL
+ // ext != NULL
+ // x contains a number
+ //Post - When x = -1 buffer contains the concatenation of segment and ext otherwise
+ // buffer contains the contentation of segment, ext and x
+
+ CND_PRECONDITION(!segment.isEmpty(), "Segment is NULL");
+
+ Misc::segmentname(buffer, bufferLen, segment, ext, x);
+}
+
+void SegmentReader::openNorms(Directory* cfsDir)
+{
+ //Func - Open all norms files for all fields
+ // Creates for each field a norm Instance with an open inputstream to
+ // a corresponding norm file ready to be read
+ //Pre - true
+ //Post - For each field a norm instance has been created with an open inputstream to
+ // a corresponding norm file ready to be read
+
+ //Iterate through all the fields
+ for (int32_t i = 0; i < fieldInfos->size(); i++) {
+ //Get the FieldInfo for the i-th field
+ FieldInfo* fi = fieldInfos->fieldInfo(i);
+ //Check if the field is indexed
+ if (fi->isIndexed && !fi->omitNorms ) {
+ //Allocate a buffer
+ QString fileName;
+
+ // look first if there are separate norms in compound format
+ SegmentName(fileName, CL_MAX_PATH, QLatin1String(".s"), fi->number);
+ Directory* d = getDirectory();
+ if(!d->fileExists(fileName)){
+ SegmentName(fileName, CL_MAX_PATH, QLatin1String(".f"), fi->number);
+ d = cfsDir;
+ }
+
+ _norms.put(fi->name, _CLNEW Norm(d->openInput(fileName),
+ fi->number, this, segment));
+ }
+ }
+}
+
+void SegmentReader::closeNorms()
+{
+ //Func - Close all the norms stored in norms
+ //Pre - true
+ //Post - All the norms have been destroyed
+
+ SCOPED_LOCK_MUTEX(_norms.THIS_LOCK)
+
+ //Create an interator initialized at the beginning of norms
+ NormsType::iterator itr = _norms.begin();
+ //Iterate through all the norms
+ while (itr != _norms.end()) {
+ // Get, delete the norm
+ _CLDELETE(itr->second);
+ // Move the interator to the next norm in the norms collection.
+ // Note ++ is an overloaded operator
+ ++itr;
+ }
+ _norms.clear(); //bvk: they're deleted, so clear them so that they are not re-used
+}
+
+TermVectorsReader* SegmentReader::getTermVectorsReader()
+{
+ TermVectorsReader* tvReader = termVectorsLocal.get();
+ if (tvReader == NULL) {
+ tvReader = termVectorsReaderOrig->clone();
+ termVectorsLocal.set(tvReader);
+ }
+ return tvReader;
+}
+
+TermFreqVector* SegmentReader::getTermFreqVector(int32_t docNumber,
+ const TCHAR* field)
+{
+ if (field) {
+ FieldInfo* fi = fieldInfos->fieldInfo(field);
+ // Check if this field is invalid or has no stored term vector
+ if (fi == NULL || !fi->storeTermVector || termVectorsReaderOrig == NULL)
+ return NULL;
+ }
+
+ TermVectorsReader* termVectorsReader = getTermVectorsReader();
+ if (termVectorsReader == NULL)
+ return NULL;
+
+ return termVectorsReader->get(docNumber, field);
+}
+
+bool SegmentReader::getTermFreqVectors(int32_t docNumber,
+ Array<TermFreqVector*>& result)
+{
+ if (termVectorsReaderOrig == NULL)
+ return false;
+
+ TermVectorsReader* termVectorsReader = getTermVectorsReader();
+ if (termVectorsReader == NULL)
+ return false;
+
+ return termVectorsReader->get(docNumber, result);
+}
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/index/SegmentTermDocs.cpp b/src/3rdparty/clucene/src/CLucene/index/SegmentTermDocs.cpp
new file mode 100644
index 0000000..f4c5e3a
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/SegmentTermDocs.cpp
@@ -0,0 +1,212 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "SegmentHeader.h"
+
+#include "CLucene/store/IndexInput.h"
+#include "Term.h"
+
+CL_NS_DEF(index)
+
+ SegmentTermDocs::SegmentTermDocs(const SegmentReader* _parent){
+ //Func - Constructor
+ //Pre - Paren != NULL
+ //Post - The instance has been created
+
+ CND_PRECONDITION(_parent != NULL,"Parent is NULL");
+
+ parent = _parent;
+ deletedDocs = parent->deletedDocs;
+
+ _doc = 0;
+ _freq = 0;
+ count = 0;
+ df = 0;
+
+ skipInterval=0;
+ numSkips=0;
+ skipCount=0;
+ skipStream=NULL;
+ skipDoc=0;
+ freqPointer=0;
+ proxPointer=0;
+ skipPointer=0;
+ haveSkipped=false;
+
+ freqStream = parent->freqStream->clone();
+ skipInterval = parent->tis->getSkipInterval();
+ }
+
+ SegmentTermDocs::~SegmentTermDocs() {
+ //Func - Destructor
+ //Pre - true
+ //Post - The instance has been destroyed
+
+ close();
+ }
+
+ TermPositions* SegmentTermDocs::__asTermPositions(){
+ return NULL;
+ }
+
+ void SegmentTermDocs::seek(Term* term) {
+ TermInfo* ti = parent->tis->get(term);
+ seek(ti);
+ _CLDELETE(ti);
+ }
+
+ void SegmentTermDocs::seek(TermEnum* termEnum){
+ TermInfo* ti=NULL;
+
+ // use comparison of fieldinfos to verify that termEnum belongs to the same segment as this SegmentTermDocs
+ if ( termEnum->getObjectName() == SegmentTermEnum::getClassName() ){
+ SegmentTermEnum* te = (SegmentTermEnum*)termEnum;
+ te->fieldInfos = parent->fieldInfos;
+ ti = te->getTermInfo();
+ }else{
+ ti = parent->tis->get(termEnum->term(false));
+ }
+
+ seek(ti);
+ _CLDELETE(ti);
+ }
+ void SegmentTermDocs::seek(const TermInfo* ti) {
+ count = 0;
+ if (ti == NULL) {
+ df = 0;
+ } else {
+ df = ti->docFreq;
+ _doc = 0;
+ skipDoc = 0;
+ skipCount = 0;
+ numSkips = df / skipInterval;
+ freqPointer = ti->freqPointer;
+ proxPointer = ti->proxPointer;
+ skipPointer = freqPointer + ti->skipOffset;
+ freqStream->seek(freqPointer);
+ haveSkipped = false;
+ }
+ }
+
+ void SegmentTermDocs::close() {
+
+ //Check if freqStream still exists
+ if (freqStream != NULL){
+ freqStream->close(); //todo: items like these can probably be delete, because deleting the object also closes it...do everywhere
+ _CLDELETE( freqStream );
+ }
+ if (skipStream != NULL){
+ skipStream->close();
+ _CLDELETE( skipStream );
+ }
+ }
+
+ int32_t SegmentTermDocs::doc()const {
+ return _doc;
+ }
+ int32_t SegmentTermDocs::freq()const {
+ return _freq;
+ }
+
+ bool SegmentTermDocs::next() {
+ while (true) {
+ if (count == df)
+ return false;
+
+ uint32_t docCode = freqStream->readVInt();
+ _doc += docCode >> 1; //unsigned shift
+ if ((docCode & 1) != 0) // if low bit is set
+ _freq = 1; // _freq is one
+ else
+ _freq = freqStream->readVInt(); // else read _freq
+ count++;
+
+ if ( (deletedDocs == NULL) || (deletedDocs->get(_doc) == false ) )
+ break;
+ skippingDoc();
+ }
+ return true;
+ }
+
+ int32_t SegmentTermDocs::read(int32_t* docs, int32_t* freqs, int32_t length) {
+ int32_t i = 0;
+//todo: one optimization would be to get the pointer buffer for ram or mmap dirs
+//and iterate over them instead of using readByte() intensive functions.
+ while (i<length && count < df) {
+ uint32_t docCode = freqStream->readVInt();
+ _doc += docCode >> 1;
+ if ((docCode & 1) != 0) // if low bit is set
+ _freq = 1; // _freq is one
+ else
+ _freq = freqStream->readVInt(); // else read _freq
+ count++;
+
+ if (deletedDocs == NULL || !deletedDocs->get(_doc)) {
+ docs[i] = _doc;
+ freqs[i] = _freq;
+ i++;
+ }
+ }
+ return i;
+ }
+
+ bool SegmentTermDocs::skipTo(const int32_t target){
+ if (df >= skipInterval) { // optimized case
+ if (skipStream == NULL)
+ skipStream = freqStream->clone(); // lazily clone
+
+ if (!haveSkipped) { // lazily seek skip stream
+ skipStream->seek(skipPointer);
+ haveSkipped = true;
+ }
+
+ // scan skip data
+ int32_t lastSkipDoc = skipDoc;
+ int64_t lastFreqPointer = freqStream->getFilePointer();
+ int64_t lastProxPointer = -1;
+ int32_t numSkipped = -1 - (count % skipInterval);
+
+ while (target > skipDoc) {
+ lastSkipDoc = skipDoc;
+ lastFreqPointer = freqPointer;
+ lastProxPointer = proxPointer;
+
+ if (skipDoc != 0 && skipDoc >= _doc)
+ numSkipped += skipInterval;
+
+ if(skipCount >= numSkips)
+ break;
+
+ skipDoc += skipStream->readVInt();
+ freqPointer += skipStream->readVInt();
+ proxPointer += skipStream->readVInt();
+
+ skipCount++;
+ }
+
+ // if we found something to skip, then skip it
+ if (lastFreqPointer > freqStream->getFilePointer()) {
+ freqStream->seek(lastFreqPointer);
+ skipProx(lastProxPointer);
+
+ _doc = lastSkipDoc;
+ count += numSkipped;
+ }
+
+ }
+
+ // done skipping, now just scan
+
+ do {
+ if (!next())
+ return false;
+ } while (target > _doc);
+ return true;
+ }
+
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/index/SegmentTermEnum.cpp b/src/3rdparty/clucene/src/CLucene/index/SegmentTermEnum.cpp
new file mode 100644
index 0000000..20e286f
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/SegmentTermEnum.cpp
@@ -0,0 +1,389 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "SegmentTermEnum.h"
+
+#include "Terms.h"
+#include "FieldInfos.h"
+#include "Term.h"
+#include "TermInfo.h"
+#include "TermInfosWriter.h"
+
+CL_NS_USE(store)
+CL_NS_DEF(index)
+
+ SegmentTermEnum::SegmentTermEnum(IndexInput* i, FieldInfos* fis, const bool isi):
+ fieldInfos(fis){
+ //Func - Constructor
+ //Pre - i holds a reference to an instance of IndexInput
+ // fis holds a reference to an instance of FieldInfos
+ // isi
+ //Post - An instance of SegmentTermEnum has been created
+ input = i;
+ position = -1;
+ //Instantiate a Term with empty field, empty text and which is interned (see term.h what interned means)
+ _term = _CLNEW Term;
+ isIndex = isi;
+ termInfo = _CLNEW TermInfo();
+ indexPointer = 0;
+ buffer = NULL;
+ bufferLength = 0;
+ prev = NULL;
+ formatM1SkipInterval = 0;
+
+ //Set isClone to false as the instance is not clone of another instance
+ isClone = false;
+
+
+ int32_t firstInt = input->readInt();
+ if (firstInt >= 0) {
+ // original-format file, without explicit format version number
+ format = 0;
+ size = firstInt;
+
+ // back-compatible settings
+ indexInterval = 128;
+ skipInterval = LUCENE_INT32_MAX_SHOULDBE; // switch off skipTo optimization
+
+ } else {
+ // we have a format version number
+ format = firstInt;
+
+ // check that it is a format we can understand
+ if (format < TermInfosWriter::FORMAT){
+ TCHAR err[30];
+ _sntprintf(err,30,_T("Unknown format version: %d"), format);
+ _CLTHROWT(CL_ERR_Runtime,err);
+ }
+
+ size = input->readLong(); // read the size
+
+ if(format == -1){
+ if (!isIndex) {
+ indexInterval = input->readInt();
+ formatM1SkipInterval = input->readInt();
+ }
+ // switch off skipTo optimization for file format prior to 1.4rc2 in order to avoid a bug in
+ // skipTo implementation of these versions
+ skipInterval = LUCENE_INT32_MAX_SHOULDBE;
+ }else{
+ indexInterval = input->readInt();
+ skipInterval = input->readInt();
+ }
+ }
+ }
+
+ SegmentTermEnum::SegmentTermEnum(const SegmentTermEnum& clone):
+ fieldInfos(clone.fieldInfos)
+ {
+ //Func - Constructor
+ // The instance is created by cloning all properties of clone
+ //Pre - clone holds a valid reference to SegmentTermEnum
+ //Post - An instance of SegmentTermEnum with the same properties as clone
+
+ input = clone.input->clone();
+ //Copy the postion from the clone
+ position = clone.position;
+
+ if ( clone._term != NULL ){
+ _term = _CLNEW Term;
+ _term->set(clone._term,clone._term->text());
+ }else
+ _term = NULL;
+ isIndex = clone.isIndex;
+ termInfo = _CLNEW TermInfo(clone.termInfo);
+ indexPointer = clone.indexPointer;
+ buffer = clone.buffer==NULL?NULL:(TCHAR*)malloc(sizeof(TCHAR) * (clone.bufferLength+1));
+ bufferLength = clone.bufferLength;
+ prev = clone.prev==NULL?NULL:_CLNEW Term(clone.prev->field(),clone.prev->text(),false);
+ size = clone.size;
+
+ format = clone.format;
+ indexInterval= clone.indexInterval;
+ skipInterval = clone.skipInterval;
+ formatM1SkipInterval = clone.formatM1SkipInterval;
+ //Set isClone to true as this instance is a clone of another instance
+ isClone = true;
+
+ //Copy the contents of buffer of clone to the buffer of this instance
+ if ( clone.buffer != NULL )
+ memcpy(buffer,clone.buffer,bufferLength * sizeof(TCHAR));
+ }
+
+ SegmentTermEnum::~SegmentTermEnum(){
+ //Func - Destructor
+ //Pre - true
+ //Post - The instance has been destroyed. If this instance was a clone
+ // then the inputstream is closed and deleted too.
+
+ //todo: revisit this... close() should clean up most of everything.
+
+ //Finalize prev
+ _CLDECDELETE(prev );
+ //Finalize term
+ _CLDECDELETE( _term );
+
+
+ //Delete the buffer if necessary
+ free(buffer);
+ //Delete termInfo if necessary
+ _CLDELETE(termInfo);
+
+ //Check if this instance is a clone
+ if ( isClone ){
+ //Close the inputstream
+ input->close();
+ //delete the inputstream
+ _CLDELETE(input);
+ }
+ }
+
+ bool SegmentTermEnum::next(){
+ //Func - Moves the current of the set to the next in the set
+ //Pre - true
+ //Post - If the end has been reached NULL is returned otherwise the term has
+ // become the next Term in the enumeration
+
+ //Increase position by and and check if the end has been reached
+ if (position++ >= size-1) {
+ //delete term
+ _CLDECDELETE(_term);
+ return false;
+ }
+
+ //delete the previous enumerated term
+ Term* tmp=NULL;
+ if ( prev != NULL ){
+ int32_t usage = prev->__cl_refcount;
+ if ( usage > 1 ){
+ _CLDECDELETE(prev); //todo: tune other places try and delete its term
+ }else
+ tmp = prev; //we are going to re-use this term
+ }
+ //prev becomes the current enumerated term
+ prev = _term;
+ //term becomes the next term read from inputStream input
+ _term = readTerm(tmp);
+
+ //Read docFreq, the number of documents which contain the term.
+ termInfo->docFreq = input->readVInt();
+ //Read freqPointer, a pointer into the TermFreqs file (.frq)
+ termInfo->freqPointer += input->readVLong();
+
+ //Read proxPointer, a pointer into the TermPosition file (.prx).
+ termInfo->proxPointer += input->readVLong();
+
+ if(format == -1){
+ // just read skipOffset in order to increment file pointer;
+ // value is never used since skipTo is switched off
+ if (!isIndex) {
+ if (termInfo->docFreq > formatM1SkipInterval) {
+ termInfo->skipOffset = input->readVInt();
+ }
+ }
+ }else{
+ if (termInfo->docFreq >= skipInterval)
+ termInfo->skipOffset = input->readVInt();
+ }
+
+ //Check if the enumeration is an index
+ if (isIndex)
+ //read index pointer
+ indexPointer += input->readVLong();
+
+ return true;
+ }
+
+ Term* SegmentTermEnum::term() {
+ //Func - Returns the current term.
+ //Pre - pointer is true or false and indicates if the reference counter
+ // of term must be increased or not
+ // next() must have been called once!
+ //Post - pointer = true -> term has been returned with an increased reference counter
+ // pointer = false -> term has been returned
+
+ return _CL_POINTER(_term);
+ }
+ Term* SegmentTermEnum::term(bool pointer) {
+ if ( pointer )
+ return _CL_POINTER(_term);
+ else
+ return _term;
+ }
+
+ void SegmentTermEnum::scanTo(const Term *term){
+ //Func - Scan for Term without allocating new Terms
+ //Pre - term != NULL
+ //Post - The iterator term has been moved to the position where Term is expected to be
+ // in the enumeration
+ while ( term->compareTo(this->_term) > 0 && next())
+ {
+ }
+ }
+
+ void SegmentTermEnum::close() {
+ //Func - Closes the enumeration to further activity, freeing resources.
+ //Pre - true
+ //Post - The inputStream input has been closed
+
+ input->close();
+ }
+
+ int32_t SegmentTermEnum::docFreq() const {
+ //Func - Returns the document frequency of the current term in the set
+ //Pre - termInfo != NULL
+ // next() must have been called once
+ //Post - The document frequency of the current enumerated term has been returned
+
+ return termInfo->docFreq;
+ }
+
+ void SegmentTermEnum::seek(const int64_t pointer, const int32_t p, Term* t, TermInfo* ti) {
+ //Func - Repositions term and termInfo within the enumeration
+ //Pre - pointer >= 0
+ // p >= 0 and contains the new position within the enumeration
+ // t is a valid reference to a Term and is the new current term in the enumeration
+ // ti is a valid reference to a TermInfo and is corresponding TermInfo form the new
+ // current Term
+ //Post - term and terminfo have been repositioned within the enumeration
+
+ //Reset the IndexInput input to pointer
+ input->seek(pointer);
+ //Assign the new position
+ position = p;
+
+ //finalize the current term
+ if ( _term == NULL || _term->__cl_refcount > 1 ){
+ _CLDECDELETE(_term);
+ //Get a pointer from t and increase the reference counter of t
+ _term = _CLNEW Term; //cannot use reference, because TermInfosReader uses non ref-counted array
+ }
+ _term->set(t,t->text());
+
+ //finalize prev
+ _CLDECDELETE(prev);
+
+ //Change the current termInfo so it matches the new current term
+ termInfo->set(ti);
+
+ //Have the buffer grown if needed
+ if ( bufferLength <= _term->textLength() )
+ growBuffer(_term->textLength(), true ); // copy term text into buffer
+ else
+ _tcsncpy(buffer,_term->text(),bufferLength); //just copy the buffer
+ }
+
+ TermInfo* SegmentTermEnum::getTermInfo()const {
+ //Func - Returns a clone of the current termInfo
+ //Pre - termInfo != NULL
+ // next() must have been called once
+ //Post - A clone of the current termInfo has been returned
+
+ return _CLNEW TermInfo(*termInfo); //clone
+ }
+
+ void SegmentTermEnum::getTermInfo(TermInfo* ti)const {
+ //Func - Retrieves a clone of termInfo through the reference ti
+ //Pre - ti contains a valid reference to TermInfo
+ // termInfo != NULL
+ // next() must have been called once
+ //Post - ti contains a clone of termInfo
+
+ ti->set(termInfo);
+ }
+
+ int64_t SegmentTermEnum::freqPointer()const {
+ //Func - Returns the freqpointer of the current termInfo
+ //Pre - termInfo != NULL
+ // next() must have been called once
+ //Post - The freqpointer of the current termInfo has been returned
+
+ return termInfo->freqPointer;
+ }
+
+ int64_t SegmentTermEnum::proxPointer()const {
+ //Func - Returns the proxPointer of the current termInfo
+ //Pre - termInfo != NULL
+ // next() must have been called once
+ //Post - the proxPointer of the current termInfo has been returned
+
+ return termInfo->proxPointer;
+ }
+
+ SegmentTermEnum* SegmentTermEnum::clone() const {
+ //Func - Returns a clone of this instance
+ //Pre - true
+ //Post - An clone of this instance has been returned
+
+ return _CLNEW SegmentTermEnum(*this);
+ }
+
+ Term* SegmentTermEnum::readTerm(Term* reuse) {
+ //Func - Reads the next term in the enumeration
+ //Pre - true
+ //Post - The next Term in the enumeration has been read and returned
+
+ //Read the start position from the inputStream input
+ int32_t start = input->readVInt();
+ //Read the length of term in the inputStream input
+ int32_t length = input->readVInt();
+
+ //Calculated the total lenght of bytes that buffer must be to contain the current
+ //chars in buffer and the new ones yet to be read
+ uint32_t totalLength = start + length;
+
+ if (static_cast<uint32_t>(bufferLength) < totalLength+1)
+ growBuffer(totalLength, false);
+
+ //Read a length number of characters into the buffer from position start in the inputStream input
+ input->readChars(buffer, start, length);
+ //Null terminate the string
+ buffer[totalLength] = 0;
+
+ //Return a new Term
+ int32_t field = input->readVInt();
+ const TCHAR* fieldname = fieldInfos->fieldName(field);
+ if ( reuse == NULL )
+ reuse = _CLNEW Term;
+
+ reuse->set(fieldname, buffer, false);
+ return reuse;
+ }
+
+ void SegmentTermEnum::growBuffer(const uint32_t length, bool force_copy) {
+ //Func - Instantiate a buffer of length length+1
+ //Pre - length > 0
+ //Post - pre(buffer) has been deleted with its contents. A new buffer
+ // has been allocated of length length+1 and the text of term has been copied
+ // to buffer
+ //todo: we could guess that we will need to re-grow this
+ //buffer a few times...so start off with a reasonable grow
+ //value...
+ if ( bufferLength > length )
+ return;
+
+ //Store the new bufferLength
+ if ( length - bufferLength < LUCENE_SEGMENTTERMENUM_GROWSIZE )
+ bufferLength = length+LUCENE_SEGMENTTERMENUM_GROWSIZE;
+ else
+ bufferLength = length+1;
+
+ bool copy = buffer==NULL;
+
+ //Instantiate the new buffer + 1 is needed for terminator '\0'
+ if ( buffer == NULL )
+ buffer = (TCHAR*)malloc(sizeof(TCHAR) * (bufferLength+1));
+ else
+ buffer = (TCHAR*)realloc(buffer, sizeof(TCHAR) * (bufferLength+1));
+
+ if ( copy || force_copy){
+ //Copy the text of term into buffer
+ _tcsncpy(buffer,_term->text(),bufferLength);
+ }
+ }
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/index/SegmentTermEnum.h b/src/3rdparty/clucene/src/CLucene/index/SegmentTermEnum.h
new file mode 100644
index 0000000..0d50103
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/SegmentTermEnum.h
@@ -0,0 +1,138 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_index_SegmentTermEnum_
+#define _lucene_index_SegmentTermEnum_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "Terms.h"
+#include "FieldInfos.h"
+#include "TermInfo.h"
+
+CL_NS_DEF(index)
+
+/**
+ * SegmentTermEnum is an enumeration of all Terms and TermInfos
+ */
+class SegmentTermEnum:public TermEnum{
+private:
+ Term* _term; ///points to the current Term in the enumeration
+ TermInfo* termInfo; ///points to the TermInfo matching the current Term in the enumeration
+
+ bool isIndex; ///Indicates if the Segment is a an index
+ bool isClone; ///Indicates if SegmentTermEnum is an orignal instance or
+ ///a clone of another SegmentTermEnum
+
+ TCHAR* buffer; ///The buffer that contains the data read from the Term Infos File
+ uint32_t bufferLength; ///Length of the buffer
+
+ int32_t format;
+ int32_t formatM1SkipInterval;
+
+ CL_NS(store)::IndexInput* input; ///The IndexInput that reads from the Term Infos File
+ FieldInfos* fieldInfos; ///contains the Field Infos for the segment
+ int64_t size; ///The size of the enumeration
+ int64_t position; ///The position of the current (term) in the enumeration
+ int64_t indexPointer;
+ Term* prev; ///The previous current
+ int32_t indexInterval;
+ int32_t skipInterval;
+
+ friend class TermInfosReader;
+ friend class SegmentTermDocs;
+protected:
+
+ /**
+ * Constructor.
+ * The instance is created by cloning all properties of clone
+ */
+ SegmentTermEnum( const SegmentTermEnum& clone);
+
+public:
+ ///Constructor
+ SegmentTermEnum(CL_NS(store)::IndexInput* i, FieldInfos* fis, const bool isi );
+
+ ///Destructor
+ ~SegmentTermEnum();
+
+ /**
+ * Moves the current of the set to the next in the set
+ */
+ bool next();
+
+ /**
+ * Returns a pointer to the current term.
+ */
+ Term* term();
+ /**
+ * Returns the current term.
+ */
+ Term* term(bool pointer);
+
+ /**
+ * Scan for Term term without allocating new Terms
+ */
+ void scanTo(const Term *term);
+
+ /**
+ * Closes the enumeration to further activity, freeing resources.
+ */
+ void close();
+
+ /**
+ * Returns the document frequency of the current term in the set
+ */
+ int32_t docFreq() const;
+
+ /**
+ * Repositions term and termInfo within the enumeration
+ */
+ void seek(const int64_t pointer, const int32_t p, Term* t, TermInfo* ti);
+
+ /**
+ * Returns a clone of the current termInfo
+ */
+ TermInfo* getTermInfo()const;
+
+ /**
+ * Retrieves a clone of termInfo through the reference ti
+ */
+ void getTermInfo(TermInfo* ti)const;
+
+ /**
+ * Returns the freqPointer from the current TermInfo in the enumeration.
+ */
+ int64_t freqPointer() const;
+
+ /**
+ * Returns the proxPointer from the current TermInfo in the enumeration.
+ */
+ int64_t proxPointer() const;
+
+ /**
+ * Returns a clone of this instance
+ */
+ SegmentTermEnum* clone() const;
+
+ const char* getObjectName(){ return SegmentTermEnum::getClassName(); }
+ static const char* getClassName(){ return "SegmentTermEnum"; }
+
+private:
+ /**
+ * Reads the next term in the enumeration
+ */
+ Term* readTerm(Term* reuse);
+ /**
+ * Instantiate a buffer of length length+1
+ */
+ void growBuffer(const uint32_t length, bool force_copy);
+
+};
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/index/SegmentTermPositions.cpp b/src/3rdparty/clucene/src/CLucene/index/SegmentTermPositions.cpp
new file mode 100644
index 0000000..e481838
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/SegmentTermPositions.cpp
@@ -0,0 +1,101 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "SegmentHeader.h"
+
+#include "Terms.h"
+
+CL_NS_USE(util)
+CL_NS_DEF(index)
+
+SegmentTermPositions::SegmentTermPositions(const SegmentReader* _parent):
+ SegmentTermDocs(_parent){
+//Func - Constructor
+//Pre - Parent != NULL
+//Post - The instance has been created
+
+ CND_PRECONDITION(_parent != NULL, "Parent is NULL");
+
+ proxStream = _parent->proxStream->clone();
+
+ CND_CONDITION(proxStream != NULL,"proxStream is NULL");
+
+ position = 0;
+ proxCount = 0;
+}
+
+SegmentTermPositions::~SegmentTermPositions() {
+//Func - Destructor
+//Pre - true
+//Post - The intance has been closed
+ close();
+}
+
+TermDocs* SegmentTermPositions::__asTermDocs(){
+ return (TermDocs*) this;
+}
+TermPositions* SegmentTermPositions::__asTermPositions(){
+ return (TermPositions*) this;
+}
+
+void SegmentTermPositions::seek(const TermInfo* ti) {
+ SegmentTermDocs::seek(ti);
+ if (ti != NULL)
+ proxStream->seek(ti->proxPointer);
+ proxCount = 0;
+}
+
+void SegmentTermPositions::close() {
+//Func - Frees the resources
+//Pre - true
+//Post - The resources have been freed
+
+ SegmentTermDocs::close();
+ //Check if proxStream still exists
+ if(proxStream){
+ proxStream->close();
+ _CLDELETE( proxStream );
+ }
+}
+
+int32_t SegmentTermPositions::nextPosition() {
+ /* DSR:CL_BUG: Should raise exception if proxCount == 0 at the
+ ** beginning of this method, as in
+ ** if (--proxCount == 0) throw ...;
+ ** The JavaDocs for TermPositions.nextPosition declare this constraint,
+ ** but CLucene doesn't enforce it. */
+ proxCount--;
+ return position += proxStream->readVInt();
+}
+
+bool SegmentTermPositions::next() {
+ for (int32_t f = proxCount; f > 0; f--) // skip unread positions
+ proxStream->readVInt();
+
+ if (SegmentTermDocs::next()) { // run super
+ proxCount = _freq; // note frequency
+ position = 0; // reset position
+ return true;
+ }
+ return false;
+}
+
+int32_t SegmentTermPositions::read(int32_t* docs, int32_t* freqs, int32_t length) {
+ _CLTHROWA(CL_ERR_InvalidState,"TermPositions does not support processing multiple documents in one call. Use TermDocs instead.");
+}
+
+void SegmentTermPositions::skippingDoc() {
+ for (int32_t f = _freq; f > 0; f--) // skip all positions
+ proxStream->readVInt();
+}
+
+void SegmentTermPositions::skipProx(int64_t proxPointer){
+ proxStream->seek(proxPointer);
+ proxCount = 0;
+}
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/index/SegmentTermVector.cpp b/src/3rdparty/clucene/src/CLucene/index/SegmentTermVector.cpp
new file mode 100644
index 0000000..5e9ac3c
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/SegmentTermVector.cpp
@@ -0,0 +1,188 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "TermVector.h"
+#include "CLucene/util/StringBuffer.h"
+
+CL_NS_USE(util)
+CL_NS_DEF(index)
+
+Array<int32_t> SegmentTermPositionVector::EMPTY_TERM_POS;
+
+SegmentTermVector::SegmentTermVector(const TCHAR* field, TCHAR** terms, Array<int32_t>* termFreqs) {
+ this->field = STRDUP_TtoT(field);
+ this->terms = terms;
+ this->termsLen = -1; //lazily get the size of the terms
+ this->termFreqs = termFreqs;
+}
+
+SegmentTermVector::~SegmentTermVector(){
+ _CLDELETE_CARRAY(field);
+ _CLDELETE_CARRAY_ALL(terms);
+
+ _CLDELETE_ARRAY(termFreqs->values);
+ _CLDELETE(termFreqs);
+}
+TermPositionVector* SegmentTermVector::__asTermPositionVector(){
+ return NULL;
+}
+
+const TCHAR* SegmentTermVector::getField() {
+return field;
+}
+
+TCHAR* SegmentTermVector::toString() const{
+StringBuffer sb;
+sb.appendChar('{');
+sb.append(field);
+sb.append(_T(": "));
+
+int32_t i=0;
+while ( terms && terms[i] != NULL ){
+ if (i>0)
+ sb.append(_T(", "));
+ sb.append(terms[i]);
+ sb.appendChar('/');
+
+ sb.appendInt((*termFreqs)[i]);
+}
+sb.appendChar('}');
+return sb.toString();
+}
+
+int32_t SegmentTermVector::size() {
+if ( terms == NULL )
+ return 0;
+
+if ( termsLen == -1 ){
+ termsLen=0;
+ while ( terms[termsLen] != 0 )
+ termsLen++;
+}
+return termsLen;
+}
+
+const TCHAR** SegmentTermVector::getTerms() {
+ return (const TCHAR**)terms;
+}
+
+const Array<int32_t>* SegmentTermVector::getTermFrequencies() {
+ return termFreqs;
+}
+
+int32_t SegmentTermVector::binarySearch(TCHAR** a, const int32_t arraylen, const TCHAR* key) const
+{
+ int32_t low = 0;
+ int32_t hi = arraylen - 1;
+ int32_t mid = 0;
+ while (low <= hi)
+ {
+ mid = (low + hi) >> 1;
+
+ int32_t c = _tcscmp(a[mid],key);
+ if (c==0)
+ return mid;
+ else if (c > 0)
+ hi = mid - 1;
+ else // This gets the insertion point right on the last loop.
+ low = ++mid;
+ }
+ return -mid - 1;
+}
+
+int32_t SegmentTermVector::indexOf(const TCHAR* termText) {
+ if(terms == NULL)
+ return -1;
+ int32_t res = binarySearch(terms, size(), termText);
+ return res >= 0 ? res : -1;
+}
+
+void SegmentTermVector::indexesOf(const TCHAR** termNumbers, const int32_t start, const int32_t len, Array<int32_t>& ret) {
+ // TODO: there must be a more efficient way of doing this.
+ // At least, we could advance the lower bound of the terms array
+ // as we find valid indexes. Also, it might be possible to leverage
+ // this even more by starting in the middle of the termNumbers array
+ // and thus dividing the terms array maybe in half with each found index.
+ ret.length = len;
+ ret.values = _CL_NEWARRAY(int32_t,len);
+ for (int32_t i=0; i<len; ++i) {
+ ret.values[i] = indexOf(termNumbers[start+ i]);
+ }
+}
+
+
+
+
+SegmentTermPositionVector::SegmentTermPositionVector(const TCHAR* field, TCHAR** terms, Array<int32_t>* termFreqs, Array< Array<int32_t> >* positions, Array< Array<TermVectorOffsetInfo> >* offsets):
+ SegmentTermVector(field,terms,termFreqs)
+{
+ this->offsets = offsets;
+ this->positions = positions;
+}
+
+SegmentTermPositionVector::~SegmentTermPositionVector(){
+ if ( offsets ){
+ for (size_t i=0;i<offsets->length;i++){
+ if ( offsets->values != NULL ){
+ Array<TermVectorOffsetInfo>& offs = offsets->values[i];
+ for ( size_t j=0;j<offs.length;j++ ){
+ _CLDELETE_ARRAY(offs.values);
+ }
+ }
+ }
+ _CLDELETE_ARRAY(offsets->values);
+ _CLDELETE(offsets);
+ }
+ if ( positions ){
+ for (size_t i=0;i<positions->length;i++){
+ if ( positions->values != NULL ){
+ Array<int32_t>& pos = positions->values[i];
+ for ( size_t j=0;j<pos.length;j++ ){
+ _CLDELETE_ARRAY(pos.values);
+ }
+ }
+ }
+ _CLDELETE_ARRAY(positions->values);
+ _CLDELETE(positions);
+ }
+}
+
+TermPositionVector* SegmentTermPositionVector::__asTermPositionVector(){
+ return this;
+}
+/**
+* Returns an array of TermVectorOffsetInfo in which the term is found.
+*
+* @param index The position in the array to get the offsets from
+* @return An array of TermVectorOffsetInfo objects or the empty list
+* @see org.apache.lucene.analysis.Token
+*/
+Array<TermVectorOffsetInfo>* SegmentTermPositionVector::getOffsets(int32_t index) {
+ if(offsets == NULL)
+ return NULL;
+ if (index >=0 && index < offsets->length)
+ return &offsets->values[index];
+ else
+ return &TermVectorOffsetInfo::EMPTY_OFFSET_INFO;
+}
+
+/**
+* Returns an array of positions in which the term is found.
+* Terms are identified by the index at which its number appears in the
+* term String array obtained from the <code>indexOf</code> method.
+*/
+Array<int32_t>* SegmentTermPositionVector::getTermPositions(int32_t index) {
+ if(positions == NULL)
+ return NULL;
+
+ if (index >=0 && index < positions->length)
+ return &positions->values[index];
+ else
+ return &EMPTY_TERM_POS;
+}
+CL_NS_END
+
diff --git a/src/3rdparty/clucene/src/CLucene/index/Term.cpp b/src/3rdparty/clucene/src/CLucene/index/Term.cpp
new file mode 100644
index 0000000..fc32e44
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/Term.cpp
@@ -0,0 +1,179 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+*
+* Changes are Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+------------------------------------------------------------------------------*/
+
+#include "CLucene/StdHeader.h"
+#include "Term.h"
+#include "CLucene/util/StringIntern.h"
+
+CL_NS_USE(util)
+CL_NS_DEF(index)
+
+Term::Term()
+{
+ init();
+}
+
+Term::Term(const TCHAR* fld, const TCHAR* txt, bool internField)
+{
+ init();
+ set(fld, txt, internField);
+}
+
+Term::Term(const Term* fieldTerm, const TCHAR* txt)
+{
+ init();
+ set(fieldTerm, txt);
+}
+
+Term::Term(const TCHAR* fld, const TCHAR* txt)
+{
+ init();
+ set(fld, txt);
+}
+
+Term::~Term()
+{
+ if (internF)
+ CLStringIntern::unintern(_field);
+ _field = NULL;
+
+#ifndef LUCENE_TERM_TEXT_LENGTH
+ if (_text != LUCENE_BLANK_STRING)
+ _CLDELETE_CARRAY(_text);
+#endif
+}
+
+const TCHAR* Term::field() const
+{
+ return _field;
+}
+
+const TCHAR* Term::text() const
+{
+ return _text;
+}
+
+void Term::set(const Term* term, const TCHAR* txt)
+{
+ set(term->field(), txt, false);
+}
+
+void Term::set(const TCHAR* fld, const TCHAR* txt,bool internField)
+{
+ CND_PRECONDITION(fld != NULL, "fld contains NULL");
+ CND_PRECONDITION(txt != NULL, "txt contains NULL");
+
+ //save field for unintern later
+ const TCHAR* oldField = _field;
+ cachedHashCode = 0;
+ textLen = _tcslen(txt);
+
+ //Delete text if it is the owner
+#ifdef LUCENE_TERM_TEXT_LENGTH
+ if (textLen > LUCENE_TERM_TEXT_LENGTH)
+ textLen = LUCENE_TERM_TEXT_LENGTH;
+
+ _tcsncpy(_text,txt,textLen+1);
+ _text[textLen]=0;
+#else
+ //if the term text buffer is bigger than what we have
+ if (_text && textLen > textLenBuf) {
+ if (_text != LUCENE_BLANK_STRING) {
+ _CLDELETE_ARRAY(_text);
+ } else {
+ _text = NULL;
+ }
+ textLenBuf = 0;
+ }
+
+ if (_text == LUCENE_BLANK_STRING) {
+ _text = LUCENE_BLANK_STRING;
+ } else if (_text == NULL) {
+ if (txt[0] == 0) {
+ //if the string is blank and we aren't re-using the buffer...
+ _text = LUCENE_BLANK_STRING;
+ } else {
+ //duplicate the text
+ _text = stringDuplicate(txt);
+ textLenBuf = textLen;
+ }
+ } else {
+ //re-use the buffer
+ _tcscpy(_text,txt);
+ }
+#endif
+
+ //Set Term Field
+ if (internField) {
+ _field = CLStringIntern::intern(fld CL_FILELINE);
+ } else {
+ _field = fld;
+ }
+
+ //unintern old field after interning new one,
+ if (internF)
+ CLStringIntern::unintern(oldField);
+ internF = internField;
+
+ CND_PRECONDITION(_tcscmp(fld, _field) == 0, "field not equal");
+}
+
+bool Term::equals(const Term* other) const
+{
+ if (cachedHashCode != 0 && other->cachedHashCode != 0
+ && other->cachedHashCode != cachedHashCode)
+ return false;
+
+ if (_field == other->_field) {
+ if (textLen == other->textLen)
+ return (_tcscmp(_text, other->_text) == 0);
+ return false;
+ }
+
+ return false;
+}
+
+size_t Term::hashCode()
+{
+ if (cachedHashCode == 0)
+ cachedHashCode = Misc::thashCode(_field) + Misc::thashCode(_text, textLen);
+
+ return cachedHashCode;
+}
+
+int32_t Term::compareTo(const Term* other) const
+{
+ //Check ret to see if text needs to be compared
+ if (_field == other->_field)
+ return _tcscmp(_text, other->_text);
+
+ return _tcscmp(_field, other->_field);
+}
+
+TCHAR* Term::toString() const
+{
+ return CL_NS(util)::Misc::join(_field, _T(":"), _text);
+}
+
+void Term::init()
+{
+ textLen = 0;
+ internF = false;
+ cachedHashCode = 0;
+ _field = LUCENE_BLANK_STRING;
+
+#ifdef LUCENE_TERM_TEXT_LENGTH
+ _text[0] = 0;
+#else
+ _text = LUCENE_BLANK_STRING;
+ textLenBuf = 0;
+#endif
+}
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/index/Term.h b/src/3rdparty/clucene/src/CLucene/index/Term.h
new file mode 100644
index 0000000..68eefd1
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/Term.h
@@ -0,0 +1,146 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+*
+* Changes are Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+------------------------------------------------------------------------------*/
+#ifndef _lucene_index_Term_
+#define _lucene_index_Term_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "CLucene/util/Misc.h"
+#include "CLucene/util/StringIntern.h"
+
+CL_NS_DEF(index)
+
+/*
+A Term represents a word from text. This is the unit of search. It is
+composed of two elements, the text of the word, as a string, and the name of
+the field that the text occured in, an interned string.
+
+Note that terms may represent more than words from text fields, but also
+things like dates, email addresses, urls, etc.
+
+IMPORTANT NOTE:
+Term inherits from the template class LUCENE_REFBASE which tries to do
+some garbage collection by counting the references an instance has. As a result
+of this construction you MUST use _CLDECDELETE(obj) when you want to delete an
+of Term!
+
+ABOUT intrn
+
+intrn indicates if field and text are interned or not. Interning of Strings
+is the process of converting duplicated strings to shared ones.
+
+*/
+class Term : LUCENE_REFBASE
+{
+private:
+ const TCHAR* _field;
+ bool internF; // Indicates if Term Field is interned(and therefore must be uninternd).
+ size_t cachedHashCode;
+ size_t textLen; // a cache of text len, this allows for a preliminary comparison of text lengths
+
+#ifdef LUCENE_TERM_TEXT_LENGTH
+ TCHAR _text[LUCENE_TERM_TEXT_LENGTH + 1];
+#else
+ TCHAR* _text;
+ size_t textLenBuf; //a cache of text len, this allows for a preliminary comparison of text lengths
+#endif
+
+ void init();
+public:
+
+ //uses the specified fieldTerm's field. this saves on intern'ing time.
+ Term(const Term* fieldTerm, const TCHAR* txt);
+
+ ///Constructs a blank term
+ Term();
+
+ // TODO: need to be private, a few other things need to be changed first...
+ Term(const TCHAR* fld, const TCHAR* txt, bool internField);
+
+ /**
+ * Constructor. Constructs a Term with the given field and text. Field and
+ * text are not copied Field and text are deleted in destructor only if
+ * intern is false.
+ */
+ Term(const TCHAR* fld, const TCHAR* txt);
+
+ ///Destructor.
+ ~Term();
+
+ ///Returns the field of this term, an interned string. The field indicates
+ ///the part of a document which this term came from.
+ const TCHAR* field() const; ///<returns reference
+
+ ///Returns the text of this term. In the case of words, this is simply the
+ ///text of the word. In the case of dates and other types, this is an
+ ///encoding of the object as a string.
+ const TCHAR* text() const; ///<returns reference
+
+ ///Resets the field and text of a Term.
+ inline void set(const TCHAR* fld, const TCHAR* txt)
+ {
+ set(fld, txt, true);
+ }
+
+ /**
+ * Optimized set of Term by reusing same field as this Term
+ * - avoids field.intern() overhead
+ * @param text The text of the new term
+ * (field is implicitly same as this Term instance)
+ */
+ void set(const Term* term, const TCHAR* txt);
+
+ void set(const TCHAR* fld, const TCHAR* txt, bool internField);
+
+ /** Compares two terms, returning a negative integer if this
+ term belongs before the argument, zero if this term is equal to the
+ argument, and a positive integer if this term belongs after the argument.
+
+ The ordering of terms is first by field, then by text.*/
+ int32_t compareTo(const Term* other) const;
+
+ bool equals(const Term* other) const;
+
+ size_t textLength() const { return textLen; }
+
+ ///Forms the contents of Field and term in some kind of tuple notation
+ ///<field:text>
+ TCHAR* toString() const;
+
+ size_t hashCode();
+
+ class Equals:public CL_NS_STD(binary_function)<const Term*,const Term*,bool>
+ {
+ public:
+ bool operator()( const Term* val1, const Term* val2 ) const
+ {
+ return val1->equals(val2);
+ }
+ };
+
+ class Compare:LUCENE_BASE, public CL_NS(util)::Compare::_base //<Term*>
+ {
+ public:
+ bool operator()(Term* t1, Term* t2) const
+ {
+ return (t1->compareTo(t2) < 0);
+ }
+
+ size_t operator()(Term* t) const
+ {
+ return t->hashCode();
+ }
+ };
+};
+
+CL_NS_END
+
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/index/TermInfo.cpp b/src/3rdparty/clucene/src/CLucene/index/TermInfo.cpp
new file mode 100644
index 0000000..ac11073
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/TermInfo.cpp
@@ -0,0 +1,53 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+*
+* Changes are Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+------------------------------------------------------------------------------*/
+
+#include "CLucene/StdHeader.h"
+#include "TermInfo.h"
+
+CL_NS_DEF(index)
+
+TermInfo::TermInfo()
+{
+ set(0, 0, 0, 0);
+}
+
+TermInfo::~TermInfo()
+{
+}
+
+TermInfo::TermInfo(int32_t df, int64_t fp, int64_t pp)
+{
+ set(df, fp, pp, 0);
+}
+
+TermInfo::TermInfo(const TermInfo* ti)
+{
+ if (ti)
+ set(ti);
+}
+
+void TermInfo::set(const TermInfo* ti)
+{
+ if (ti)
+ set(ti->docFreq, ti->freqPointer, ti->proxPointer, ti->skipOffset);
+}
+
+void TermInfo::set(int32_t df, int64_t fp, int64_t pp, int32_t so)
+{
+ CND_PRECONDITION(df >= 0, "df contains negative number");
+ CND_PRECONDITION(fp >= 0, "fp contains negative number");
+ CND_PRECONDITION(pp >= 0, "pp contains negative number");
+
+ docFreq = df;
+ freqPointer = fp;
+ proxPointer = pp;
+ skipOffset = so;
+}
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/index/TermInfo.h b/src/3rdparty/clucene/src/CLucene/index/TermInfo.h
new file mode 100644
index 0000000..57b7a9a
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/TermInfo.h
@@ -0,0 +1,61 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+*
+* Changes are Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+------------------------------------------------------------------------------*/
+#ifndef _lucene_index_TermInfo
+#define _lucene_index_TermInfo
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+CL_NS_DEF(index)
+
+// A TermInfo is the record of information stored for a term.
+class TermInfo : LUCENE_BASE
+{
+public:
+ // The number of documents which contain the term.
+ int32_t docFreq;
+
+ //A pointer into the TermFreqs file (.frq)
+ //The .frq file contains the lists of documents which contain each term,
+ //along with the frequency of the term in that document.
+ int64_t freqPointer;
+
+ //A pointer into the TermPosition file (.prx).
+ //The .prx file contains the lists of positions that each term
+ //occurs at within documents.
+ int64_t proxPointer;
+
+ int32_t skipOffset;
+
+ //Constructor
+ TermInfo();
+
+ //Constructor
+ TermInfo(int32_t df, int64_t fp, int64_t pp);
+
+ //Constructor
+ //Initialises this instance by copying the values of another TermInfo ti
+ TermInfo(const TermInfo* ti);
+
+ //Destructor
+ ~TermInfo();
+
+ //Sets a new document frequency, a new freqPointer and a new proxPointer
+ void set(int32_t docFreq, int64_t freqPointer, int64_t proxPointer,
+ int32_t skipOffset);
+
+ //Sets a new document frequency, a new freqPointer and a new proxPointer
+ //by copying these values from another instance of TermInfo
+ void set(const TermInfo* ti);
+};
+
+CL_NS_END
+
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/index/TermInfosReader.cpp b/src/3rdparty/clucene/src/CLucene/index/TermInfosReader.cpp
new file mode 100644
index 0000000..8f9e43d
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/TermInfosReader.cpp
@@ -0,0 +1,443 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright(C) 2007, 2008 by Nokia Corporation and/or its subsidiary(-ies), all rights reserved.
+*/
+#include "CLucene/StdHeader.h"
+#include "TermInfosReader.h"
+
+#include "CLucene/store/Directory.h"
+#include "CLucene/util/Misc.h"
+#include "FieldInfos.h"
+#include "Term.h"
+#include "Terms.h"
+#include "TermInfo.h"
+#include "TermInfosWriter.h"
+
+CL_NS_USE(store)
+CL_NS_USE(util)
+CL_NS_DEF(index)
+
+TermInfosReader::TermInfosReader(Directory* dir, const QString& seg,
+ FieldInfos* fis)
+ : directory(dir)
+ , fieldInfos (fis)
+{
+ //Func - Constructor.
+ // Reads the TermInfos file (.tis) and eventually the Term Info Index file (.tii)
+ //Pre - dir is a reference to a valid Directory
+ // Fis contains a valid reference to an FieldInfos instance
+ // seg != NULL and contains the name of the segment
+ //Post - An instance has been created and the index named seg has been read. (Remember
+ // a segment is nothing more then an independently readable index)
+
+ CND_PRECONDITION(!seg.isEmpty(), "seg is NULL");
+
+ //Initialize the name of the segment
+ segment = seg;
+ //There are no indexTerms yet
+ indexTerms = NULL;
+ //So there are no indexInfos
+ indexInfos = NULL;
+ //So there are no indexPointers
+ indexPointers = NULL;
+ //Create a filname fo a Term Info File
+ QString tisFile = Misc::segmentname(segment, QLatin1String(".tis"));
+ QString tiiFile = Misc::segmentname(segment, QLatin1String(".tii"));
+
+ //Create an SegmentTermEnum for storing all the terms read of the segment
+ origEnum = _CLNEW SegmentTermEnum( directory->openInput( tisFile ), fieldInfos, false);
+ indexEnum = _CLNEW SegmentTermEnum( directory->openInput( tiiFile ), fieldInfos, true);
+
+ //Check if enumerator points to a valid instance
+ CND_CONDITION(origEnum != NULL, "No memory could be allocated for orig enumerator");
+ CND_CONDITION(indexEnum != NULL, "No memory could be allocated for index enumerator");
+
+ //Get the size of the enumeration and store it in size
+ _size = origEnum->size;
+}
+
+TermInfosReader::~TermInfosReader()
+{
+ //Func - Destructor
+ //Pre - true
+ //Post - The instance has been destroyed
+
+ //Close the TermInfosReader to be absolutly sure that enumerator has been closed
+ //and the arrays indexTerms, indexPointers and indexInfos and their elements
+ //have been destroyed
+ close();
+}
+
+void TermInfosReader::close()
+{
+ //Func - Close the enumeration of TermInfos
+ //Pre - true
+ //Post - The _enumeration has been closed and the arrays
+
+ //Check if indexTerms and indexInfos exist
+ if (indexTerms && indexInfos){
+ //Iterate through arrays indexTerms and indexPointer to
+ //destroy their elements
+#ifdef _DEBUG
+ for (int32_t i = 0; i < indexTermsLength; ++i) {
+ if (indexTerms[i].__cl_refcount != 1) {
+ CND_PRECONDITION(indexTerms[i].__cl_refcount == 1,
+ "TermInfosReader term was references more than internally");
+ }
+ // _CLDECDELETE(indexTerms[i]);
+ //_CLDELETE(indexInfos[i]);
+ }
+#endif
+ //Delete the arrays
+ _CLDELETE_ARRAY(indexTerms);
+ _CLDELETE_ARRAY(indexInfos);
+ }
+
+ //Delete the arrays
+ _CLDELETE_ARRAY(indexPointers);
+
+ if (origEnum != NULL) {
+ origEnum->close();
+
+ //Get a pointer to IndexInput used by the enumeration but
+ //instantiated in the constructor by directory.open( tisFile )
+ IndexInput *is = origEnum->input;
+
+ //Delete the enumuration enumerator
+ _CLDELETE(origEnum);
+
+ //Delete the IndexInput
+ _CLDELETE(is);
+ }
+
+ if (indexEnum != NULL){
+ indexEnum->close();
+
+ //Get a pointer to IndexInput used by the enumeration but
+ //instantiated in the constructor by directory.open( tiiFile )
+ IndexInput *is = indexEnum->input;
+
+ //Delete the enumuration enumerator
+ _CLDELETE(indexEnum);
+
+ //Delete the IndexInput
+ _CLDELETE(is);
+ }
+}
+
+int64_t TermInfosReader::size() const
+{
+ //Func - Return the size of the enumeration of TermInfos
+ //Pre - true
+ //Post - size has been returened
+
+ return _size;
+}
+
+Term* TermInfosReader::get(const int32_t position)
+{
+ //Func - Returns the nth term in the set
+ //Pre - position > = 0
+ //Post - The n-th term in the set has been returned
+
+ //Check if the size is 0 because then there are no terms
+ if (_size == 0)
+ return NULL;
+
+ SegmentTermEnum* enumerator = getEnum();
+
+ if (enumerator != NULL //an enumeration exists
+ && enumerator->term(false) != NULL // term is at or past current
+ && position >= enumerator->position
+ && position < (enumerator->position + enumerator->indexInterval)) {
+ return scanEnum(position); // can avoid seek
+ }
+
+ //random-access: must seek
+ seekEnum(position / enumerator->indexInterval);
+
+ //Get the Term at position
+ return scanEnum(position);
+}
+
+// TODO: currently there is no way of cleaning up a thread, if the thread ends.
+// we are stuck with the terminfosreader of that thread. Hopefully this won't
+// be too big a problem... solutions anyone?
+SegmentTermEnum* TermInfosReader::getEnum()
+{
+ SegmentTermEnum* termEnum = enumerators.get();
+ if (termEnum == NULL) {
+ termEnum = terms();
+ enumerators.set(termEnum);
+ }
+ return termEnum;
+}
+
+TermInfo* TermInfosReader::get(const Term* term)
+{
+ //Func - Returns a TermInfo for a term
+ //Pre - term holds a valid reference to term
+ //Post - if term can be found its TermInfo has been returned otherwise NULL
+
+ //If the size of the enumeration is 0 then no Terms have been read
+ if (_size == 0)
+ return NULL;
+
+ ensureIndexIsRead();
+
+ // optimize sequential access: first try scanning cached enum w/o seeking
+ SegmentTermEnum* enumerator = getEnum();
+
+ // optimize sequential access: first try scanning cached enumerator w/o seeking
+ // if the current term of the enumeration enumerator is not at the end
+ if (enumerator->term(false) != NULL
+ // AND there exists a previous current called prev and term is
+ // positioned after this prev
+ && ((enumerator->prev != NULL && term->compareTo(enumerator->prev) > 0)
+ // OR term is positioned at the same position as the current of
+ // enumerator or at a higher position
+ || term->compareTo(enumerator->term(false)) >= 0)) {
+ //Calculate the offset for the position
+ int32_t _enumOffset = (int32_t)
+ (enumerator->position / enumerator->indexInterval) + 1;
+
+ // but before end of block the length of indexTerms (the number of
+ // terms in enumerator) equals _enum_offset
+ if (indexTermsLength == _enumOffset
+ // OR term is positioned in front of term found at _enumOffset in
+ // indexTerms
+ || term->compareTo(&indexTerms[_enumOffset]) < 0) {
+ //no need to seek, retrieve the TermInfo for term
+ return scanEnum(term);
+ }
+ }
+
+ //Reposition current term in the enumeration
+ seekEnum(getIndexOffset(term));
+ //Return the TermInfo for term
+ return scanEnum(term);
+}
+
+int64_t TermInfosReader::getPosition(const Term* term)
+{
+ //Func - Returns the position of a Term in the set
+ //Pre - term holds a valid reference to a Term
+ // enumerator != NULL
+ //Post - If term was found then its position is returned otherwise -1
+
+ //if the enumeration is empty then return -1
+ if (_size == 0)
+ return -1;
+
+ ensureIndexIsRead();
+
+ //Retrieve the indexOffset for term
+ int32_t indexOffset = getIndexOffset(term);
+ seekEnum(indexOffset);
+
+ SegmentTermEnum* enumerator = getEnum();
+
+ while(term->compareTo(enumerator->term(false)) > 0 && enumerator->next()) {}
+
+ if (term->equals(enumerator->term(false)))
+ return enumerator->position;
+
+ return -1;
+}
+
+SegmentTermEnum* TermInfosReader::terms(const Term* term)
+{
+ //Func - Returns an enumeration of terms starting at or after the named term.
+ // If term is null then enumerator is set to the beginning
+ //Pre - term holds a valid reference to a Term
+ // enumerator != NULL
+ //Post - An enumeration of terms starting at or after the named term has been returned
+
+ SegmentTermEnum* enumerator = NULL;
+ if (term != NULL) {
+ //Seek enumerator to term; delete the new TermInfo that's returned.
+ TermInfo* ti = get(term);
+ _CLDELETE(ti);
+ enumerator = getEnum();
+ } else {
+ enumerator = origEnum;
+ }
+ //Clone the entire enumeration
+ SegmentTermEnum* cln = enumerator->clone();
+
+ //Check if cln points to a valid instance
+ CND_CONDITION(cln != NULL, "cln is NULL");
+
+ return cln;
+}
+
+void TermInfosReader::ensureIndexIsRead()
+{
+ //Func - Reads the term info index file or .tti file.
+ // This file contains every IndexInterval-th entry from the .tis file,
+ // along with its location in the "tis" file. This is designed to be
+ // read entirely into memory and used to provide random access to the
+ // "tis" file.
+ //Pre - indexTerms = NULL
+ // indexInfos = NULL
+ // indexPointers = NULL
+ //Post - The term info index file has been read into memory
+
+ SCOPED_LOCK_MUTEX(THIS_LOCK)
+
+ if ( indexTerms != NULL )
+ return;
+
+ try {
+ indexTermsLength = (size_t)indexEnum->size;
+
+ // Instantiate an block of Term's,so that each one doesn't have to be new'd
+ indexTerms = _CL_NEWARRAY(Term,indexTermsLength);
+
+ // Check if is indexTerms is a valid array
+ CND_CONDITION(indexTerms != NULL,
+ "No memory could be allocated for indexTerms");
+
+ // Instantiate an big block of TermInfo's, so that each one doesn't
+ // have to be new'd
+ indexInfos = _CL_NEWARRAY(TermInfo,indexTermsLength);
+
+ // Check if is indexInfos is a valid array
+ CND_CONDITION(indexInfos != NULL,
+ "No memory could be allocated for indexInfos");
+
+ // Instantiate an array indexPointers that contains pointers to the
+ // term info index file
+ indexPointers = _CL_NEWARRAY(int64_t,indexTermsLength);
+
+ // Check if is indexPointers is a valid array
+ CND_CONDITION(indexPointers != NULL,
+ "No memory could be allocated for indexPointers");
+
+ //Iterate through the terms of indexEnum
+ for (int32_t i = 0; indexEnum->next(); ++i) {
+ indexTerms[i].set(indexEnum->term(false), indexEnum->term(false)->text());
+ indexEnum->getTermInfo(&indexInfos[i]);
+ indexPointers[i] = indexEnum->indexPointer;
+ }
+ } _CLFINALLY (
+ indexEnum->close();
+ // Close and delete the IndexInput is. The close is done by the destructor.
+ _CLDELETE( indexEnum->input );
+ _CLDELETE( indexEnum );
+ );
+}
+
+int32_t TermInfosReader::getIndexOffset(const Term* term)
+{
+ //Func - Returns the offset of the greatest index entry which is less than
+ // or equal to term.
+ //Pre - term holds a reference to a valid term
+ // indexTerms != NULL
+ //Post - The new offset has been returned
+
+ //Check if is indexTerms is a valid array
+ CND_PRECONDITION(indexTerms != NULL, "indexTerms is NULL");
+
+ int32_t lo = 0;
+ int32_t hi = indexTermsLength - 1;
+ int32_t mid;
+ int32_t delta;
+
+ while (hi >= lo) {
+ //Start in the middle betwee hi and lo
+ mid = (lo + hi) >> 1;
+
+ //Check if is indexTerms[mid] is a valid instance of Term
+ CND_PRECONDITION(&indexTerms[mid] != NULL, "indexTerms[mid] is NULL");
+ CND_PRECONDITION(mid < indexTermsLength, "mid >= indexTermsLength");
+
+ //Determine if term is before mid or after mid
+ delta = term->compareTo(&indexTerms[mid]);
+ if (delta < 0) {
+ //Calculate the new hi
+ hi = mid - 1;
+ } else if (delta > 0) {
+ //Calculate the new lo
+ lo = mid + 1;
+ } else {
+ //term has been found so return its position
+ return mid;
+ }
+ }
+ // the new starting offset
+ return hi;
+}
+
+void TermInfosReader::seekEnum(const int32_t indexOffset)
+{
+ //Func - Reposition the current Term and TermInfo to indexOffset
+ //Pre - indexOffset >= 0
+ // indexTerms != NULL
+ // indexInfos != NULL
+ // indexPointers != NULL
+ //Post - The current Term and Terminfo have been repositioned to indexOffset
+
+ CND_PRECONDITION(indexOffset >= 0, "indexOffset contains a negative number");
+ CND_PRECONDITION(indexTerms != NULL, "indexTerms is NULL");
+ CND_PRECONDITION(indexInfos != NULL, "indexInfos is NULL");
+ CND_PRECONDITION(indexPointers != NULL, "indexPointers is NULL");
+
+ SegmentTermEnum* enumerator = getEnum();
+ enumerator->seek(indexPointers[indexOffset],
+ (indexOffset * enumerator->indexInterval) - 1,
+ &indexTerms[indexOffset], &indexInfos[indexOffset]);
+}
+
+TermInfo* TermInfosReader::scanEnum(const Term* term)
+{
+ //Func - Scans the Enumeration of terms for term and returns the
+ // corresponding TermInfo instance if found. The search is started
+ // from the current term.
+ //Pre - term contains a valid reference to a Term
+ // enumerator != NULL
+ //Post - if term has been found the corresponding TermInfo has been returned
+ // otherwise NULL has been returned
+
+ SegmentTermEnum* enumerator = getEnum();
+ enumerator->scanTo(term);
+
+ //Check if the at the position the Term term can be found
+ if (enumerator->term(false) != NULL && term->equals(enumerator->term(false))) {
+ //Return the TermInfo instance about term
+ return enumerator->getTermInfo();
+ }
+
+ //term was not found so no TermInfo can be returned
+ return NULL;
+}
+
+Term* TermInfosReader::scanEnum(const int32_t position)
+{
+ //Func - Scans the enumeration to the requested position and returns the
+ // Term located at that position
+ //Pre - position > = 0
+ // enumerator != NULL
+ //Post - The Term at the requested position has been returned
+
+ SegmentTermEnum* enumerator = getEnum();
+
+ // As long the position of the enumeration enumerator is smaller than the
+ // requested one
+ while(enumerator->position < position) {
+ //Move the current of enumerator to the next
+ if (!enumerator->next()) {
+ //If there is no next it means that the requested position was to big
+ return NULL;
+ }
+ }
+
+ //Return the Term a the requested position
+ return enumerator->term();
+}
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/index/TermInfosReader.h b/src/3rdparty/clucene/src/CLucene/index/TermInfosReader.h
new file mode 100644
index 0000000..ed202e7
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/TermInfosReader.h
@@ -0,0 +1,106 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright(C) 2007, 2008 by Nokia Corporation and/or its subsidiary(-ies), all rights reserved.
+*/
+#ifndef _lucene_index_TermInfosReader_
+#define _lucene_index_TermInfosReader_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include <QtCore/QString>
+
+#include "CLucene/store/Directory.h"
+#include "CLucene/util/ThreadLocal.h"
+#include "SegmentTermEnum.h"
+
+CL_NS_DEF(index)
+
+class FieldInfos;
+class Term;
+class TermInfo;
+class TermInfos;
+class TermInfosWriter;
+
+// PORT STATUS: 365707 (jlucene 1.9)
+// This stores a monotonically increasing set of <Term, TermInfo> pairs in a
+// Directory. Pairs are accessed either by Term or by ordinal position the set.
+class TermInfosReader : LUCENE_BASE
+{
+private:
+ CL_NS(store)::Directory* directory;
+ QString segment;
+ FieldInfos* fieldInfos;
+
+ CL_NS(util)::ThreadLocal<SegmentTermEnum*,
+ CL_NS(util)::Deletor::Object<SegmentTermEnum> > enumerators;
+
+ SegmentTermEnum* getEnum();
+ SegmentTermEnum* origEnum;
+ SegmentTermEnum* indexEnum;
+ int64_t _size;
+
+ Term* indexTerms;
+ int32_t indexTermsLength;
+ TermInfo* indexInfos;
+ int64_t* indexPointers;
+
+ DEFINE_MUTEX(THIS_LOCK)
+
+public:
+ // Reads the TermInfos file(.tis) and eventually the Term Info Index(.tii)
+ TermInfosReader(CL_NS(store)::Directory* dir, const QString& segment,
+ FieldInfos* fis);
+ ~TermInfosReader();
+
+ //Close the enumeration of TermInfos
+ void close();
+
+ //Return the size of the enumeration of TermInfos
+ int64_t size() const;
+
+ int32_t getSkipInterval() {
+ return origEnum->skipInterval; }
+
+ // Returns an enumeration of terms starting at or after the named term.
+ // If no term is specified, an enumeration of all the Terms
+ // and TermInfos in the set is returned.
+ SegmentTermEnum* terms(const Term* term = NULL);
+
+ // Returns the TermInfo for a Term in the set
+ // synchronized
+ TermInfo* get(const Term* term);
+
+private:
+ // Reads the term info index file or .tti file.
+ void ensureIndexIsRead();
+
+ // Returns the offset of the greatest index entry which is less than term.
+ int32_t getIndexOffset(const Term* term);
+
+ // Reposition the current Term and TermInfo to indexOffset
+ void seekEnum(const int32_t indexOffset);
+
+ // Scans the Enumeration of terms for term and returns the corresponding
+ // TermInfo instance if found. The search is started from the current term.
+ TermInfo* scanEnum(const Term* term);
+
+ // Scans the enumeration to the requested position and returns the Term
+ // located at that position
+ Term* scanEnum(const int32_t position);
+
+ // Returns the position of a Term in the set. synchronized
+ int64_t getPosition(const Term* term);
+
+ // Returns the nth term in the set. synchronized
+ Term* get(const int32_t position);
+};
+
+CL_NS_END
+
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/index/TermInfosWriter.cpp b/src/3rdparty/clucene/src/CLucene/index/TermInfosWriter.cpp
new file mode 100644
index 0000000..c5b5340
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/TermInfosWriter.cpp
@@ -0,0 +1,185 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright(C) 2007, 2008 by Nokia Corporation and/or its subsidiary(-ies), all rights reserved.
+*/
+#include "CLucene/StdHeader.h"
+#include "TermInfosWriter.h"
+
+#include "CLucene/store/Directory.h"
+#include "CLucene/util/Misc.h"
+#include "FieldInfos.h"
+#include "Term.h"
+#include "TermInfo.h"
+#include "IndexWriter.h"
+
+CL_NS_USE(util)
+CL_NS_USE(store)
+CL_NS_DEF(index)
+
+TermInfosWriter::TermInfosWriter(Directory* directory, const QString& segment,
+ FieldInfos* fis, int32_t interval)
+ : fieldInfos(fis)
+{
+ //Func - Constructor
+ //Pre - directory contains a valid reference to a Directory
+ // segment != NULL
+ // fis contains a valid reference to a reference FieldInfos
+ //Post - The instance has been created
+
+ CND_PRECONDITION(!segment.isEmpty(), "segment is NULL");
+ //Initialize instance
+ initialise(directory, segment, interval, false);
+
+ other = _CLNEW TermInfosWriter(directory, segment, fieldInfos, interval, true);
+
+ CND_CONDITION(other != NULL, "other is NULL");
+
+ other->other = this;
+}
+
+TermInfosWriter::TermInfosWriter(Directory* directory, const QString& segment,
+ FieldInfos* fis, int32_t interval, bool isIndex)
+ : fieldInfos(fis)
+{
+ //Func - Constructor
+ //Pre - directory contains a valid reference to a Directory
+ // segment != NULL
+ // fis contains a valid reference to a reference FieldInfos
+ // isIndex is true or false
+ //Post - The instance has been created
+
+ CND_PRECONDITION(!segment.isEmpty(), "segment is NULL");
+ initialise(directory, segment, interval, isIndex);
+}
+
+void TermInfosWriter::initialise(Directory* directory, const QString& segment,
+ int32_t interval, bool IsIndex)
+{
+ //Func - Helps constructors to initialize Instance
+ //Pre - directory contains a valid reference to a Directory
+ // segment != NULL
+ // fis contains a valid reference to a reference FieldInfos
+ //Post - The instance has been initialized
+
+ lastTerm = _CLNEW Term;
+
+ CND_CONDITION(lastTerm != NULL, "Could not allocate memory for lastTerm");
+
+ lastTi = _CLNEW TermInfo();
+
+ CND_CONDITION(lastTi != NULL, "Could not allocate memory for lastTi");
+
+ lastIndexPointer = 0;
+ size = 0;
+ isIndex = IsIndex;
+ indexInterval = interval;
+ skipInterval = LUCENE_DEFAULT_TERMDOCS_SKIP_INTERVAL;
+
+ QString buf = Misc::segmentname(segment, QLatin1String(isIndex ? ".tii" : ".tis"));
+ output = directory->createOutput(buf);
+
+ output->writeInt(FORMAT); // write format
+ output->writeLong(0); // leave space for size
+ output->writeInt(indexInterval);// write indexInterval
+ output->writeInt(skipInterval); // write skipInterval
+
+ //Set other to NULL by Default
+ other = NULL;
+}
+
+TermInfosWriter::~TermInfosWriter()
+{
+ //Func - Destructor
+ //Pre - true
+ //Post - de instance has been destroyed
+
+ close();
+}
+
+void TermInfosWriter::add(Term* term, const TermInfo* ti)
+{
+ //Func - Writes a Term and TermInfo to the outputstream
+ //Pre - Term must be lexicographically greater than all previous Terms added.
+ // Pointers of TermInfo ti (freqPointer and proxPointer) must be
+ // positive and greater than all previous.
+
+ CND_PRECONDITION(isIndex || (!isIndex && term->compareTo(lastTerm) > 0),"term out of order");
+ CND_PRECONDITION(ti->freqPointer >= lastTi->freqPointer,"freqPointer out of order");
+ CND_PRECONDITION(ti->proxPointer >= lastTi->proxPointer,"proxPointer out of order");
+
+ if (!isIndex && size % indexInterval == 0) {
+ //add an index term
+ other->add(lastTerm, lastTi);
+ }
+
+ //write term
+ writeTerm(term);
+ // write doc freq
+ output->writeVInt(ti->docFreq);
+ //write pointers
+ output->writeVLong(ti->freqPointer - lastTi->freqPointer);
+ output->writeVLong(ti->proxPointer - lastTi->proxPointer);
+ if (ti->docFreq >= skipInterval) {
+ output->writeVInt(ti->skipOffset);
+ }
+
+ if (isIndex){
+ output->writeVLong(other->output->getFilePointer() - lastIndexPointer);
+ lastIndexPointer = other->output->getFilePointer(); // write pointer
+ }
+
+ lastTi->set(ti);
+ size++;
+}
+
+void TermInfosWriter::close() {
+ //Func - Closes the TermInfosWriter
+ //Pre - true
+ //Post - The TermInfosWriter has been closed
+
+ if (output){
+ //write size at start
+ output->seek(4); // write size after format
+ output->writeLong(size);
+ output->close();
+ _CLDELETE(output);
+
+ if (!isIndex){
+ if(other){
+ other->close();
+ _CLDELETE( other );
+ }
+ }
+ _CLDECDELETE(lastTerm);
+
+ _CLDELETE(lastTi);
+ }
+}
+
+void TermInfosWriter::writeTerm(Term* term)
+{
+ int32_t start = Misc::stringDifference(lastTerm->text(),lastTerm->textLength(),
+ term->text(),term->textLength());
+ int32_t length = term->textLength() - start;
+
+ output->writeVInt(start); // write shared prefix length
+ output->writeVInt(length); // write delta length
+ output->writeChars(term->text(), start, length); // write delta chars
+
+ int32_t fieldnum = fieldInfos->fieldNumber(term->field());
+ CND_PRECONDITION(fieldnum>=-1&&fieldnum<fieldInfos->size(),"Fieldnum is out of range");
+ output->writeVInt(fieldnum); // write field num
+
+ if ( lastTerm->__cl_refcount == 1 ){
+ lastTerm->set(term,term->text());
+ }else{
+ _CLDECDELETE(lastTerm);
+ lastTerm = _CL_POINTER(term);
+ }
+}
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/index/TermInfosWriter.h b/src/3rdparty/clucene/src/CLucene/index/TermInfosWriter.h
new file mode 100644
index 0000000..7e3c686
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/TermInfosWriter.h
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright(C) 2007, 2008 by Nokia Corporation and/or its subsidiary(-ies), all rights reserved.
+*/
+#ifndef _lucene_index_TermInfosWriter_
+#define _lucene_index_TermInfosWriter_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include <QtCore/QString>
+
+#include "CLucene/store/Directory.h"
+#include "FieldInfos.h"
+#include "TermInfo.h"
+#include "Term.h"
+
+CL_NS_DEF(index)
+
+
+// This stores a monotonically increasing set of <Term, TermInfo> pairs in a
+// Directory. A TermInfos can be written once, in order.
+class TermInfosWriter : LUCENE_BASE
+{
+private:
+ FieldInfos* fieldInfos;
+ CL_NS(store)::IndexOutput* output;
+ Term* lastTerm;
+ TermInfo* lastTi;
+ int64_t size;
+ int64_t lastIndexPointer;
+ bool isIndex;
+ TermInfosWriter* other;
+
+ //inititalize
+ TermInfosWriter(CL_NS(store)::Directory* directory,
+ const QString& segment, FieldInfos* fis, int32_t interval, bool isIndex);
+public:
+ /** The file format version, a negative number. */
+ LUCENE_STATIC_CONSTANT(int32_t,FORMAT=-2);
+
+ /**
+ * Expert: The fraction of terms in the "dictionary" which should be stored
+ * in RAM. Smaller values use more memory, but make searching slightly
+ * faster, while larger values use less memory and make searching slightly
+ * slower. Searching is typically not dominated by dictionary lookup, so
+ * tweaking this is rarely useful.
+ */
+ int32_t indexInterval;// = 128
+
+ /**
+ * Expert: The fraction of {@link TermDocs} entries stored in skip tables,
+ * used to accellerate {@link TermDocs#SkipTo(int32_t)}. Larger values result in
+ * smaller indexes, greater acceleration, but fewer accelerable cases, while
+ * smaller values result in bigger indexes, less acceleration and more
+ * accelerable cases. More detailed experiments would be useful here.
+ */
+ int32_t skipInterval;// = 16
+
+ TermInfosWriter(CL_NS(store)::Directory* directory,
+ const QString& segment, FieldInfos* fis, int32_t interval);
+
+ ~TermInfosWriter();
+
+ /**
+ * Adds a new <Term, TermInfo> pair to the set.
+ * Term must be lexicographically greater than all previous Terms added.
+ * TermInfo pointers must be positive and greater than all previous.
+ */
+ void add(Term* term, const TermInfo* ti);
+
+ /** Called to complete TermInfos creation. */
+ void close();
+
+private:
+ /** Helps constructors to initialize instances */
+ void initialise(CL_NS(store)::Directory* directory,
+ const QString& segment, int32_t interval, bool IsIndex);
+ void writeTerm(Term* term);
+};
+
+CL_NS_END
+
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/index/TermVector.h b/src/3rdparty/clucene/src/CLucene/index/TermVector.h
new file mode 100644
index 0000000..8601fbf
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/TermVector.h
@@ -0,0 +1,418 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright(C) 2007, 2008 by Nokia Corporation and/or its subsidiary(-ies), all rights reserved.
+*/
+#ifndef _lucene_index_termvector_h
+#define _lucene_index_termvector_h
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include <QtCore/QString>
+
+#include "CLucene/store/Directory.h"
+#include "CLucene/store/IndexOutput.h"
+#include "FieldInfos.h"
+
+CL_NS_DEF(index)
+
+struct TermVectorOffsetInfo;
+class TermPositionVector;
+
+// Provides access to stored term vector of a document field.
+class TermFreqVector : LUCENE_BASE
+{
+public:
+ virtual ~TermFreqVector() {}
+
+ // @return The field this vector is associated with.
+ virtual const TCHAR* getField() = 0;
+
+ // @return The number of terms in the term vector.
+ virtual int32_t size() = 0;
+
+ // @return An Array of term texts in ascending order.
+ virtual const TCHAR** getTerms() = 0;
+
+
+ /* Array of term frequencies. Locations of the array correspond one to one
+ * to the terms in the array obtained from <code>getTerms</code>
+ * method. Each location in the array contains the number of times this
+ * term occurs in the document or the document field.
+ *
+ * The size of the returned array is size()
+ * @memory Returning a pointer to internal data. Do not delete.
+ */
+ virtual const Array<int32_t>* getTermFrequencies() = 0;
+
+
+ /* Return an index in the term numbers array returned from
+ * <code>getTerms</code> at which the term with the specified
+ * <code>term</code> appears. If this term does not appear in the array,
+ * return -1.
+ */
+ virtual int32_t indexOf(const TCHAR* term) = 0;
+
+
+ /* Just like <code>indexOf(int32_t)</code> but searches for a number of terms
+ * at the same time. Returns an array that has the same size as the number
+ * of terms searched for, each slot containing the result of searching for
+ * that term number.
+ *
+ * @param terms array containing terms to look for
+ * @param start index in the array where the list of terms starts
+ * @param len the number of terms in the list
+ */
+ virtual void indexesOf(const TCHAR** terms, const int32_t start,
+ const int32_t len, Array<int32_t>& ret) = 0;
+
+ // Solve the diamond inheritence problem by providing a reinterpret function.
+ // No dynamic casting is required and no RTTI data is needed to do this
+ virtual TermPositionVector* __asTermPositionVector() = 0;
+};
+
+
+/**
+* Writer works by opening a document and then opening the fields within the document and then
+* writing out the vectors for each field.
+*
+* Rough usage:
+*
+<CODE>
+for each document
+{
+writer.openDocument();
+for each field on the document
+{
+writer.openField(field);
+for all of the terms
+{
+writer.addTerm(...)
+}
+writer.closeField
+}
+writer.closeDocument()
+}
+</CODE>
+*/
+class TermVectorsWriter : LUCENE_BASE
+{
+private:
+ class TVField : LUCENE_BASE
+ {
+ public:
+ int32_t number;
+ int64_t tvfPointer;
+ int32_t length; // number of distinct term positions
+ bool storePositions;
+ bool storeOffsets;
+
+ TVField(int32_t number, bool storePos, bool storeOff)
+ : tvfPointer(0)
+ , length(0)
+ {
+ this->number = number;
+ this->storePositions = storePos;
+ this->storeOffsets = storeOff;
+ }
+ ~TVField() {}
+ };
+
+ class TVTerm : LUCENE_BASE
+ {
+ const TCHAR* termText;
+ int32_t termTextLen; //textlen cache
+
+ public:
+ TVTerm();
+ ~TVTerm();
+
+ int32_t freq;
+ Array<int32_t>* positions;
+ Array<TermVectorOffsetInfo>* offsets;
+
+ const TCHAR* getTermText() const;
+ size_t getTermTextLen();
+ void setTermText(const TCHAR* val);
+ };
+
+ CL_NS(store)::IndexOutput* tvx, *tvd, *tvf;
+ CL_NS(util)::CLVector<TVField*,CL_NS(util)::Deletor::Object<TVField> > fields;
+ CL_NS(util)::CLVector<TVTerm*,CL_NS(util)::Deletor::Object<TVTerm> > terms;
+ FieldInfos* fieldInfos;
+
+ TVField* currentField;
+ int64_t currentDocPointer;
+
+ void addTermInternal(const TCHAR* termText, const int32_t freq,
+ Array<int32_t>* positions, Array<TermVectorOffsetInfo>* offsets);
+
+ void writeField();
+ void writeDoc();
+
+ void openField(int32_t fieldNumber, bool storePositionWithTermVector,
+ bool storeOffsetWithTermVector);
+
+public:
+ LUCENE_STATIC_CONSTANT(int32_t, FORMAT_VERSION = 2);
+
+ // The size in bytes that the FORMAT_VERSION will take up at the beginning
+ // of each file
+ LUCENE_STATIC_CONSTANT(int32_t, FORMAT_SIZE = 4);
+
+ LUCENE_STATIC_CONSTANT(uint8_t, STORE_POSITIONS_WITH_TERMVECTOR = 0x1);
+ LUCENE_STATIC_CONSTANT(uint8_t, STORE_OFFSET_WITH_TERMVECTOR = 0x2);
+
+ static const QLatin1String LUCENE_TVX_EXTENSION;
+ static const QLatin1String LUCENE_TVD_EXTENSION;
+ static const QLatin1String LUCENE_TVF_EXTENSION;
+
+ TermVectorsWriter(CL_NS(store)::Directory* directory, const QString& segment,
+ FieldInfos* fieldInfos);
+
+ ~TermVectorsWriter();
+ void openDocument();
+ void closeDocument();
+
+ /** Close all streams. */
+ void close();
+ bool isDocumentOpen() const;
+
+ /** Start processing a field. This can be followed by a number of calls to
+ * addTerm, and a final call to closeField to indicate the end of
+ * processing of this field. If a field was previously open, it is
+ * closed automatically.
+ */
+ void openField(const TCHAR* field);
+
+ /** Finished processing current field. This should be followed by a call to
+ * openField before future calls to addTerm.
+ */
+ void closeField();
+
+ /** Return true if a field is currently open. */
+ bool isFieldOpen() const;
+
+ /**
+ * Add a complete document specified by all its term vectors. If document has no
+ * term vectors, add value for tvx.
+ *
+ * @param vectors
+ * @throws IOException
+ */
+ void addAllDocVectors(Array<TermFreqVector*>& vectors);
+
+ /** Add term to the field's term vector. Field must already be open.
+ * Terms should be added in
+ * increasing order of terms, one call per unique termNum. ProxPointer
+ * is a pointer into the TermPosition file (prx). Freq is the number of
+ * times this term appears in this field, in this document.
+ * @throws IllegalStateException if document or field is not open
+ */
+ void addTerm(const TCHAR* termText, int32_t freq,
+ Array<int32_t>* positions = NULL, Array<TermVectorOffsetInfo>* offsets = NULL);
+};
+
+class SegmentTermVector : public virtual TermFreqVector
+{
+private:
+ const TCHAR* field;
+ TCHAR** terms;
+ int32_t termsLen; //cache
+ Array<int32_t>* termFreqs;
+
+ int32_t binarySearch(TCHAR** a, const int32_t arraylen, const TCHAR* key) const;
+public:
+ //note: termFreqs must be the same length as terms
+ SegmentTermVector(const TCHAR* field, TCHAR** terms, Array<int32_t>* termFreqs);
+ virtual ~SegmentTermVector();
+
+ /**
+ *
+ * @return The number of the field this vector is associated with
+ */
+ const TCHAR* getField();
+ TCHAR* toString() const;
+ int32_t size();
+ const TCHAR** getTerms();
+ const Array<int32_t>* getTermFrequencies();
+ int32_t indexOf(const TCHAR* termText);
+ void indexesOf(const TCHAR** termNumbers, const int32_t start, const int32_t len, Array<int32_t>& ret);
+
+ virtual TermPositionVector* __asTermPositionVector();
+};
+
+class TermVectorsReader : LUCENE_BASE
+{
+private:
+ FieldInfos* fieldInfos;
+
+ CL_NS(store)::IndexInput* tvx;
+ CL_NS(store)::IndexInput* tvd;
+ CL_NS(store)::IndexInput* tvf;
+ int64_t _size;
+
+ int32_t tvdFormat;
+ int32_t tvfFormat;
+
+
+ int32_t checkValidFormat(CL_NS(store)::IndexInput* in);
+
+ void readTermVectors(const TCHAR** fields, const int64_t* tvfPointers,
+ const int32_t len, Array<TermFreqVector*>& _return);
+
+ /**
+ *
+ * @param field The field to read in
+ * @param tvfPointer The pointer within the tvf file where we should start reading
+ * @return The TermVector located at that position
+ * @throws IOException
+ */
+ SegmentTermVector* readTermVector(const TCHAR* field, const int64_t tvfPointer);
+
+ int64_t size();
+
+
+ DEFINE_MUTEX(THIS_LOCK)
+ TermVectorsReader(const TermVectorsReader& copy);
+public:
+ TermVectorsReader(CL_NS(store)::Directory* d, const QString& segment,
+ FieldInfos* fieldInfos);
+ ~TermVectorsReader();
+
+ void close();
+ TermVectorsReader* clone() const;
+
+ /**
+ * Retrieve the term vector for the given document and field
+ * @param docNum The document number to retrieve the vector for
+ * @param field The field within the document to retrieve
+ * @return The TermFreqVector for the document and field or null if there is no termVector for this field.
+ * @throws IOException if there is an error reading the term vector files
+ */
+ TermFreqVector* get(const int32_t docNum, const TCHAR* field);
+
+
+ /**
+ * Return all term vectors stored for this document or null if the could not be read in.
+ *
+ * @param docNum The document number to retrieve the vector for
+ * @return All term frequency vectors
+ * @throws IOException if there is an error reading the term vector files
+ */
+ bool get(int32_t docNum, Array<TermFreqVector*>& result);
+};
+
+
+struct TermVectorOffsetInfo
+{
+ int startOffset;
+ int endOffset;
+
+public:
+ static Array<TermVectorOffsetInfo> EMPTY_OFFSET_INFO;
+ TermVectorOffsetInfo();
+ ~TermVectorOffsetInfo();
+ TermVectorOffsetInfo(int32_t startOffset, int32_t endOffset);
+ int32_t getEndOffset() const;
+ void setEndOffset(int32_t endOffset);
+ int32_t getStartOffset() const;
+ void setStartOffset(int32_t startOffset);
+ bool equals(TermVectorOffsetInfo* o);
+ size_t hashCode() const;
+};
+
+
+/* Extends <code>TermFreqVector</code> to provide additional information about
+ * positions in which each of the terms is found. A TermPositionVector not
+ * necessarily contains both positions and offsets, but at least one of these
+ * arrays exists.
+*/
+class TermPositionVector : public virtual TermFreqVector
+{
+public:
+
+ /** Returns an array of positions in which the term is found.
+ * Terms are identified by the index at which its number appears in the
+ * term String array obtained from the <code>indexOf</code> method.
+ * May return null if positions have not been stored.
+ */
+ virtual Array<int32_t>* getTermPositions(int32_t index) = 0;
+
+ /**
+ * Returns an array of TermVectorOffsetInfo in which the term is found.
+ * May return null if offsets have not been stored.
+ *
+ * @see org.apache.lucene.analysis.Token
+ *
+ * @param index The position in the array to get the offsets from
+ * @return An array of TermVectorOffsetInfo objects or the empty list
+ */
+ virtual Array<TermVectorOffsetInfo>* getOffsets(int32_t index) = 0;
+
+ virtual ~TermPositionVector(){
+ }
+};
+
+
+class SegmentTermPositionVector: public SegmentTermVector, public TermPositionVector
+{
+protected:
+ Array< Array<int32_t> >* positions;
+ Array< Array<TermVectorOffsetInfo> >* offsets;
+ static Array<int32_t> EMPTY_TERM_POS;
+public:
+ SegmentTermPositionVector(const TCHAR* field, TCHAR** terms,
+ Array<int32_t>* termFreqs, Array< Array<int32_t> >* positions,
+ Array< Array<TermVectorOffsetInfo> >* offsets);
+ ~SegmentTermPositionVector();
+
+ /**
+ * Returns an array of TermVectorOffsetInfo in which the term is found.
+ *
+ * @param index The position in the array to get the offsets from
+ * @return An array of TermVectorOffsetInfo objects or the empty list
+ * @see org.apache.lucene.analysis.Token
+ */
+ Array<TermVectorOffsetInfo>* getOffsets(int32_t index);
+
+ /**
+ * Returns an array of positions in which the term is found.
+ * Terms are identified by the index at which its number appears in the
+ * term String array obtained from the <code>indexOf</code> method.
+ */
+ Array<int32_t>* getTermPositions(int32_t index);
+
+ const TCHAR* getField() {
+ return SegmentTermVector::getField(); }
+
+ TCHAR* toString() const {
+ return SegmentTermVector::toString(); }
+
+ int32_t size() {
+ return SegmentTermVector::size(); }
+
+ const TCHAR** getTerms() {
+ return SegmentTermVector::getTerms(); }
+
+ const Array<int32_t>* getTermFrequencies() {
+ return SegmentTermVector::getTermFrequencies(); }
+
+ int32_t indexOf(const TCHAR* termText) {
+ return SegmentTermVector::indexOf(termText); }
+
+ void indexesOf(const TCHAR** termNumbers, const int32_t start,
+ const int32_t len, Array<int32_t>& ret) {
+ SegmentTermVector::indexesOf(termNumbers, start, len, ret); }
+
+ virtual TermPositionVector* __asTermPositionVector();
+};
+
+CL_NS_END
+
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/index/TermVectorReader.cpp b/src/3rdparty/clucene/src/CLucene/index/TermVectorReader.cpp
new file mode 100644
index 0000000..53d909b
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/TermVectorReader.cpp
@@ -0,0 +1,393 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright(C) 2007, 2008 by Nokia Corporation and/or its subsidiary(-ies), all rights reserved.
+*/
+#include "CLucene/StdHeader.h"
+#include "TermVector.h"
+#include "CLucene/util/StringBuffer.h"
+
+CL_NS_USE(util)
+CL_NS_DEF(index)
+
+TermVectorsReader::TermVectorsReader(CL_NS(store)::Directory* d,
+ const QString& segment, FieldInfos* fieldInfos)
+{
+ if (d->fileExists(segment + TermVectorsWriter::LUCENE_TVX_EXTENSION)) {
+ tvx = d->openInput(segment + TermVectorsWriter::LUCENE_TVX_EXTENSION);
+ checkValidFormat(tvx);
+
+ tvd = d->openInput(segment + TermVectorsWriter::LUCENE_TVD_EXTENSION);
+ tvdFormat = checkValidFormat(tvd);
+
+ tvf = d->openInput(segment + TermVectorsWriter::LUCENE_TVF_EXTENSION);
+ tvfFormat = checkValidFormat(tvf);
+
+ _size = tvx->length() / 8;
+ }else{
+ tvx = NULL;
+ tvd = NULL;
+ tvf = NULL;
+ _size = 0;
+ }
+
+ this->fieldInfos = fieldInfos;
+}
+
+TermVectorsReader::TermVectorsReader(const TermVectorsReader& copy)
+{
+ tvx = copy.tvx->clone();
+ tvd = copy.tvd->clone();
+ tvf = copy.tvf->clone();
+
+ tvdFormat = copy.tvdFormat;
+ tvfFormat = copy.tvfFormat;
+ _size = copy._size;
+ fieldInfos = copy.fieldInfos;
+}
+TermVectorsReader* TermVectorsReader::clone() const{
+ if (tvx == NULL || tvd == NULL || tvf == NULL)
+ return NULL;
+ return _CLNEW TermVectorsReader(*this);
+}
+
+TermVectorsReader::~TermVectorsReader(){
+ close();
+}
+
+void TermVectorsReader::close(){
+ // why don't we trap the exception and at least make sure that
+ // all streams that we can close are closed?
+ CLuceneError keep(0,"",false);
+ bool thrown = false;
+
+ if (tvx != NULL){
+ try{
+ tvx->close();
+ }catch(CLuceneError& err){
+ if ( err.number() == CL_ERR_IO ){
+ keep = err;
+ thrown = true;
+ }else
+ throw err;
+ }
+ _CLDELETE(tvx);//delete even if error thrown
+ }
+ if (tvd != NULL){
+ try{
+ tvd->close();
+ }catch(CLuceneError& err){
+ if ( err.number() == CL_ERR_IO ){
+ keep = err;
+ thrown = true;
+ }else
+ throw err;
+ }
+ _CLDELETE(tvd);
+ }
+ if (tvf != NULL){
+ try{
+ tvf->close();
+ }catch(CLuceneError& err){
+ if ( err.number() == CL_ERR_IO ){
+ keep = err;
+ thrown = true;
+ }else
+ throw err;
+ }
+ _CLDELETE(tvf);
+ }
+
+ if ( thrown )
+ throw keep;
+}
+
+TermFreqVector* TermVectorsReader::get(const int32_t docNum, const TCHAR* field){
+ // Check if no term vectors are available for this segment at all
+ int32_t fieldNumber = fieldInfos->fieldNumber(field);
+ TermFreqVector* result = NULL;
+ if (tvx != NULL) {
+ //We need to account for the FORMAT_SIZE at when seeking in the tvx
+ //We don't need to do this in other seeks because we already have the
+ // file pointer
+ //that was written in another file
+ tvx->seek((docNum * 8L) + TermVectorsWriter::FORMAT_SIZE);
+ int64_t position = tvx->readLong();
+
+ tvd->seek(position);
+ int32_t fieldCount = tvd->readVInt();
+ // There are only a few fields per document. We opt for a full scan
+ // rather then requiring that they be ordered. We need to read through
+ // all of the fields anyway to get to the tvf pointers.
+ int32_t number = 0;
+ int32_t found = -1;
+ for (int32_t i = 0; i < fieldCount; ++i) {
+ if(tvdFormat == TermVectorsWriter::FORMAT_VERSION)
+ number = tvd->readVInt();
+ else
+ number += tvd->readVInt();
+ if (number == fieldNumber)
+ found = i;
+ }
+
+ // This field, although valid in the segment, was not found in this
+ // document
+ if (found != -1) {
+ // Compute position in the tvf file
+ position = 0;
+ for (int32_t i = 0; i <= found; ++i)
+ position += tvd->readVLong();
+ result = readTermVector(field, position);
+ }
+ }
+ return result;
+}
+
+
+bool TermVectorsReader::get(int32_t docNum, Array<TermFreqVector*>& result){
+ // Check if no term vectors are available for this segment at all
+ if (tvx != NULL) {
+ //We need to offset by
+ tvx->seek((docNum * 8L) + TermVectorsWriter::FORMAT_SIZE);
+ int64_t position = tvx->readLong();
+
+ tvd->seek(position);
+ int32_t fieldCount = tvd->readVInt();
+
+ // No fields are vectorized for this document
+ if (fieldCount != 0) {
+ int32_t number = 0;
+ const TCHAR** fields = _CL_NEWARRAY(const TCHAR*,fieldCount+1);
+
+ { //msvc6 scope fix
+ for (int32_t i = 0; i < fieldCount; ++i) {
+ if(tvdFormat == TermVectorsWriter::FORMAT_VERSION)
+ number = tvd->readVInt();
+ else
+ number += tvd->readVInt();
+ fields[i] = fieldInfos->fieldName(number);
+ }
+ }
+ fields[fieldCount]=NULL;
+
+ // Compute position in the tvf file
+ position = 0;
+ int64_t* tvfPointers = _CL_NEWARRAY(int64_t,fieldCount);
+ { //msvc6 scope fix
+ for (int32_t i = 0; i < fieldCount; ++i) {
+ position += tvd->readVLong();
+ tvfPointers[i] = position;
+ }
+ }
+
+ readTermVectors(fields, tvfPointers, fieldCount, result);
+ _CLDELETE_ARRAY(tvfPointers);
+ _CLDELETE_ARRAY(fields);
+ }
+ return true;
+ }
+ return false;
+}
+
+
+int32_t TermVectorsReader::checkValidFormat(CL_NS(store)::IndexInput* in)
+{
+ int32_t format = in->readInt();
+ if (format > TermVectorsWriter::FORMAT_VERSION)
+ {
+ CL_NS(util)::StringBuffer err;
+ err.append(_T("Incompatible format version: "));
+ err.appendInt(format);
+ err.append(_T(" expected "));
+ err.appendInt(TermVectorsWriter::FORMAT_VERSION);
+ err.append(_T(" or less"));
+ _CLTHROWT(CL_ERR_Runtime,err.getBuffer());
+ }
+ return format;
+}
+
+void TermVectorsReader::readTermVectors(const TCHAR** fields,
+ const int64_t* tvfPointers, const int32_t len, Array<TermFreqVector*>& result)
+{
+ result.length = len;
+ result.values = _CL_NEWARRAY(TermFreqVector*,len);
+ for (int32_t i = 0; i < len; ++i) {
+ result.values[i] = readTermVector(fields[i], tvfPointers[i]);
+ }
+}
+
+SegmentTermVector* TermVectorsReader::readTermVector(const TCHAR* field,
+ const int64_t tvfPointer)
+{
+ // Now read the data from specified position. We don't need to offset by
+ // the FORMAT here since the pointer already includes the offset
+ tvf->seek(tvfPointer);
+
+ int32_t numTerms = tvf->readVInt();
+ // If no terms - return a constant empty termvector. However, this should never occur!
+ if (numTerms == 0)
+ return _CLNEW SegmentTermVector(field, NULL, NULL);
+
+ bool storePositions;
+ bool storeOffsets;
+
+ if(tvfFormat == TermVectorsWriter::FORMAT_VERSION){
+ uint8_t bits = tvf->readByte();
+ storePositions = (bits & TermVectorsWriter::STORE_POSITIONS_WITH_TERMVECTOR) != 0;
+ storeOffsets = (bits & TermVectorsWriter::STORE_OFFSET_WITH_TERMVECTOR) != 0;
+ }
+ else{
+ tvf->readVInt();
+ storePositions = false;
+ storeOffsets = false;
+ }
+
+ TCHAR** terms = _CL_NEWARRAY(TCHAR*,numTerms+1);
+ Array<int32_t>* termFreqs = _CLNEW Array<int32_t>(numTerms);
+
+ // we may not need these, but declare them
+ Array< Array<int32_t> >* positions = NULL;
+ Array< Array<TermVectorOffsetInfo> >* offsets = NULL;
+ if(storePositions){
+ Array<int32_t>* tmp = _CL_NEWARRAY(Array<int32_t>,numTerms);
+ positions = _CLNEW Array< Array<int32_t> >(tmp, numTerms);
+ }
+ if(storeOffsets){
+ Array<TermVectorOffsetInfo>* tmp = _CL_NEWARRAY(Array<TermVectorOffsetInfo>,numTerms);
+ offsets = _CLNEW Array< Array<TermVectorOffsetInfo> >(tmp, numTerms);
+ }
+
+ int32_t start = 0;
+ int32_t deltaLength = 0;
+ int32_t totalLength = 0;
+ int32_t bufferLen=10; // init the buffer with a length of 10 character
+ TCHAR* buffer = (TCHAR*)malloc(bufferLen * sizeof(TCHAR));
+
+ for (int32_t i = 0; i < numTerms; ++i) {
+ start = tvf->readVInt();
+ deltaLength = tvf->readVInt();
+ totalLength = start + deltaLength;
+ if (bufferLen < totalLength) // increase buffer
+ {
+ buffer=(TCHAR*)realloc(buffer,totalLength * sizeof(TCHAR));
+ bufferLen = totalLength;
+ }
+
+ //read the term
+ tvf->readChars(buffer, start, deltaLength);
+ terms[i] = _CL_NEWARRAY(TCHAR,totalLength+1);
+ _tcsncpy(terms[i],buffer,totalLength);
+ terms[i][totalLength] = '\0'; //null terminate term
+
+ //read the frequency
+ int32_t freq = tvf->readVInt();
+ termFreqs->values[i] = freq;
+
+ if (storePositions) { //read in the positions
+ Array<int32_t>& pos = positions->values[i];
+ pos.length = freq;
+ pos.values = _CL_NEWARRAY(int32_t,freq);
+
+ int32_t prevPosition = 0;
+ for (int32_t j = 0; j < freq; ++j)
+ {
+ pos.values[j] = prevPosition + tvf->readVInt();
+ prevPosition = pos.values[j];
+ }
+ }
+
+ if (storeOffsets) {
+ Array<TermVectorOffsetInfo>& offs = offsets->values[i];
+ offs.length = freq;
+ offs.values = _CL_NEWARRAY(TermVectorOffsetInfo,freq);
+
+ int32_t prevOffset = 0;
+ for (int32_t j = 0; j < freq; ++j) {
+ int32_t startOffset = prevOffset + tvf->readVInt();
+ int32_t endOffset = startOffset + tvf->readVInt();
+ offs.values[j].setStartOffset(startOffset);
+ offs.values[j].setEndOffset(endOffset);
+ prevOffset = endOffset;
+ }
+ }
+ }
+ free(buffer);
+ terms[numTerms]=NULL; //null terminate terms array
+
+ SegmentTermVector* tv = NULL;
+ if (storePositions || storeOffsets){
+ return _CLNEW SegmentTermPositionVector(field, terms, termFreqs, positions, offsets);
+ }else {
+ return _CLNEW SegmentTermVector(field, terms, termFreqs);
+ }
+}
+
+int64_t TermVectorsReader::size()
+{
+ return _size;
+}
+
+
+
+
+Array<TermVectorOffsetInfo> TermVectorOffsetInfo::EMPTY_OFFSET_INFO;
+
+TermVectorOffsetInfo::TermVectorOffsetInfo()
+{
+ startOffset = 0;
+ endOffset=0;
+}
+
+TermVectorOffsetInfo::~TermVectorOffsetInfo()
+{
+}
+
+TermVectorOffsetInfo::TermVectorOffsetInfo(int32_t startOffset, int32_t endOffset)
+{
+ this->endOffset = endOffset;
+ this->startOffset = startOffset;
+}
+
+int32_t TermVectorOffsetInfo::getEndOffset() const
+{
+ return endOffset;
+}
+
+void TermVectorOffsetInfo::setEndOffset(int32_t endOffset)
+{
+ this->endOffset = endOffset;
+}
+
+int32_t TermVectorOffsetInfo::getStartOffset() const
+{
+ return startOffset;
+}
+
+void TermVectorOffsetInfo::setStartOffset(int32_t startOffset)
+{
+ this->startOffset = startOffset;
+}
+
+bool TermVectorOffsetInfo::equals(TermVectorOffsetInfo* termVectorOffsetInfo)
+{
+ if (this == termVectorOffsetInfo)
+ return true;
+
+ if (endOffset != termVectorOffsetInfo->endOffset) return false;
+ if (startOffset != termVectorOffsetInfo->startOffset) return false;
+
+ return true;
+}
+
+size_t TermVectorOffsetInfo::hashCode() const
+{
+ size_t result;
+ result = startOffset;
+ result = 29 * result + endOffset;
+ return result;
+}
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/index/TermVectorWriter.cpp b/src/3rdparty/clucene/src/CLucene/index/TermVectorWriter.cpp
new file mode 100644
index 0000000..276b1bb
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/TermVectorWriter.cpp
@@ -0,0 +1,349 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright(C) 2007, 2008 by Nokia Corporation and/or its subsidiary(-ies), all rights reserved.
+*/
+#include "CLucene/StdHeader.h"
+#include "TermVector.h"
+#include "CLucene/util/Misc.h"
+
+CL_NS_USE(util)
+CL_NS_DEF(index)
+
+const QLatin1String TermVectorsWriter::LUCENE_TVX_EXTENSION(".tvx");
+const QLatin1String TermVectorsWriter::LUCENE_TVD_EXTENSION(".tvd");
+const QLatin1String TermVectorsWriter::LUCENE_TVF_EXTENSION(".tvf");
+
+TermVectorsWriter::TermVectorsWriter(CL_NS(store)::Directory* directory,
+ const QString& segment,FieldInfos* fieldInfos)
+{
+ // Open files for TermVector storage
+ tvx = directory->createOutput(segment + LUCENE_TVX_EXTENSION);
+ tvx->writeInt(FORMAT_VERSION);
+
+ tvd = directory->createOutput(segment + LUCENE_TVD_EXTENSION);
+ tvd->writeInt(FORMAT_VERSION);
+
+ tvf = directory->createOutput(segment + LUCENE_TVF_EXTENSION);
+ tvf->writeInt(FORMAT_VERSION);
+
+ this->fieldInfos = fieldInfos;
+
+ currentField = NULL;
+ currentDocPointer = -1;
+}
+
+TermVectorsWriter::~TermVectorsWriter()
+{
+ if (tvx != NULL) {
+ tvx->close();
+ _CLDELETE(tvx);
+ }
+
+ if (tvd != NULL) {
+ tvd->close();
+ _CLDELETE(tvd);
+ }
+
+ if (tvf != NULL){
+ tvf->close();
+ _CLDELETE(tvf);
+ }
+}
+
+void TermVectorsWriter::openDocument()
+{
+ closeDocument();
+ currentDocPointer = tvd->getFilePointer();
+}
+
+void TermVectorsWriter::closeDocument()
+{
+ if (isDocumentOpen()) {
+ closeField();
+ writeDoc();
+ fields.clear();
+ currentDocPointer = -1;
+ }
+}
+
+bool TermVectorsWriter::isDocumentOpen() const
+{
+ return currentDocPointer != -1;
+}
+
+
+void TermVectorsWriter::openField(int32_t fieldNumber,
+ bool storePositionWithTermVector, bool storeOffsetWithTermVector)
+{
+ if (!isDocumentOpen())
+ _CLTHROWA(CL_ERR_InvalidState,"Cannot open field when no document is open.");
+
+ closeField();
+ currentField = _CLNEW TVField(fieldNumber, storePositionWithTermVector,
+ storeOffsetWithTermVector);
+}
+
+void TermVectorsWriter::openField(const TCHAR* field)
+{
+ FieldInfo* fieldInfo = fieldInfos->fieldInfo(field);
+ openField(fieldInfo->number, fieldInfo->storePositionWithTermVector,
+ fieldInfo->storeOffsetWithTermVector);
+}
+
+void TermVectorsWriter::closeField()
+{
+ if (isFieldOpen()) {
+ /* DEBUG */
+ //System.out.println("closeField()");
+ /* DEBUG */
+
+ // save field and terms
+ writeField();
+ fields.push_back(currentField);
+ terms.clear();
+ currentField = NULL;
+ }
+}
+
+bool TermVectorsWriter::isFieldOpen() const
+{
+ return currentField != NULL;
+}
+
+void TermVectorsWriter::addTerm(const TCHAR* termText, int32_t freq,
+ Array<int32_t>* positions, Array<TermVectorOffsetInfo>* offsets)
+{
+ if (!isDocumentOpen())
+ _CLTHROWA(CL_ERR_InvalidState, "Cannot add terms when document is not open");
+
+ if (!isFieldOpen())
+ _CLTHROWA(CL_ERR_InvalidState, "Cannot add terms when field is not open");
+
+ addTermInternal(termText, freq, positions, offsets);
+}
+
+void TermVectorsWriter::addTermInternal(const TCHAR* termText, int32_t freq,
+ Array<int32_t>* positions, Array<TermVectorOffsetInfo>* offsets)
+{
+ TVTerm* term = _CLNEW TVTerm();
+ term->setTermText(termText);
+ term->freq = freq;
+ term->positions = positions;
+ term->offsets = offsets;
+ terms.push_back(term);
+}
+
+void TermVectorsWriter::addAllDocVectors(Array<TermFreqVector*>& vectors)
+{
+ openDocument();
+
+ for (int32_t i = 0; i < vectors.length; ++i) {
+ bool storePositionWithTermVector = false;
+ bool storeOffsetWithTermVector = false;
+
+ if ( vectors[i]->__asTermPositionVector() != NULL ) {
+ TermPositionVector* tpVector = vectors[i]->__asTermPositionVector();
+
+ if (tpVector->size() > 0 && tpVector->getTermPositions(0) != NULL)
+ storePositionWithTermVector = true;
+ if (tpVector->size() > 0 && tpVector->getOffsets(0) != NULL)
+ storeOffsetWithTermVector = true;
+
+ FieldInfo* fieldInfo = fieldInfos->fieldInfo(tpVector->getField());
+ openField(fieldInfo->number, storePositionWithTermVector, storeOffsetWithTermVector);
+
+ for (int32_t j = 0; j < tpVector->size(); ++j)
+ addTermInternal(tpVector->getTerms()[j],
+ (*tpVector->getTermFrequencies())[j],
+ tpVector->getTermPositions(j),
+ tpVector->getOffsets(j));
+
+ closeField();
+
+ } else {
+ TermFreqVector* tfVector = vectors[i];
+
+ FieldInfo* fieldInfo = fieldInfos->fieldInfo(tfVector->getField());
+ openField(fieldInfo->number, storePositionWithTermVector, storeOffsetWithTermVector);
+
+ for (int32_t j = 0; j < tfVector->size(); ++j)
+ addTermInternal(tfVector->getTerms()[j],
+ (*tfVector->getTermFrequencies())[j], NULL, NULL);
+
+ closeField();
+ }
+ }
+
+ closeDocument();
+}
+
+
+void TermVectorsWriter::close()
+{
+ try {
+ closeDocument();
+
+ // make an effort to close all streams we can but remember and re-throw
+ // the first exception encountered in this process
+#define _DOTVWCLOSE(x) \
+ if (x != NULL) { \
+ try { \
+ x->close(); \
+ _CLDELETE(x) \
+ } catch (CLuceneError& e) { \
+ if ( e.number() != CL_ERR_IO ) \
+ throw e; \
+ if (ikeep == 0) \
+ ikeep = e.number(); \
+ if (keep[0] == 0) \
+ strcpy(keep,e.what()); \
+ } catch (...) { \
+ if (keep[0] == 0) \
+ strcpy(keep, "Unknown error while closing " #x);\
+ } \
+ }
+ } _CLFINALLY ( \
+ char keep[200];
+ int32_t ikeep = 0;
+ keep[0] = 0;
+ _DOTVWCLOSE(tvx);
+ _DOTVWCLOSE(tvd);
+ _DOTVWCLOSE(tvf);
+ if (keep[0] != 0)
+ _CLTHROWA(ikeep, keep);
+ );
+}
+
+void TermVectorsWriter::writeField()
+{
+ // remember where this field is written
+ currentField->tvfPointer = tvf->getFilePointer();
+ //System.out.println("Field Pointer: " + currentField.tvfPointer);
+ int32_t size = terms.size();
+
+ tvf->writeVInt(size);
+
+ bool storePositions = currentField->storePositions;
+ bool storeOffsets = currentField->storeOffsets;
+ uint8_t bits = 0x0;
+ if (storePositions)
+ bits |= STORE_POSITIONS_WITH_TERMVECTOR;
+ if (storeOffsets)
+ bits |= STORE_OFFSET_WITH_TERMVECTOR;
+ tvf->writeByte(bits);
+
+ const TCHAR* lastTermText = LUCENE_BLANK_STRING;
+ int32_t lastTermTextLen = 0;
+
+ for (int32_t i = 0; i < size; ++i) {
+ TVTerm* term = terms[i];
+ int32_t start = CL_NS(util)::Misc::stringDifference(lastTermText,
+ lastTermTextLen, term->getTermText(),term->getTermTextLen());
+ int32_t length = term->getTermTextLen() - start;
+ tvf->writeVInt(start); // write shared prefix length
+ tvf->writeVInt(length); // write delta length
+ tvf->writeChars(term->getTermText(), start, length); // write delta chars
+ tvf->writeVInt(term->freq);
+
+ lastTermText = term->getTermText();
+ lastTermTextLen = term->getTermTextLen();
+
+ if (storePositions) {
+ if(term->positions == NULL)
+ _CLTHROWA(CL_ERR_IllegalState, "Trying to write positions that are NULL!");
+
+ // use delta encoding for positions
+ int32_t position = 0;
+ for (int32_t j = 0; j < term->freq; ++j){
+ tvf->writeVInt((*term->positions)[j] - position);
+ position = (*term->positions)[j];
+ }
+ }
+
+ if (storeOffsets) {
+ if(term->offsets == NULL)
+ _CLTHROWA(CL_ERR_IllegalState, "Trying to write offsets that are NULL!");
+
+ // use delta encoding for offsets
+ int32_t position = 0;
+ for (int32_t j = 0; j < term->freq; ++j) {
+ tvf->writeVInt((*term->offsets)[j].getStartOffset() - position);
+ //Save the diff between the two.
+ tvf->writeVInt((*term->offsets)[j].getEndOffset() -
+ (*term->offsets)[j].getStartOffset());
+ position = (*term->offsets)[j].getEndOffset();
+ }
+ }
+ }
+}
+
+void TermVectorsWriter::writeDoc()
+{
+ if (isFieldOpen()) {
+ _CLTHROWA(CL_ERR_InvalidState,
+ "Field is still open while writing document");
+ }
+
+ // write document index record
+ tvx->writeLong(currentDocPointer);
+
+ // write document data record
+ int32_t size = fields.size();
+
+ // write the number of fields
+ tvd->writeVInt(size);
+
+ // write field numbers
+ for (int32_t j = 0; j < size; ++j) {
+ tvd->writeVInt(fields[j]->number);
+ }
+
+ // write field pointers
+ int64_t lastFieldPointer = 0;
+ for (int32_t i = 0; i < size; ++i) {
+ TVField* field = (TVField*) fields[i];
+ tvd->writeVLong(field->tvfPointer - lastFieldPointer);
+
+ lastFieldPointer = field->tvfPointer;
+ }
+}
+
+const TCHAR* TermVectorsWriter::TVTerm::getTermText() const
+{
+ return termText;
+}
+
+size_t TermVectorsWriter::TVTerm::getTermTextLen()
+{
+ if (termTextLen==-1)
+ termTextLen = _tcslen(termText);
+ return termTextLen;
+}
+
+void TermVectorsWriter::TVTerm::setTermText(const TCHAR* val)
+{
+ _CLDELETE_CARRAY(termText);
+ termText = STRDUP_TtoT(val);
+ termTextLen = -1;
+
+}
+
+TermVectorsWriter::TVTerm::TVTerm()
+ : freq(0)
+ , positions(NULL)
+ , offsets(NULL)
+{
+ termText=NULL;
+ termTextLen=-1;
+}
+
+TermVectorsWriter::TVTerm::~TVTerm()
+{
+ _CLDELETE_CARRAY(termText)
+}
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/index/Terms.h b/src/3rdparty/clucene/src/CLucene/index/Terms.h
new file mode 100644
index 0000000..8064418
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/index/Terms.h
@@ -0,0 +1,174 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_index_Terms_
+#define _lucene_index_Terms_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "Term.h"
+CL_NS_DEF(index)
+
+class TermEnum; //predefine
+class TermPositions;
+
+/** TermDocs provides an interface for enumerating &lt;document, frequency&gt;
+ pairs for a term. <p> The document portion names each document containing
+ the term. Documents are indicated by number. The frequency portion gives
+ the number of times the term occurred in each document. <p> The pairs are
+ ordered by document number.
+
+ @see IndexReader#termDocs()
+ */
+class TermDocs: LUCENE_BASE {
+public:
+ virtual ~TermDocs(){
+ }
+
+ // Sets this to the data for a term.
+ // The enumeration is reset to the start of the data for this term.
+ virtual void seek(Term* term)=0;
+
+ /** Sets this to the data for the current term in a {@link TermEnum}.
+ * This may be optimized in some implementations.
+ */
+ virtual void seek(TermEnum* termEnum)=0;
+
+ // Returns the current document number. <p> This is invalid until {@link
+ // #next()} is called for the first time.
+ virtual int32_t doc() const=0;
+
+ // Returns the frequency of the term within the current document. <p> This
+ // is invalid until {@link #next()} is called for the first time.
+ virtual int32_t freq() const=0;
+
+ // Moves to the next pair in the enumeration. <p> Returns true iff there is
+ // such a next pair in the enumeration.
+ virtual bool next() =0;
+
+ // Attempts to read multiple entries from the enumeration, up to length of
+ // <i>docs</i>. Document numbers are stored in <i>docs</i>, and term
+ // frequencies are stored in <i>freqs</i>. The <i>freqs</i> array must be as
+ // int64_t as the <i>docs</i> array.
+ //
+ // <p>Returns the number of entries read. Zero is only returned when the
+ // stream has been exhausted.
+ virtual int32_t read(int32_t* docs, int32_t* freqs, int32_t length)=0;
+
+ // Skips entries to the first beyond the current whose document number is
+ // greater than or equal to <i>target</i>. <p>Returns true iff there is such
+ // an entry. <p>Behaves as if written: <pre>
+ // bool skipTo(int32_t target) {
+ // do {
+ // if (!next())
+ // return false;
+ // } while (target > doc());
+ // return true;
+ // }
+ // </pre>
+ // Some implementations are considerably more efficient than that.
+ virtual bool skipTo(const int32_t target)=0;
+
+ // Frees associated resources.
+ virtual void close() = 0;
+
+
+ /** Solve the diamond inheritence problem by providing a reinterpret function.
+ * No dynamic casting is required and no RTTI data is needed to do this
+ */
+ virtual TermPositions* __asTermPositions()=0;
+};
+
+
+// Abstract class for enumerating terms.
+//
+//<p>Term enumerations are always ordered by Term.compareTo(). Each term in
+//the enumeration is greater than all that precede it.
+class TermEnum: LUCENE_BASE {
+public:
+ // Increments the enumeration to the next element. True if one exists.
+ virtual bool next()=0;
+
+ // Returns a pointer to the current Term in the enumeration.
+ virtual Term* term()=0;
+
+ // Returns the current Term in the enumeration.
+ virtual Term* term(bool pointer){
+ Term* ret = term();
+ if ( !pointer )
+ ret->__cl_decref();
+ return ret;
+ }
+
+ // Returns the docFreq of the current Term in the enumeration.
+ virtual int32_t docFreq() const=0;
+
+ // Closes the enumeration to further activity, freeing resources.
+ virtual void close() =0;
+
+ virtual ~TermEnum(){
+ }
+
+ // Term Vector support
+ /** Skips terms to the first beyond the current whose value is
+ * greater or equal to <i>target</i>. <p>Returns true iff there is such
+ * an entry. <p>Behaves as if written: <pre>
+ * public boolean skipTo(Term target) {
+ * do {
+ * if (!next())
+ * return false;
+ * } while (target > term());
+ * return true;
+ * }
+ * </pre>
+ * Some implementations are considerably more efficient than that.
+ */
+ virtual bool skipTo(Term* target){
+ do {
+ if (!next())
+ return false;
+ } while (target->compareTo(term(false)) > 0);
+ return true;
+ }
+
+ /**
+ * Because we need to know how to cast the object, we need the objects name.
+ */
+ virtual const char* getObjectName() = 0;
+};
+
+
+
+/**
+ * TermPositions provides an interface for enumerating the &lt;document,
+ * frequency, &lt;position&gt;* &gt; tuples for a term. <p> The document and
+ * frequency are the same as for a TermDocs. The positions portion lists the ordinal
+ * positions of each occurrence of a term in a document.
+ *
+ * @see IndexReader#termPositions()
+ */
+class TermPositions: public virtual TermDocs {
+public:
+ // Returns next position in the current document. It is an error to call
+ // this more than {@link #freq()} times
+ // without calling {@link #next()}<p> This is
+ // invalid until {@link #next()} is called for
+ // the first time.
+ virtual int32_t nextPosition() = 0;
+
+ virtual ~TermPositions(){
+ }
+
+ /** Solve the diamond inheritence problem by providing a reinterpret function.
+ * No dynamic casting is required and no RTTI data is needed to do this
+ */
+ virtual TermDocs* __asTermDocs()=0;
+ virtual TermPositions* __asTermPositions()=0;
+};
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/queryParser/Lexer.cpp b/src/3rdparty/clucene/src/CLucene/queryParser/Lexer.cpp
new file mode 100644
index 0000000..861c5d3
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/queryParser/Lexer.cpp
@@ -0,0 +1,371 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "Lexer.h"
+
+#include "CLucene/util/FastCharStream.h"
+#include "CLucene/util/Reader.h"
+#include "CLucene/util/StringBuffer.h"
+#include "TokenList.h"
+#include "QueryToken.h"
+#include "QueryParserBase.h"
+
+CL_NS_USE(util)
+
+CL_NS_DEF(queryParser)
+Lexer::Lexer(QueryParserBase* queryparser, const TCHAR* query) {
+ //Func - Constructor
+ //Pre - query != NULL and contains the query string
+ //Post - An instance of Lexer has been created
+
+ this->queryparser = queryparser;
+
+ CND_PRECONDITION(query != NULL, "query is NULL");
+
+ //The InputStream of Reader must be destroyed in the destructor
+ delSR = true;
+
+ StringReader *r = _CLNEW StringReader(query);
+
+ //Check to see if r has been created properly
+ CND_CONDITION(r != NULL, "Could not allocate memory for StringReader r");
+
+ //Instantie a FastCharStream instance using r and assign it to reader
+ reader = _CLNEW FastCharStream(r);
+
+ //Check to see if reader has been created properly
+ CND_CONDITION(reader != NULL, "Could not allocate memory for FastCharStream reader");
+
+ //The InputStream of Reader must be destroyed in the destructor
+ delSR = true;
+
+}
+
+
+Lexer::Lexer(QueryParserBase* queryparser, Reader* source) {
+ //Func - Constructor
+ // Initializes a new instance of the Lexer class with the specified
+ // TextReader to lex.
+ //Pre - Source contains a valid reference to a Reader
+ //Post - An instance of Lexer has been created using source as the reader
+
+ this->queryparser = queryparser;
+
+ //Instantie a FastCharStream instance using r and assign it to reader
+ reader = _CLNEW FastCharStream(source);
+
+ //Check to see if reader has been created properly
+ CND_CONDITION(reader != NULL, "Could not allocate memory for FastCharStream reader");
+
+ //The InputStream of Reader must not be destroyed in the destructor
+ delSR = false;
+}
+
+
+Lexer::~Lexer() {
+ //Func - Destructor
+ //Pre - true
+ //Post - if delSR was true the InputStream input of reader has been deleted
+ // The instance of Lexer has been destroyed
+
+ if (delSR) {
+ _CLDELETE(reader->input);
+ }
+
+ _CLDELETE(reader);
+}
+
+
+void Lexer::Lex(TokenList *tokenList) {
+ //Func - Breaks the input stream onto the tokens list tokens
+ //Pre - tokens != NULL and contains a TokenList in which the tokens can be stored
+ //Post - The tokens have been added to the TokenList tokens
+
+ CND_PRECONDITION(tokenList != NULL, "tokens is NULL");
+
+ //Get all the tokens
+ while(true) {
+ //Add the token to the tokens list
+
+ //Get the next token
+ QueryToken* token = _CLNEW QueryToken;
+ if ( !GetNextToken(token) ){
+ _CLDELETE(token);
+ break;
+ }
+ tokenList->add(token);
+ }
+
+ //The end has been reached so create an EOF_ token
+ //Add the final token to the TokenList _tokens
+ tokenList->add(_CLNEW QueryToken( QueryToken::EOF_));
+}
+
+
+bool Lexer::GetNextToken(QueryToken* token) {
+ while(!reader->Eos()) {
+ int ch = reader->GetNext();
+
+ if ( ch == -1 )
+ break;
+
+ // skipping whitespaces
+ if( _istspace(ch)!=0 ) {
+ continue;
+ }
+ TCHAR buf[2] = {ch,'\0'};
+ switch(ch) {
+ case '+':
+ token->set(buf, QueryToken::PLUS);
+ return true;
+ case '-':
+ token->set(buf, QueryToken::MINUS);
+ return true;
+ case '(':
+ token->set(buf, QueryToken::LPAREN);
+ return true;
+ case ')':
+ token->set(buf, QueryToken::RPAREN);
+ return true;
+ case ':':
+ token->set(buf, QueryToken::COLON);
+ return true;
+ case '!':
+ token->set(buf, QueryToken::NOT);
+ return true;
+ case '^':
+ token->set(buf, QueryToken::CARAT);
+ return true;
+ case '~':
+ if( _istdigit( reader->Peek() )!=0 ) {
+ TCHAR number[LUCENE_MAX_FIELD_LEN];
+ ReadIntegerNumber(ch, number,LUCENE_MAX_FIELD_LEN);
+ token->set(number, QueryToken::SLOP);
+ return true;
+ }else{
+ token->set(buf, QueryToken::FUZZY);
+ return true;
+ }
+ break;
+ case '"':
+ return ReadQuoted(ch, token);
+ case '[':
+ return ReadInclusiveRange(ch, token);
+ case '{':
+ return ReadExclusiveRange(ch, token);
+ case ']':
+ case '}':
+ case '*':
+ queryparser->throwParserException( _T("Unrecognized TCHAR %d at %d::%d."),
+ ch, reader->Column(), reader->Line() );
+ return false;
+ default:
+ return ReadTerm(ch, token);
+
+ // end of swith
+ }
+
+ }
+ return false;
+}
+
+
+void Lexer::ReadIntegerNumber(const TCHAR ch, TCHAR* buf, int buflen) {
+ int bp=0;
+ buf[bp++] = ch;
+
+ int c = reader->Peek();
+ while( c!=-1 && _istdigit(c)!=0 && bp<buflen-1 ) {
+ buf[bp++] = reader->GetNext();
+ c = reader->Peek();
+ }
+ buf[bp++] = 0;
+}
+
+
+bool Lexer::ReadInclusiveRange(const TCHAR prev, QueryToken* token) {
+ int ch = prev;
+ StringBuffer range;
+ range.appendChar(ch);
+
+ while(!reader->Eos()) {
+ ch = reader->GetNext();
+ if ( ch == -1 )
+ break;
+ range.appendChar(ch);
+
+ if(ch == ']'){
+ token->set(range.getBuffer(), QueryToken::RANGEIN);
+ return true;
+ }
+ }
+ queryparser->throwParserException(_T("Unterminated inclusive range! %d %d::%d"),' ',
+ reader->Column(),reader->Column());
+ return false;
+}
+
+
+bool Lexer::ReadExclusiveRange(const TCHAR prev, QueryToken* token) {
+ int ch = prev;
+ StringBuffer range;
+ range.appendChar(ch);
+
+ while(!reader->Eos()) {
+ ch = reader->GetNext();
+
+ if (ch==-1)
+ break;
+ range.appendChar(ch);
+
+ if(ch == '}'){
+ token->set(range.getBuffer(), QueryToken::RANGEEX);
+ return true;
+ }
+ }
+ queryparser->throwParserException(_T("Unterminated exclusive range! %d %d::%d"),' ',
+ reader->Column(),reader->Column() );
+ return false;
+}
+
+bool Lexer::ReadQuoted(const TCHAR prev, QueryToken* token) {
+ int ch = prev;
+ StringBuffer quoted;
+ quoted.appendChar(ch);
+
+ while(!reader->Eos()) {
+ ch = reader->GetNext();
+
+ if (ch==-1)
+ break;
+
+ quoted.appendChar(ch);
+
+ if(ch == '"'){
+ token->set(quoted.getBuffer(), QueryToken::QUOTED);
+ return true;
+ }
+ }
+ queryparser->throwParserException(_T("Unterminated string! %d %d::%d"),' ',
+ reader->Column(),reader->Column());
+ return false;
+}
+
+
+bool Lexer::ReadTerm(const TCHAR prev, QueryToken* token) {
+ int ch = prev;
+ bool completed = false;
+ int32_t asteriskCount = 0;
+ bool hasQuestion = false;
+
+ StringBuffer val;
+ TCHAR buf[3]; //used for readescaped
+
+ while(true) {
+ switch(ch) {
+ case -1:
+ break;
+ case '\\':
+ {
+ if ( ReadEscape(ch, buf) )
+ val.append( buf );
+ else
+ return false;
+ }
+ break;
+
+ case LUCENE_WILDCARDTERMENUM_WILDCARD_STRING:
+ asteriskCount++;
+ val.appendChar(ch);
+ break;
+ case LUCENE_WILDCARDTERMENUM_WILDCARD_CHAR:
+ hasQuestion = true;
+ val.appendChar(ch);
+ break;
+ case '\n':
+ case '\t':
+ case ' ':
+ case '+':
+ case '-':
+ case '!':
+ case '(':
+ case ')':
+ case ':':
+ case '^':
+ case '[':
+ case ']':
+ case '{':
+ case '}':
+ case '~':
+ case '"':
+ // create new QueryToken
+ reader->UnGet();
+ completed = true;
+ break;
+ default:
+ val.appendChar(ch);
+ break;
+ // end of switch
+ }
+
+ if(completed || ch==-1 || reader->Eos() )
+ break;
+ else
+ ch = reader->GetNext();
+ }
+
+ // create new QueryToken
+ if(hasQuestion)
+ token->set(val.getBuffer(), QueryToken::WILDTERM);
+ else if(asteriskCount == 1 && val.getBuffer()[val.length() - 1] == '*')
+ token->set(val.getBuffer(), QueryToken::PREFIXTERM);
+ else if(asteriskCount > 0)
+ token->set(val.getBuffer(), QueryToken::WILDTERM);
+ else if( _tcsicmp(val.getBuffer(), _T("AND"))==0 || _tcscmp(val.getBuffer(), _T("&&"))==0 )
+ token->set(val.getBuffer(), QueryToken::AND_);
+ else if( _tcsicmp(val.getBuffer(), _T("OR"))==0 || _tcscmp(val.getBuffer(), _T("||"))==0)
+ token->set(val.getBuffer(), QueryToken::OR);
+ else if( _tcsicmp(val.getBuffer(), _T("NOT"))==0 )
+ token->set(val.getBuffer(), QueryToken::NOT);
+ else {
+ bool isnum = true;
+ int32_t nlen=val.length();
+ for (int32_t i=0;i<nlen;++i) {
+ TCHAR ch=val.getBuffer()[i];
+ if ( _istalpha(ch) ) {
+ isnum=false;
+ break;
+ }
+ }
+
+ if ( isnum )
+ token->set(val.getBuffer(), QueryToken::NUMBER);
+ else
+ token->set(val.getBuffer(), QueryToken::TERM);
+ }
+ return true;
+}
+
+
+bool Lexer::ReadEscape(TCHAR prev, TCHAR* buf) {
+ TCHAR ch = prev;
+ int bp=0;
+ buf[bp++] = ch;
+
+ ch = reader->GetNext();
+ int32_t idx = _tcscspn( buf, _T("\\+-!():^[]{}\"~*") );
+ if(idx == 0) {
+ buf[bp++] = ch;
+ buf[bp++]=0;
+ return true;
+ }
+ queryparser->throwParserException(_T("Unrecognized escape sequence at %d %d::%d"), ' ',
+ reader->Column(),reader->Line());
+ return false;
+}
+
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/queryParser/Lexer.h b/src/3rdparty/clucene/src/CLucene/queryParser/Lexer.h
new file mode 100644
index 0000000..b3b5552
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/queryParser/Lexer.h
@@ -0,0 +1,67 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+*
+* Changes are Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+------------------------------------------------------------------------------*/
+#ifndef _lucene_queryParser_Lexer_
+#define _lucene_queryParser_Lexer_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "CLucene/util/FastCharStream.h"
+#include "CLucene/util/Reader.h"
+#include "CLucene/util/StringBuffer.h"
+
+#include "TokenList.h"
+
+CL_NS_DEF(queryParser)
+class QueryParserBase;
+ // A simple Lexer that is used by QueryParser.
+ class Lexer:LUCENE_BASE
+ {
+ private:
+ CL_NS(util)::FastCharStream* reader;
+ QueryParserBase* queryparser; //holds the queryparser so that we can do callbacks
+ bool delSR; //Indicates if the reader must be deleted or not
+
+ public:
+ // Initializes a new instance of the Lexer class with the specified
+ // query to lex.
+ Lexer(QueryParserBase* queryparser, const TCHAR* query);
+
+ // Initializes a new instance of the Lexer class with the specified
+ // TextReader to lex.
+ Lexer(QueryParserBase* queryparser, CL_NS(util)::Reader* source);
+
+ //Breaks the input stream onto the tokens list tokens
+ void Lex(TokenList *tokens);
+
+ ~Lexer();
+
+ private:
+ bool GetNextToken(QueryToken* token);
+
+ // Reads an integer number. buf should quite large, probably as large as a field should ever be
+ void ReadIntegerNumber(const TCHAR ch, TCHAR* buf, int buflen);
+
+ // Reads an inclusive range like [some words]
+ bool ReadInclusiveRange(const TCHAR prev, QueryToken* token);
+
+ // Reads an exclusive range like {some words}
+ bool ReadExclusiveRange(const TCHAR prev, QueryToken* token);
+
+ // Reads quoted string like "something else"
+ bool ReadQuoted(const TCHAR prev, QueryToken* token);
+
+ bool ReadTerm(const TCHAR prev, QueryToken* token);
+
+ //reads an escaped character into the buf. Buf requires at least 3 characters
+ bool ReadEscape(const TCHAR prev, TCHAR* buf);
+ };
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/queryParser/MultiFieldQueryParser.cpp b/src/3rdparty/clucene/src/CLucene/queryParser/MultiFieldQueryParser.cpp
new file mode 100644
index 0000000..ea93ec4
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/queryParser/MultiFieldQueryParser.cpp
@@ -0,0 +1,204 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+*
+* Changes are Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "MultiFieldQueryParser.h"
+#include "CLucene/analysis/AnalysisHeader.h"
+#include "CLucene/search/BooleanQuery.h"
+#include "CLucene/search/PhraseQuery.h"
+#include "CLucene/search/SearchHeader.h"
+#include "QueryParser.h"
+
+CL_NS_USE(index)
+CL_NS_USE(util)
+CL_NS_USE(search)
+CL_NS_USE(analysis)
+
+CL_NS_DEF(queryParser)
+
+MultiFieldQueryParser::MultiFieldQueryParser(const TCHAR** fields, CL_NS(analysis)::Analyzer* a, BoostMap* boosts):
+ QueryParser(NULL,a)
+{
+ this->fields = fields;
+ this->boosts = boosts;
+}
+MultiFieldQueryParser::~MultiFieldQueryParser(){
+}
+
+//static
+Query* MultiFieldQueryParser::parse(const TCHAR* query, const TCHAR** fields, Analyzer* analyzer)
+{
+ BooleanQuery* bQuery = _CLNEW BooleanQuery();
+ int32_t i = 0;
+ while ( fields[i] != NULL ){
+ Query* q = QueryParser::parse(query, fields[i], analyzer);
+ bQuery->add(q, true, false, false);
+
+ i++;
+ }
+ return bQuery;
+}
+
+//static
+Query* MultiFieldQueryParser::parse(const TCHAR* query, const TCHAR** fields, const uint8_t* flags, Analyzer* analyzer)
+{
+ BooleanQuery* bQuery = _CLNEW BooleanQuery();
+ int32_t i = 0;
+ while ( fields[i] != NULL )
+ {
+ Query* q = QueryParser::parse(query, fields[i], analyzer);
+ uint8_t flag = flags[i];
+ switch (flag)
+ {
+ case MultiFieldQueryParser::REQUIRED_FIELD:
+ bQuery->add(q, true, true, false);
+ break;
+ case MultiFieldQueryParser::PROHIBITED_FIELD:
+ bQuery->add(q, true, false, true);
+ break;
+ default:
+ bQuery->add(q, true, false, false);
+ break;
+ }
+
+ i++;
+ }
+ return bQuery;
+}
+
+
+Query* MultiFieldQueryParser::GetFieldQuery(const TCHAR* field, TCHAR* queryText, int32_t slop){
+ if (field == NULL) {
+ CL_NS_STD(vector)<BooleanClause*> clauses;
+ for (int i = 0; fields[i]!=NULL; ++i) {
+ Query* q = QueryParser::GetFieldQuery(fields[i], queryText);
+ if (q != NULL) {
+ //If the user passes a map of boosts
+ if (boosts != NULL) {
+ //Get the boost from the map and apply them
+ BoostMap::const_iterator itr = boosts->find(fields[i]);
+ if (itr != boosts->end()) {
+ q->setBoost(itr->second);
+ }
+ }
+ if (q->getQueryName() == PhraseQuery::getClassName()) {
+ ((PhraseQuery*)q)->setSlop(slop);
+ }
+ //if (q instanceof MultiPhraseQuery) {
+ // ((MultiPhraseQuery) q).setSlop(slop);
+ //}
+ q = QueryAddedCallback(fields[i], q);
+ if ( q )
+ clauses.push_back(_CLNEW BooleanClause(q, true, false,false));
+ }
+ }
+ if (clauses.size() == 0) // happens for stopwords
+ return NULL;
+ Query* q = QueryParser::GetBooleanQuery(clauses);
+ return q;
+ }else{
+ Query* q = QueryParser::GetFieldQuery(field, queryText);
+ if ( q )
+ q = QueryAddedCallback(field,q);
+ return q;
+ }
+}
+
+
+Query* MultiFieldQueryParser::GetFieldQuery(const TCHAR* field, TCHAR* queryText){
+ return GetFieldQuery(field, queryText, 0);
+}
+
+
+CL_NS(search)::Query* MultiFieldQueryParser::GetFuzzyQuery(const TCHAR* field, TCHAR* termStr){
+ if (field == NULL) {
+ CL_NS_STD(vector)<BooleanClause*> clauses;
+ for (int i = 0; fields[i]!=NULL; ++i) {
+ Query* q = QueryParser::GetFuzzyQuery(fields[i], termStr); //todo: , minSimilarity
+ if ( q ){
+ q = QueryAddedCallback(fields[i], q);
+ if ( q ){
+ clauses.push_back(_CLNEW BooleanClause(q,true,false,false) );
+ }
+ }
+ }
+ return QueryParser::GetBooleanQuery(clauses);
+ }else{
+ Query* q = QueryParser::GetFuzzyQuery(field, termStr);//todo: , minSimilarity
+ if ( q )
+ q = QueryAddedCallback(field,q);
+ return q;
+ }
+}
+
+Query* MultiFieldQueryParser::GetPrefixQuery(const TCHAR* field, TCHAR* termStr){
+ if (field == NULL) {
+ CL_NS_STD(vector)<BooleanClause*> clauses;
+ for (int i = 0; fields[i]!=NULL; ++i) {
+ Query* q = QueryParser::GetPrefixQuery(fields[i], termStr);
+ if ( q ){
+ q = QueryAddedCallback(fields[i],q);
+ if ( q ){
+ clauses.push_back(_CLNEW BooleanClause(q,true,false,false));
+ }
+ }
+ }
+ return QueryParser::GetBooleanQuery(clauses);
+ }else{
+ Query* q = QueryParser::GetPrefixQuery(field, termStr);
+ if ( q )
+ q = QueryAddedCallback(field,q);
+ return q;
+ }
+}
+
+Query* MultiFieldQueryParser::GetWildcardQuery(const TCHAR* field, TCHAR* termStr){
+ if (field == NULL) {
+ CL_NS_STD(vector)<BooleanClause*> clauses;
+ for (int i = 0; fields[i]!=NULL; ++i) {
+ Query* q = QueryParser::GetWildcardQuery(fields[i], termStr);
+ if ( q ){
+ q = QueryAddedCallback(fields[i],q);
+ if ( q ){
+ clauses.push_back(_CLNEW BooleanClause(q,true,false,false));
+ }
+ }
+ }
+ return QueryParser::GetBooleanQuery(clauses);
+ }else{
+ Query* q = QueryParser::GetWildcardQuery(field, termStr);
+ if ( q )
+ q = QueryAddedCallback(field,q);
+ return q;
+ }
+}
+
+
+Query* MultiFieldQueryParser::GetRangeQuery(const TCHAR* field, TCHAR* part1, TCHAR* part2, bool inclusive){
+ if (field == NULL) {
+ CL_NS_STD(vector)<BooleanClause*> clauses;
+ for (int i = 0; fields[i]!=NULL; ++i) {
+ Query* q = QueryParser::GetRangeQuery(fields[i], part1, part2, inclusive);
+ if ( q ){
+ q = QueryAddedCallback(fields[i],q);
+ if ( q ){
+ clauses.push_back(_CLNEW BooleanClause(q,true,false,false));
+ }
+ }
+ }
+ return QueryParser::GetBooleanQuery(clauses);
+ }else{
+ Query* q = QueryParser::GetRangeQuery(field, part1, part2, inclusive);
+ if ( q )
+ q = QueryAddedCallback(field,q);
+ return q;
+ }
+}
+
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/queryParser/MultiFieldQueryParser.h b/src/3rdparty/clucene/src/CLucene/queryParser/MultiFieldQueryParser.h
new file mode 100644
index 0000000..bf7d652
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/queryParser/MultiFieldQueryParser.h
@@ -0,0 +1,136 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef MultiFieldQueryParser_H
+#define MultiFieldQueryParser_H
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "CLucene/analysis/AnalysisHeader.h"
+#include "CLucene/search/SearchHeader.h"
+#include "QueryParser.h"
+
+
+CL_NS_DEF(queryParser)
+
+typedef CL_NS(util)::CLHashMap<const TCHAR*,
+ qreal,
+ CL_NS(util)::Compare::TChar,
+ CL_NS(util)::Equals::TChar,
+ CL_NS(util)::Deletor::tcArray,
+ CL_NS(util)::Deletor::DummyFloat
+ > BoostMap;
+
+ /**
+ * A QueryParser which constructs queries to search multiple fields.
+ *
+ */
+ class MultiFieldQueryParser: public QueryParser
+ {
+ protected:
+ const TCHAR** fields;
+ BoostMap* boosts;
+ public:
+ LUCENE_STATIC_CONSTANT(uint8_t, NORMAL_FIELD=0);
+ LUCENE_STATIC_CONSTANT(uint8_t, REQUIRED_FIELD=1);
+ LUCENE_STATIC_CONSTANT(uint8_t, PROHIBITED_FIELD=2);
+
+ /**
+ * Creates a MultiFieldQueryParser.
+ *
+ * <p>It will, when parse(String query)
+ * is called, construct a query like this (assuming the query consists of
+ * two terms and you specify the two fields <code>title</code> and <code>body</code>):</p>
+ *
+ * <code>
+ * (title:term1 body:term1) (title:term2 body:term2)
+ * </code>
+ *
+ * <p>When setDefaultOperator(AND_OPERATOR) is set, the result will be:</p>
+ *
+ * <code>
+ * +(title:term1 body:term1) +(title:term2 body:term2)
+ * </code>
+ *
+ * <p>In other words, all the query's terms must appear, but it doesn't matter in
+ * what fields they appear.</p>
+ */
+ MultiFieldQueryParser(const TCHAR** fields, CL_NS(analysis)::Analyzer* a, BoostMap* boosts = NULL);
+ virtual ~MultiFieldQueryParser();
+
+ /**
+ * <p>
+ * Parses a query which searches on the fields specified.
+ * <p>
+ * If x fields are specified, this effectively constructs:
+ * <pre>
+ * <code>
+ * (field1:query) (field2:query) (field3:query)...(fieldx:query)
+ * </code>
+ * </pre>
+ *
+ * @param query Query string to parse
+ * @param fields Fields to search on
+ * @param analyzer Analyzer to use
+ * @throws ParserException if query parsing fails
+ * @throws TokenMgrError if query parsing fails
+ */
+ static CL_NS(search)::Query* parse(const TCHAR* query, const TCHAR** fields, CL_NS(analysis)::Analyzer* analyzer);
+
+ /**
+ * <p>
+ * Parses a query, searching on the fields specified.
+ * Use this if you need to specify certain fields as required,
+ * and others as prohibited.
+ * <p><pre>
+ * Usage:
+ * <code>
+ * String[] fields = {"filename", "contents", "description"};
+ * int32_t[] flags = {MultiFieldQueryParser.NORMAL FIELD,
+ * MultiFieldQueryParser.REQUIRED FIELD,
+ * MultiFieldQueryParser.PROHIBITED FIELD,};
+ * parse(query, fields, flags, analyzer);
+ * </code>
+ * </pre>
+ *<p>
+ * The code above would construct a query:
+ * <pre>
+ * <code>
+ * (filename:query) +(contents:query) -(description:query)
+ * </code>
+ * </pre>
+ *
+ * @param query Query string to parse
+ * @param fields Fields to search on
+ * @param flags Flags describing the fields
+ * @param analyzer Analyzer to use
+ * @throws ParserException if query parsing fails
+ * @throws TokenMgrError if query parsing fails
+ */
+ static CL_NS(search)::Query* parse(const TCHAR* query, const TCHAR** fields, const uint8_t* flags, CL_NS(analysis)::Analyzer* analyzer);
+
+
+
+ protected:
+ CL_NS(search)::Query* GetFieldQuery(const TCHAR* field, TCHAR* queryText);
+ CL_NS(search)::Query* GetFieldQuery(const TCHAR* field, TCHAR* queryText, int32_t slop);
+ CL_NS(search)::Query* GetFuzzyQuery(const TCHAR* field, TCHAR* termStr);
+ CL_NS(search)::Query* GetRangeQuery(const TCHAR* field, TCHAR* part1, TCHAR* part2, bool inclusive);
+ CL_NS(search)::Query* GetPrefixQuery(const TCHAR* field, TCHAR* termStr);
+ CL_NS(search)::Query* GetWildcardQuery(const TCHAR* field, TCHAR* termStr);
+
+ /**
+ * A special virtual function for the MultiFieldQueryParser which can be used
+ * to clean up queries. Once the field name is known and the query has been
+ * created, its passed to this function.
+ * An example of this usage is to set boosts.
+ */
+ virtual CL_NS(search)::Query* QueryAddedCallback(const TCHAR* field, CL_NS(search)::Query* query){ return query; }
+ };
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/queryParser/QueryParser.cpp b/src/3rdparty/clucene/src/CLucene/queryParser/QueryParser.cpp
new file mode 100644
index 0000000..b11eec0
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/queryParser/QueryParser.cpp
@@ -0,0 +1,509 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+*
+* Changes are Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "QueryParser.h"
+
+#include "CLucene/analysis/AnalysisHeader.h"
+#include "CLucene/util/Reader.h"
+#include "CLucene/search/SearchHeader.h"
+#include "CLucene/index/Term.h"
+
+#include "TokenList.h"
+#include "QueryToken.h"
+#include "QueryParserBase.h"
+#include "Lexer.h"
+
+CL_NS_USE(util)
+CL_NS_USE(index)
+CL_NS_USE(analysis)
+CL_NS_USE(search)
+
+CL_NS_DEF(queryParser)
+
+ QueryParser::QueryParser(const TCHAR* _field, Analyzer* _analyzer) : QueryParserBase(_analyzer){
+ //Func - Constructor.
+ // Instantiates a QueryParser for the named field _field
+ //Pre - _field != NULL
+ //Post - An instance has been created
+
+ if ( _field )
+ field = STRDUP_TtoT(_field);
+ else
+ field = NULL;
+ tokens = NULL;
+ lowercaseExpandedTerms = true;
+ }
+
+ QueryParser::~QueryParser() {
+ //Func - Destructor
+ //Pre - true
+ //Post - The instance has been destroyed
+
+ _CLDELETE_CARRAY(field);
+ }
+
+ //static
+ Query* QueryParser::parse(const TCHAR* query, const TCHAR* field, Analyzer* analyzer){
+ //Func - Returns a new instance of the Query class with a specified query, field and
+ // analyzer values.
+ //Pre - query != NULL and holds the query to parse
+ // field != NULL and holds the default field for query terms
+ // analyzer holds a valid reference to an Analyzer and is used to
+ // find terms in the query text
+ //Post - query has been parsed and an instance of Query has been returned
+
+ CND_PRECONDITION(query != NULL, "query is NULL");
+ CND_PRECONDITION(field != NULL, "field is NULL");
+
+ QueryParser parser(field, analyzer);
+ return parser.parse(query);
+ }
+
+ Query* QueryParser::parse(const TCHAR* query){
+ //Func - Returns a parsed Query instance
+ //Pre - query != NULL and contains the query value to be parsed
+ //Post - Returns a parsed Query Instance
+
+ CND_PRECONDITION(query != NULL, "query is NULL");
+
+ //Instantie a Stringer that can read the query string
+ Reader* r = _CLNEW StringReader(query);
+
+ //Check to see if r has been created properly
+ CND_CONDITION(r != NULL, "Could not allocate memory for StringReader r");
+
+ //Pointer for the return value
+ Query* ret = NULL;
+
+ try{
+ //Parse the query managed by the StringReader R and return a parsed Query instance
+ //into ret
+ ret = parse(r);
+ }_CLFINALLY (
+ _CLDELETE(r);
+ );
+
+ return ret;
+ }
+
+ Query* QueryParser::parse(Reader* reader){
+ //Func - Returns a parsed Query instance
+ //Pre - reader contains a valid reference to a Reader and manages the query string
+ //Post - A parsed Query instance has been returned or
+
+ //instantiate the TokenList tokens
+ TokenList _tokens;
+ this->tokens = &_tokens;
+
+ //Instantiate a lexer
+ Lexer lexer(this, reader);
+
+ //tokens = lexer.Lex();
+ //Lex the tokens
+ lexer.Lex(tokens);
+
+ //Peek to the first token and check if is an EOF
+ if (tokens->peek()->Type == QueryToken::EOF_){
+ // The query string failed to yield any tokens. We discard the
+ // TokenList tokens and raise an exceptioin.
+ QueryToken* token = this->tokens->extract();
+ _CLDELETE(token);
+ _CLTHROWA(CL_ERR_Parse, "No query given.");
+ }
+
+ //Return the parsed Query instance
+ Query* ret = MatchQuery(field);
+ this->tokens = NULL;
+ return ret;
+ }
+
+ int32_t QueryParser::MatchConjunction(){
+ //Func - matches for CONJUNCTION
+ // CONJUNCTION ::= <AND> | <OR>
+ //Pre - tokens != NULL
+ //Post - if the first token is an AND or an OR then
+ // the token is extracted and deleted and CONJ_AND or CONJ_OR is returned
+ // otherwise CONJ_NONE is returned
+
+ CND_PRECONDITION(tokens != NULL, "tokens is NULL");
+
+ switch(tokens->peek()->Type){
+ case QueryToken::AND_ :
+ //Delete the first token of tokenlist
+ ExtractAndDeleteToken();
+ return CONJ_AND;
+ case QueryToken::OR :
+ //Delete the first token of tokenlist
+ ExtractAndDeleteToken();
+ return CONJ_OR;
+ default :
+ return CONJ_NONE;
+ }
+ }
+
+ int32_t QueryParser::MatchModifier(){
+ //Func - matches for MODIFIER
+ // MODIFIER ::= <PLUS> | <MINUS> | <NOT>
+ //Pre - tokens != NULL
+ //Post - if the first token is a PLUS the token is extracted and deleted and MOD_REQ is returned
+ // if the first token is a MINUS or NOT the token is extracted and deleted and MOD_NOT is returned
+ // otherwise MOD_NONE is returned
+ CND_PRECONDITION(tokens != NULL, "tokens is NULL");
+
+ switch(tokens->peek()->Type){
+ case QueryToken::PLUS :
+ //Delete the first token of tokenlist
+ ExtractAndDeleteToken();
+ return MOD_REQ;
+ case QueryToken::MINUS :
+ case QueryToken::NOT :
+ //Delete the first token of tokenlist
+ ExtractAndDeleteToken();
+ return MOD_NOT;
+ default :
+ return MOD_NONE;
+ }
+ }
+
+ Query* QueryParser::MatchQuery(const TCHAR* field){
+ //Func - matches for QUERY
+ // QUERY ::= [MODIFIER] QueryParser::CLAUSE (<CONJUNCTION> [MODIFIER] CLAUSE)*
+ //Pre - field != NULL
+ //Post -
+
+ CND_PRECONDITION(tokens != NULL, "tokens is NULL");
+
+ CL_NS_STD(vector)<BooleanClause*> clauses;
+
+ Query* q = NULL;
+
+ int32_t mods = MOD_NONE;
+ int32_t conj = CONJ_NONE;
+
+ //match for MODIFIER
+ mods = MatchModifier();
+
+ //match for CLAUSE
+ q = MatchClause(field);
+ AddClause(clauses, CONJ_NONE, mods, q);
+
+ // match for CLAUSE*
+ while(true){
+ QueryToken* p = tokens->peek();
+ if(p->Type == QueryToken::EOF_){
+ QueryToken* qt = MatchQueryToken(QueryToken::EOF_);
+ _CLDELETE(qt);
+ break;
+ }
+
+ if(p->Type == QueryToken::RPAREN){
+ //MatchQueryToken(QueryToken::RPAREN);
+ break;
+ }
+
+ //match for a conjuction (AND OR NOT)
+ conj = MatchConjunction();
+ //match for a modifier
+ mods = MatchModifier();
+
+ q = MatchClause(field);
+ if ( q != NULL )
+ AddClause(clauses, conj, mods, q);
+ }
+
+ // finalize query
+ if(clauses.size() == 1){ //bvk: removed this && firstQuery != NULL
+ BooleanClause* c = clauses[0];
+ Query* q = c->query;
+
+ //Condition check to be sure clauses[0] is valid
+ CND_CONDITION(c != NULL, "c is NULL");
+
+ //Tell the boolean clause not to delete its query
+ c->deleteQuery=false;
+ //Clear the clauses list
+ clauses.clear();
+ _CLDELETE(c);
+
+ return q;
+ }else{
+ return GetBooleanQuery(clauses);
+ }
+ }
+
+ Query* QueryParser::MatchClause(const TCHAR* field){
+ //Func - matches for CLAUSE
+ // CLAUSE ::= [TERM <COLONQueryParser::>] ( TERM | (<LPAREN> QUERY <RPAREN>))
+ //Pre - field != NULL
+ //Post -
+
+ Query* q = NULL;
+ const TCHAR* sfield = field;
+ bool delField = false;
+
+ QueryToken *DelToken = NULL;
+
+ //match for [TERM <COLON>]
+ QueryToken* term = tokens->extract();
+ if(term->Type == QueryToken::TERM && tokens->peek()->Type == QueryToken::COLON){
+ DelToken = MatchQueryToken(QueryToken::COLON);
+
+ CND_CONDITION(DelToken != NULL,"DelToken is NULL");
+ _CLDELETE(DelToken);
+
+ TCHAR* tmp = STRDUP_TtoT(term->Value);
+ discardEscapeChar(tmp);
+ delField = true;
+ sfield = tmp;
+ _CLDELETE(term);
+ }else{
+ tokens->push(term);
+ term = NULL;
+ }
+
+ // match for
+ // TERM | (<LPAREN> QUERY <RPAREN>)
+ if(tokens->peek()->Type == QueryToken::LPAREN){
+ DelToken = MatchQueryToken(QueryToken::LPAREN);
+
+ CND_CONDITION(DelToken != NULL,"DelToken is NULL");
+ _CLDELETE(DelToken);
+
+ q = MatchQuery(sfield);
+ //DSR:2004.11.01:
+ //If exception is thrown while trying to match trailing parenthesis,
+ //need to prevent q from leaking.
+
+ try{
+ DelToken = MatchQueryToken(QueryToken::RPAREN);
+
+ CND_CONDITION(DelToken != NULL,"DelToken is NULL");
+ _CLDELETE(DelToken);
+
+ }catch(...) {
+ _CLDELETE(q);
+ throw;
+ }
+ }else{
+ q = MatchTerm(sfield);
+ }
+
+ if ( delField )
+ _CLDELETE_CARRAY(sfield);
+ return q;
+ }
+
+
+ Query* QueryParser::MatchTerm(const TCHAR* field){
+ //Func - matches for TERM
+ // TERM ::= TERM | PREFIXTERM | WILDTERM | NUMBER
+ // [ <FUZZY> ] [ <CARAT> <NUMBER> [<FUZZY>]]
+ // | (<RANGEIN> | <RANGEEX>) [<CARAT> <NUMBER>]
+ // | <QUOTED> [SLOP] [<CARAT> <NUMBER>]
+ //Pre - field != NULL
+ //Post -
+
+ QueryToken* term = NULL;
+ QueryToken* slop = NULL;
+ QueryToken* boost = NULL;
+
+ bool prefix = false;
+ bool wildcard = false;
+ bool fuzzy = false;
+ bool rangein = false;
+ Query* q = NULL;
+
+ term = tokens->extract();
+ QueryToken* DelToken = NULL; //Token that is about to be deleted
+
+ switch(term->Type){
+ case QueryToken::TERM:
+ case QueryToken::NUMBER:
+ case QueryToken::PREFIXTERM:
+ case QueryToken::WILDTERM:
+ { //start case
+ //Check if type of QueryToken term is a prefix term
+ if(term->Type == QueryToken::PREFIXTERM){
+ prefix = true;
+ }
+ //Check if type of QueryToken term is a wildcard term
+ if(term->Type == QueryToken::WILDTERM){
+ wildcard = true;
+ }
+ //Peek to see if the type of the next token is fuzzy term
+ if(tokens->peek()->Type == QueryToken::FUZZY){
+ DelToken = MatchQueryToken(QueryToken::FUZZY);
+
+ CND_CONDITION(DelToken !=NULL, "DelToken is NULL");
+ _CLDELETE(DelToken);
+
+ fuzzy = true;
+ }
+ if(tokens->peek()->Type == QueryToken::CARAT){
+ DelToken = MatchQueryToken(QueryToken::CARAT);
+
+ CND_CONDITION(DelToken !=NULL, "DelToken is NULL");
+ _CLDELETE(DelToken);
+
+ boost = MatchQueryToken(QueryToken::NUMBER);
+
+ if(tokens->peek()->Type == QueryToken::FUZZY){
+ DelToken = MatchQueryToken(QueryToken::FUZZY);
+
+ CND_CONDITION(DelToken !=NULL, "DelToken is NULL");
+ _CLDELETE(DelToken);
+
+ fuzzy = true;
+ }
+ } //end if type==CARAT
+
+ discardEscapeChar(term->Value); //clean up
+ if(wildcard){
+ q = GetWildcardQuery(field,term->Value);
+ break;
+ }else if(prefix){
+ //Create a PrefixQuery
+ term->Value[_tcslen(term->Value)-1] = 0; //discard the *
+ q = GetPrefixQuery(field,term->Value);
+ break;
+ }else if(fuzzy){
+ //Create a FuzzyQuery
+
+ //Check if the last char is a ~
+ if(term->Value[_tcslen(term->Value)-1] == '~'){
+ //remove the ~
+ term->Value[_tcslen(term->Value)-1] = '\0';
+ }
+
+ q = GetFuzzyQuery(field,term->Value);
+ break;
+ }else{
+ q = GetFieldQuery(field, term->Value);
+ break;
+ }
+ }
+
+
+ case QueryToken::RANGEIN:
+ case QueryToken::RANGEEX:{
+ if(term->Type == QueryToken::RANGEIN){
+ rangein = true;
+ }
+
+ if(tokens->peek()->Type == QueryToken::CARAT){
+ DelToken = MatchQueryToken(QueryToken::CARAT);
+
+ CND_CONDITION(DelToken !=NULL, "DelToken is NULL");
+ _CLDELETE(DelToken);
+
+ boost = MatchQueryToken(QueryToken::NUMBER);
+ }
+
+ TCHAR* noBrackets = term->Value + 1;
+ noBrackets[_tcslen(noBrackets)-1] = 0;
+ q = ParseRangeQuery(field, noBrackets, rangein);
+ break;
+ }
+
+
+ case QueryToken::QUOTED:{
+ if(tokens->peek()->Type == QueryToken::SLOP){
+ slop = MatchQueryToken(QueryToken::SLOP);
+ }
+
+ if(tokens->peek()->Type == QueryToken::CARAT){
+ DelToken = MatchQueryToken(QueryToken::CARAT);
+
+ CND_CONDITION(DelToken !=NULL, "DelToken is NULL");
+ _CLDELETE(DelToken);
+
+ boost = MatchQueryToken(QueryToken::NUMBER);
+ }
+
+ //remove the quotes
+ TCHAR* quotedValue = term->Value+1;
+ quotedValue[_tcslen(quotedValue)-1] = '\0';
+
+ int32_t islop = phraseSlop;
+ if(slop != NULL ){
+ try {
+ TCHAR* end; //todo: should parse using float...
+ islop = (int32_t)_tcstoi64(slop->Value+1, &end, 10);
+ }catch(...){
+ //ignored
+ }
+ }
+
+ q = GetFieldQuery(field, quotedValue, islop);
+ _CLDELETE(slop);
+ }
+ } // end of switch
+
+ _CLDELETE(term);
+
+
+ if( q!=NULL && boost != NULL ){
+ qreal f = 1.0F;
+ try {
+ TCHAR* tmp;
+ f = _tcstod(boost->Value, &tmp);
+ }catch(...){
+ //ignored
+ }
+ _CLDELETE(boost);
+
+ q->setBoost( f);
+ }
+
+ return q;
+ }
+
+ QueryToken* QueryParser::MatchQueryToken(QueryToken::Types expectedType){
+ //Func - matches for QueryToken of the specified type and returns it
+ // otherwise Exception throws
+ //Pre - tokens != NULL
+ //Post -
+
+ CND_PRECONDITION(tokens != NULL,"tokens is NULL");
+
+ if(tokens->count() == 0){
+ throwParserException(_T("Error: Unexpected end of program"),' ',0,0);
+ }
+
+ //Extract a token form the TokenList tokens
+ QueryToken* t = tokens->extract();
+ //Check if the type of the token t matches the expectedType
+ if (expectedType != t->Type){
+ TCHAR buf[200];
+ _sntprintf(buf,200,_T("Error: Unexpected QueryToken: %d, expected: %d"),t->Type,expectedType);
+ _CLDELETE(t);
+ throwParserException(buf,' ',0,0);
+ }
+
+ //Return the matched token
+ return t;
+ }
+
+ void QueryParser::ExtractAndDeleteToken(void){
+ //Func - Extracts the first token from the Tokenlist tokenlist
+ // and destroys it
+ //Pre - true
+ //Post - The first token has been extracted and destroyed
+
+ CND_PRECONDITION(tokens != NULL, "tokens is NULL");
+
+ //Extract the token from the TokenList tokens
+ QueryToken* t = tokens->extract();
+ //Condition Check Token may not be NULL
+ CND_CONDITION(t != NULL, "Token is NULL");
+ //Delete Token
+ _CLDELETE(t);
+ }
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/queryParser/QueryParser.h b/src/3rdparty/clucene/src/CLucene/queryParser/QueryParser.h
new file mode 100644
index 0000000..a2fc85c
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/queryParser/QueryParser.h
@@ -0,0 +1,165 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_queryParser_QueryParser_
+#define _lucene_queryParser_QueryParser_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "CLucene/analysis/AnalysisHeader.h"
+#include "CLucene/util/Reader.h"
+#include "CLucene/search/SearchHeader.h"
+#include "CLucene/index/Term.h"
+
+#include "TokenList.h"
+#include "QueryToken.h"
+#include "QueryParserBase.h"
+#include "Lexer.h"
+
+CL_NS_DEF(queryParser)
+
+/**
+* @brief CLucene's default query parser.
+*
+* <p>It's a query parser.
+* The only method that clients should need to call is Parse().
+* The syntax for query const TCHAR*s is as follows:
+* A Query is a series of clauses. A clause may be prefixed by:</p>
+* <ul>
+* <li>a plus (+) or a minus (-) sign, indicating that the
+* clause is required or prohibited respectively; or</li>
+* <li>a term followed by a colon, indicating the field to be searched.
+* This enables one to construct queries which search multiple fields.</li>
+* </ul>
+* <p>
+* A clause may be either:</p>
+* <ul>
+* <li>a term, indicating all the documents that contain this term; or</li>
+* <li>a nested query, enclosed in parentheses. Note that this may be
+* used with a +/- prefix to require any of a set of terms.</li>
+* </ul>
+* <p>
+* Thus, in BNF, the query grammar is:</p>
+* <code>
+* Query ::= ( Clause )*
+* Clause ::= ["+", "-"] [&lt;TERM&gt; ":"] ( &lt;TERM&gt; | "(" Query ")" )
+* </code>
+* <p>
+* Examples of appropriately formatted queries can be found in the test cases.
+* </p>
+*/
+class QueryParser : public QueryParserBase
+{
+private:
+ const TCHAR* field;
+ TokenList* tokens;
+public:
+ /**
+ * Initializes a new instance of the QueryParser class with a specified field and
+ * analyzer values.
+ */
+ QueryParser(const TCHAR* field, CL_NS(analysis)::Analyzer* analyzer);
+ ~QueryParser();
+
+ /**
+ * Returns a parsed Query instance.
+ * Note: this call is not threadsafe, either use a seperate QueryParser for each thread, or use a thread lock
+ * <param name="query">The query value to be parsed.</param>
+ * <returns>A parsed Query instance.</returns>
+ */
+ virtual CL_NS(search)::Query* parse(const TCHAR* query);
+
+ /**
+ * Returns a parsed Query instance.
+ * Note: this call is not threadsafe, either use a seperate QueryParser for each thread, or use a thread lock
+ * <param name="reader">The TextReader value to be parsed.</param>
+ * <returns>A parsed Query instance.</returns>
+ */
+ virtual CL_NS(search)::Query* parse(CL_NS(util)::Reader* reader);
+
+ /**
+ * Returns a new instance of the Query class with a specified query, field and
+ * analyzer values.
+ */
+ static CL_NS(search)::Query* parse(const TCHAR* query, const TCHAR* field, CL_NS(analysis)::Analyzer* analyzer);
+
+ CL_NS(analysis)::Analyzer* getAnalyzer() { return analyzer; }
+
+ /**
+ * @return Returns the field.
+ */
+ const TCHAR* getField() { return field; }
+
+ //deprecated functions
+ _CL_DEPRECATED( setLowercaseExpandedTerms ) void setLowercaseWildcardTerms(bool lowercaseWildcardTerms){ setLowercaseExpandedTerms(lowercaseWildcardTerms); }
+ _CL_DEPRECATED( getLowercaseExpandedTerms ) bool getLowercaseWildcardTerms() const { return getLowercaseExpandedTerms(); }
+protected:
+ //these functions may be defined under certain compilation conditions.
+ //note that this functionality is deprecated, you should create your own queryparser
+ //if you want to remove this functionality...it will be removed... be warned!
+#ifdef NO_PREFIX_QUERY
+ virtual CL_NS(search)::Query* GetPrefixQuery(const TCHAR* field,const TCHAR* termStr){ return NULL; }
+#endif
+#ifdef NO_FUZZY_QUERY
+ virtual CL_NS(search)::Query* GetFuzzyQuery(const TCHAR* field,const TCHAR* termStr){ return NULL; }
+#endif
+#ifdef NO_RANGE_QUERY
+ virtual CL_NS(search)::Query* GetRangeQuery(const TCHAR* field, const TCHAR* part1, const TCHAR* part2, bool inclusive) { return NULL; }
+#endif
+#ifdef NO_WILDCARD_QUERY
+ virtual CL_NS(search)::Query* GetWildcardQuery(const TCHAR* field, TCHAR* termStr) { return NULL; }
+#endif
+private:
+ /**
+ * matches for CONJUNCTION
+ * CONJUNCTION ::= <AND> | <OR>
+ */
+ int32_t MatchConjunction();
+
+ /**
+ * matches for MODIFIER
+ * MODIFIER ::= <PLUS> | <MINUS> | <NOT>
+ */
+ int32_t MatchModifier();
+
+ /**
+ * matches for QUERY
+ * QUERY ::= [MODIFIER] CLAUSE (<CONJUNCTION> [MODIFIER] CLAUSE)*
+ */
+ CL_NS(search)::Query* MatchQuery(const TCHAR* field);
+
+ /**
+ * matches for CLAUSE
+ * CLAUSE ::= [TERM <COLON>] ( TERM | (<LPAREN> QUERY <RPAREN>))
+ */
+ CL_NS(search)::Query* MatchClause(const TCHAR* field);
+
+ /**
+ * matches for TERM
+ * TERM ::= TERM | PREFIXTERM | WILDTERM | NUMBER
+ * [ <FUZZY> ] [ <CARAT> <NUMBER> [<FUZZY>]]
+ *
+ * | (<RANGEIN> | <RANGEEX>) [<CARAT> <NUMBER>]
+ * | <QUOTED> [SLOP] [<CARAT> <NUMBER>]
+ */
+ CL_NS(search)::Query* MatchTerm(const TCHAR* field);
+
+ /**
+ * matches for QueryToken of the specified type and returns it
+ * otherwise Exception throws
+ */
+ QueryToken* MatchQueryToken(QueryToken::Types expectedType);
+
+ /**
+ * Extracts the first token from the Tokenlist tokenlist
+ * and destroys it
+ */
+ void ExtractAndDeleteToken(void);
+};
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/queryParser/QueryParserBase.cpp b/src/3rdparty/clucene/src/CLucene/queryParser/QueryParserBase.cpp
new file mode 100644
index 0000000..7b95b30
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/queryParser/QueryParserBase.cpp
@@ -0,0 +1,369 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+*
+* Changes are Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "QueryParserBase.h"
+
+#include "CLucene/search/TermQuery.h"
+#include "CLucene/search/PhraseQuery.h"
+#include "CLucene/search/RangeQuery.h"
+#include "CLucene/search/FuzzyQuery.h"
+#include "CLucene/search/WildcardQuery.h"
+#include "CLucene/search/PrefixQuery.h"
+
+
+CL_NS_USE(search)
+CL_NS_USE(util)
+CL_NS_USE(analysis)
+CL_NS_USE(index)
+
+CL_NS_DEF(queryParser)
+
+QueryParserBase::QueryParserBase(Analyzer* analyzer){
+//Func - Constructor
+//Pre - true
+//Post - instance has been created with PhraseSlop = 0
+ this->analyzer = analyzer;
+ this->defaultOperator = OR_OPERATOR;
+ this->phraseSlop = 0;
+ this->lowercaseExpandedTerms = true;
+}
+
+QueryParserBase::~QueryParserBase(){
+//Func - Destructor
+//Pre - true
+//Post - The instance has been destroyed
+}
+
+
+void QueryParserBase::discardEscapeChar(TCHAR* source) const{
+ int len = _tcslen(source);
+ int j = 0;
+ for (int i = 0; i < len; i++) {
+ if (source[i] == '\\' && source[i+1] != '\0' ) {
+ _tcscpy(source+i,source+i+1);
+ len--;
+ }
+ }
+}
+
+void QueryParserBase::AddClause(CL_NS_STD(vector)<BooleanClause*>& clauses, int32_t conj, int32_t mods, Query* q){
+//Func - Adds the next parsed clause.
+//Pre -
+//Post -
+
+ bool required, prohibited;
+
+ // If this term is introduced by AND, make the preceding term required,
+ // unless it's already prohibited.
+ const uint32_t nPreviousClauses = clauses.size();
+ if (nPreviousClauses > 0 && conj == CONJ_AND) {
+ BooleanClause* c = clauses[nPreviousClauses-1];
+ if (!c->prohibited)
+ c->required = true;
+ }
+
+ if (nPreviousClauses > 0 && defaultOperator == AND_OPERATOR && conj == CONJ_OR) {
+ // If this term is introduced by OR, make the preceding term optional,
+ // unless it's prohibited (that means we leave -a OR b but +a OR b-->a OR b)
+ // notice if the input is a OR b, first term is parsed as required; without
+ // this modification a OR b would parse as +a OR b
+ BooleanClause* c = clauses[nPreviousClauses-1];
+ if (!c->prohibited){
+ c->required = false;
+ c->prohibited = false;
+ }
+ }
+
+ // We might have been passed a NULL query; the term might have been
+ // filtered away by the analyzer.
+ if (q == NULL)
+ return;
+
+ if (defaultOperator == OR_OPERATOR) {
+ // We set REQUIRED if we're introduced by AND or +; PROHIBITED if
+ // introduced by NOT or -; make sure not to set both.
+ prohibited = (mods == MOD_NOT);
+ required = (mods == MOD_REQ);
+ if (conj == CONJ_AND && !prohibited) {
+ required = true;
+ }
+ } else {
+ // We set PROHIBITED if we're introduced by NOT or -; We set REQUIRED
+ // if not PROHIBITED and not introduced by OR
+ prohibited = (mods == MOD_NOT);
+ required = (!prohibited && conj != CONJ_OR);
+ }
+
+ if ( required && prohibited )
+ throwParserException( _T("Clause cannot be both required and prohibited"), ' ',0,0);
+ clauses.push_back(_CLNEW BooleanClause(q,true, required, prohibited));
+}
+
+void QueryParserBase::throwParserException(const TCHAR* message, TCHAR ch, int32_t col, int32_t line )
+{
+ TCHAR msg[1024];
+ _sntprintf(msg,1024,message,ch,col,line);
+ _CLTHROWT (CL_ERR_Parse, msg );
+}
+
+
+Query* QueryParserBase::GetFieldQuery(const TCHAR* field, TCHAR* queryText, int32_t slop){
+ Query* ret = GetFieldQuery(field,queryText);
+ if ( ret && ret->getQueryName() == PhraseQuery::getClassName() )
+ ((PhraseQuery*)ret)->setSlop(slop);
+
+ return ret;
+}
+
+Query* QueryParserBase::GetFieldQuery(const TCHAR* field, TCHAR* queryText){
+//Func - Returns a query for the specified field.
+// Use the analyzer to get all the tokens, and then build a TermQuery,
+// PhraseQuery, or nothing based on the term count
+//Pre - field != NULL
+// analyzer contains a valid reference to an Analyzer
+// queryText != NULL and contains the query
+//Post - A query instance has been returned for the specified field
+
+ CND_PRECONDITION(field != NULL, "field is NULL");
+ CND_PRECONDITION(queryText != NULL, "queryText is NULL");
+
+ //Instantiate a stringReader for queryText
+ StringReader reader(queryText);
+ TokenStream* source = analyzer->tokenStream(field, &reader);
+ CND_CONDITION(source != NULL,"source is NULL");
+
+ StringArrayConstWithDeletor v;
+
+ Token t;
+ int positionCount = 0;
+ bool severalTokensAtSamePosition = false;
+
+ //Get the tokens from the source
+ try{
+ while (source->next(&t)){
+ v.push_back(STRDUP_TtoT(t.termText()));
+
+ if (t.getPositionIncrement() != 0)
+ positionCount += t.getPositionIncrement();
+ else
+ severalTokensAtSamePosition = true;
+ }
+ }catch(CLuceneError& err){
+ if ( err.number() != CL_ERR_IO )
+ throw err;
+ }
+ _CLDELETE(source);
+
+ //Check if there are any tokens retrieved
+ if (v.size() == 0){
+ return NULL;
+ }else{
+ if (v.size() == 1){
+ Term* t = _CLNEW Term(field, v[0]);
+ Query* ret = _CLNEW TermQuery( t );
+ _CLDECDELETE(t);
+ return ret;
+ }else{
+ if (severalTokensAtSamePosition) {
+ if (positionCount == 1) {
+ // no phrase query:
+ BooleanQuery* q = _CLNEW BooleanQuery; //todo: disableCoord=true here, but not implemented in BooleanQuery
+ StringArrayConst::iterator itr = v.begin();
+ while ( itr != v.end() ){
+ Term* t = _CLNEW Term(field, *itr);
+ q->add(_CLNEW TermQuery(t),true, false,false);//should occur...
+ _CLDECDELETE(t);
+ ++itr;
+ }
+ return q;
+ }else {
+ _CLTHROWA(CL_ERR_UnsupportedOperation, "MultiPhraseQuery NOT Implemented");
+ }
+ }else{
+ PhraseQuery* q = _CLNEW PhraseQuery;
+ q->setSlop(phraseSlop);
+
+ StringArrayConst::iterator itr = v.begin();
+ while ( itr != v.end() ){
+ const TCHAR* data = *itr;
+ Term* t = _CLNEW Term(field, data);
+ q->add(t);
+ _CLDECDELETE(t);
+ ++itr;
+ }
+ return q;
+ }
+ }
+ }
+}
+
+void QueryParserBase::setLowercaseExpandedTerms(bool lowercaseExpandedTerms){
+ this->lowercaseExpandedTerms = lowercaseExpandedTerms;
+}
+bool QueryParserBase::getLowercaseExpandedTerms() const {
+ return lowercaseExpandedTerms;
+}
+void QueryParserBase::setDefaultOperator(int oper){
+ this->defaultOperator=oper;
+}
+int QueryParserBase::getDefaultOperator() const{
+ return defaultOperator;
+}
+
+
+Query* QueryParserBase::ParseRangeQuery(const TCHAR* field, TCHAR* queryText, bool inclusive)
+{
+ //todo: this must be fixed, [-1--5] (-1 to -5) should yield a result, but won't parse properly
+ //because it uses an analyser, should split it up differently...
+
+ // Use the analyzer to get all the tokens. There should be 1 or 2.
+ StringReader reader(queryText);
+ TokenStream* source = analyzer->tokenStream(field, &reader);
+
+ TCHAR* terms[2];
+ terms[0]=NULL;terms[1]=NULL;
+ Token t;
+ bool tret=true;
+ bool from=true;
+ while(tret)
+ {
+ try{
+ tret = source->next(&t);
+ }catch (CLuceneError& err){
+ if ( err.number() == CL_ERR_IO )
+ tret=false;
+ else
+ throw err;
+ }
+ if (tret)
+ {
+ if ( !from && _tcscmp(t.termText(),_T("TO"))==0 )
+ continue;
+
+
+ TCHAR* tmp = STRDUP_TtoT(t.termText());
+ discardEscapeChar(tmp);
+ terms[from? 0 : 1] = tmp;
+
+ if (from)
+ from = false;
+ else
+ break;
+ }
+ }
+ Query* ret = GetRangeQuery(field, terms[0], terms[1],inclusive);
+ _CLDELETE_CARRAY(terms[0]);
+ _CLDELETE_CARRAY(terms[1]);
+ _CLDELETE(source);
+
+ return ret;
+}
+
+Query* QueryParserBase::GetPrefixQuery(const TCHAR* field, TCHAR* termStr){
+//Pre - field != NULL and field contains the name of the field that the query will use
+// termStr != NULL and is the token to use for building term for the query
+// (WITH or WITHOUT a trailing '*' character!)
+//Post - A PrefixQuery instance has been returned
+
+ CND_PRECONDITION(field != NULL,"field is NULL");
+ CND_PRECONDITION(termStr != NULL,"termStr is NULL");
+
+ if ( lowercaseExpandedTerms )
+ _tcslwr(termStr);
+
+ Term* t = _CLNEW Term(field, termStr);
+ CND_CONDITION(t != NULL,"Could not allocate memory for term t");
+
+ Query *q = _CLNEW PrefixQuery(t);
+ CND_CONDITION(q != NULL,"Could not allocate memory for PrefixQuery q");
+
+ _CLDECDELETE(t);
+ return q;
+}
+
+Query* QueryParserBase::GetFuzzyQuery(const TCHAR* field, TCHAR* termStr){
+//Func - Factory method for generating a query (similar to getPrefixQuery}). Called when parser parses
+// an input term token that has the fuzzy suffix (~) appended.
+//Pre - field != NULL and field contains the name of the field that the query will use
+// termStr != NULL and is the token to use for building term for the query
+// (WITH or WITHOUT a trailing '*' character!)
+//Post - A FuzzyQuery instance has been returned
+
+ CND_PRECONDITION(field != NULL,"field is NULL");
+ CND_PRECONDITION(termStr != NULL,"termStr is NULL");
+
+ if ( lowercaseExpandedTerms )
+ _tcslwr(termStr);
+
+ Term* t = _CLNEW Term(field, termStr);
+ CND_CONDITION(t != NULL,"Could not allocate memory for term t");
+
+ Query *q = _CLNEW FuzzyQuery(t);
+ CND_CONDITION(q != NULL,"Could not allocate memory for FuzzyQuery q");
+
+ _CLDECDELETE(t);
+ return q;
+}
+
+
+Query* QueryParserBase::GetWildcardQuery(const TCHAR* field, TCHAR* termStr){
+ CND_PRECONDITION(field != NULL,"field is NULL");
+ CND_PRECONDITION(termStr != NULL,"termStr is NULL");
+
+ if ( lowercaseExpandedTerms )
+ _tcslwr(termStr);
+
+ Term* t = _CLNEW Term(field, termStr);
+ CND_CONDITION(t != NULL,"Could not allocate memory for term t");
+ Query* q = _CLNEW WildcardQuery(t);
+ _CLDECDELETE(t);
+
+ return q;
+}
+
+Query* QueryParserBase::GetBooleanQuery(CL_NS_STD(vector)<CL_NS(search)::BooleanClause*>& clauses){
+ if ( clauses.size() == 0 )
+ return NULL;
+
+ BooleanQuery* query = _CLNEW BooleanQuery();
+ //Condition check to see if query has been allocated properly
+ CND_CONDITION(query != NULL, "No memory could be allocated for query");
+
+ //iterate through all the clauses
+ for( uint32_t i=0;i<clauses.size();i++ ){
+ //Condition check to see if clauses[i] is valdid
+ CND_CONDITION(clauses[i] != NULL, "clauses[i] is NULL");
+ //Add it to query
+ query->add(clauses[i]);
+ }
+ return query;
+}
+
+
+CL_NS(search)::Query* QueryParserBase::GetRangeQuery(const TCHAR* field, TCHAR* part1, TCHAR* part2, bool inclusive){
+ //todo: does jlucene handle rangequeries differntly? if we are using
+ //a certain type of analyser, the terms may be filtered out, which
+ //is not necessarily what we want.
+ if (lowercaseExpandedTerms) {
+ _tcslwr(part1);
+ _tcslwr(part2);
+ }
+ //todo: should see if we can parse the strings as dates... currently we leave that up to the end-developer...
+ Term* t1 = _CLNEW Term(field,part1);
+ Term* t2 = _CLNEW Term(field,part2);
+ Query* ret = _CLNEW RangeQuery(t1, t2, inclusive);
+ _CLDECDELETE(t1);
+ _CLDECDELETE(t2);
+
+ return ret;
+}
+
+
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/queryParser/QueryParserBase.h b/src/3rdparty/clucene/src/CLucene/queryParser/QueryParserBase.h
new file mode 100644
index 0000000..261e587
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/queryParser/QueryParserBase.h
@@ -0,0 +1,204 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_queryParser_QueryParserBase_
+#define _lucene_queryParser_QueryParserBase_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "CLucene/util/VoidList.h"
+#include "CLucene/search/BooleanClause.h"
+#include "CLucene/analysis/Analyzers.h"
+#include "QueryToken.h"
+
+CL_NS_DEF(queryParser)
+
+ /**
+ * Contains default implementations used by QueryParser.
+ * You can override any of these to provide a customised QueryParser.
+ */
+ class QueryParserBase:LUCENE_BASE
+ {
+ protected:
+ /* The actual operator the parser uses to combine query terms */
+ int defaultOperator;
+ int32_t phraseSlop;
+
+ bool lowercaseExpandedTerms;
+
+ LUCENE_STATIC_CONSTANT(int, CONJ_NONE=0);
+ LUCENE_STATIC_CONSTANT(int, CONJ_AND=1);
+ LUCENE_STATIC_CONSTANT(int, CONJ_OR=2);
+
+ LUCENE_STATIC_CONSTANT(int, MOD_NONE=0);
+ LUCENE_STATIC_CONSTANT(int, MOD_NOT=10);
+ LUCENE_STATIC_CONSTANT(int, MOD_REQ=11);
+
+ CL_NS(analysis)::Analyzer* analyzer;
+
+ public:
+ QueryParserBase(CL_NS(analysis)::Analyzer* analyzer);
+ ~QueryParserBase();
+
+ /**
+ * Whether terms of wildcard, prefix, fuzzy and range queries are to be automatically
+ * lower-cased or not. Default is <code>true</code>.
+ */
+ void setLowercaseExpandedTerms(bool lowercaseExpandedTerms);
+
+ /**
+ * @see #setLowercaseExpandedTerms(boolean)
+ */
+ bool getLowercaseExpandedTerms() const;
+
+ //values used for setOperator
+ LUCENE_STATIC_CONSTANT(int, OR_OPERATOR=0);
+ LUCENE_STATIC_CONSTANT(int, AND_OPERATOR=1);
+
+ /**
+ * Sets the boolean operator of the QueryParser.
+ * In default mode (<code>OR_OPERATOR</code>) terms without any modifiers
+ * are considered optional: for example <code>capital of Hungary</code> is equal to
+ * <code>capital OR of OR Hungary</code>.<br/>
+ * In <code>AND_OPERATOR</code> mode terms are considered to be in conjuction: the
+ * above mentioned query is parsed as <code>capital AND of AND Hungary</code>
+ */
+ void setDefaultOperator(int oper);
+ /**
+ * Gets implicit operator setting, which will be either AND_OPERATOR
+ * or OR_OPERATOR.
+ */
+ int getDefaultOperator() const;
+
+ //public so that the lexer can call this
+ virtual void throwParserException(const TCHAR* message, TCHAR ch, int32_t col, int32_t line );
+
+ /**
+ * Sets the default slop for phrases. If zero, then exact phrase matches
+ * are required. Default value is zero.
+ */
+ void setPhraseSlop(int phraseSlop) { this->phraseSlop = phraseSlop; }
+
+ /**
+ * Gets the default slop for phrases.
+ */
+ int getPhraseSlop() { return phraseSlop; }
+
+ protected:
+
+ /**
+ * Removes the escaped characters
+ */
+ void discardEscapeChar(TCHAR* token) const;
+
+ //Analyzes the expanded term termStr with the StandardFilter and the LowerCaseFilter.
+ TCHAR* AnalyzeExpandedTerm(const TCHAR* field, TCHAR* termStr);
+
+ // Adds the next parsed clause.
+ virtual void AddClause(std::vector<CL_NS(search)::BooleanClause*>& clauses, int32_t conj, int32_t mods, CL_NS(search)::Query* q);
+
+ /**
+ * Returns a termquery, phrasequery for the specified field.
+ * Note: this is only a partial implementation, since MultiPhraseQuery is not implemented yet
+ * return NULL to disallow
+ */
+ virtual CL_NS(search)::Query* GetFieldQuery(const TCHAR* field, TCHAR* queryText);
+
+ /**
+ * Delegates to GetFieldQuery(string, string), and adds slop onto phrasequery.
+ * Can be used to remove slop functionality
+ */
+ virtual CL_NS(search)::Query* GetFieldQuery(const TCHAR* field, TCHAR* queryText, int32_t slop);
+
+ /**
+ * Factory method for generating a query (similar to
+ * {@link #GetWildcardQuery}). Called when parser parses an input term
+ * token that uses prefix notation; that is, contains a single '*' wildcard
+ * character as its last character. Since this is a special case
+ * of generic wildcard term, and such a query can be optimized easily,
+ * this usually results in a different query object.
+ *<p>
+ * Depending on settings, a prefix term may be lower-cased
+ * automatically. It will not go through the default Analyzer,
+ * however, since normal Analyzers are unlikely to work properly
+ * with wildcard templates.
+ *<p>
+ * Can be overridden by extending classes, to provide custom handling for
+ * wild card queries, which may be necessary due to missing analyzer calls.
+ *
+ * @param field Name of the field query will use.
+ * @param termStr Term token to use for building term for the query
+ * (<b>without</b> trailing '*' character!)
+ *
+ * @return Resulting {@link Query} built for the term
+ * return NULL to disallow
+ */
+ virtual CL_NS(search)::Query* GetPrefixQuery(const TCHAR* field, TCHAR* termStr);
+
+ /**
+ * Factory method for generating a query. Called when parser
+ * parses an input term token that contains one or more wildcard
+ * characters (? and *), but is not a prefix term token (one
+ * that has just a single * character at the end)
+ *<p>
+ * Depending on settings, prefix term may be lower-cased
+ * automatically. It will not go through the default Analyzer,
+ * however, since normal Analyzers are unlikely to work properly
+ * with wildcard templates.
+ *<p>
+ * Can be overridden by extending classes, to provide custom handling for
+ * wildcard queries, which may be necessary due to missing analyzer calls.
+ *
+ * @param field Name of the field query will use.
+ * @param termStr Term token that contains one or more wild card
+ * characters (? or *), but is not simple prefix term
+ *
+ * @return Resulting {@link Query} built for the term
+ * return NULL to disallow
+ */
+ virtual CL_NS(search)::Query* GetWildcardQuery(const TCHAR* field, TCHAR* termStr);
+
+ /**
+ * Factory method for generating a query (similar to
+ * {@link #GetWildcardQuery}). Called when parser parses
+ * an input term token that has the fuzzy suffix (~) appended.
+ *
+ * @param field Name of the field query will use.
+ * @param termStr Term token to use for building term for the query
+ *
+ * @return Resulting {@link Query} built for the term
+ * return NULL to disallow
+ */
+ virtual CL_NS(search)::Query* GetFuzzyQuery(const TCHAR* field, TCHAR* termStr);
+
+ /**
+ * Factory method for generating query, given a set of clauses.
+ * By default creates a boolean query composed of clauses passed in.
+ *
+ * Can be overridden by extending classes, to modify query being
+ * returned.
+ *
+ * @param clauses Vector that contains {@link BooleanClause} instances
+ * to join.
+ *
+ * @return Resulting {@link Query} object.
+ * return NULL to disallow
+ *
+ * Memory: clauses must all be cleaned up by this function.
+ */
+ virtual CL_NS(search)::Query* GetBooleanQuery(std::vector<CL_NS(search)::BooleanClause*>& clauses);
+
+ /**
+ * return NULL to disallow
+ */
+ virtual CL_NS(search)::Query* GetRangeQuery(const TCHAR* field, TCHAR* part1, TCHAR* part2, bool inclusive);
+ virtual CL_NS(search)::Query* ParseRangeQuery(const TCHAR* field, TCHAR* str, bool inclusive);
+
+ };
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/queryParser/QueryToken.cpp b/src/3rdparty/clucene/src/CLucene/queryParser/QueryToken.cpp
new file mode 100644
index 0000000..ee88a3c
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/queryParser/QueryToken.cpp
@@ -0,0 +1,73 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "QueryToken.h"
+
+CL_NS_DEF(queryParser)
+
+
+QueryToken::QueryToken():
+ Value(NULL)
+{
+ set(UNKNOWN_);
+}
+QueryToken::QueryToken(TCHAR* value, const int32_t start, const int32_t end, const QueryToken::Types type):
+ Value(NULL)
+{
+ set(value,start,end,type);
+}
+
+QueryToken::~QueryToken(){
+//Func - Destructor
+//Pre - true
+//Post - Instance has been destroyed
+
+ #ifndef LUCENE_TOKEN_WORD_LENGTH
+ _CLDELETE_CARRAY( Value );
+ #endif
+}
+
+// Initializes a new instance of the Token class LUCENE_EXPORT.
+//
+QueryToken::QueryToken(TCHAR* value, const QueryToken::Types type):
+ Value(NULL)
+{
+ set(value,type);
+}
+
+// Initializes a new instance of the Token class LUCENE_EXPORT.
+//
+QueryToken::QueryToken(QueryToken::Types type):
+ Value(NULL)
+{
+ set(type);
+}
+
+
+void QueryToken::set(TCHAR* value, const Types type){
+ set(value,0,-1,type);
+}
+void QueryToken::set(TCHAR* value, const int32_t start, const int32_t end, const Types type){
+ #ifndef LUCENE_TOKEN_WORD_LENGTH
+ _CLDELETE_CARRAY(Value);
+ Value = STRDUP_TtoT(value);
+ #else
+ _tcsncpy(Value,value,LUCENE_TOKEN_WORD_LENGTH);
+ Value[LUCENE_TOKEN_WORD_LENGTH];
+ #endif
+ this->Start = start;
+ this->End = end;
+ this->Type = type;
+
+ if ( this->End < 0 )
+ this->End = _tcslen(Value);
+}
+void QueryToken::set(Types type){
+ set(LUCENE_BLANK_STRING,0,0,type);
+}
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/queryParser/QueryToken.h b/src/3rdparty/clucene/src/CLucene/queryParser/QueryToken.h
new file mode 100644
index 0000000..739a667
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/queryParser/QueryToken.h
@@ -0,0 +1,76 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_queryParser_QueryToken_
+#define _lucene_queryParser_QueryToken_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "QueryParserBase.h"
+
+CL_NS_DEF(queryParser)
+
+ // Token class that used by QueryParser.
+ class QueryToken:LUCENE_BASE
+ {
+ public:
+ enum Types
+ {
+ AND_,
+ OR,
+ NOT,
+ PLUS,
+ MINUS,
+ LPAREN,
+ RPAREN,
+ COLON,
+ CARAT,
+ QUOTED,
+ TERM,
+ SLOP,
+ FUZZY,
+ PREFIXTERM,
+ WILDTERM,
+ RANGEIN,
+ RANGEEX,
+ NUMBER,
+ EOF_,
+ UNKNOWN_
+ };
+
+
+ #ifdef LUCENE_TOKEN_WORD_LENGTH
+ TCHAR Value[LUCENE_TOKEN_WORD_LENGTH+1];
+ #else
+ TCHAR* Value;
+ #endif
+
+ int32_t Start;
+ int32_t End;
+ QueryToken::Types Type;
+
+ // Initializes a new instance of the Token class.
+ QueryToken(TCHAR* value, const int32_t start, const int32_t end, const Types type);
+
+ // Initializes a new instance of the Token class.
+ QueryToken(TCHAR* value, const Types type);
+
+ // Initializes a new instance of the Token class.
+ QueryToken(Types type);
+
+ // Initializes an empty instance of the Token class.
+ QueryToken();
+
+ ~QueryToken();
+
+ void set(TCHAR* value, const int32_t start, const int32_t end, const Types type);
+ void set(TCHAR* value, const Types type);
+ void set(Types type);
+ };
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/queryParser/TokenList.cpp b/src/3rdparty/clucene/src/CLucene/queryParser/TokenList.cpp
new file mode 100644
index 0000000..7d30b93
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/queryParser/TokenList.cpp
@@ -0,0 +1,79 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "TokenList.h"
+
+#include "CLucene/util/VoidMap.h"
+#include "CLucene/util/VoidList.h"
+#include "QueryToken.h"
+
+CL_NS_DEF(queryParser)
+
+ TokenList::TokenList(){
+ //Func - Constructor
+ //Pre - true
+ //Post - Instance has been created
+ }
+
+ TokenList::~TokenList(){
+ //Func - Destructor
+ //Pre - true
+ //Post - The tokenlist has been destroyed
+
+ tokens.clear();
+ }
+
+ void TokenList::add(QueryToken* token){
+ //Func - Adds a QueryToken token to the TokenList
+ //Pre - token != NULL
+ //Post - token has been added to the token list
+
+ CND_PRECONDITION(token != NULL, "token != NULL");
+
+ tokens.insert(tokens.begin(),token);
+ }
+
+ void TokenList::push(QueryToken* token){
+ //Func -
+ //Pre - token != NULL
+ //Post -
+
+ CND_PRECONDITION(token != NULL, "token is NULL");
+
+ tokens.push_back(token);
+ }
+
+ QueryToken* TokenList::peek() {
+ /* DSR:2004.11.01: Reverted my previous (circa April 2004) fix (which
+ ** raised an exception if Peek was called when there were no tokens) in
+ ** favor of returning the EOF token. This solution is much better
+ ** integrated with the rest of the code in the queryParser subsystem. */
+ size_t nTokens = tokens.size();
+ if (nTokens == 0) {
+ push(_CLNEW QueryToken(QueryToken::EOF_));
+ nTokens++;
+ }
+ return tokens[nTokens-1];
+ }
+
+ QueryToken* TokenList::extract(){
+ //Func - Extract token from the TokenList
+ //Pre - true
+ //Post - Retracted token has been returned
+
+ QueryToken* token = peek();
+ //Retract the current peeked token
+ tokens.delete_back();
+
+ return token;
+ }
+
+ int32_t TokenList::count() const
+ {
+ return tokens.size();
+ }
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/queryParser/TokenList.h b/src/3rdparty/clucene/src/CLucene/queryParser/TokenList.h
new file mode 100644
index 0000000..3166bba
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/queryParser/TokenList.h
@@ -0,0 +1,38 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_queryParser_TokenList_
+#define _lucene_queryParser_TokenList_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "CLucene/util/VoidList.h"
+#include "QueryToken.h"
+CL_NS_DEF(queryParser)
+
+ // Represents a list of the tokens.
+ class TokenList:LUCENE_BASE
+ {
+ private:
+ CL_NS(util)::CLVector<QueryToken*> tokens; //todo:,CL_NS(util)::Deletor::Object<QueryToken>
+ public:
+ TokenList();
+ ~TokenList();
+
+ void add(QueryToken* token);
+
+ void push(QueryToken* token);
+
+ QueryToken* peek();
+
+ QueryToken* extract();
+
+ int32_t count() const;
+ };
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/search/BooleanClause.h b/src/3rdparty/clucene/src/CLucene/search/BooleanClause.h
new file mode 100644
index 0000000..b89cb31
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/BooleanClause.h
@@ -0,0 +1,90 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_search_BooleanClause_
+#define _lucene_search_BooleanClause_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+#include "SearchHeader.h"
+
+CL_NS_DEF(search)
+ // A clause in a BooleanQuery.
+ class BooleanClause:LUCENE_BASE {
+ public:
+ class Compare:public CL_NS_STD(binary_function)<const BooleanClause*,const BooleanClause*,bool>
+ {
+ public:
+ bool operator()( const BooleanClause* val1, const BooleanClause* val2 ) const{
+ return val1->equals(val2);
+ }
+ };
+
+ // The query whose matching documents are combined by the boolean query.
+ Query* query;
+
+ int32_t getClauseCount();
+
+ // If true, documents documents which <i>do not</i>
+ // match this sub-query will <i>not</i> match the boolean query.
+ bool required;
+
+ // If true, documents documents which <i>do</i>
+ // match this sub-query will <i>not</i> match the boolean query.
+ bool prohibited;
+
+ bool deleteQuery;
+
+ // Constructs a BooleanClause with query <code>q</code>, required
+ // <code>r</code> and prohibited <code>p</code>.
+ BooleanClause(Query* q, const bool DeleteQuery,const bool req, const bool p):
+ query(q),
+ required(req),
+ prohibited(p),
+ deleteQuery(DeleteQuery)
+ {
+ }
+
+ BooleanClause(const BooleanClause& clone):
+#if defined(LUCENE_ENABLE_MEMLEAKTRACKING)
+#elif defined(LUCENE_ENABLE_REFCOUNT)
+#else
+ LuceneVoidBase(),
+#endif
+ query(clone.query->clone()),
+ required(clone.required),
+ prohibited(clone.prohibited),
+ deleteQuery(true)
+ {
+ }
+
+ BooleanClause* clone() const{
+ BooleanClause* ret = _CLNEW BooleanClause(*this);
+ return ret;
+ }
+
+ ~BooleanClause(){
+ if ( deleteQuery )
+ _CLDELETE( query );
+ }
+
+ /** Returns true iff <code>o</code> is equal to this. */
+ bool equals(const BooleanClause* other) const {
+ return this->query->equals(other->query)
+ && (this->required == other->required)
+ && (this->prohibited == other->prohibited);
+ }
+
+ size_t hashCode() const{
+ return query->hashCode() ^ (this->required?1:0) ^ (this->prohibited?2:0);
+ }
+ };
+
+
+CL_NS_END
+#endif
+
diff --git a/src/3rdparty/clucene/src/CLucene/search/BooleanQuery.cpp b/src/3rdparty/clucene/src/CLucene/search/BooleanQuery.cpp
new file mode 100644
index 0000000..3fd36d8
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/BooleanQuery.cpp
@@ -0,0 +1,363 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "BooleanQuery.h"
+
+#include "BooleanClause.h"
+#include "CLucene/index/IndexReader.h"
+#include "CLucene/util/StringBuffer.h"
+#include "CLucene/util/Arrays.h"
+#include "SearchHeader.h"
+#include "BooleanScorer.h"
+#include "Scorer.h"
+
+CL_NS_USE(index)
+CL_NS_USE(util)
+CL_NS_DEF(search)
+
+ BooleanQuery::BooleanQuery():
+ clauses(true)
+ {
+ }
+
+ BooleanQuery::BooleanQuery(const BooleanQuery& clone):
+ Query(clone)
+ {
+ for ( uint32_t i=0;i<clone.clauses.size();i++ ){
+ BooleanClause* clause = clone.clauses[i]->clone();
+ clause->deleteQuery=true;
+ add(clause);
+ }
+ }
+
+ BooleanQuery::~BooleanQuery(){
+ clauses.clear();
+ }
+
+ size_t BooleanQuery::hashCode() const {
+ //todo: do cachedHashCode, and invalidate on add/remove clause
+ size_t ret = 0;
+ for (uint32_t i = 0 ; i < clauses.size(); i++) {
+ BooleanClause* c = clauses[i];
+ ret = 31 * ret + c->hashCode();
+ }
+ ret = ret ^ Similarity::floatToByte(getBoost());
+ return ret;
+ }
+
+ const TCHAR* BooleanQuery::getQueryName() const{
+ return getClassName();
+ }
+ const TCHAR* BooleanQuery::getClassName(){
+ return _T("BooleanQuery");
+ }
+
+ /**
+ * Default value is 1024. Use <code>org.apache.lucene.maxClauseCount</code>
+ * system property to override.
+ */
+ size_t BooleanQuery::maxClauseCount = LUCENE_BOOLEANQUERY_MAXCLAUSECOUNT;
+ size_t BooleanQuery::getMaxClauseCount(){
+ return maxClauseCount;
+ }
+
+ void BooleanQuery::setMaxClauseCount(size_t maxClauseCount){
+ BooleanQuery::maxClauseCount = maxClauseCount;
+ }
+
+ void BooleanQuery::add(Query* query, const bool deleteQuery, const bool required, const bool prohibited) {
+ BooleanClause* bc = _CLNEW BooleanClause(query,deleteQuery,required, prohibited);
+ try{
+ add(bc);
+ }catch(...){
+ _CLDELETE(bc);
+ throw;
+ }
+ }
+
+ void BooleanQuery::add(BooleanClause* clause) {
+ if (clauses.size() >= getMaxClauseCount())
+ _CLTHROWA(CL_ERR_TooManyClauses,"Too Many Clauses");
+
+ clauses.push_back(clause);
+ }
+
+
+ size_t BooleanQuery::getClauseCount() const {
+ return (int32_t) clauses.size();
+ }
+
+ TCHAR* BooleanQuery::toString(const TCHAR* field) const{
+ StringBuffer buffer;
+ if (getBoost() != 1.0) {
+ buffer.append(_T("("));
+ }
+
+ for (uint32_t i = 0 ; i < clauses.size(); i++) {
+ BooleanClause* c = clauses[i];
+ if (c->prohibited)
+ buffer.append(_T("-"));
+ else if (c->required)
+ buffer.append(_T("+"));
+
+ if ( c->query->instanceOf(BooleanQuery::getClassName()) ) { // wrap sub-bools in parens
+ buffer.append(_T("("));
+
+ TCHAR* buf = c->query->toString(field);
+ buffer.append(buf);
+ _CLDELETE_CARRAY( buf );
+
+ buffer.append(_T(")"));
+ } else {
+ TCHAR* buf = c->query->toString(field);
+ buffer.append(buf);
+ _CLDELETE_CARRAY( buf );
+ }
+ if (i != clauses.size()-1)
+ buffer.append(_T(" "));
+
+ if (getBoost() != 1.0) {
+ buffer.append(_T(")^"));
+ buffer.appendFloat(getBoost(),1);
+ }
+ }
+ return buffer.toString();
+ }
+
+
+
+
+ BooleanClause** BooleanQuery::getClauses() const
+ {
+ CND_MESSAGE(false, "Warning: BooleanQuery::getClauses() is deprecated")
+ BooleanClause** ret = _CL_NEWARRAY(BooleanClause*, clauses.size()+1);
+ getClauses(ret);
+ return ret;
+ }
+
+ void BooleanQuery::getClauses(BooleanClause** ret) const
+ {
+ size_t size=clauses.size();
+ for ( uint32_t i=0;i<size;i++ )
+ ret[i] = clauses[i];
+ }
+ Query* BooleanQuery::rewrite(IndexReader* reader) {
+ if (clauses.size() == 1) { // optimize 1-clause queries
+ BooleanClause* c = clauses[0];
+ if (!c->prohibited) { // just return clause
+ Query* query = c->query->rewrite(reader); // rewrite first
+
+ //if the query doesn't actually get re-written,
+ //then return a clone (because the BooleanQuery
+ //will register different to the returned query.
+ if ( query == c->query )
+ query = query->clone();
+
+ if (getBoost() != 1.0f) { // incorporate boost
+ query->setBoost(getBoost() * query->getBoost());
+ }
+
+ return query;
+ }
+ }
+
+ BooleanQuery* clone = NULL; // recursively rewrite
+ for (uint32_t i = 0 ; i < clauses.size(); i++) {
+ BooleanClause* c = clauses[i];
+ Query* query = c->query->rewrite(reader);
+ if (query != c->query) { // clause rewrote: must clone
+ if (clone == NULL)
+ clone = (BooleanQuery*)this->clone();
+ //todo: check if delete query should be on...
+ //in fact we should try and get rid of these
+ //for compatibility sake
+ clone->clauses.set (i, _CLNEW BooleanClause(query, true, c->required, c->prohibited));
+ }
+ }
+ if (clone != NULL) {
+ return clone; // some clauses rewrote
+ } else
+ return this; // no clauses rewrote
+ }
+
+
+ Query* BooleanQuery::clone() const{
+ BooleanQuery* clone = _CLNEW BooleanQuery(*this);
+ return clone;
+ }
+
+ /** Returns true iff <code>o</code> is equal to this. */
+ bool BooleanQuery::equals(Query* o)const {
+ if (!(o->instanceOf(BooleanQuery::getClassName())))
+ return false;
+ const BooleanQuery* other = (BooleanQuery*)o;
+
+ bool ret = (this->getBoost() == other->getBoost());
+ if ( ret ){
+ CLListEquals<BooleanClause,BooleanClause::Compare, const ClausesType, const ClausesType> comp;
+ ret = comp.equals(&this->clauses,&other->clauses);
+ }
+ return ret;
+ }
+
+ qreal BooleanQuery::BooleanWeight::getValue() { return parentQuery->getBoost(); }
+ Query* BooleanQuery::BooleanWeight::getQuery() { return (Query*)parentQuery; }
+
+
+
+
+
+ BooleanQuery::BooleanWeight::BooleanWeight(Searcher* searcher,
+ CLVector<BooleanClause*,Deletor::Object<BooleanClause> >* clauses, BooleanQuery* parentQuery)
+ {
+ this->searcher = searcher;
+ this->parentQuery = parentQuery;
+ this->clauses = clauses;
+ for (uint32_t i = 0 ; i < clauses->size(); i++) {
+ weights.push_back((*clauses)[i]->query->_createWeight(searcher));
+ }
+ }
+ BooleanQuery::BooleanWeight::~BooleanWeight(){
+ this->weights.clear();
+ }
+
+ qreal BooleanQuery::BooleanWeight::sumOfSquaredWeights() {
+ qreal sum = 0.0f;
+ for (uint32_t i = 0 ; i < weights.size(); i++) {
+ BooleanClause* c = (*clauses)[i];
+ Weight* w = weights[i];
+ if (!c->prohibited)
+ sum += w->sumOfSquaredWeights(); // sum sub weights
+ }
+ sum *= parentQuery->getBoost() * parentQuery->getBoost(); // boost each sub-weight
+ return sum ;
+ }
+
+ void BooleanQuery::BooleanWeight::normalize(qreal norm) {
+ norm *= parentQuery->getBoost(); // incorporate boost
+ for (uint32_t i = 0 ; i < weights.size(); i++) {
+ BooleanClause* c = (*clauses)[i];
+ Weight* w = weights[i];
+ if (!c->prohibited)
+ w->normalize(norm);
+ }
+ }
+
+ Scorer* BooleanQuery::BooleanWeight::scorer(IndexReader* reader){
+ // First see if the (faster) ConjunctionScorer will work. This can be
+ // used when all clauses are required. Also, at this point a
+ // BooleanScorer cannot be embedded in a ConjunctionScorer, as the hits
+ // from a BooleanScorer are not always sorted by document number (sigh)
+ // and hence BooleanScorer cannot implement skipTo() correctly, which is
+ // required by ConjunctionScorer.
+ bool allRequired = true;
+ bool noneBoolean = true;
+ { //msvc6 scope fix
+ for (uint32_t i = 0 ; i < weights.size(); i++) {
+ BooleanClause* c = (*clauses)[i];
+ if (!c->required)
+ allRequired = false;
+ if (c->query->instanceOf(BooleanQuery::getClassName()))
+ noneBoolean = false;
+ }
+ }
+
+ if (allRequired && noneBoolean) { // ConjunctionScorer is okay
+ ConjunctionScorer* result =
+ _CLNEW ConjunctionScorer(parentQuery->getSimilarity(searcher));
+ for (uint32_t i = 0 ; i < weights.size(); i++) {
+ Weight* w = weights[i];
+ Scorer* subScorer = w->scorer(reader);
+ if (subScorer == NULL)
+ return NULL;
+ result->add(subScorer);
+ }
+ return result;
+ }
+
+ // Use good-old BooleanScorer instead.
+ BooleanScorer* result = _CLNEW BooleanScorer(parentQuery->getSimilarity(searcher));
+
+ { //msvc6 scope fix
+ for (uint32_t i = 0 ; i < weights.size(); i++) {
+ BooleanClause* c = (*clauses)[i];
+ Weight* w = weights[i];
+ Scorer* subScorer = w->scorer(reader);
+ if (subScorer != NULL)
+ result->add(subScorer, c->required, c->prohibited);
+ else if (c->required)
+ return NULL;
+ }
+ }
+
+ return result;
+ }
+
+ void BooleanQuery::BooleanWeight::explain(IndexReader* reader, int32_t doc, Explanation* result){
+ int32_t coord = 0;
+ int32_t maxCoord = 0;
+ qreal sum = 0.0f;
+ Explanation* sumExpl = _CLNEW Explanation;
+ for (uint32_t i = 0 ; i < weights.size(); i++) {
+ BooleanClause* c = (*clauses)[i];
+ Weight* w = weights[i];
+ Explanation* e = _CLNEW Explanation;
+ w->explain(reader, doc, e);
+ if (!c->prohibited)
+ maxCoord++;
+ if (e->getValue() > 0) {
+ if (!c->prohibited) {
+ sumExpl->addDetail(e);
+ sum += e->getValue();
+ coord++;
+ e = NULL; //prevent e from being deleted
+ } else {
+ //we want to return something else...
+ _CLDELETE(sumExpl);
+ result->setValue(0.0f);
+ result->setDescription(_T("match prohibited"));
+ return;
+ }
+ } else if (c->required) {
+ _CLDELETE(sumExpl);
+ result->setValue(0.0f);
+ result->setDescription(_T("match prohibited"));
+ return;
+ }
+
+ _CLDELETE(e);
+ }
+ sumExpl->setValue(sum);
+
+ if (coord == 1){ // only one clause matched
+ Explanation* tmp = sumExpl;
+ sumExpl = sumExpl->getDetail(0)->clone(); // eliminate wrapper
+ _CLDELETE(tmp);
+ }
+
+ sumExpl->setDescription(_T("sum of:"));
+ qreal coordFactor = parentQuery->getSimilarity(searcher)->coord(coord, maxCoord);
+ if (coordFactor == 1.0f){ // coord is no-op
+ result->set(*sumExpl); // eliminate wrapper
+ _CLDELETE(sumExpl);
+ } else {
+ result->setDescription( _T("product of:"));
+ result->addDetail(sumExpl);
+
+ StringBuffer explbuf;
+ explbuf.append(_T("coord("));
+ explbuf.appendInt(coord);
+ explbuf.append(_T("/"));
+ explbuf.appendInt(maxCoord);
+ explbuf.append(_T(")"));
+ result->addDetail(_CLNEW Explanation(coordFactor, explbuf.getBuffer()));
+ result->setValue(sum*coordFactor);
+ }
+ }
+
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/search/BooleanQuery.h b/src/3rdparty/clucene/src/CLucene/search/BooleanQuery.h
new file mode 100644
index 0000000..27b67d1
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/BooleanQuery.h
@@ -0,0 +1,126 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_search_BooleanQuery_
+#define _lucene_search_BooleanQuery_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "ConjunctionScorer.h"
+#include "CLucene/index/IndexReader.h"
+#include "CLucene/util/StringBuffer.h"
+#include "SearchHeader.h"
+#include "BooleanClause.h"
+#include "BooleanScorer.h"
+#include "Scorer.h"
+
+CL_NS_DEF(search)
+
+
+ // A Query that matches documents matching boolean combinations of other
+ // queries, typically {@link TermQuery}s or {@link PhraseQuery}s.
+ class BooleanQuery:public Query {
+ public:
+ typedef CL_NS(util)::CLVector<BooleanClause*,CL_NS(util)::Deletor::Object<BooleanClause> > ClausesType;
+ private:
+ BooleanQuery::ClausesType clauses;
+ static size_t maxClauseCount;
+
+ class BooleanWeight: public Weight {
+ private:
+ Searcher* searcher;
+ CL_NS(util)::CLVector<Weight*,CL_NS(util)::Deletor::Object<Weight> > weights;
+ ClausesType* clauses;
+ BooleanQuery* parentQuery;
+ public:
+ BooleanWeight(Searcher* searcher,
+ CL_NS(util)::CLVector<BooleanClause*,CL_NS(util)::Deletor::Object<BooleanClause> >* clauses,
+ BooleanQuery* parentQuery);
+ ~BooleanWeight();
+ Query* getQuery();
+ qreal getValue();
+ qreal sumOfSquaredWeights();
+ void normalize(qreal norm);
+ Scorer* scorer(CL_NS(index)::IndexReader* reader);
+ void explain(CL_NS(index)::IndexReader* reader, int32_t doc, Explanation* ret);
+ };//booleanweight
+
+ protected:
+ Weight* _createWeight(Searcher* searcher) {
+ return _CLNEW BooleanWeight(searcher,&clauses,this);
+ }
+ BooleanQuery(const BooleanQuery& clone);
+ public:
+ /** Constructs an empty boolean query. */
+ BooleanQuery();
+
+ ~BooleanQuery();
+
+ const TCHAR* getQueryName() const;
+ static const TCHAR* getClassName();
+
+ /** Return the maximum number of clauses permitted, 1024 by default.
+ * Attempts to add more than the permitted number of clauses cause {@link
+ * TooManyClauses} to be thrown.*/
+ static size_t getMaxClauseCount();
+
+ /** Set the maximum number of clauses permitted. */
+ static void setMaxClauseCount(size_t maxClauseCount);
+
+ /** Adds a clause to a boolean query. Clauses may be:
+ * <ul>
+ * <li><code>required</code> which means that documents which <i>do not</i>
+ * match this sub-query will <i>not</i> match the boolean query;
+ * <li><code>prohibited</code> which means that documents which <i>do</i>
+ * match this sub-query will <i>not</i> match the boolean query; or
+ * <li>neither, in which case matched documents are neither prohibited from
+ * nor required to match the sub-query. However, a document must match at
+ * least 1 sub-query to match the boolean query.
+ * </ul>
+ * It is an error to specify a clause as both <code>required</code> and
+ * <code>prohibited</code>.
+ *
+ * @see #getMaxClauseCount()
+ */
+ void add(Query* query, const bool required, const bool prohibited){
+ add(query,false,required,prohibited);
+ }
+ void add(Query* query, const bool deleteQuery, const bool required, const bool prohibited);
+
+ /** Copies the clauses of this query into the array.
+ * The array must be at least as long as getClauseCount()
+ * If you want to use the clauses, make sure you null terminate it.
+ */
+ void getClauses(BooleanClause** clauses) const;
+
+ ///@deprecated
+ _CL_DEPRECATED( getClauses(clauses) ) BooleanClause** getClauses() const;
+
+ /**
+ * Give client code access to clauses.size() so we know how
+ * large the array returned by getClauses is.
+ */
+ size_t getClauseCount() const;
+
+ /** Adds a clause to a boolean query.
+ * @see #getMaxClauseCount()
+ */
+ void add(BooleanClause* clause);
+
+ Query* rewrite(CL_NS(index)::IndexReader* reader);
+ Query* clone() const;
+ bool equals(Query* o) const;
+
+ /** Prints a user-readable version of this query. */
+ TCHAR* toString(const TCHAR* field) const;
+ /** Returns a hash code value for this object.*/
+ size_t hashCode() const;
+ };
+
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/search/BooleanScorer.cpp b/src/3rdparty/clucene/src/CLucene/search/BooleanScorer.cpp
new file mode 100644
index 0000000..ae7ee40
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/BooleanScorer.cpp
@@ -0,0 +1,248 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "BooleanScorer.h"
+
+#include "Scorer.h"
+#include "Similarity.h"
+
+CL_NS_USE(util)
+CL_NS_DEF(search)
+
+ BooleanScorer::BooleanScorer(Similarity* similarity):
+ Scorer(similarity),
+ scorers(NULL),
+ maxCoord (1),
+ nextMask (1),
+ end(0),
+ current(NULL),
+ requiredMask (0),
+ prohibitedMask (0),
+ coordFactors (NULL)
+ {
+ bucketTable = _CLNEW BucketTable(this);
+ }
+
+ BooleanScorer::~BooleanScorer(){
+ //Func - Destructor
+ //Pre - true
+ //Post - The instance has been destroyed
+
+ _CLDELETE(bucketTable);
+ _CLDELETE_ARRAY(coordFactors);
+ _CLDELETE(scorers);
+ }
+
+
+ bool BooleanScorer::next() {
+ bool more;
+ do {
+ while (bucketTable->first != NULL) { // more queued
+ current = bucketTable->first;
+ bucketTable->first = current->next; // pop the queue
+
+ // check prohibited & required
+ if ((current->bits & prohibitedMask) == 0 &&
+ (current->bits & requiredMask) == requiredMask) {
+ return true;
+ }
+ }
+
+ // refill the queue
+ more = false;
+ end += BooleanScorer::BucketTable_SIZE;
+ for (SubScorer* sub = scorers; sub != NULL; sub = sub->next) {
+ Scorer* scorer = sub->scorer;
+ int32_t doc;
+ while (!sub->done && (doc=scorer->doc()) < end) {
+ sub->collector->collect(doc, scorer->score());
+ sub->done = !scorer->next();
+ }
+ if (!sub->done) {
+ more = true;
+ }
+ }
+ } while (bucketTable->first != NULL || more);
+
+ return false;
+ }
+
+ qreal BooleanScorer::score(){
+ if (coordFactors == NULL)
+ computeCoordFactors();
+ return current->score * coordFactors[current->coord];
+ }
+
+ bool BooleanScorer::skipTo(int32_t target) {
+ _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: BooleanScorer::skipTo");
+ }
+
+ void BooleanScorer::explain(int32_t doc, Explanation* ret) {
+ _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: BooleanScorer::explain");
+ }
+
+ TCHAR* BooleanScorer::toString() {
+ CL_NS(util)::StringBuffer buffer;
+ buffer.append(_T("boolean("));
+ for (SubScorer* sub = scorers; sub != NULL; sub = sub->next) {
+ buffer.append(sub->scorer->toString());
+ buffer.append(_T(" "));
+ }
+ buffer.appendChar(')');
+ return buffer.toString();
+ }
+
+ void BooleanScorer::add(Scorer* scorer, const bool required, const bool prohibited) {
+ int32_t mask = 0;
+ if (required || prohibited) {
+ if (nextMask == 0)
+ _CLTHROWA(CL_ERR_IndexOutOfBounds, "More than 32 required/prohibited clauses in query.");
+ mask = nextMask;
+ nextMask = ( nextMask << 1 );
+ } else
+ mask = 0;
+
+ if (!prohibited)
+ maxCoord++;
+
+ if (prohibited)
+ prohibitedMask |= mask; // update prohibited mask
+ else if (required)
+ requiredMask |= mask; // update required mask
+
+ //scorer, HitCollector, and scorers is delete in the SubScorer
+ scorers = _CLNEW SubScorer(scorer, required, prohibited,
+ bucketTable->newCollector(mask), scorers);
+ }
+
+ void BooleanScorer::computeCoordFactors(){
+ coordFactors = _CL_NEWARRAY(qreal,maxCoord);
+ for (int32_t i = 0; i < maxCoord; i++)
+ coordFactors[i] = getSimilarity()->coord(i, maxCoord-1);
+ }
+
+ /*void BooleanScorer::score(HitCollector* results, const int32_t maxDoc) {
+ if (coordFactors == NULL)
+ computeCoordFactors();
+
+ while (currentDoc < maxDoc) {
+ currentDoc = (currentDoc+BucketTable_SIZE<maxDoc?currentDoc+BucketTable_SIZE:maxDoc);
+ for (SubScorer* t = scorers; t != NULL; t = t->next)
+ t->scorer->score((t->collector), currentDoc);
+ bucketTable->collectHits(results);
+ }
+ }*/
+
+
+
+
+ BooleanScorer::SubScorer::SubScorer(Scorer* scr, const bool r, const bool p, HitCollector* c, SubScorer* nxt):
+ scorer(scr),
+ required(r),
+ prohibited(p),
+ collector(c),
+ next(nxt)
+ {
+ //Func - Constructor
+ //Pre - scr != NULL,
+ // c != NULL
+ // nxt may or may not be NULL
+ //Post - The instance has been created
+
+ CND_PRECONDITION(scr != NULL,"scr is NULL");
+ CND_PRECONDITION(c != NULL,"c is NULL");
+
+ done = !scorer->next();
+ }
+
+ BooleanScorer::SubScorer::~SubScorer(){
+ //Func - Destructor
+ //Pre - true
+ //Post - The instance has been destroyed
+
+ for (SubScorer * ptr = next; ptr; ){
+ SubScorer* next = ptr->next;
+ ptr->next = NULL;
+ _CLDELETE(ptr);
+ ptr = next;
+ }
+ _CLDELETE(scorer);
+ _CLDELETE(collector);
+ }
+
+ BooleanScorer::Bucket::Bucket():
+ doc(-1),
+ score(0.0),
+ bits(0),
+ coord(0),
+ next(NULL)
+ {
+ }
+ BooleanScorer::Bucket::~Bucket(){
+ }
+
+
+
+
+ BooleanScorer::BucketTable::BucketTable(BooleanScorer* scr):
+ scorer(scr),
+ first(NULL)
+ {
+ buckets = _CL_NEWARRAY(Bucket,BucketTable_SIZE);
+ }
+ BooleanScorer::BucketTable::~BucketTable(){
+ clear();
+ _CLDELETE_ARRAY(buckets);
+ }
+
+ void BooleanScorer::BucketTable::clear(){
+ //delete first;
+ first = NULL;
+ }
+ int32_t BooleanScorer::BucketTable::size() const { return BooleanScorer::BucketTable_SIZE; }
+
+ HitCollector* BooleanScorer::BucketTable::newCollector(const int32_t mask) {
+ return _CLNEW Collector(mask, this);
+ }
+
+
+
+
+
+
+
+
+
+ BooleanScorer::Collector::Collector(const int32_t msk, BucketTable* bucketTbl):
+ bucketTable(bucketTbl),
+ mask(msk)
+ {
+ }
+
+ void BooleanScorer::Collector::collect(const int32_t doc, const qreal score){
+ BucketTable* table = bucketTable;
+ int32_t i = doc & (BooleanScorer::BucketTable_SIZE-1);
+ Bucket* bucket = &table->buckets[i];
+
+ if (bucket->doc != doc) { // invalid bucket
+ bucket->doc = doc; // set doc
+ bucket->score = score; // initialize score
+ bucket->bits = mask; // initialize mask
+ bucket->coord = 1; // initialize coord
+
+ bucket->next = table->first; // push onto valid list
+ table->first = bucket;
+ } else { // valid bucket
+ bucket->score += score; // increment score
+ bucket->bits |= mask; // add bits in mask
+ bucket->coord++; // increment coord
+ }
+ }
+
+
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/search/BooleanScorer.h b/src/3rdparty/clucene/src/CLucene/search/BooleanScorer.h
new file mode 100644
index 0000000..2147bc5
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/BooleanScorer.h
@@ -0,0 +1,99 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+*
+* Changes are Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+------------------------------------------------------------------------------*/
+#ifndef _lucene_search_BooleanScorer_
+#define _lucene_search_BooleanScorer_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "Scorer.h"
+
+CL_NS_DEF(search)
+
+class BooleanScorer : public Scorer {
+public:
+ class Bucket : LUCENE_BASE {
+ public:
+ int32_t doc; // tells if bucket is valid
+ qreal score; // incremental score
+ int32_t bits; // used for bool constraints
+ int32_t coord; // count of terms in score
+ Bucket* next; // next valid bucket
+
+ Bucket();
+ ~Bucket();
+ };
+
+ class SubScorer: LUCENE_BASE {
+ public:
+ bool done;
+ Scorer* scorer;
+ bool required;
+ bool prohibited;
+ HitCollector* collector;
+ SubScorer* next;
+ SubScorer(Scorer* scr, const bool r, const bool p, HitCollector* c, SubScorer* nxt);
+ ~SubScorer();
+ };
+
+ class BucketTable:LUCENE_BASE {
+ private:
+ BooleanScorer* scorer;
+ public:
+ Bucket* buckets;
+ Bucket* first; // head of valid list
+
+ BucketTable(BooleanScorer* scr);
+ int32_t size() const;
+ HitCollector* newCollector(const int32_t mask);
+ void clear();
+ ~BucketTable();
+
+ };
+
+ class Collector: public HitCollector {
+ private:
+ BucketTable* bucketTable;
+ int32_t mask;
+ public:
+ Collector(const int32_t mask, BucketTable* bucketTable);
+
+ void collect(const int32_t doc, const qreal score);
+ };
+
+ SubScorer* scorers;
+ BucketTable* bucketTable;
+
+ int32_t maxCoord;
+ int32_t nextMask;
+
+ int32_t end;
+ Bucket* current;
+
+public:
+ LUCENE_STATIC_CONSTANT(int32_t,BucketTable_SIZE=1024);
+ int32_t requiredMask;
+ int32_t prohibitedMask;
+ qreal* coordFactors;
+
+ BooleanScorer(Similarity* similarity);
+ ~BooleanScorer();
+ void add(Scorer* scorer, const bool required, const bool prohibited);
+ int32_t doc() const { return current->doc; }
+ bool next();
+ qreal score();
+ bool skipTo(int32_t target);
+ void explain(int32_t doc, Explanation* ret);
+ TCHAR* toString();
+ void computeCoordFactors();
+};
+
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/search/CachingWrapperFilter.cpp b/src/3rdparty/clucene/src/CLucene/search/CachingWrapperFilter.cpp
new file mode 100644
index 0000000..694556c
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/CachingWrapperFilter.cpp
@@ -0,0 +1,86 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "CachingWrapperFilter.h"
+
+CL_NS_DEF(search)
+CL_NS_USE(index)
+CL_NS_USE(util)
+
+AbstractCachingFilter::AbstractCachingFilter():
+ cache(false,true)
+{
+}
+AbstractCachingFilter::AbstractCachingFilter(const AbstractCachingFilter& copy):
+ cache(false,true)
+{
+}
+AbstractCachingFilter::~AbstractCachingFilter(){
+}
+AbstractCachingFilter::BitSetHolder::BitSetHolder(CL_NS(util)::BitSet* bits, bool deleteBs){
+ this->bits = bits;
+ this->deleteBs = deleteBs;
+}
+AbstractCachingFilter::BitSetHolder::~BitSetHolder(){
+ if ( deleteBs )
+ _CLDELETE(bits);
+}
+
+
+BitSet* AbstractCachingFilter::bits(IndexReader* reader){
+ SCOPED_LOCK_MUTEX(cache.THIS_LOCK)
+ BitSetHolder* cached = cache.get(reader);
+ if ( cached != NULL )
+ return cached->bits;
+ BitSet* bs = doBits(reader);
+ BitSetHolder* bsh = _CLNEW BitSetHolder(bs, doShouldDeleteBitSet(bs));
+ cache.put(reader,bsh);
+ return bs;
+}
+void AbstractCachingFilter::closeCallback(CL_NS(index)::IndexReader* reader, void*){
+ SCOPED_LOCK_MUTEX(cache.THIS_LOCK)
+ cache.remove(reader);
+}
+
+
+
+
+CachingWrapperFilter::CachingWrapperFilter(Filter* filter, bool deleteFilter){
+ this->filter = filter;
+ this->deleteFilter = deleteFilter;
+}
+CachingWrapperFilter::CachingWrapperFilter(const CachingWrapperFilter& copy):
+ AbstractCachingFilter(copy)
+{
+ this->filter = copy.filter->clone();
+ this->deleteFilter = true;
+}
+Filter* CachingWrapperFilter::clone() const{
+ return _CLNEW CachingWrapperFilter(*this);
+}
+TCHAR* CachingWrapperFilter::toString(){
+ TCHAR* fs = filter->toString();
+ int len = _tcslen(fs)+23;
+ TCHAR* ret = _CL_NEWARRAY(TCHAR,len);
+ _sntprintf(ret,len,_T("CachingWrapperFilter(%s)"),fs);
+ _CLDELETE_CARRAY(fs);
+ return ret;
+}
+BitSet* CachingWrapperFilter::doBits(IndexReader* reader){
+ return filter->bits(reader);
+}
+bool CachingWrapperFilter::doShouldDeleteBitSet( CL_NS(util)::BitSet* bits ){
+ return filter->shouldDeleteBitSet(bits);
+}
+CachingWrapperFilter::~CachingWrapperFilter(){
+ if ( deleteFilter ){
+ _CLDELETE(filter);
+ }else
+ filter=NULL;
+}
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/search/CachingWrapperFilter.h b/src/3rdparty/clucene/src/CLucene/search/CachingWrapperFilter.h
new file mode 100644
index 0000000..e48a182
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/CachingWrapperFilter.h
@@ -0,0 +1,80 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_search_CachingWrapperFilter_
+#define _lucene_search_CachingWrapperFilter_
+
+#include "CLucene/util/BitSet.h"
+#include "CLucene/index/IndexReader.h"
+#include "Filter.h"
+
+CL_NS_DEF(search)
+/**
+ * Wraps another filter's result and caches it. The purpose is to allow
+ * filters to implement this and allow itself to be cached. Alternatively,
+ * use the CachingWrapperFilter to cache the filter.
+ */
+class AbstractCachingFilter: public Filter
+{
+ class BitSetHolder: LUCENE_BASE{
+ bool deleteBs;
+ public:
+ BitSetHolder(CL_NS(util)::BitSet* bits, bool deleteBs);
+ ~BitSetHolder();
+ CL_NS(util)::BitSet* bits;
+ };
+ void closeCallback(CL_NS(index)::IndexReader* reader, void* param);
+ typedef CL_NS(util)::CLHashMap<CL_NS(index)::IndexReader*,
+ BitSetHolder*,
+ CL_NS(util)::Compare::Void<CL_NS(index)::IndexReader>,
+ CL_NS(util)::Equals::Void<CL_NS(index)::IndexReader>,
+ CL_NS(util)::Deletor::Object<CL_NS(index)::IndexReader>,
+ CL_NS(util)::Deletor::Object<BitSetHolder> > CacheType;
+
+ CacheType cache;
+
+protected:
+ AbstractCachingFilter( const AbstractCachingFilter& copy );
+ virtual CL_NS(util)::BitSet* doBits( CL_NS(index)::IndexReader* reader ) = 0;
+ virtual bool doShouldDeleteBitSet( CL_NS(util)::BitSet* bits ){ return false; }
+ AbstractCachingFilter();
+public:
+ virtual ~AbstractCachingFilter();
+
+ /** Returns a BitSet with true for documents which should be permitted in
+ search results, and false for those that should not. */
+ CL_NS(util)::BitSet* bits( CL_NS(index)::IndexReader* reader );
+
+ virtual Filter *clone() const = 0;
+ virtual TCHAR *toString() = 0;
+
+ bool shouldDeleteBitSet( const CL_NS(util)::BitSet* bits ) const{ return false; }
+};
+
+/**
+ * Wraps another filter's result and caches it. The purpose is to allow
+ * filters to simply filter, and then wrap with this class to add
+ * caching, keeping the two concerns decoupled yet composable.
+ */
+class CachingWrapperFilter: public AbstractCachingFilter
+{
+private:
+ Filter* filter;
+ bool deleteFilter;
+protected:
+ CachingWrapperFilter( const CachingWrapperFilter& copy );
+ CL_NS(util)::BitSet* doBits( CL_NS(index)::IndexReader* reader );
+ bool doShouldDeleteBitSet( CL_NS(util)::BitSet* bits );
+public:
+ CachingWrapperFilter( Filter* filter, bool deleteFilter=true );
+ ~CachingWrapperFilter();
+
+ Filter *clone() const;
+ TCHAR *toString();
+};
+
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/search/ChainedFilter.cpp b/src/3rdparty/clucene/src/CLucene/search/ChainedFilter.cpp
new file mode 100644
index 0000000..4b6389c
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/ChainedFilter.cpp
@@ -0,0 +1,213 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+
+#include <CLucene/StdHeader.h>
+#include <CLucene/util/Misc.h>
+#include "ChainedFilter.h"
+
+CL_NS_DEF(search)
+CL_NS_USE(index)
+CL_NS_USE(util)
+CL_NS_USE(document)
+
+
+ChainedFilter::ChainedFilter( Filter ** _filters, int _op ):
+ filters(_filters),
+ logicArray(NULL),
+ logic(_op)
+{
+}
+ChainedFilter::ChainedFilter( Filter** _filters, int* _array ):
+ filters(_filters),
+ logicArray(_array),
+ logic(-1)
+{
+}
+ChainedFilter::ChainedFilter( const ChainedFilter& copy ) :
+ logicArray( copy.logicArray ),
+ logic( copy.logic )
+{
+ filters = copy.filters;
+}
+ChainedFilter::~ChainedFilter(void)
+{
+
+}
+
+Filter* ChainedFilter::clone() const {
+ return _CLNEW ChainedFilter(*this );
+}
+
+const TCHAR* ChainedFilter::getLogicString(int logic){
+ if ( logic == ChainedFilter::OR )
+ return _T("OR");
+ else if ( logic == ChainedFilter::AND )
+ return _T("AND");
+ else if ( logic == ChainedFilter::ANDNOT )
+ return _T("ANDNOT");
+ else if ( logic == ChainedFilter::XOR )
+ return _T("XOR");
+ else if ( logic >= ChainedFilter::USER ){
+ return _T("USER");
+ }
+ return _T("");
+}
+
+TCHAR* ChainedFilter::toString()
+{
+
+ Filter** filter = filters;
+
+ StringBuffer buf(_T("ChainedFilter: ["));
+ int* la = logicArray;
+ while(*filter )
+ {
+ if ( filter != filters )
+ buf.appendChar(' ');
+ buf.append(getLogicString(logic==-1?*la:logic));
+ buf.appendChar(' ');
+
+ TCHAR* filterstr = (*filter)->toString();
+ buf.append(filterstr);
+ _CLDELETE_ARRAY( filterstr );
+
+ filter++;
+ if ( logic == -1 )
+ la++;
+ }
+
+ buf.appendChar(']');
+
+ return buf.toString();
+}
+
+
+/** Returns a BitSet with true for documents which should be permitted in
+search results, and false for those that should not. */
+BitSet* ChainedFilter::bits( IndexReader* reader )
+{
+ if( logic != -1 )
+ return bits( reader, logic );
+ else if( logicArray != NULL )
+ return bits( reader, logicArray );
+ else
+ return bits( reader, DEFAULT );
+}
+
+
+BitSet* ChainedFilter::bits( IndexReader* reader, int logic )
+{
+ BitSet* bts = NULL;
+
+ Filter** filter = filters;
+
+ // see discussion at top of file
+ if( *filter ) {
+ BitSet* tmp = (*filter)->bits( reader );
+ if ( (*filter)->shouldDeleteBitSet(tmp) ) //if we are supposed to delete this BitSet, then
+ bts = tmp; //we can safely call it our own
+ else if ( tmp == NULL ){
+ int32_t len = reader->maxDoc();
+ bts = _CLNEW BitSet( len ); //bitset returned null, which means match _all_
+ for (int32_t i=0;i<len;i++ )
+ bts->set(i);
+ }else{
+ bts = tmp->clone(); //else it is probably cached, so we need to copy it before using it.
+ }
+ filter++;
+ }
+ else
+ bts = _CLNEW BitSet( reader->maxDoc() );
+
+ while( *filter ) {
+ doChain( bts, reader, logic, *filter );
+ filter++;
+ }
+
+ return bts;
+}
+
+
+BitSet* ChainedFilter::bits( IndexReader* reader, int* _logicArray )
+{
+ BitSet* bts = NULL;
+
+ Filter** filter = filters;
+ int* logic = _logicArray;
+
+ // see discussion at top of file
+ if( *filter ) {
+ BitSet* tmp = (*filter)->bits( reader );
+ if ( (*filter)->shouldDeleteBitSet(tmp) ) //if we are supposed to delete this BitSet, then
+ bts = tmp; //we can safely call it our own
+ else if ( tmp == NULL ){
+ int32_t len = reader->maxDoc();
+ bts = _CLNEW BitSet( len ); //bitset returned null, which means match _all_
+ for (int32_t i=0;i<len;i++ )
+ bts->set(i); //todo: this could mean that we can skip certain types of filters
+ }
+ else
+ {
+ bts = tmp->clone(); //else it is probably cached, so we need to copy it before using it.
+ }
+ filter++;
+ logic++;
+ }
+ else
+ bts = _CLNEW BitSet( reader->maxDoc() );
+
+ while( *filter ) {
+ doChain( bts, reader, *logic, *filter );
+ filter++;
+ logic++;
+ }
+
+ return bts;
+}
+
+void ChainedFilter::doUserChain( CL_NS(util)::BitSet* chain, CL_NS(util)::BitSet* filter, int logic ){
+ _CLTHROWA(CL_ERR_Runtime,"User chain logic not implemented by superclass");
+}
+
+BitSet* ChainedFilter::doChain( BitSet* resultset, IndexReader* reader, int logic, Filter* filter )
+{
+ BitSet* filterbits = filter->bits( reader );
+ int32_t maxDoc = reader->maxDoc();
+ int32_t i=0;
+ if ( logic >= ChainedFilter::USER ){
+ doUserChain(resultset,filterbits,logic);
+ }else{
+ switch( logic )
+ {
+ case OR:
+ for( i=0; i < maxDoc; i++ )
+ resultset->set( i, (resultset->get(i) || (filterbits==NULL || filterbits->get(i) ))?1:0 );
+ break;
+ case AND:
+ for( i=0; i < maxDoc; i++ )
+ resultset->set( i, (resultset->get(i) && (filterbits==NULL || filterbits->get(i) ))?1:0 );
+ break;
+ case ANDNOT:
+ for( i=0; i < maxDoc; i++ )
+ resultset->set( i, (resultset->get(i) && (filterbits==NULL || filterbits->get(i)))?0:1 );
+ break;
+ case XOR:
+ for( i=0; i < maxDoc; i++ )
+ resultset->set( i, resultset->get(i) ^ ((filterbits==NULL || filterbits->get(i) )?1:0) );
+ break;
+ default:
+ doChain( resultset, reader, DEFAULT, filter );
+ }
+ }
+
+ if ( filter->shouldDeleteBitSet(filterbits) )
+ _CLDELETE( filterbits );
+
+ return resultset;
+}
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/search/ChainedFilter.h b/src/3rdparty/clucene/src/CLucene/search/ChainedFilter.h
new file mode 100644
index 0000000..f4d9d00
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/ChainedFilter.h
@@ -0,0 +1,86 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_search_ChainedFilter_
+#define _lucene_search_ChainedFilter_
+
+#include "CLucene/index/IndexReader.h"
+#include "CLucene/util/BitSet.h"
+#include "CLucene/search/Filter.h"
+
+CL_NS_DEF(search)
+
+/*
+Discussion - brian@unixpoet.com
+
+From ChainedFilter.java:
+
+...
+
+// First AND operation takes place against a completely false
+// bitset and will always return zero results. Thanks to
+// Daniel Armbrust for pointing this out and suggesting workaround.
+
+if (logic[0] == AND)
+{
+ result = (BitSet) chain[i].bits(reader).clone();
+ ++i;
+}
+
+...
+
+The observation is correct and it was buggy. The problem is that the same
+issue remains for the ANDNOT logic op but with the inverse result: all bits
+set to 1. The result of the other ops, i.e. OR, AND, XOR for the first filter
+ends up just copying the bitset of the first filter (explicitly in the case of the AND).
+
+Why not do the same for the NAND? This will have the side effect of rendering the first op
+in the logic array superflous - not a big problem.
+
+The only "problem" is that we will return different results then the Java
+Lucene code - though I prefer CLucene to be a correct implementation and only maintain
+API compat rather than full 100% compat with Lucene.
+*/
+class ChainedFilter: public Filter
+{
+public:
+ LUCENE_STATIC_CONSTANT(int, OR = 0); //set current bit if the chain is set OR if the filter bit is set
+ LUCENE_STATIC_CONSTANT(int, AND = 1); //set current bit if the chain is set AND the filter bit is set
+ LUCENE_STATIC_CONSTANT(int, ANDNOT = 2); //set current bit if the chain is not set AND the filter bit is not set
+ LUCENE_STATIC_CONSTANT(int, XOR = 3); //set current bit if the chain is set OR the filter bit is set BUT not both is set
+
+ LUCENE_STATIC_CONSTANT(int, USER = 5); //add this value to user defined value, then override doUserChain
+
+ LUCENE_STATIC_CONSTANT(int, DEFAULT = OR);
+
+protected:
+ Filter **filters;
+ int *logicArray;
+ int logic;
+
+ ChainedFilter( const ChainedFilter& copy );
+ CL_NS(util)::BitSet* bits( CL_NS(index)::IndexReader* reader, int logic );
+ CL_NS(util)::BitSet* bits( CL_NS(index)::IndexReader* reader, int* logicArray );
+ CL_NS(util)::BitSet* doChain( CL_NS(util)::BitSet* result, CL_NS(index)::IndexReader* reader, int logic, Filter* filter );
+
+ virtual void doUserChain( CL_NS(util)::BitSet* chain, CL_NS(util)::BitSet* filter, int logic );
+ virtual const TCHAR* getLogicString(int logic);
+public:
+ ChainedFilter( Filter** filters, int op = DEFAULT );
+ ChainedFilter( Filter** filters, int* _array );
+ virtual ~ChainedFilter();
+
+ /** Returns a BitSet with true for documents which should be permitted in
+ search results, and false for those that should not. */
+ CL_NS(util)::BitSet* bits( CL_NS(index)::IndexReader* reader );
+
+ virtual Filter* clone() const;
+
+ TCHAR* toString();
+};
+
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/search/Compare.h b/src/3rdparty/clucene/src/CLucene/search/Compare.h
new file mode 100644
index 0000000..ab38b17
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/Compare.h
@@ -0,0 +1,161 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_search_Compare_
+#define _lucene_search_Compare_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "FieldSortedHitQueue.h"
+
+CL_NS_DEF(search)
+
+
+class ScoreDocComparators:LUCENE_BASE {
+protected:
+ ScoreDocComparators(){}
+public:
+ ~ScoreDocComparators(){
+ }
+
+ class Relevance:public ScoreDocComparator {
+ public:
+ int32_t compare (struct ScoreDoc* i, struct ScoreDoc* j) {
+ if (i->score > j->score) return -1;
+ if (i->score < j->score) return 1;
+ return 0;
+ }
+ CL_NS(util)::Comparable* sortValue (struct ScoreDoc* i) {
+ return _CLNEW CL_NS(util)::Compare::Float (i->score);
+ }
+ int32_t sortType() {
+ return SortField::DOCSCORE;
+ }
+ };
+
+ class IndexOrder:public ScoreDocComparator{
+ public:
+ IndexOrder():
+ ScoreDocComparator()
+ {
+
+ }
+ int32_t compare (struct ScoreDoc* i, struct ScoreDoc* j) {
+ if (i->doc < j->doc) return -1;
+ if (i->doc > j->doc) return 1;
+ return 0;
+ }
+ CL_NS(util)::Comparable* sortValue (struct ScoreDoc* i) {
+ return _CLNEW CL_NS(util)::Compare::Int32(i->doc);
+ }
+ int32_t sortType() {
+ return SortField::DOC;
+ }
+ };
+
+
+ class String: public ScoreDocComparator {
+ FieldCache::StringIndex* index;
+#ifdef _CL__CND_DEBUG
+ int32_t length;
+#endif
+ public:
+ String(FieldCache::StringIndex* index, int32_t len)
+ {
+#ifdef _CL__CND_DEBUG
+ this->length = len;
+#endif
+ this->index = index;
+ }
+
+ int32_t compare (struct ScoreDoc* i, struct ScoreDoc* j) {
+ CND_PRECONDITION(i->doc<length, "i->doc>=length")
+ CND_PRECONDITION(j->doc<length, "j->doc>=length")
+ if (index->order[i->doc] < index->order[j->doc]) return -1;
+ if (index->order[i->doc] > index->order[j->doc]) return 1;
+ return 0;
+ }
+
+ CL_NS(util)::Comparable* sortValue (struct ScoreDoc* i) {
+ return _CLNEW CL_NS(util)::Compare::TChar(index->lookup[index->order[i->doc]]);
+ }
+
+ int32_t sortType() {
+ return SortField::STRING;
+ }
+ };
+
+ class Int32:public ScoreDocComparator{
+ int32_t* fieldOrder;
+#ifdef _CL__CND_DEBUG
+ int32_t length;
+#endif
+ public:
+ Int32(int32_t* fieldOrder, int32_t len)
+ {
+ this->fieldOrder = fieldOrder;
+#ifdef _CL__CND_DEBUG
+ this->length = len;
+#endif
+ }
+
+
+ int32_t compare (struct ScoreDoc* i, struct ScoreDoc* j) {
+ CND_PRECONDITION(i->doc<length, "i->doc>=length")
+ CND_PRECONDITION(j->doc<length, "j->doc>=length")
+ if (fieldOrder[i->doc] < fieldOrder[j->doc]) return -1;
+ if (fieldOrder[i->doc] > fieldOrder[j->doc]) return 1;
+ return 0;
+ }
+
+ CL_NS(util)::Comparable* sortValue (struct ScoreDoc* i) {
+ CND_PRECONDITION(i->doc<length, "i->doc>=length")
+ return _CLNEW CL_NS(util)::Compare::Int32(fieldOrder[i->doc]);
+ }
+
+ int32_t sortType() {
+ return SortField::INT;
+ }
+ };
+
+ class Float:public ScoreDocComparator {
+ qreal* fieldOrder;
+#ifdef _CL__CND_DEBUG
+ int32_t length;
+#endif
+ public:
+ Float(qreal* fieldOrder, int32_t len)
+ {
+ this->fieldOrder = fieldOrder;
+#ifdef _CL__CND_DEBUG
+ this->length = len;
+#endif
+ }
+
+ int32_t compare (struct ScoreDoc* i, struct ScoreDoc* j) {
+ CND_PRECONDITION(i->doc<length, "i->doc>=length")
+ CND_PRECONDITION(j->doc<length, "j->doc>=length")
+ if (fieldOrder[i->doc] < fieldOrder[j->doc]) return -1;
+ if (fieldOrder[i->doc] > fieldOrder[j->doc]) return 1;
+ return 0;
+ }
+
+ CL_NS(util)::Comparable* sortValue (struct ScoreDoc* i) {
+ CND_PRECONDITION(i->doc<length, "i->doc>=length")
+ return _CLNEW CL_NS(util)::Compare::Float(fieldOrder[i->doc]);
+ }
+
+ int32_t sortType() {
+ return SortField::FLOAT;
+ }
+ };
+};
+
+
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/search/ConjunctionScorer.cpp b/src/3rdparty/clucene/src/CLucene/search/ConjunctionScorer.cpp
new file mode 100644
index 0000000..9b7846f
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/ConjunctionScorer.cpp
@@ -0,0 +1,144 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "ConjunctionScorer.h"
+#include "CLucene/util/Arrays.h"
+
+CL_NS_USE(index)
+CL_NS_USE(util)
+CL_NS_DEF(search)
+
+ Scorer* ConjunctionScorer::first() const{
+ if ( scorers.end() == scorers.begin() )
+ return NULL;
+
+ return *scorers.begin();
+ } //get First
+ Scorer* ConjunctionScorer::last() {
+ if ( scorers.end() == scorers.begin() )
+ return NULL;
+
+ CL_NS_STD(list)<Scorer*>::iterator i = scorers.end();
+ --i;
+ return *i;
+ } //get Last
+
+ class _ScorerSorter:public CL_NS(util)::Arrays::_Arrays<Scorer*>{
+ public:
+ bool equals(Scorer* o1,Scorer* o2) const{
+ return o1->doc() == o2->doc();
+ }
+ int32_t compare(Scorer* o1,Scorer* o2) const{
+ return o1->doc() - o2->doc();
+ }
+ };
+ _ScorerSorter __ScorerSorter;
+
+ void ConjunctionScorer::sortScorers() {
+ // move scorers to an array
+ int32_t size = scorers.size();
+ Scorer** array = _CL_NEWARRAY(Scorer*,size+1);
+ scorers.toArray(array);
+ scorers.clear(); // empty the list
+
+ // note that this comparator is not consistent with equals!
+ __ScorerSorter.sort(array,size,0,size);
+
+ for (int32_t i = 0; i<size; i++) {
+ scorers.push_back(array[i]); // re-build list, now sorted
+ }
+ _CLDELETE_ARRAY(array);
+ }
+
+ bool ConjunctionScorer::doNext() {
+ while (more && first()->doc() < last()->doc()) { // find doc w/ all clauses
+ more = first()->skipTo(last()->doc()); // skip first upto last
+ Scorer* scorer = *scorers.begin();
+ scorers.delete_front();
+ scorers.push_back(scorer); // move first to last
+ }
+ return more; // found a doc with all clauses
+ }
+
+
+ void ConjunctionScorer::init() {
+ more = scorers.size() > 0;
+
+ // compute coord factor
+ coord = getSimilarity()->coord(scorers.size(), scorers.size());
+
+ // move each scorer to its first entry
+ CL_NS_STD(list)<Scorer*>::iterator i = scorers.begin();
+ while (more && i!=scorers.end()) {
+ more = ((Scorer*)*i)->next();
+ ++i;
+ }
+
+ if (more)
+ sortScorers(); // initial sort of list
+
+ firstTime = false;
+ }
+
+ ConjunctionScorer::ConjunctionScorer(Similarity* similarity):
+ Scorer(similarity),
+ scorers(false),
+ firstTime(true),
+ more(true),
+ coord(0.0)
+ {
+ }
+ ConjunctionScorer::~ConjunctionScorer(){
+ scorers.setDoDelete(true);
+ }
+
+ TCHAR *CL_NS(search)::Scorer::toString(void){
+ return STRDUP_TtoT(_T("ConjunctionScorer"));
+ }
+
+
+ void ConjunctionScorer::add(Scorer* scorer){
+ scorers.push_back(scorer);
+ }
+
+
+ int32_t ConjunctionScorer::doc() const{ return first()->doc(); }
+
+ bool ConjunctionScorer::next() {
+ if (firstTime) {
+ init();
+ } else if (more) {
+ more = last()->next(); // trigger further scanning
+ }
+ return doNext();
+ }
+
+ bool ConjunctionScorer::skipTo(int32_t target) {
+ CL_NS_STD(list)<Scorer*>::iterator i = scorers.begin();
+ while (more && i!=scorers.end()) {
+ more = ((Scorer*)*i)->skipTo(target);
+ ++i;
+ }
+ if (more)
+ sortScorers(); // re-sort scorers
+ return doNext();
+ }
+
+ qreal ConjunctionScorer::score(){
+ qreal score = 0.0f; // sum scores
+ CL_NS_STD(list)<Scorer*>::const_iterator i = scorers.begin();
+ while (i!=scorers.end()){
+ score += (*i)->score();
+ ++i;
+ }
+ score *= coord;
+ return score;
+ }
+
+
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/search/ConjunctionScorer.h b/src/3rdparty/clucene/src/CLucene/search/ConjunctionScorer.h
new file mode 100644
index 0000000..4b68072
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/ConjunctionScorer.h
@@ -0,0 +1,50 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_search_ConjunctionScorer_
+#define _lucene_search_ConjunctionScorer_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+#include "Scorer.h"
+#include "Similarity.h"
+
+CL_NS_DEF(search)
+
+/** Scorer for conjunctions, sets of queries, all of which are required. */
+class ConjunctionScorer: public Scorer {
+private:
+ CL_NS(util)::CLLinkedList<Scorer*,CL_NS(util)::Deletor::Object<Scorer> > scorers;
+ bool firstTime;
+ bool more;
+ qreal coord;
+
+ Scorer* first() const;
+ Scorer* last();
+ void sortScorers();
+ bool doNext();
+ void init();
+public:
+ ConjunctionScorer(Similarity* similarity);
+ virtual ~ConjunctionScorer();
+ TCHAR* toString(void){
+ return STRDUP_TtoT(_T("ConjunctionScorer"));
+ }
+ void add(Scorer* scorer);
+ int32_t doc() const;
+ bool next();
+ bool skipTo(int32_t target);
+ qreal score();
+ virtual void explain(int32_t doc, Explanation* ret) {
+ _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: ConjunctionScorer::explain");
+ }
+
+
+};
+
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/search/DateFilter.cpp b/src/3rdparty/clucene/src/CLucene/search/DateFilter.cpp
new file mode 100644
index 0000000..9258582
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/DateFilter.cpp
@@ -0,0 +1,93 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "DateFilter.h"
+
+CL_NS_USE(index)
+CL_NS_USE(util)
+CL_NS_USE(document)
+CL_NS_DEF(search)
+
+ DateFilter::~DateFilter(){
+ _CLDECDELETE( start );
+ _CLDECDELETE( end );
+ }
+
+ DateFilter::DateFilter(const DateFilter& copy):
+ start( _CL_POINTER(copy.start) ),
+ end ( _CL_POINTER(copy.end) )
+ {
+ }
+
+ /** Constructs a filter for field <code>f</code> matching times between
+ <code>from</code> and <code>to</code>. */
+ DateFilter::DateFilter(const TCHAR* f, int64_t from, int64_t to)
+ {
+ TCHAR* tmp = DateField::timeToString(from);
+ start = _CLNEW Term(f, tmp);
+ _CLDELETE_CARRAY(tmp);
+
+ tmp = DateField::timeToString(to);
+ end = _CLNEW Term(start, tmp);
+ _CLDELETE_CARRAY(tmp);
+ }
+
+ /** Constructs a filter for field <code>f</code> matching times before
+ <code>time</code>. */
+ DateFilter* DateFilter::Before(const TCHAR* field, int64_t time) {
+ return _CLNEW DateFilter(field, 0,time);
+ }
+
+ /** Constructs a filter for field <code>f</code> matching times after
+ <code>time</code>. */
+ DateFilter* DateFilter::After(const TCHAR* field, int64_t time) {
+ return _CLNEW DateFilter(field,time, DATEFIELD_DATE_MAX );
+ }
+
+ /** Returns a BitSet with true for documents which should be permitted in
+ search results, and false for those that should not. */
+ BitSet* DateFilter::bits(IndexReader* reader) {
+ BitSet* bts = _CLNEW BitSet(reader->maxDoc());
+
+ TermEnum* enumerator = reader->terms(start);
+ if (enumerator->term(false) == NULL){
+ _CLDELETE(enumerator);
+ return bts;
+ }
+ TermDocs* termDocs = reader->termDocs();
+
+ try {
+ while (enumerator->term(false)->compareTo(end) <= 0) {
+ termDocs->seek(enumerator->term(false));
+ while (termDocs->next()) {
+ bts->set(termDocs->doc());
+ }
+ if (!enumerator->next()) {
+ break;
+ }
+ }
+ } _CLFINALLY (
+ termDocs->close();
+ _CLDELETE(termDocs);
+ enumerator->close();
+ _CLDELETE(enumerator);
+ );
+ return bts;
+ }
+
+ Filter* DateFilter::clone() const{
+ return _CLNEW DateFilter(*this);
+ }
+
+ TCHAR* DateFilter::toString(){
+ size_t len = _tcslen(start->field()) + start->textLength() + end->textLength() + 8;
+ TCHAR* ret = _CL_NEWARRAY(TCHAR,len);
+ ret[0]=0;
+ _sntprintf(ret,len,_T("%s: [%s-%s]"), start->field(),start->text(),end->text());
+ return ret;
+ }
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/search/DateFilter.h b/src/3rdparty/clucene/src/CLucene/search/DateFilter.h
new file mode 100644
index 0000000..b37272b
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/DateFilter.h
@@ -0,0 +1,59 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_search_DateFilter_
+#define _lucene_search_DateFilter_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "CLucene/document/DateField.h"
+#include "CLucene/index/Term.h"
+#include "CLucene/index/Terms.h"
+#include "CLucene/index/IndexReader.h"
+#include "CLucene/util/BitSet.h"
+#include "Filter.h"
+
+CL_NS_DEF(search)
+ /**
+ * A Filter that restricts search results to a range of time.
+ *
+ * <p>For this to work, documents must have been indexed with a
+ * {@link DateField}.
+ */
+ class DateFilter: public Filter {
+ private:
+ CL_NS(index)::Term* start;
+ CL_NS(index)::Term* end;
+
+ protected:
+ DateFilter(const DateFilter& copy);
+ public:
+ ~DateFilter();
+
+ /** Constructs a filter for field <code>f</code> matching times between
+ <code>from</code> and <code>to</code>. */
+ DateFilter(const TCHAR* f, int64_t from, int64_t to);
+
+ /** Constructs a filter for field <code>f</code> matching times before
+ <code>time</code>. */
+ static DateFilter* Before(const TCHAR* field, int64_t time) ;
+
+ /** Constructs a filter for field <code>f</code> matching times after
+ <code>time</code>. */
+ static DateFilter* After(const TCHAR* field, int64_t time) ;
+
+ /** Returns a BitSet with true for documents which should be permitted in
+ search results, and false for those that should not. */
+ CL_NS(util)::BitSet* bits(CL_NS(index)::IndexReader* reader) ;
+
+ Filter* clone() const;
+
+ TCHAR* toString();
+ };
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/search/ExactPhraseScorer.cpp b/src/3rdparty/clucene/src/CLucene/search/ExactPhraseScorer.cpp
new file mode 100644
index 0000000..1fbf2e9
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/ExactPhraseScorer.cpp
@@ -0,0 +1,85 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "ExactPhraseScorer.h"
+
+#include "PhraseScorer.h"
+#include "CLucene/index/Terms.h"
+
+CL_NS_USE(index)
+CL_NS_DEF(search)
+
+ ExactPhraseScorer::ExactPhraseScorer(Weight* weight, TermPositions** tps,
+ int32_t* positions, Similarity* similarity, uint8_t* norms):
+ PhraseScorer(weight, tps, positions, similarity, norms){
+ //Func - Constructor
+ //Pre - tps != NULL
+ // tpsLength >= 0
+ // n != NULL
+ //Post - Instance has been created
+
+ CND_PRECONDITION(tps != NULL,"tps is NULL");
+ CND_PRECONDITION(tps[0] != NULL,"tps is NULL");
+ //CND_PRECONDITION(n != NULL,"n is NULL") =this is checked already in PhraseScorer
+
+ }
+
+ qreal ExactPhraseScorer::phraseFreq(){
+ //Func - Returns the freqency of the phrase
+ //Pre - first != NULL
+ // last != NULL
+ // pq != NULL
+ // size of the PhraseQueue pq is 0
+ //Post - The frequency of the phrase has been returned
+
+ CND_PRECONDITION(first != NULL,"first is NULL");
+ CND_PRECONDITION(last != NULL,"last is NULL");
+ CND_PRECONDITION(pq != NULL,"pq is NULL");
+ CND_PRECONDITION(pq->size()==0,"pq is not empty");
+
+ //build pq from list
+
+ //Add the nodes of the list of PhrasePositions and store them
+ //into the PhraseQueue pq so it can used to build
+ //a list of sorted nodes
+ for (PhrasePositions* pp = first; pp != NULL; pp = pp->_next) {
+ //Read the first TermPosition of the current PhrasePositions pp
+ pp->firstPosition();
+ //Store the current PhrasePositions pp into the PhraseQueue pq
+ pq->put(pp);
+ }
+ //pqToList requires that first and last be NULL when it's called.
+ //This is done at the beginning of pqToList()
+ //In this case, the nodes of the linked list are referenced by pq (see
+ //above loop), so we can clear our pointers to the head and tail of the
+ //linked list without fear of leaking the nodes.
+
+ //rebuild list from pq
+ pqToList();
+
+ //Initialize freq at 0
+ int32_t freq = 0;
+
+ //find position with all terms
+ do {
+ //scan forward in first
+ while (first->position < last->position){
+ do{
+ if (!first->nextPosition()){
+ return (qreal)freq;
+ }
+ } while (first->position < last->position);
+ //Make the current first node the last node in the list
+ firstToLast();
+ }
+ //all equal: a match has been found
+ freq++;
+ } while (last->nextPosition());
+
+ return (qreal)freq;
+ }
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/search/ExactPhraseScorer.h b/src/3rdparty/clucene/src/CLucene/search/ExactPhraseScorer.h
new file mode 100644
index 0000000..d82aa9e
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/ExactPhraseScorer.h
@@ -0,0 +1,31 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_search_ExactPhraseScorer_
+#define _lucene_search_ExactPhraseScorer_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "PhraseScorer.h"
+#include "CLucene/index/Terms.h"
+
+CL_NS_DEF(search)
+
+ class ExactPhraseScorer: public PhraseScorer {
+ public:
+ ExactPhraseScorer(Weight* weight, CL_NS(index)::TermPositions** tps, int32_t* positions,
+ Similarity* similarity, uint8_t* norms );
+
+ ~ExactPhraseScorer(){
+ }
+ protected:
+ //Returns the exact freqency of the phrase
+ qreal phraseFreq();
+ };
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/search/Explanation.cpp b/src/3rdparty/clucene/src/CLucene/search/Explanation.cpp
new file mode 100644
index 0000000..87189b7
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/Explanation.cpp
@@ -0,0 +1,133 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "Explanation.h"
+#include "CLucene/util/StringBuffer.h"
+
+CL_NS_USE(util)
+CL_NS_DEF(search)
+
+
+Explanation::Explanation(qreal value, const TCHAR* description) {
+ this->value = value;
+ _tcsncpy(this->description,description,LUCENE_SEARCH_EXPLANATION_DESC_LEN);
+}
+
+Explanation::Explanation() {
+ this->value = 0;
+ this->description[0]=0;
+}
+
+Explanation::Explanation(const Explanation& copy){
+ set(copy);
+}
+void Explanation::set(const Explanation& copy){
+ this->value = copy.value;
+ STRCPY_TtoT(description,copy.description,LUCENE_SEARCH_EXPLANATION_DESC_LEN);
+
+ details.clear();
+ typedef CL_NS(util)::Deletor::Object<Explanation> Deletor;
+ CL_NS(util)::CLArrayList<Explanation*, Deletor>::const_iterator itr;
+ itr = copy.details.begin();
+ while ( itr != copy.details.end() ){
+ details.push_back( (*itr)->clone() );
+ ++itr;
+ }
+}
+
+Explanation::~Explanation(){
+}
+
+void Explanation::setDescription(const TCHAR* description) {
+ _tcsncpy(this->description,description,LUCENE_SEARCH_EXPLANATION_DESC_LEN);
+}
+
+
+Explanation* Explanation::clone() const{
+ return _CLNEW Explanation(*this);
+}
+
+qreal Explanation::getValue() const{
+ return value;
+}
+
+void Explanation::setValue(qreal value) {
+ this->value = value;
+}
+
+const TCHAR* Explanation::getDescription() const {
+ return description;
+}
+
+///todo: mem leaks
+TCHAR* Explanation::toString(int32_t depth) {
+ StringBuffer buffer;
+ for (int32_t i = 0; i < depth; i++) {
+ buffer.append(_T(" "));
+ }
+ buffer.appendFloat(getValue(),2);
+ buffer.append(_T(" = "));
+ buffer.append(getDescription());
+ buffer.append(_T("\n"));
+
+ for ( uint32_t j=0;j<details.size();j++ ){
+ TCHAR* tmp = details[j]->toString(depth+1);
+ buffer.append(tmp);
+ _CLDELETE_CARRAY(tmp);
+ }
+ return buffer.toString();
+}
+
+int Explanation::getDetailsLength(){
+ return details.size();
+}
+Explanation* Explanation::getDetail(int i){
+ return details[i];
+}
+/** The sub-nodes of this explanation node. */
+void Explanation::getDetails(Explanation** ret) {
+ uint32_t size = details.size();
+ for ( uint32_t i=0;i<size;i++ ){
+ ret[i] = details[i]->clone();
+ }
+ ret[size] = NULL;
+}
+
+/** Adds a sub-node to this explanation node. */
+void Explanation::addDetail(Explanation* detail) {
+ details.push_back(detail);
+}
+
+/** Render an explanation as text. */
+TCHAR* Explanation::toString() {
+ return toString(0);
+}
+
+/** Render an explanation as HTML. */
+///todo: mem leaks
+TCHAR* Explanation::toHtml() {
+ StringBuffer buffer;
+ TCHAR* tmp;
+ buffer.append(_T("<ul>\n"));
+
+ buffer.append(_T("<li>"));
+ buffer.appendFloat(getValue(),2);
+ buffer.append(_T(" = "));
+
+ buffer.append(getDescription());
+ buffer.append(_T("</li>\n"));
+
+ for ( uint32_t i=0;i<details.size();i++ ){
+ tmp = details[i]->toHtml();
+ buffer.append(tmp);
+ _CLDELETE_CARRAY(tmp);
+ }
+ buffer.append(_T("</ul>\n"));
+
+ return buffer.toString();
+}
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/search/Explanation.h b/src/3rdparty/clucene/src/CLucene/search/Explanation.h
new file mode 100644
index 0000000..7c95822
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/Explanation.h
@@ -0,0 +1,66 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_search_Explanation
+#define _lucene_search_Explanation
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+CL_NS_DEF(search)
+
+ #define LUCENE_SEARCH_EXPLANATION_DESC_LEN 200
+ class Explanation :LUCENE_BASE {
+ private:
+ qreal value; // the value of this node
+ TCHAR description[LUCENE_SEARCH_EXPLANATION_DESC_LEN]; // what it represents
+ CL_NS(util)::CLArrayList<Explanation*,CL_NS(util)::Deletor::Object<Explanation> > details; // sub-explanations
+
+ TCHAR* toString(int32_t depth);
+ protected:
+ Explanation(const Explanation& copy);
+ public:
+ Explanation();
+ ~Explanation();
+
+ Explanation(qreal value, const TCHAR* description);
+ void set(const Explanation& other);
+
+ Explanation* clone() const;
+
+ /** The value assigned to this explanation node. */
+ qreal getValue() const;
+
+ /** Sets the value assigned to this explanation node. */
+ void setValue(qreal value);
+
+ /** A description of this explanation node. */
+ const TCHAR* getDescription() const; ///<returns reference
+
+ /** Sets the description of this explanation node. */
+ void setDescription(const TCHAR* description);
+
+ /** The sub-nodes of this explanation node.
+ * @param ret this array of Explanations should be getDetailsLength()+1 in size.
+ The array will be null terminated.
+ */
+ void getDetails(Explanation** ret);
+ int getDetailsLength();
+ Explanation* getDetail(int i);
+
+ /** Adds a sub-node to this explanation node. */
+ void addDetail(Explanation* detail);
+
+ /** Render an explanation as text. */
+ TCHAR* toString();
+
+ /** Render an explanation as HTML. */
+ TCHAR* toHtml();
+ };
+
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/search/FieldCache.cpp b/src/3rdparty/clucene/src/CLucene/search/FieldCache.cpp
new file mode 100644
index 0000000..fae6720
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/FieldCache.cpp
@@ -0,0 +1,55 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "FieldCache.h"
+#include "FieldCacheImpl.h"
+
+CL_NS_DEF(search)
+
+FieldCache* FieldCache::DEFAULT = _CLNEW FieldCacheImpl();
+int32_t FieldCache::STRING_INDEX = -1;
+
+FieldCacheAuto::FieldCacheAuto(int32_t len, int32_t type){
+ contentType = type;
+ contentLen = len;
+ ownContents = false;
+
+ intArray=NULL;
+ floatArray=NULL;
+ stringIndex=NULL;
+ stringArray=NULL;
+ comparableArray=NULL;
+ sortComparator=NULL;
+ scoreDocComparator=NULL;
+}
+FieldCacheAuto::~FieldCacheAuto(){
+ if ( contentType == FieldCacheAuto::INT_ARRAY ){
+ _CLDELETE_ARRAY(intArray);
+ }else if ( contentType == FieldCacheAuto::FLOAT_ARRAY ){
+ _CLDELETE_ARRAY(floatArray);
+ }else if ( contentType == FieldCacheAuto::STRING_INDEX ){
+ _CLDELETE(stringIndex);
+ }else if ( contentType == FieldCacheAuto::STRING_ARRAY ){
+ if ( ownContents ){
+ for ( int32_t i=0;i<contentLen;i++ )
+ _CLDELETE_CARRAY(stringArray[i]);
+ }
+ _CLDELETE_ARRAY(stringArray);
+ }else if ( contentType == FieldCacheAuto::COMPARABLE_ARRAY ){
+ if ( ownContents ){
+ for ( int32_t i=0;i<contentLen;i++ )
+ _CLDELETE(comparableArray[i]);
+ }
+ _CLDELETE_ARRAY(comparableArray);
+ }else if ( contentType == FieldCacheAuto::SORT_COMPARATOR ){
+ _CLDELETE(sortComparator);
+ }else if ( contentType == FieldCacheAuto::SCOREDOC_COMPARATOR ){
+ _CLDELETE(scoreDocComparator);
+ }
+}
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/search/FieldCache.h b/src/3rdparty/clucene/src/CLucene/search/FieldCache.h
new file mode 100644
index 0000000..eeec26f
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/FieldCache.h
@@ -0,0 +1,182 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_search_FieldCache_
+#define _lucene_search_FieldCache_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "CLucene/index/IndexReader.h"
+#include "Sort.h"
+
+
+CL_NS_DEF(search)
+
+class FieldCacheAuto; //predefine
+
+/**
+ * Expert: Maintains caches of term values.
+ *
+ */
+class FieldCache :LUCENE_BASE {
+public:
+ virtual ~FieldCache(){
+ }
+
+ /** Expert: Stores term text values and document ordering data. */
+ class StringIndex:LUCENE_BASE {
+ public:
+ /** All the term values, in natural order. */
+ TCHAR** lookup;
+
+ /** For each document, an index into the lookup array. */
+ int32_t* order;
+
+ int count;
+
+ /** Creates one of these objects
+ Consumes all memory given.
+ */
+ StringIndex (int32_t* values, TCHAR** lookup, int count) {
+ this->count = count;
+ this->order = values;
+ this->lookup = lookup;
+ }
+
+ ~StringIndex(){
+ _CLDELETE_ARRAY(order);
+
+ for ( int i=0;i<count;i++ )
+ _CLDELETE_CARRAY(lookup[i]);
+ _CLDELETE_ARRAY(lookup);
+ }
+ };
+
+
+ /** Indicator for FieldCache::StringIndex values in the cache.
+ NOTE: the value assigned to this constant must not be
+ the same as any of those in SortField!!
+ */
+ static int32_t STRING_INDEX;
+
+ /** Expert: The cache used internally by sorting and range query classes. */
+ static FieldCache* DEFAULT;
+
+ /** Checks the internal cache for an appropriate entry, and if none is
+ * found, reads the terms in <code>field</code> as integers and returns an array
+ * of size <code>reader.maxDoc()</code> of the value each document
+ * has in the given field.
+ * @param reader Used to get field values.
+ * @param field Which field contains the integers.
+ * @return The values in the given field for each document.
+ * @throws IOException If any error occurs.
+ */
+ virtual FieldCacheAuto* getInts (CL_NS(index)::IndexReader* reader, const TCHAR* field) = 0;
+
+ /** Checks the internal cache for an appropriate entry, and if
+ * none is found, reads the terms in <code>field</code> as floats and returns an array
+ * of size <code>reader.maxDoc()</code> of the value each document
+ * has in the given field.
+ * @param reader Used to get field values.
+ * @param field Which field contains the floats.
+ * @return The values in the given field for each document.
+ * @throws IOException If any error occurs.
+ */
+ virtual FieldCacheAuto* getFloats (CL_NS(index)::IndexReader* reader, const TCHAR* field) = 0;
+
+ /** Checks the internal cache for an appropriate entry, and if none
+ * is found, reads the term values in <code>field</code> and returns an array
+ * of size <code>reader.maxDoc()</code> containing the value each document
+ * has in the given field.
+ * @param reader Used to get field values.
+ * @param field Which field contains the strings.
+ * @return The values in the given field for each document.
+ * @throws IOException If any error occurs.
+ */
+ virtual FieldCacheAuto* getStrings (CL_NS(index)::IndexReader* reader, const TCHAR* field) = 0;
+
+ /** Checks the internal cache for an appropriate entry, and if none
+ * is found reads the term values in <code>field</code> and returns
+ * an array of them in natural order, along with an array telling
+ * which element in the term array each document uses.
+ * @param reader Used to get field values.
+ * @param field Which field contains the strings.
+ * @return Array of terms and index into the array for each document.
+ * @throws IOException If any error occurs.
+ */
+ virtual FieldCacheAuto* getStringIndex (CL_NS(index)::IndexReader* reader, const TCHAR* field) = 0;
+
+ /** Checks the internal cache for an appropriate entry, and if
+ * none is found reads <code>field</code> to see if it contains integers, floats
+ * or strings, and then calls one of the other methods in this class to get the
+ * values. For string values, a FieldCache::StringIndex is returned. After
+ * calling this method, there is an entry in the cache for both
+ * type <code>AUTO</code> and the actual found type.
+ * @param reader Used to get field values.
+ * @param field Which field contains the values.
+ * @return int32_t[], qreal[] or FieldCache::StringIndex.
+ * @throws IOException If any error occurs.
+ */
+ virtual FieldCacheAuto* getAuto (CL_NS(index)::IndexReader* reader, const TCHAR* field) = 0;
+
+ /** Checks the internal cache for an appropriate entry, and if none
+ * is found reads the terms out of <code>field</code> and calls the given SortComparator
+ * to get the sort values. A hit in the cache will happen if <code>reader</code>,
+ * <code>field</code>, and <code>comparator</code> are the same (using <code>equals()</code>)
+ * as a previous call to this method.
+ * @param reader Used to get field values.
+ * @param field Which field contains the values.
+ * @param comparator Used to convert terms into something to sort by.
+ * @return Array of sort objects, one for each document.
+ * @throws IOException If any error occurs.
+ */
+ virtual FieldCacheAuto* getCustom (CL_NS(index)::IndexReader* reader, const TCHAR* field, SortComparator* comparator) = 0;
+};
+
+/** A class holding an AUTO field. In java lucene an Object
+ is used, but we use this.
+ contentType:
+ 1 - integer array
+ 2 - float array
+ 3 - FieldCache::StringIndex object
+ This class is also used when returning getInt, getFloat, etc
+ because we have no way of returning the size of the array and this
+ class can be used to determine the array size
+*/
+class FieldCacheAuto:LUCENE_BASE{
+public:
+ enum{
+ INT_ARRAY=1,
+ FLOAT_ARRAY=2,
+ STRING_INDEX=3,
+ STRING_ARRAY=4,
+ COMPARABLE_ARRAY=5,
+ SORT_COMPARATOR=6,
+ SCOREDOC_COMPARATOR=7
+ };
+
+ FieldCacheAuto(int32_t len, int32_t type);
+ ~FieldCacheAuto();
+ ///if contents should be deleted too, depending on type
+ bool ownContents;
+ int32_t contentLen; //number of items in the list
+ uint8_t contentType;
+ int32_t* intArray; //item 1
+ qreal* floatArray; //item 2
+ FieldCache::StringIndex* stringIndex; //item 3
+ TCHAR** stringArray; //item 4
+ CL_NS(util)::Comparable** comparableArray; //item 5
+ SortComparator* sortComparator; //item 6
+ ScoreDocComparator* scoreDocComparator; //item 7
+
+};
+
+
+CL_NS_END
+
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/search/FieldCacheImpl.cpp b/src/3rdparty/clucene/src/CLucene/search/FieldCacheImpl.cpp
new file mode 100644
index 0000000..6205209
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/FieldCacheImpl.cpp
@@ -0,0 +1,529 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "FieldCacheImpl.h"
+
+CL_NS_USE(util)
+CL_NS_USE(index)
+CL_NS_DEF(search)
+
+FieldCacheImpl::FieldCacheImpl():
+ cache(false,true){
+}
+FieldCacheImpl::~FieldCacheImpl(){
+ cache.clear();
+}
+
+FieldCacheImpl::FileEntry::FileEntry (const TCHAR* field, int32_t type) {
+ this->field = CLStringIntern::intern(field CL_FILELINE);
+ this->type = type;
+ this->custom = NULL;
+ this->_hashCode = 0;
+ }
+
+ /** Creates one of these objects for a custom comparator. */
+ FieldCacheImpl::FileEntry::FileEntry (const TCHAR* field, SortComparatorSource* custom) {
+ this->field = CLStringIntern::intern(field CL_FILELINE);
+ this->type = SortField::CUSTOM;
+ this->custom = custom;
+ this->_hashCode = 0;
+ }
+ FieldCacheImpl::FileEntry::~FileEntry(){
+ CLStringIntern::unintern(field);
+ }
+
+ size_t FieldCacheImpl::FileEntry::hashCode(){
+ if ( _hashCode == 0 ){
+ //todo: cache hashcode?
+ size_t ret = Misc::thashCode(field);
+ if ( custom != NULL )
+ ret = ret ^ custom->hashCode();
+ ret = ret ^ (type*7); //type with a seed
+ _hashCode = ret;
+ }
+ return _hashCode;
+ }
+ int32_t FieldCacheImpl::FileEntry::compareTo(const FieldCacheImpl::FileEntry* other) const{
+ if ( other->field == this->field ){
+ if ( other->type == this->type ){
+ if ( other->custom == NULL ){
+ if ( this->custom == NULL )
+ return 0; //both null
+ else
+ return 1;
+ }else if ( this->custom == NULL )
+ return -1;
+ else if ( other->custom < this->custom )
+ return -1;
+ else if ( other->custom > this->custom )
+ return 1;
+ else
+ return 0;
+ }else if ( other->type > this->type )
+ return 1;
+ else
+ return -1;
+
+ }else
+ return _tcscmp(other->field,this->field);
+ }
+
+ /** Two of these are equal iff they reference the same field and type. */
+ /*bool FieldCacheImpl::FileEntry::equals (FileEntry* other) {
+ if (other->field == field && other->type == type) {
+ if (other->custom == NULL) {
+ if (custom == NULL)
+ return true;
+ } else if (other->custom->equals (custom)) {
+ return true;
+ }
+ }
+ }*/
+
+ /** Composes a hashcode based on the field and type. */
+ /*size_t FieldCacheImpl::FileEntry::hashCode() {
+ return field->hashCode() ^ type ^ (custom==NULL ? 0 : custom->hashCode());
+ }*/
+
+
+
+
+
+ /** See if an object is in the cache. */
+ FieldCacheAuto* FieldCacheImpl::lookup (IndexReader* reader, const TCHAR* field, int32_t type) {
+ FieldCacheAuto* ret = NULL;
+ FileEntry* entry = _CLNEW FileEntry (field, type);
+ {
+ SCOPED_LOCK_MUTEX(THIS_LOCK)
+ fieldcacheCacheReaderType* readerCache = cache.get(reader);
+ if (readerCache != NULL)
+ ret = readerCache->get (entry);
+ _CLDELETE(entry);
+ }
+ return ret;
+ }
+
+
+ /** See if a custom object is in the cache. */
+ FieldCacheAuto* FieldCacheImpl::lookup (IndexReader* reader, const TCHAR* field, SortComparatorSource* comparer) {
+ FieldCacheAuto* ret = NULL;
+ FileEntry* entry = _CLNEW FileEntry (field, comparer);
+ {
+ SCOPED_LOCK_MUTEX(THIS_LOCK)
+ fieldcacheCacheReaderType* readerCache = cache.get(reader);
+ if (readerCache != NULL)
+ ret = readerCache->get (entry);
+ _CLDELETE(entry);
+}
+ return ret;
+ }
+
+ void FieldCacheImpl::closeCallback(CL_NS(index)::IndexReader* reader, void* fieldCacheImpl){
+ FieldCacheImpl* fci = (FieldCacheImpl*)fieldCacheImpl;
+ SCOPED_LOCK_MUTEX(fci->THIS_LOCK)
+ fci->cache.remove(reader);
+ }
+
+ /** Put an object into the cache. */
+ void FieldCacheImpl::store (IndexReader* reader, const TCHAR* field, int32_t type, FieldCacheAuto* value) {
+ FileEntry* entry = _CLNEW FileEntry (field, type);
+ {
+ SCOPED_LOCK_MUTEX(THIS_LOCK)
+ fieldcacheCacheReaderType* readerCache = cache.get(reader);
+ if (readerCache == NULL) {
+ readerCache = _CLNEW fieldcacheCacheReaderType;
+ cache.put(reader,readerCache);
+ reader->addCloseCallback(closeCallback, this);
+ }
+ readerCache->put (entry, value);
+ //this is supposed to return the previous value, but it needs to be deleted!!!
+ }
+ }
+
+ /** Put a custom object into the cache. */
+ void FieldCacheImpl::store (IndexReader* reader, const TCHAR* field, SortComparatorSource* comparer, FieldCacheAuto* value) {
+ FileEntry* entry = _CLNEW FileEntry (field, comparer);
+ {
+ SCOPED_LOCK_MUTEX(THIS_LOCK)
+ fieldcacheCacheReaderType* readerCache = cache.get(reader);
+ if (readerCache == NULL) {
+ readerCache = _CLNEW fieldcacheCacheReaderType;
+ cache.put(reader, readerCache);
+ reader->addCloseCallback(FieldCacheImpl::closeCallback, this);
+ }
+ readerCache->put(entry, value);
+ //this is supposed to return the previous value, but it needs to be deleted!!!
+ }
+ }
+
+
+
+
+
+ // inherit javadocs
+ FieldCacheAuto* FieldCacheImpl::getInts (IndexReader* reader, const TCHAR* field) {
+ field = CLStringIntern::intern(field CL_FILELINE);
+ FieldCacheAuto* ret = lookup (reader, field, SortField::INT);
+ if (ret == NULL) {
+ int32_t retLen = reader->maxDoc();
+ int32_t* retArray = _CL_NEWARRAY(int32_t,retLen);
+ memset(retArray,0,sizeof(int32_t)*retLen);
+ if (retLen > 0) {
+ TermDocs* termDocs = reader->termDocs();
+
+ Term* term = _CLNEW Term (field, LUCENE_BLANK_STRING, false);
+ TermEnum* termEnum = reader->terms (term);
+ _CLDECDELETE(term);
+ try {
+ if (termEnum->term(false) == NULL) {
+ _CLTHROWA(CL_ERR_Runtime,"no terms in field"); //todo: add detailed error: + field);
+ }
+ do {
+ Term* term = termEnum->term(false);
+ if (term->field() != field)
+ break;
+
+ TCHAR* end;
+ int32_t termval = (int32_t)_tcstoi64(term->text(), &end, 10);
+ termDocs->seek (termEnum);
+ while (termDocs->next()) {
+ retArray[termDocs->doc()] = termval;
+ }
+ } while (termEnum->next());
+ } _CLFINALLY(
+ termDocs->close();
+ _CLDELETE(termDocs);
+ termEnum->close();
+ _CLDELETE(termEnum);
+ )
+ }
+
+ FieldCacheAuto* fa = _CLNEW FieldCacheAuto(retLen,FieldCacheAuto::INT_ARRAY);
+ fa->intArray = retArray;
+
+ store (reader, field, SortField::INT, fa);
+ CLStringIntern::unintern(field);
+ return fa;
+ }
+ CLStringIntern::unintern(field);
+ return ret;
+ }
+
+ // inherit javadocs
+ FieldCacheAuto* FieldCacheImpl::getFloats (IndexReader* reader, const TCHAR* field){
+ field = CLStringIntern::intern(field CL_FILELINE);
+ FieldCacheAuto* ret = lookup (reader, field, SortField::FLOAT);
+ if (ret == NULL) {
+ int32_t retLen = reader->maxDoc();
+ qreal* retArray = _CL_NEWARRAY(qreal,retLen);
+ memset(retArray,0,sizeof(qreal)*retLen);
+ if (retLen > 0) {
+ TermDocs* termDocs = reader->termDocs();
+
+ Term* term = _CLNEW Term (field, LUCENE_BLANK_STRING, false);
+ TermEnum* termEnum = reader->terms (term);
+ _CLDECDELETE(term);
+
+ try {
+ if (termEnum->term(false) == NULL) {
+ _CLTHROWA(CL_ERR_Runtime,"no terms in field "); //todo: make richer error + field);
+ }
+ do {
+ Term* term = termEnum->term(false);
+ if (term->field() != field)
+ break;
+
+ TCHAR* tmp;
+ qreal termval = _tcstod(term->text(),&tmp);
+ termDocs->seek (termEnum);
+ while (termDocs->next()) {
+ retArray[termDocs->doc()] = termval;
+ }
+ } while (termEnum->next());
+ } _CLFINALLY(
+ termDocs->close();
+ _CLDELETE(termDocs);
+ termEnum->close();
+ _CLDELETE(termEnum);
+ )
+ }
+
+ FieldCacheAuto* fa = _CLNEW FieldCacheAuto(retLen,FieldCacheAuto::FLOAT_ARRAY);
+ fa->floatArray = retArray;
+
+ store (reader, field, SortField::FLOAT, fa);
+ CLStringIntern::unintern(field);
+ return fa;
+ }
+ CLStringIntern::unintern(field);
+ return ret;
+ }
+
+
+ // inherit javadocs
+ FieldCacheAuto* FieldCacheImpl::getStrings (IndexReader* reader, const TCHAR* field){
+ //todo: this is not really used, i think?
+ field = CLStringIntern::intern(field CL_FILELINE);
+ FieldCacheAuto* ret = lookup (reader, field, SortField::STRING);
+ if (ret == NULL) {
+ int32_t retLen = reader->maxDoc();
+ TCHAR** retArray = _CL_NEWARRAY(TCHAR*,retLen+1);
+ memset(retArray,0,sizeof(TCHAR*)*(retLen+1));
+ if (retLen > 0) {
+ TermDocs* termDocs = reader->termDocs();
+
+ Term* term = _CLNEW Term (field, LUCENE_BLANK_STRING, false);
+ TermEnum* termEnum = reader->terms (term);
+ _CLDECDELETE(term);
+
+ try {
+ if (termEnum->term(false) == NULL) {
+ _CLTHROWA(CL_ERR_Runtime,"no terms in field "); //todo: extend to + field);
+ }
+ do {
+ Term* term = termEnum->term(false);
+ if (term->field() != field)
+ break;
+ const TCHAR* termval = term->text();
+ termDocs->seek (termEnum);
+ while (termDocs->next()) {
+ retArray[termDocs->doc()] = STRDUP_TtoT(termval); //todo: any better way of doing this???
+ }
+ } while (termEnum->next());
+ } _CLFINALLY(
+ retArray[retLen]=NULL;
+ termDocs->close();
+ _CLDELETE(termDocs);
+ termEnum->close();
+ _CLDELETE(termEnum);
+ )
+ }
+
+
+ FieldCacheAuto* fa = _CLNEW FieldCacheAuto(retLen,FieldCacheAuto::STRING_ARRAY);
+ fa->stringArray = retArray;
+ fa->ownContents=true;
+ store (reader, field, SortField::STRING, fa);
+ CLStringIntern::unintern(field);
+ return fa;
+ }
+ CLStringIntern::unintern(field);
+ return ret;
+ }
+
+ // inherit javadocs
+ FieldCacheAuto* FieldCacheImpl::getStringIndex (IndexReader* reader, const TCHAR* field){
+ field = CLStringIntern::intern(field CL_FILELINE);
+ FieldCacheAuto* ret = lookup (reader, field, STRING_INDEX);
+ int32_t t = 0; // current term number
+ if (ret == NULL) {
+ int32_t retLen = reader->maxDoc();
+ int32_t* retArray = _CL_NEWARRAY(int32_t,retLen);
+ memset(retArray,0,sizeof(int32_t)*retLen);
+
+ TCHAR** mterms = _CL_NEWARRAY(TCHAR*,retLen+2);
+ mterms[0]=NULL;
+ if ( retLen > 0 ) {
+ TermDocs* termDocs = reader->termDocs();
+
+ Term* term = _CLNEW Term (field, LUCENE_BLANK_STRING, false);
+ TermEnum* termEnum = reader->terms (term);
+ _CLDECDELETE(term);
+
+
+ CND_PRECONDITION(t+1 <= retLen, "t out of bounds");
+
+ // an entry for documents that have no terms in this field
+ // should a document with no terms be at top or bottom?
+ // this puts them at the top - if it is changed, FieldDocSortedHitQueue
+ // needs to change as well.
+ mterms[t++] = NULL;
+
+ try {
+ if (termEnum->term(false) == NULL) {
+ _CLTHROWA(CL_ERR_Runtime,"no terms in field"); //todo: make rich message " + field);
+ }
+ do {
+ Term* term = termEnum->term(false);
+ if (term->field() != field)
+ break;
+
+ // store term text
+ // we expect that there is at most one term per document
+ if (t >= retLen+1)
+ _CLTHROWA(CL_ERR_Runtime,"there are more terms than documents in field"); //todo: rich error \"" + field + "\"");
+ mterms[t] = STRDUP_TtoT(term->text());
+
+ termDocs->seek (termEnum);
+ while (termDocs->next()) {
+ retArray[termDocs->doc()] = t;
+ }
+
+ t++;
+ } while (termEnum->next());
+ CND_PRECONDITION(t<retLen+2,"t out of bounds");
+ mterms[t] = NULL;
+ } _CLFINALLY(
+ termDocs->close();
+ _CLDELETE(termDocs);
+ termEnum->close();
+ _CLDELETE(termEnum);
+ );
+
+ if (t == 0) {
+ // if there are no terms, make the term array
+ // have a single NULL entry
+ _CLDELETE_ARRAY(mterms);
+ mterms = _CL_NEWARRAY(TCHAR*,1); //todo: delete old mterms?
+ mterms[0]=NULL;
+ } else if (t < retLen) { //todo: check, was mterms.length
+ // if there are less terms than documents,
+ // trim off the dead array space
+ //const TCHAR** terms = _CL_NEWARRAY(TCHAR,t);
+ //System.arraycopy (mterms, 0, terms, 0, t);
+ //mterms = terms;
+
+ //we simply shorten the length of the array...
+
+ }
+ }
+ FieldCache::StringIndex* value = _CLNEW FieldCache::StringIndex (retArray, mterms,t);
+
+ FieldCacheAuto* fa = _CLNEW FieldCacheAuto(retLen,FieldCacheAuto::STRING_INDEX);
+ fa->stringIndex = value;
+ fa->ownContents=true;
+ store (reader, field, STRING_INDEX, fa);
+ CLStringIntern::unintern(field);
+ return fa;
+ }
+ CLStringIntern::unintern(field);
+ return ret;
+ }
+
+ // inherit javadocs
+ FieldCacheAuto* FieldCacheImpl::getAuto (IndexReader* reader, const TCHAR* field) {
+ field = CLStringIntern::intern(field CL_FILELINE);
+ FieldCacheAuto* ret = lookup (reader, field, SortField::AUTO);
+ if (ret == NULL) {
+ Term* term = _CLNEW Term (field, LUCENE_BLANK_STRING, false);
+ TermEnum* enumerator = reader->terms (term);
+ _CLDECDELETE(term);
+
+ try {
+ Term* term = enumerator->term(false);
+ if (term == NULL) {
+ _CLTHROWA(CL_ERR_Runtime,"no terms in field - cannot determine sort type"); //todo: make rich error: " + field + "
+ }
+ if (term->field() == field) {
+ const TCHAR* termtext = term->text();
+ size_t termTextLen = term->textLength();
+
+ bool isint=true;
+ for ( size_t i=0;i<termTextLen;i++ ){
+ if ( _tcschr(_T("0123456789 +-"),termtext[i]) == NULL ){
+ isint = false;
+ break;
+ }
+ }
+ if ( isint )
+ ret = getInts (reader, field);
+ else{
+ bool isfloat=true;
+
+ int32_t searchLen = termTextLen;
+ if ( termtext[termTextLen-1] == 'f' )
+ searchLen--;
+ for ( int32_t i=0;i<searchLen;i++ ){
+ if ( _tcschr(_T("0123456789 Ee.+-"),termtext[i]) == NULL ){
+ isfloat = false;
+ break;
+ }
+ }
+ if ( isfloat )
+ ret = getFloats (reader, field);
+ else{
+ ret = getStringIndex (reader, field);
+ }
+ }
+
+ if (ret != NULL) {
+ store (reader, field, SortField::AUTO, ret);
+ }
+ } else {
+ _CLTHROWA (CL_ERR_Runtime,"field does not appear to be indexed"); //todo: make rich error: \"" + field + "\"
+ }
+ } _CLFINALLY( enumerator->close(); _CLDELETE(enumerator) );
+
+ }
+ CLStringIntern::unintern(field);
+ return ret;
+ }
+
+
+ // inherit javadocs
+ FieldCacheAuto* FieldCacheImpl::getCustom (IndexReader* reader, const TCHAR* field, SortComparator* comparator){
+ field = CLStringIntern::intern(field CL_FILELINE);
+
+ FieldCacheAuto* ret = lookup (reader, field, comparator);
+ if (ret == NULL) {
+ int32_t retLen = reader->maxDoc();
+ Comparable** retArray = _CL_NEWARRAY(Comparable*,retLen);
+ memset(retArray,0,sizeof(Comparable*)*retLen);
+ if (retLen > 0) {
+ TermDocs* termDocs = reader->termDocs();
+ TermEnum* termEnum = reader->terms ();
+
+ try {
+ if (termEnum->term(false) == NULL) {
+ _CLTHROWA(CL_ERR_Runtime,"no terms in field "); //todo: make rich error + field);
+ }
+ do {
+ Term* term = termEnum->term(false);
+ if (term->field() != field)
+ break;
+ Comparable* termval = comparator->getComparable (term->text());
+ termDocs->seek (termEnum);
+ while (termDocs->next()) {
+ retArray[termDocs->doc()] = termval;
+ }
+ } while (termEnum->next());
+ } _CLFINALLY (
+ termDocs->close();
+ _CLDELETE(termDocs);
+ termEnum->close();
+ _CLDELETE(termEnum);
+ );
+ }
+
+ FieldCacheAuto* fa = _CLNEW FieldCacheAuto(retLen,FieldCacheAuto::COMPARABLE_ARRAY);
+ fa->comparableArray = retArray;
+ fa->ownContents=true;
+ store (reader, field, SortField::CUSTOM, fa);
+ CLStringIntern::unintern(field);
+ return fa;
+ }
+ CLStringIntern::unintern(field);
+ return ret;
+ }
+
+
+ FieldCacheImpl::fieldcacheCacheReaderType::fieldcacheCacheReaderType(){
+ setDeleteKey(false);
+ setDeleteValue(false);
+ }
+ FieldCacheImpl::fieldcacheCacheReaderType::~fieldcacheCacheReaderType(){
+ iterator itr = begin();
+ while ( itr != end() ){
+ FileEntry* f = itr->first;
+ if ( f->getType() != SortField::AUTO )
+ _CLDELETE( itr->second );
+ _CLDELETE( f );
+ ++itr;
+ }
+ clear();
+ }
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/search/FieldCacheImpl.h b/src/3rdparty/clucene/src/CLucene/search/FieldCacheImpl.h
new file mode 100644
index 0000000..ac3c4ca
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/FieldCacheImpl.h
@@ -0,0 +1,144 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_search_FieldCacheImpl_
+#define _lucene_search_FieldCacheImpl_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "CLucene/index/IndexReader.h"
+#include "FieldCache.h"
+#include "Sort.h"
+
+
+CL_NS_DEF(search)
+
+
+/**
+ * Expert: The default cache implementation, storing all values in memory.
+ *
+ */
+class FieldCacheImpl: public FieldCache {
+public:
+ DEFINE_MUTEX(THIS_LOCK)
+
+ /** Expert: Every key in the internal cache is of this type. */
+ class FileEntry:LUCENE_BASE {
+ const TCHAR* field; // which Field
+ int32_t type; // which SortField type
+ SortComparatorSource* custom; // which custom comparator
+ size_t _hashCode;
+ public:
+ /** Creates one of these objects. */
+ FileEntry (const TCHAR* field, int32_t type);
+
+ /** Creates one of these objects for a custom comparator. */
+ FileEntry (const TCHAR* field, SortComparatorSource* custom);
+ ~FileEntry();
+
+ int32_t getType() const{ return type; }
+
+ /** Two of these are equal iff they reference the same field and type. */
+ bool equals (FileEntry* other) const;
+
+ /** Composes a hashcode based on the field and type. */
+ size_t hashCode();
+
+ int32_t compareTo(const FileEntry* other) const;
+
+ class Compare:LUCENE_BASE, public CL_NS(util)::Compare::_base //<Term*>
+ {
+ public:
+ bool operator()( FileEntry* f1, FileEntry* f2 ) const{
+ return ( f1->compareTo(f2) < 0 );
+ }
+ size_t operator()( FileEntry* t ) const{
+ return t->hashCode();
+ }
+ };
+ class Equals:LUCENE_BASE, public CL_NS(util)::Compare::_base //<Term*>
+ {
+ public:
+ bool operator()( FileEntry* f1, FileEntry* f2 ) const{
+ return ( f1->compareTo(f2) == 0 );
+ }
+ };
+ };
+
+ FieldCacheImpl();
+ ~FieldCacheImpl();
+private:
+
+ ///the type that is stored in the field cache. can't use a typedef because
+ ///the decorated name would become too long
+ class fieldcacheCacheReaderType: public CL_NS(util)::CLHashMap<FileEntry*,
+ FieldCacheAuto*,
+ FileEntry::Compare,
+ FileEntry::Equals,
+ CL_NS(util)::Deletor::Object<FileEntry>,
+ CL_NS(util)::Deletor::Object<FieldCacheAuto> >{
+ public:
+ fieldcacheCacheReaderType();
+ ~fieldcacheCacheReaderType();
+ };
+
+ //note: typename gets too long if using cacheReaderType as a typename
+ typedef CL_NS(util)::CLHashMap<CL_NS(index)::IndexReader*,
+ fieldcacheCacheReaderType*,
+ CL_NS(util)::Compare::Void<CL_NS(index)::IndexReader>,
+ CL_NS(util)::Equals::Void<CL_NS(index)::IndexReader>,
+ CL_NS(util)::Deletor::Object<CL_NS(index)::IndexReader>,
+ CL_NS(util)::Deletor::Object<fieldcacheCacheReaderType> > fieldcacheCacheType;
+
+ /** The internal cache. Maps FileEntry to array of interpreted term values. **/
+ //todo: make indexreader remove itself from here when the reader is shut
+ fieldcacheCacheType cache;
+
+ /** See if an object is in the cache. */
+ FieldCacheAuto* lookup (CL_NS(index)::IndexReader* reader, const TCHAR* field, int32_t type) ;
+
+ /** See if a custom object is in the cache. */
+ FieldCacheAuto* lookup (CL_NS(index)::IndexReader* reader, const TCHAR* field, SortComparatorSource* comparer);
+
+ /** Put an object into the cache. */
+ void store (CL_NS(index)::IndexReader* reader, const TCHAR* field, int32_t type, FieldCacheAuto* value);
+
+ /** Put a custom object into the cache. */
+ void store (CL_NS(index)::IndexReader* reader, const TCHAR* field, SortComparatorSource* comparer, FieldCacheAuto* value);
+
+public:
+
+ // inherit javadocs
+ FieldCacheAuto* getInts (CL_NS(index)::IndexReader* reader, const TCHAR* field);
+
+ // inherit javadocs
+ FieldCacheAuto* getFloats (CL_NS(index)::IndexReader* reader, const TCHAR* field);
+
+ // inherit javadocs
+ FieldCacheAuto* getStrings (CL_NS(index)::IndexReader* reader, const TCHAR* field);
+
+ // inherit javadocs
+ FieldCacheAuto* getStringIndex (CL_NS(index)::IndexReader* reader, const TCHAR* field);
+
+ // inherit javadocs
+ FieldCacheAuto* getAuto (CL_NS(index)::IndexReader* reader, const TCHAR* field);
+
+ // inherit javadocs
+ FieldCacheAuto* getCustom (CL_NS(index)::IndexReader* reader, const TCHAR* field, SortComparator* comparator);
+
+
+ /**
+ * Callback for when IndexReader closes. This causes
+ * any cache to be removed for the specified reader.
+ */
+ static void closeCallback(CL_NS(index)::IndexReader* reader, void* fieldCacheImpl);
+};
+
+
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/search/FieldDoc.h b/src/3rdparty/clucene/src/CLucene/search/FieldDoc.h
new file mode 100644
index 0000000..6ce915a
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/FieldDoc.h
@@ -0,0 +1,70 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_search_FieldDoc_
+#define _lucene_search_FieldDoc_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "ScoreDoc.h"
+
+CL_NS_DEF(search)
+
+/**
+ * Expert: A ScoreDoc which also contains information about
+ * how to sort the referenced document. In addition to the
+ * document number and score, this object contains an array
+ * of values for the document from the field(s) used to sort.
+ * For example, if the sort criteria was to sort by fields
+ * "a", "b" then "c", the <code>fields</code> object array
+ * will have three elements, corresponding respectively to
+ * the term values for the document in fields "a", "b" and "c".
+ * The class of each element in the array will be either
+ * Integer, Float or String depending on the type of values
+ * in the terms of each field.
+ *
+ * @see ScoreDoc
+ * @see TopFieldDocs
+ */
+class FieldDoc: public ScoreDoc {
+public:
+
+ /** Expert: The values which are used to sort the referenced document.
+ * The order of these will match the original sort criteria given by a
+ * Sort object. Each Object will be either an Integer, Float or String,
+ * depending on the type of values in the terms of the original field.
+ * @see Sort
+ * @see Searchable#search(Query,Filter,int32_t,Sort)
+ */
+ CL_NS(util)::Comparable** fields;
+
+ /** Expert: Creates one of these objects with empty sort information. */
+ FieldDoc (int32_t doc, qreal score):
+ ScoreDoc(doc,score) {
+ fields=NULL;
+ }
+
+ /** Expert: Creates one of these objects with the given sort information. */
+ FieldDoc (int32_t doc, qreal score, CL_NS(util)::Comparable** fields):
+ ScoreDoc(doc,score)
+ {
+ this->fields = fields;
+ }
+
+ ~FieldDoc(){
+ if ( fields != NULL ){
+ for ( int i=0;fields[i]!=NULL;i++ )
+ _CLDELETE(fields[i]);
+ _CLDELETE_ARRAY(fields);
+ }
+ }
+};
+
+CL_NS_END
+#endif
+
diff --git a/src/3rdparty/clucene/src/CLucene/search/FieldDocSortedHitQueue.cpp b/src/3rdparty/clucene/src/CLucene/search/FieldDocSortedHitQueue.cpp
new file mode 100644
index 0000000..0a52109
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/FieldDocSortedHitQueue.cpp
@@ -0,0 +1,171 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "FieldDocSortedHitQueue.h"
+
+
+CL_NS_USE(util)
+CL_NS_DEF(search)
+
+
+FieldDoc::FieldDoc (int32_t doc, qreal score)
+{
+ this->scoreDoc.doc = doc;
+ this->scoreDoc.score = score;
+ fields=NULL;
+}
+
+FieldDoc::FieldDoc (int32_t doc, qreal score, CL_NS(util)::Comparable** fields)
+{
+ this->scoreDoc.doc = doc;
+ this->scoreDoc.score = score;
+ this->fields = fields;
+}
+
+FieldDoc::~FieldDoc(){
+ if ( fields != NULL ){
+ for ( int i=0;fields[i]!=NULL;i++ )
+ _CLDELETE(fields[i]);
+ _CLDELETE_ARRAY(fields);
+ }
+}
+
+
+
+FieldDocSortedHitQueue::FieldDocSortedHitQueue (SortField** fields, int32_t size) {
+ this->fields = fields;
+ _countsize();
+ //this->collators = hasCollators (fields);
+ initialize (size,true);
+}
+
+bool FieldDocSortedHitQueue::lessThan (FieldDoc* docA, FieldDoc* docB) {
+ int32_t n = fieldsLen;
+ int32_t c = 0;
+ qreal f1,f2,r1,r2;
+ int32_t i1,i2;
+ const TCHAR *s1, *s2;
+
+ for (int32_t i=0; i<n && c==0; ++i) {
+ int32_t type = fields[i]->getType();
+ if (fields[i]->getReverse()) {
+ switch (type) {
+ case SortField::DOCSCORE:
+ r1 = __REINTERPRET_CAST(Compare::Float*, docA->fields[i])->getValue();
+ r2 = __REINTERPRET_CAST(Compare::Float*, docB->fields[i])->getValue();
+ if (r1 < r2) c = -1;
+ if (r1 > r2) c = 1;
+ break;
+ case SortField::DOC:
+ case SortField::INT:
+ i1 = __REINTERPRET_CAST(Compare::Int32*, docA->fields[i])->getValue();
+ i2 = __REINTERPRET_CAST(Compare::Int32*, docB->fields[i])->getValue();
+ if (i1 > i2) c = -1;
+ if (i1 < i2) c = 1;
+ break;
+ case SortField::STRING:
+ s1 = __REINTERPRET_CAST(Compare::TChar*, docA->fields[i])->getValue();
+ s2 = __REINTERPRET_CAST(Compare::TChar*, docB->fields[i])->getValue();
+ if (s2 == NULL) c = -1; // could be NULL if there are
+ else if (s1 == NULL) c = 1; // no terms in the given field
+ else c = _tcscmp(s2,s1); //else if (fields[i].getLocale() == NULL) {
+
+ /*todo: collators not impl
+ } else {
+ c = collators[i].compare (s2, s1);
+ }*/
+ break;
+ case SortField::FLOAT:
+ f1 = __REINTERPRET_CAST(Compare::Float*, docA->fields[i])->getValue();
+ f2 = __REINTERPRET_CAST(Compare::Float*, docB->fields[i])->getValue();
+ if (f1 > f2) c = -1;
+ if (f1 < f2) c = 1;
+ break;
+ case SortField::CUSTOM:
+ c = docB->fields[i]->compareTo (docA->fields[i]);
+ break;
+ case SortField::AUTO:
+ // we cannot handle this - even if we determine the type of object (qreal or
+ // Integer), we don't necessarily know how to compare them (both SCORE and
+ // qreal both contain floats, but are sorted opposite of each other). Before
+ // we get here, each AUTO should have been replaced with its actual value.
+ _CLTHROWA (CL_ERR_Runtime,"FieldDocSortedHitQueue cannot use an AUTO SortField");
+ default:
+ _CLTHROWA (CL_ERR_Runtime, "invalid SortField type"); //todo: rich error... : "+type);
+ }
+ } else {
+ switch (type) {
+ case SortField::DOCSCORE:
+ r1 = __REINTERPRET_CAST(Compare::Float*, docA->fields[i])->getValue();
+ r2 = __REINTERPRET_CAST(Compare::Float*, docB->fields[i])->getValue();
+ if (r1 > r2) c = -1;
+ if (r1 < r2) c = 1;
+ break;
+ case SortField::DOC:
+ case SortField::INT:
+ i1 = __REINTERPRET_CAST(Compare::Int32*, docA->fields[i])->getValue();
+ i2 = __REINTERPRET_CAST(Compare::Int32*, docB->fields[i])->getValue();
+ if (i1 < i2) c = -1;
+ if (i1 > i2) c = 1;
+ break;
+ case SortField::STRING:
+ s1 = __REINTERPRET_CAST(Compare::TChar*, docA->fields[i])->getValue();
+ s2 = __REINTERPRET_CAST(Compare::TChar*, docB->fields[i])->getValue();
+ // NULL values need to be sorted first, because of how FieldCache.getStringIndex()
+ // works - in that routine, any documents without a value in the given field are
+ // put first.
+ if (s1 == NULL) c = -1; // could be NULL if there are
+ else if (s2 == NULL) c = 1; // no terms in the given field
+ else c = _tcscmp(s1,s2); //else if (fields[i].getLocale() == NULL) {
+
+ /* todo: collators not implemented } else {
+ c = collators[i].compare (s1, s2);
+ }*/
+ break;
+ case SortField::FLOAT:
+ f1 = __REINTERPRET_CAST(Compare::Float*, docA->fields[i])->getValue();
+ f2 = __REINTERPRET_CAST(Compare::Float*, docB->fields[i])->getValue();
+ if (f1 < f2) c = -1;
+ if (f1 > f2) c = 1;
+ break;
+ case SortField::CUSTOM:
+ c = docA->fields[i]->compareTo (docB->fields[i]);
+ break;
+ case SortField::AUTO:
+ // we cannot handle this - even if we determine the type of object (qreal or
+ // Integer), we don't necessarily know how to compare them (both SCORE and
+ // qreal both contain floats, but are sorted opposite of each other). Before
+ // we get here, each AUTO should have been replaced with its actual value.
+ _CLTHROWA (CL_ERR_Runtime,"FieldDocSortedHitQueue cannot use an AUTO SortField");
+ default:
+ _CLTHROWA (CL_ERR_Runtime,"invalid SortField type"); //todo: rich error... : "+type);
+ }
+ }
+ }
+ return c > 0;
+}
+
+void FieldDocSortedHitQueue::setFields (SortField** fields) {
+ SCOPED_LOCK_MUTEX(THIS_LOCK)
+ if (this->fields == NULL) {
+ this->fields = fields;
+ _countsize();
+ //this->collators = hasCollators (fields);
+ }else if ( fields == NULL )
+ this->fields = NULL;
+}
+
+FieldDocSortedHitQueue::~FieldDocSortedHitQueue(){
+ if ( fields != NULL ){
+ for ( int i=0;fields[i]!=NULL;i++ )
+ _CLDELETE(fields[i]);
+ _CLDELETE_ARRAY(fields);
+ }
+}
+
+CL_NS_END
+
diff --git a/src/3rdparty/clucene/src/CLucene/search/FieldDocSortedHitQueue.h b/src/3rdparty/clucene/src/CLucene/search/FieldDocSortedHitQueue.h
new file mode 100644
index 0000000..5a46b3b
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/FieldDocSortedHitQueue.h
@@ -0,0 +1,159 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_search_FieldDocSortedHitQueue_
+#define _lucene_search_FieldDocSortedHitQueue_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "Sort.h"
+#include "CLucene/util/PriorityQueue.h"
+
+CL_NS_DEF(search)
+
+/**
+ * Expert: A ScoreDoc which also contains information about
+ * how to sort the referenced document. In addition to the
+ * document number and score, this object contains an array
+ * of values for the document from the field(s) used to sort.
+ * For example, if the sort criteria was to sort by fields
+ * "a", "b" then "c", the <code>fields</code> object array
+ * will have three elements, corresponding respectively to
+ * the term values for the document in fields "a", "b" and "c".
+ * The class of each element in the array will be either
+ * Integer, Float or String depending on the type of values
+ * in the terms of each field.
+ *
+ * @see ScoreDoc
+ * @see TopFieldDocs
+ */
+class FieldDoc: LUCENE_BASE {
+public:
+ //FieldDoc did inherit from ScoreDoc, but now we make the scoredoc a member
+ struct ScoreDoc scoreDoc;
+
+ /** Expert: The values which are used to sort the referenced document.
+ * The order of these will match the original sort criteria given by a
+ * Sort object. Each Object will be either an Integer, Float or String,
+ * depending on the type of values in the terms of the original field.
+ * @see Sort
+ * @see Searchable#search(Query,Filter,int32_t,Sort)
+ */
+ CL_NS(util)::Comparable** fields;
+
+ /** Expert: Creates one of these objects with empty sort information. */
+ FieldDoc (int32_t doc, qreal score);
+ /** Expert: Creates one of these objects with the given sort information. */
+ FieldDoc (int32_t doc, qreal score, CL_NS(util)::Comparable** fields);
+ ~FieldDoc();
+};
+
+/**
+ * Expert: Collects sorted results from Searchable's and collates them.
+ * The elements put into this queue must be of type FieldDoc.
+ */
+class FieldDocSortedHitQueue:
+ public CL_NS(util)::PriorityQueue<FieldDoc*,CL_NS(util)::Deletor::Object<FieldDoc> >
+{
+private:
+ DEFINE_MUTEX(THIS_LOCK)
+
+ // this cannot contain AUTO fields - any AUTO fields should
+ // have been resolved by the time this class is used.
+ SortField** fields;
+ int32_t fieldsLen;
+
+ void _countsize(){
+ fieldsLen=0;
+ while(fields[fieldsLen]!=NULL)
+ fieldsLen++;
+ }
+
+ // used in the case where the fields are sorted by locale
+ // based strings
+ //todo: not implemented in clucene because locales has not been implemented
+ //Collator[] collators; //volatile
+
+public:
+ /**
+ * Creates a hit queue sorted by the given list of fields.
+ * @param fields Field names, in priority order (highest priority first).
+ * @param size The number of hits to retain. Must be greater than zero.
+ */
+ FieldDocSortedHitQueue (SortField** fields, int32_t size);
+ ~FieldDocSortedHitQueue();
+
+
+ /**
+ * Allows redefinition of sort fields if they are <code>NULL</code>.
+ * This is to handle the case using ParallelMultiSearcher where the
+ * original list contains AUTO and we don't know the actual sort
+ * type until the values come back. The fields can only be set once.
+ * This method is thread safe.
+ * @param fields
+ */
+ void setFields (SortField** fields);
+
+ /** Returns the fields being used to sort. */
+ SortField** getFields() {
+ return fields;
+ }
+
+ /** Returns an array of collators, possibly <code>NULL</code>. The collators
+ * correspond to any SortFields which were given a specific locale.
+ * @param fields Array of sort fields.
+ * @return Array, possibly <code>NULL</code>.
+
+ private Collator[] hasCollators (SortField[] fields) {
+ if (fields == NULL) return NULL;
+ Collator[] ret = new Collator[fields.length];
+ for (int32_t i=0; i<fields.length; ++i) {
+ Locale locale = fields[i].getLocale();
+ if (locale != NULL)
+ ret[i] = Collator.getInstance (locale);
+ }
+ return ret;
+ }*/
+
+protected:
+ /**
+ * Returns whether <code>a</code> is less relevant than <code>b</code>.
+ * @param a FieldDoc
+ * @param b FieldDoc
+ * @return <code>true</code> if document <code>a</code> should be sorted after document <code>b</code>.
+ */
+ bool lessThan (FieldDoc* docA, FieldDoc* docB);
+};
+
+
+/**
+* Expert: Returned by low-level sorted search implementations.
+*
+* @see Searchable#search(Query,Filter,int32_t,Sort)
+*/
+class TopFieldDocs: public TopDocs {
+public:
+ /// The fields which were used to sort results by.
+ SortField** fields;
+
+ FieldDoc** fieldDocs;
+
+ /** Creates one of these objects.
+ * @param totalHits Total number of hits for the query.
+ * @param fieldDocs The top hits for the query.
+ * @param scoreDocs The top hits for the query.
+ * @param scoreDocsLen Length of fieldDocs and scoreDocs
+ * @param fields The sort criteria used to find the top hits.
+ */
+ TopFieldDocs (int32_t totalHits, FieldDoc** fieldDocs, int32_t scoreDocsLen, SortField** fields);
+ ~TopFieldDocs();
+};
+
+CL_NS_END
+#endif
+
diff --git a/src/3rdparty/clucene/src/CLucene/search/FieldSortedHitQueue.cpp b/src/3rdparty/clucene/src/CLucene/search/FieldSortedHitQueue.cpp
new file mode 100644
index 0000000..04f45e9
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/FieldSortedHitQueue.cpp
@@ -0,0 +1,212 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "FieldSortedHitQueue.h"
+#include "FieldDocSortedHitQueue.h"
+#include "Compare.h"
+
+CL_NS_USE(util)
+CL_NS_USE(index)
+CL_NS_DEF(search)
+
+FieldSortedHitQueue::hitqueueCacheType FieldSortedHitQueue::Comparators(false,true);
+
+FieldSortedHitQueue::FieldSortedHitQueue (IndexReader* reader, SortField** _fields, int32_t size):
+ fieldsLen(0),
+ maxscore(1.0f)
+{
+ while ( _fields[fieldsLen] != 0 )
+ fieldsLen++;
+
+ comparators = _CL_NEWARRAY(ScoreDocComparator*,fieldsLen+1);
+ SortField** tmp = _CL_NEWARRAY(SortField*,fieldsLen+1);
+ for (int32_t i=0; i<fieldsLen; ++i) {
+ const TCHAR* fieldname = _fields[i]->getField();
+ //todo: fields[i].getLocale(), not implemented
+ comparators[i] = getCachedComparator (reader, fieldname, _fields[i]->getType(), _fields[i]->getFactory());
+ tmp[i] = _CLNEW SortField (fieldname, comparators[i]->sortType(), _fields[i]->getReverse());
+ }
+ comparatorsLen = fieldsLen;
+ comparators[fieldsLen]=NULL;
+ tmp[fieldsLen] = NULL;
+ this->fields = tmp;
+
+ initialize(size,true);
+}
+
+
+bool FieldSortedHitQueue::lessThan (FieldDoc* docA, FieldDoc* docB) {
+ // keep track of maximum score
+ if (docA->scoreDoc.score > maxscore) maxscore = docA->scoreDoc.score;
+ if (docB->scoreDoc.score > maxscore) maxscore = docB->scoreDoc.score;
+
+ // run comparators
+ int32_t c = 0;
+ for ( int32_t i=0; c==0 && i<comparatorsLen; ++i ) {
+ c = (fields[i]->getReverse()) ? comparators[i]->compare (&docB->scoreDoc, &docA->scoreDoc) :
+ comparators[i]->compare (&docA->scoreDoc, &docB->scoreDoc);
+ }
+ // avoid random sort order that could lead to duplicates (bug #31241):
+ if (c == 0)
+ return docA->scoreDoc.doc > docB->scoreDoc.doc;
+ return c > 0;
+}
+
+
+//static
+ScoreDocComparator* FieldSortedHitQueue::comparatorString (IndexReader* reader, const TCHAR* field) {
+ //const TCHAR* field = CLStringIntern::intern(fieldname CL_FILELINE);
+ FieldCacheAuto* fa = FieldCache::DEFAULT->getStringIndex (reader, field);
+ //CLStringIntern::unintern(field);
+
+ CND_PRECONDITION(fa->contentType==FieldCacheAuto::STRING_INDEX,"Content type is incorrect");
+ fa->ownContents = false;
+ return _CLNEW ScoreDocComparators::String(fa->stringIndex, fa->contentLen);
+}
+
+//static
+ScoreDocComparator* FieldSortedHitQueue::comparatorInt (IndexReader* reader, const TCHAR* field){
+ //const TCHAR* field = CLStringIntern::intern(fieldname CL_FILELINE);
+ FieldCacheAuto* fa = FieldCache::DEFAULT->getInts (reader, field);
+ //CLStringIntern::unintern(field);
+
+ CND_PRECONDITION(fa->contentType==FieldCacheAuto::INT_ARRAY,"Content type is incorrect");
+ return _CLNEW ScoreDocComparators::Int32(fa->intArray, fa->contentLen);
+ }
+
+//static
+ ScoreDocComparator* FieldSortedHitQueue::comparatorFloat (IndexReader* reader, const TCHAR* field) {
+ //const TCHAR* field = CLStringIntern::intern(fieldname CL_FILELINE);
+ FieldCacheAuto* fa = FieldCache::DEFAULT->getFloats (reader, field);
+ //CLStringIntern::unintern(field);
+
+ CND_PRECONDITION(fa->contentType==FieldCacheAuto::FLOAT_ARRAY,"Content type is incorrect");
+ return _CLNEW ScoreDocComparators::Float (fa->floatArray, fa->contentLen);
+ }
+//static
+ ScoreDocComparator* FieldSortedHitQueue::comparatorAuto (IndexReader* reader, const TCHAR* field){
+ //const TCHAR* field = CLStringIntern::intern(fieldname CL_FILELINE);
+ FieldCacheAuto* fa = FieldCache::DEFAULT->getAuto (reader, field);
+ //CLStringIntern::unintern(field);
+
+ if (fa->contentType == FieldCacheAuto::STRING_INDEX ) {
+ return comparatorString (reader, field);
+ } else if (fa->contentType == FieldCacheAuto::INT_ARRAY) {
+ return comparatorInt (reader, field);
+ } else if (fa->contentType == FieldCacheAuto::FLOAT_ARRAY) {
+ return comparatorFloat (reader, field);
+ } else if (fa->contentType == FieldCacheAuto::STRING_ARRAY) {
+ return comparatorString (reader, field);
+ } else {
+ _CLTHROWA(CL_ERR_Runtime, "unknown data type in field"); //todo: rich error information: '"+field+"'");
+ }
+ }
+
+
+ //todo: Locale locale, not implemented yet
+ ScoreDocComparator* FieldSortedHitQueue::getCachedComparator (IndexReader* reader, const TCHAR* fieldname, int32_t type, SortComparatorSource* factory){
+ if (type == SortField::DOC)
+ return ScoreDocComparator::INDEXORDER;
+ if (type == SortField::DOCSCORE)
+ return ScoreDocComparator::RELEVANCE;
+ ScoreDocComparator* comparator = lookup (reader, fieldname, type, factory);
+ if (comparator == NULL) {
+ switch (type) {
+ case SortField::AUTO:
+ comparator = comparatorAuto (reader, fieldname);
+ break;
+ case SortField::INT:
+ comparator = comparatorInt (reader, fieldname);
+ break;
+ case SortField::FLOAT:
+ comparator = comparatorFloat (reader, fieldname);
+ break;
+ case SortField::STRING:
+ //if (locale != NULL)
+ // comparator = comparatorStringLocale (reader, fieldname, locale);
+ //else
+ comparator = comparatorString (reader, fieldname);
+ break;
+ case SortField::CUSTOM:
+ comparator = factory->newComparator (reader, fieldname);
+ break;
+ default:
+ _CLTHROWA(CL_ERR_Runtime,"unknown field type");
+ //todo: extend error
+ //throw _CLNEW RuntimeException ("unknown field type: "+type);
+ }
+ store (reader, fieldname, type, factory, comparator);
+ }
+ return comparator;
+ }
+
+
+ FieldDoc* FieldSortedHitQueue::fillFields (FieldDoc* doc) const{
+ int32_t n = comparatorsLen;
+ Comparable** fields = _CL_NEWARRAY(Comparable*,n+1);
+ for (int32_t i=0; i<n; ++i)
+ fields[i] = comparators[i]->sortValue(&doc->scoreDoc);
+ fields[n]=NULL;
+ doc->fields = fields;
+ if (maxscore > 1.0f)
+ doc->scoreDoc.score /= maxscore; // normalize scores
+ return doc;
+ }
+
+ ScoreDocComparator* FieldSortedHitQueue::lookup (IndexReader* reader, const TCHAR* field, int32_t type, SortComparatorSource* factory) {
+ ScoreDocComparator* sdc = NULL;
+ FieldCacheImpl::FileEntry* entry = (factory != NULL)
+ ? _CLNEW FieldCacheImpl::FileEntry (field, factory)
+ : _CLNEW FieldCacheImpl::FileEntry (field, type);
+
+ {
+ SCOPED_LOCK_MUTEX(Comparators.THIS_LOCK)
+ hitqueueCacheReaderType* readerCache = Comparators.get(reader);
+ if (readerCache == NULL){
+ _CLDELETE(entry);
+ return NULL;
+ }
+
+ sdc = readerCache->get (entry);
+ _CLDELETE(entry);
+ }
+ return sdc;
+ }
+
+ void FieldSortedHitQueue::closeCallback(CL_NS(index)::IndexReader* reader, void*){
+ SCOPED_LOCK_MUTEX(Comparators.THIS_LOCK)
+ Comparators.remove(reader);
+ }
+
+ //static
+ void FieldSortedHitQueue::store (IndexReader* reader, const TCHAR* field, int32_t type, SortComparatorSource* factory, ScoreDocComparator* value) {
+ FieldCacheImpl::FileEntry* entry = (factory != NULL)
+ ? _CLNEW FieldCacheImpl::FileEntry (field, factory)
+ : _CLNEW FieldCacheImpl::FileEntry (field, type);
+
+ {
+ SCOPED_LOCK_MUTEX(Comparators.THIS_LOCK)
+ hitqueueCacheReaderType* readerCache = Comparators.get(reader);
+ if (readerCache == NULL) {
+ readerCache = _CLNEW hitqueueCacheReaderType(true);
+ Comparators.put(reader,readerCache);
+ reader->addCloseCallback(FieldSortedHitQueue::closeCallback,NULL);
+ }
+ readerCache->put (entry, value);
+ //return NULL; //supposed to return previous value...
+ }
+ }
+
+FieldSortedHitQueue::~FieldSortedHitQueue(){
+ _CLDELETE_ARRAY(comparators);
+ if ( fields != NULL ){
+ for ( int i=0;fields[i]!=NULL;i++ )
+ _CLDELETE(fields[i]);
+ _CLDELETE_ARRAY(fields);
+ }
+}
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/search/FieldSortedHitQueue.h b/src/3rdparty/clucene/src/CLucene/search/FieldSortedHitQueue.h
new file mode 100644
index 0000000..d7b16ce
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/FieldSortedHitQueue.h
@@ -0,0 +1,216 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_search_FieldSortedHitQueue_
+#define _lucene_search_FieldSortedHitQueue_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "FieldCache.h"
+#include "Sort.h"
+#include "FieldDocSortedHitQueue.h"
+#include "SearchHeader.h"
+#include "FieldCacheImpl.h"
+#include "CLucene/util/PriorityQueue.h"
+
+CL_NS_DEF(search)
+
+
+/**
+ * Expert: A hit queue for sorting by hits by terms in more than one field.
+ * Uses <code>FieldCache.DEFAULT</code> for maintaining internal term lookup tables.
+ *
+ * @see Searchable#search(Query,Filter,int32_t,Sort)
+ * @see FieldCache
+ */
+class FieldSortedHitQueue: public CL_NS(util)::PriorityQueue<FieldDoc*,
+ CL_NS(util)::Deletor::Object<FieldDoc> > {
+
+ ///the type that is stored in the field cache. can't use a typedef because
+ ///the decorated name would become too long
+ class hitqueueCacheReaderType: public CL_NS(util)::CLHashMap<FieldCacheImpl::FileEntry*,
+ ScoreDocComparator*,
+ FieldCacheImpl::FileEntry::Compare,
+ FieldCacheImpl::FileEntry::Equals,
+ CL_NS(util)::Deletor::Object<FieldCacheImpl::FileEntry>,
+ CL_NS(util)::Deletor::Object<ScoreDocComparator> >{
+
+ public:
+ hitqueueCacheReaderType(bool deleteValue){
+ setDeleteKey(true);
+ setDeleteValue(deleteValue);
+ }
+ ~hitqueueCacheReaderType(){
+ clear();
+ }
+
+ };
+
+public: //todo: remove this and below after close callback is implemented
+ //note: typename gets too long if using cacheReaderType as a typename
+ typedef CL_NS(util)::CLHashMap<CL_NS(index)::IndexReader*,
+ hitqueueCacheReaderType*,
+ CL_NS(util)::Compare::Void<CL_NS(index)::IndexReader>,
+ CL_NS(util)::Equals::Void<CL_NS(index)::IndexReader>,
+ CL_NS(util)::Deletor::Object<CL_NS(index)::IndexReader>,
+ CL_NS(util)::Deletor::Object<hitqueueCacheReaderType> > hitqueueCacheType;
+
+ /** Internal cache of comparators. Similar to FieldCache, only
+ * caches comparators instead of term values.
+ */
+ static hitqueueCacheType Comparators;
+private:
+
+ /** Returns a comparator if it is in the cache.*/
+ static ScoreDocComparator* lookup (CL_NS(index)::IndexReader* reader, const TCHAR* field, int32_t type, SortComparatorSource* factory);
+
+ /** Stores a comparator into the cache.
+ returns the valid ScoreDocComparator.
+ */
+ static void store (CL_NS(index)::IndexReader* reader, const TCHAR* field, int32_t type, SortComparatorSource* factory, ScoreDocComparator* value);
+
+
+ //todo: Locale locale, not implemented yet
+ static ScoreDocComparator* getCachedComparator (CL_NS(index)::IndexReader* reader,
+ const TCHAR* fieldname, int32_t type, SortComparatorSource* factory);
+
+
+ /**
+ * Returns a comparator for sorting hits according to a field containing integers.
+ * @param reader Index to use.
+ * @param fieldname Field containg integer values.
+ * @return Comparator for sorting hits.
+ * @throws IOException If an error occurs reading the index.
+ */
+ static ScoreDocComparator* comparatorInt (CL_NS(index)::IndexReader* reader, const TCHAR* fieldname);
+
+ /**
+ * Returns a comparator for sorting hits according to a field containing floats.
+ * @param reader Index to use.
+ * @param fieldname Field containg float values.
+ * @return Comparator for sorting hits.
+ * @throws IOException If an error occurs reading the index.
+ */
+ static ScoreDocComparator* comparatorFloat (CL_NS(index)::IndexReader* reader, const TCHAR* fieldname);
+
+ /**
+ * Returns a comparator for sorting hits according to a field containing strings.
+ * @param reader Index to use.
+ * @param fieldname Field containg string values.
+ * @return Comparator for sorting hits.
+ * @throws IOException If an error occurs reading the index.
+ */
+ static ScoreDocComparator* comparatorString (CL_NS(index)::IndexReader* reader, const TCHAR* fieldname);
+
+
+ //todo:
+ /**
+ * Returns a comparator for sorting hits according to a field containing strings.
+ * @param reader Index to use.
+ * @param fieldname Field containg string values.
+ * @return Comparator for sorting hits.
+ * @throws IOException If an error occurs reading the index.
+
+ static ScoreDocComparator* comparatorStringLocale (IndexReader* reader, TCHAR* fieldname, Locale locale){
+ Collator collator = Collator.getInstance (locale);
+ TCHAR* field = fieldname.intern();
+ TCHAR** index = FieldCache.DEFAULT.getStrings (reader, field);
+ return _CLNEW ScoreDocComparator() {
+
+ public int32_t compare (ScoreDoc i, ScoreDoc j) {
+ return collator.compare (index[i.doc], index[j.doc]);
+ }
+
+ public Comparable sortValue (ScoreDoc i) {
+ return index[i.doc];
+ }
+
+ public int32_t sortType() {
+ return SortField.STRING;
+ }
+ };
+ }*/
+
+ /**
+ * Returns a comparator for sorting hits according to values in the given field.
+ * The terms in the field are looked at to determine whether they contain integers,
+ * floats or strings. Once the type is determined, one of the other static methods
+ * in this class is called to get the comparator.
+ * @param reader Index to use.
+ * @param fieldname Field containg values.
+ * @return Comparator for sorting hits.
+ * @throws IOException If an error occurs reading the index.
+ */
+ static ScoreDocComparator* comparatorAuto (CL_NS(index)::IndexReader* reader, const TCHAR* fieldname);
+
+
+protected:
+ /** Stores a comparator corresponding to each field being sorted by */
+ ScoreDocComparator** comparators;
+ int32_t comparatorsLen;
+
+ /** Stores the sort criteria being used. */
+ SortField** fields;
+ int32_t fieldsLen;
+
+ /** Stores the maximum score value encountered, for normalizing.
+ * we only care about scores greater than 1.0 - if all the scores
+ * are less than 1.0, we don't have to normalize. */
+ qreal maxscore;
+
+ /**
+ * Returns whether <code>a</code> is less relevant than <code>b</code>.
+ * @param a ScoreDoc
+ * @param b ScoreDoc
+ * @return <code>true</code> if document <code>a</code> should be sorted after document <code>b</code>.
+ */
+ bool lessThan (FieldDoc* docA, FieldDoc* docB);
+public:
+
+ /**
+ * Creates a hit queue sorted by the given list of fields.
+ * @param reader Index to use.
+ * @param fields Field names, in priority order (highest priority first). Cannot be <code>null</code> or empty.
+ * @param size The number of hits to retain. Must be greater than zero.
+ * @throws IOException
+ */
+ FieldSortedHitQueue (CL_NS(index)::IndexReader* reader, SortField** fields, int32_t size);
+
+ ~FieldSortedHitQueue();
+
+ /**
+ * Callback for when IndexReader closes. This causes
+ * any Comparators to be removed for the specified reader.
+ */
+ static void closeCallback(CL_NS(index)::IndexReader* reader, void* param);
+
+ /**
+ * Given a FieldDoc object, stores the values used
+ * to sort the given document. These values are not the raw
+ * values out of the index, but the internal representation
+ * of them. This is so the given search hit can be collated
+ * by a MultiSearcher with other search hits.
+ * @param doc The FieldDoc to store sort values into.
+ * @return The same FieldDoc passed in.
+ * @see Searchable#search(Query,Filter,int32_t,Sort)
+ */
+ FieldDoc* fillFields (FieldDoc* doc) const;
+
+ void setFields (SortField** fields){
+ this->fields = fields;
+ }
+
+ /** Returns the SortFields being used by this hit queue. */
+ SortField** getFields() {
+ return fields;
+ }
+};
+
+
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/search/Filter.h b/src/3rdparty/clucene/src/CLucene/search/Filter.h
new file mode 100644
index 0000000..309c5a9
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/Filter.h
@@ -0,0 +1,46 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_search_Filter_
+#define _lucene_search_Filter_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "CLucene/index/IndexReader.h"
+#include "CLucene/util/BitSet.h"
+
+CL_NS_DEF(search)
+ // Abstract base class providing a mechanism to restrict searches to a subset
+ // of an index.
+ class Filter: LUCENE_BASE {
+ public:
+ virtual ~Filter(){
+ }
+
+ virtual Filter* clone() const = 0;
+
+ /**
+ * Returns a BitSet with true for documents which should be permitted in
+ * search results, and false for those that should not.
+ * MEMORY: read shouldDeleteBitSet
+ */
+ virtual CL_NS(util)::BitSet* bits(CL_NS(index)::IndexReader* reader)=0;
+
+ /**
+ * Because of the problem of cached bitsets with the CachingWrapperFilter,
+ * CLucene has no way of knowing whether to delete the bitset returned from bits().
+ * To properly clean memory from bits(), pass the bitset to this function. The
+ * Filter should be deleted if this function returns true.
+ */
+ virtual bool shouldDeleteBitSet(const CL_NS(util)::BitSet* bs) const{ return true; }
+
+ //Creates a user-readable version of this query and returns it as as string
+ virtual TCHAR* toString()=0;
+ };
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/search/FilteredTermEnum.cpp b/src/3rdparty/clucene/src/CLucene/search/FilteredTermEnum.cpp
new file mode 100644
index 0000000..f90ceea
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/FilteredTermEnum.cpp
@@ -0,0 +1,136 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+
+#include "FilteredTermEnum.h"
+
+CL_NS_USE(index)
+CL_NS_DEF(search)
+
+
+ FilteredTermEnum::FilteredTermEnum(){
+ //Func - Constructor
+ //Pre - true
+ //Post - Instance has been created
+
+ currentTerm = NULL;
+ actualEnum = NULL;
+ }
+
+ FilteredTermEnum::~FilteredTermEnum() {
+ //Func - Destructor
+ //Pre - true
+ //Post - The instance has been destroyed
+
+ close();
+ }
+
+ int32_t FilteredTermEnum::docFreq() const {
+ //Func - Returns the docFreq of the current Term in the enumeration.
+ //Pre - next() must have been called at least once
+ //Post - if actualEnum is NULL result is -1 otherwise the frequencey is returned
+
+ if (actualEnum == NULL){
+ return -1;
+ }
+ return actualEnum->docFreq();
+ }
+
+ bool FilteredTermEnum::next() {
+ //Func - Increments the enumeration to the next element.
+ //Pre - true
+ //Post - Returns True if the enumeration has been moved to the next element otherwise false
+
+ //The actual enumerator is not initialized!
+ if (actualEnum == NULL){
+ return false;
+ }
+
+ //Finalize the currentTerm and reset it to NULL
+ _CLDECDELETE( currentTerm );
+
+ //Iterate through the enumeration
+ while (currentTerm == NULL) {
+ if (endEnum())
+ return false;
+ if (actualEnum->next()) {
+ //Order term not to return reference ownership here. */
+ Term* term = actualEnum->term(false);
+ //Compare the retrieved term
+ if (termCompare(term)){
+ //Matched so finalize the current
+ _CLDECDELETE(currentTerm);
+ //Get a reference to the matched term
+ currentTerm = _CL_POINTER(term);
+ return true;
+ }
+ }else
+ return false;
+ }
+ _CLDECDELETE(currentTerm);
+ currentTerm = NULL;
+
+ return false;
+ }
+
+ Term* FilteredTermEnum::term() {
+ //Func - Returns the current Term in the enumeration.
+ //Pre - next() must have been called at least once
+ // pointer is true or false
+ //Post - if pre(pointer) is true the reference counter of currentTerm is increased
+ // and current Term is returned otherwise currentTerm is only returned
+
+ return _CL_POINTER(currentTerm);
+ }
+ Term* FilteredTermEnum::term(bool pointer) {
+ if ( pointer )
+ return _CL_POINTER(currentTerm);
+ else
+ return currentTerm;
+ }
+
+ void FilteredTermEnum::close(){
+ //Func - Closes the enumeration to further activity, freeing resources.
+ //Pre - true
+ //Post - The Enumeration has been closed
+
+ //Check if actualEnum is valid
+ if (actualEnum){
+ //Close the enumeration
+ actualEnum->close();
+ }
+
+ //Destroy the enumeration
+ _CLDELETE(actualEnum);
+
+ //Destroy currentTerm
+ _CLDECDELETE(currentTerm);
+ }
+
+ void FilteredTermEnum::setEnum(TermEnum* actualEnum) {
+ //Func - Sets the actual Enumeration
+ //Pre - actualEnum != NULL
+ //Post - The instance has been created
+
+ CND_PRECONDITION(actualEnum != NULL,"actualEnum is NULL");
+
+ _CLDELETE(this->actualEnum);
+
+ this->actualEnum = actualEnum;
+
+ // Find the first term that matches
+ //Ordered term not to return reference ownership here.
+ Term* term = actualEnum->term(false);
+ if (term != NULL && termCompare(term)){
+ _CLDECDELETE(currentTerm);
+ currentTerm = _CL_POINTER(term);
+ }else{
+ next();
+ }
+ }
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/search/FilteredTermEnum.h b/src/3rdparty/clucene/src/CLucene/search/FilteredTermEnum.h
new file mode 100644
index 0000000..035ae38
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/FilteredTermEnum.h
@@ -0,0 +1,61 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_search_FilteredTermEnum_
+#define _lucene_search_FilteredTermEnum_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "CLucene/index/Term.h"
+#include "CLucene/index/Terms.h"
+
+CL_NS_DEF(search)
+ //FilteredTermEnum is an abstract class for enumerating a subset of all terms.
+ //
+ //Term enumerations are always ordered by term->compareTo(). Each term in
+ //the enumeration is greater than all that precede it.
+
+ class FilteredTermEnum: public CL_NS(index)::TermEnum {
+ public:
+ //Constructor
+ FilteredTermEnum();
+ //Destructor
+ virtual ~FilteredTermEnum();
+
+ //Equality measure on the term
+ virtual qreal difference() = 0;
+
+ //Returns the docFreq of the current Term in the enumeration.
+ int32_t docFreq() const ;
+
+ //Increments the enumeration to the next element
+ bool next() ;
+
+ //Returns a pointer to the current Term in the enumeration.
+ CL_NS(index)::Term* term();
+ CL_NS(index)::Term* term(bool pointer);
+
+ //Closes the enumeration to further activity, freeing resources.
+ void close();
+
+ protected:
+ //Equality compare on the term */
+ virtual bool termCompare(CL_NS(index)::Term* term) = 0;
+
+ //Indiciates the end of the enumeration has been reached
+ virtual bool endEnum() = 0;
+
+ void setEnum(CL_NS(index)::TermEnum* actualEnum) ;
+
+ private:
+ CL_NS(index)::Term* currentTerm;
+ CL_NS(index)::TermEnum* actualEnum;
+
+ };
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/search/FuzzyQuery.cpp b/src/3rdparty/clucene/src/CLucene/search/FuzzyQuery.cpp
new file mode 100644
index 0000000..e95d48d
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/FuzzyQuery.cpp
@@ -0,0 +1,357 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "FuzzyQuery.h"
+
+CL_NS_USE(index)
+CL_NS_USE(util)
+CL_NS_DEF(search)
+
+ /**
+ * Constructor for enumeration of all terms from specified <code>reader</code> which share a prefix of
+ * length <code>prefixLength</code> with <code>term</code> and which have a fuzzy similarity &gt;
+ * <code>minSimilarity</code>.
+ *
+ * @param reader Delivers terms.
+ * @param term Pattern term.
+ * @param minSimilarity Minimum required similarity for terms from the reader. Default value is 0.5f.
+ * @param prefixLength Length of required common prefix. Default value is 0.
+ * @throws IOException
+ */
+ FuzzyTermEnum::FuzzyTermEnum(const IndexReader* reader, Term* term, qreal minSimilarity, size_t prefixLength):
+ distance(0),
+ _endEnum(false),
+ prefix(LUCENE_BLANK_STRING),
+ prefixLength(0),
+ minimumSimilarity(minSimilarity)
+ {
+ //Func - Constructor
+ //Pre - reader contains a valid reference to an IndexReader
+ // term != NULL
+ //Post - The instance has been created
+
+ CND_PRECONDITION(term != NULL,"term is NULL");
+
+ scale_factor = 1.0f / (1.0f - minimumSimilarity);
+ searchTerm = _CL_POINTER(term);
+
+ text = STRDUP_TtoT(term->text());
+ textLen = term->textLength();
+
+
+ //Initialize e to NULL
+ e = NULL;
+ eWidth = 0;
+ eHeight = 0;
+
+ if(prefixLength > 0 && prefixLength < textLen){
+ this->prefixLength = prefixLength;
+
+ prefix = _CL_NEWARRAY(TCHAR,prefixLength+1);
+ _tcsncpy(prefix,text,prefixLength);
+ prefix[prefixLength]='\0';
+
+ textLen = prefixLength;
+ text[textLen]='\0';
+ }
+
+
+ //Set the enumeration
+ Term* trm = _CLNEW Term(term, prefix);
+ setEnum(reader->terms(trm));
+ _CLDECDELETE(trm);
+ }
+
+ FuzzyTermEnum::~FuzzyTermEnum(){
+ //Func - Destructor
+ //Pre - true
+ //Post - FuzzyTermEnum has been destroyed
+
+ //Close the enumeration
+ close();
+ }
+
+ bool FuzzyTermEnum::endEnum() {
+ //Func - Returns the fact if the current term in the enumeration has reached the end
+ //Pre - true
+ //Post - The boolean value of endEnum has been returned
+
+ return _endEnum;
+ }
+
+ void FuzzyTermEnum::close(){
+ //Func - Close the enumeration
+ //Pre - true
+ //Post - The enumeration has been closed
+
+ FilteredTermEnum::close();
+
+ //Finalize the searchTerm
+ _CLDECDELETE(searchTerm);
+ //Destroy e
+ _CLDELETE_ARRAY(e);
+
+ _CLDELETE_CARRAY(text);
+
+ if ( prefix != LUCENE_BLANK_STRING )
+ _CLDELETE_CARRAY(prefix);
+ }
+
+ bool FuzzyTermEnum::termCompare(Term* term) {
+ //Func - Compares term with the searchTerm using the Levenshtein distance.
+ //Pre - term is NULL or term points to a Term
+ //Post - if pre(term) is NULL then false is returned otherwise
+ // if the distance of the current term in the enumeration is bigger than the FUZZY_THRESHOLD
+ // then true is returned
+
+ if (term == NULL){
+ return false; //Note that endEnum is not set to true!
+ }
+
+ const TCHAR* termText = term->text();
+ size_t termTextLen = term->textLength();
+
+ //Check if the field name of searchTerm of term match
+ //(we can use == because fields are interned)
+ if ( searchTerm->field() == term->field() &&
+ (prefixLength==0 || _tcsncmp(termText,prefix,prefixLength)==0 )) {
+
+ const TCHAR* target = termText+prefixLength;
+ size_t targetLen = termTextLen-prefixLength;
+
+ //Calculate the Levenshtein distance
+ int32_t dist = editDistance(text, target, textLen, targetLen);
+ distance = 1 - ((qreal)dist / (qreal)min(textLen, targetLen));
+ return (distance > minimumSimilarity);
+ }
+ _endEnum = true;
+ return false;
+ }
+
+ qreal FuzzyTermEnum::difference() {
+ //Func - Returns the difference between the distance and the fuzzy threshold
+ // multiplied by the scale factor
+ //Pre - true
+ //Post - The difference is returned
+
+ return (qreal)((distance - minimumSimilarity) * scale_factor );
+ }
+
+
+ /** Finds and returns the smallest of three integers
+ precondition: Must define int32_t __t for temporary storage and result
+ */
+ #define min3(a, b, c) __t = (a < b) ? a : b; __t = (__t < c) ? __t : c;
+
+ int32_t FuzzyTermEnum::editDistance(const TCHAR* s, const TCHAR* t, const int32_t n, const int32_t m) {
+ //Func - Calculates the Levenshtein distance also known as edit distance is a measure of similiarity
+ // between two strings where the distance is measured as the number of character
+ // deletions, insertions or substitutions required to transform one string to
+ // the other string.
+ //Pre - s != NULL and contains the source string
+ // t != NULL and contains the target string
+ // n >= 0 and contains the length of the source string
+ // m >= 0 and containts the length of th target string
+ //Post - The distance has been returned
+
+ CND_PRECONDITION(s != NULL, "s is NULL");
+ CND_PRECONDITION(t != NULL, "t is NULL");
+ CND_PRECONDITION(n >= 0," n is a negative number");
+ CND_PRECONDITION(n >= 0," n is a negative number");
+
+ int32_t i; // iterates through s
+ int32_t j; // iterates through t
+ TCHAR s_i; // ith character of s
+
+ if (n == 0)
+ return m;
+ if (m == 0)
+ return n;
+
+ //Check if the array must be reallocated because it is too small or does not exist
+ if (e == NULL || eWidth <= n || eHeight <= m) {
+ //Delete e if possible
+ _CLDELETE_ARRAY(e);
+ //resize e
+ eWidth = max(eWidth, n+1);
+ eHeight = max(eHeight, m+1);
+ e = _CL_NEWARRAY(int32_t,eWidth*eHeight);
+ }
+
+ CND_CONDITION(e != NULL,"e is NULL");
+
+ // init matrix e
+ for (i = 0; i <= n; i++){
+ e[i + (0*eWidth)] = i;
+ }
+ for (j = 0; j <= m; j++){
+ e[0 + (j*eWidth)] = j;
+ }
+
+ int32_t __t; //temporary variable for min3
+
+ // start computing edit distance
+ for (i = 1; i <= n; i++) {
+ s_i = s[i - 1];
+ for (j = 1; j <= m; j++) {
+ if (s_i != t[j-1]){
+ min3(e[i + (j*eWidth) - 1], e[i + ((j-1)*eWidth)], e[i + ((j-1)*eWidth)-1]);
+ e[i + (j*eWidth)] = __t+1;
+ }else{
+ min3(e[i + (j*eWidth) -1]+1, e[i + ((j-1)*eWidth)]+1, e[i + ((j-1)*eWidth)-1]);
+ e[i + (j*eWidth)] = __t;
+ }
+ }
+ }
+
+ // we got the result!
+ return e[n + ((m)*eWidth)];
+ }
+
+
+ /**
+ * Create a new FuzzyQuery that will match terms with a similarity
+ * of at least <code>minimumSimilarity</code> to <code>term</code>.
+ * If a <code>prefixLength</code> &gt; 0 is specified, a common prefix
+ * of that length is also required.
+ *
+ * @param term the term to search for
+ * @param minimumSimilarity a value between 0 and 1 to set the required similarity
+ * between the query term and the matching terms. For example, for a
+ * <code>minimumSimilarity</code> of <code>0.5</code> a term of the same length
+ * as the query term is considered similar to the query term if the edit distance
+ * between both terms is less than <code>length(term)*0.5</code>
+ * @param prefixLength length of common (non-fuzzy) prefix
+ * @throws IllegalArgumentException if minimumSimilarity is &gt; 1 or &lt; 0
+ * or if prefixLength &lt; 0 or &gt; <code>term.text().length()</code>.
+ */
+ FuzzyQuery::FuzzyQuery(Term* term, qreal minimumSimilarity, size_t prefixLength):
+ MultiTermQuery(term)
+ {
+ //Func - Constructor
+ //Pre - term != NULL
+ //Post - The instance has been created
+
+ CND_PRECONDITION(term != NULL,"term is NULL");
+
+ if (minimumSimilarity > 1.0f)
+ _CLTHROWA(CL_ERR_IllegalArgument,"minimumSimilarity > 1");
+ else if (minimumSimilarity < 0.0f)
+ _CLTHROWA(CL_ERR_IllegalArgument,"minimumSimilarity < 0");
+
+ this->minimumSimilarity = minimumSimilarity;
+
+ if(prefixLength >= term->textLength())
+ _CLTHROWA(CL_ERR_IllegalArgument,"prefixLength >= term.textLength()");
+ this->prefixLength = prefixLength;
+
+ }
+
+
+ qreal FuzzyQuery::defaultMinSimilarity = 0.5f;
+
+ FuzzyQuery::~FuzzyQuery(){
+ //Func - Destructor
+ //Pre - true
+ //Post - Instance has been destroyed
+ }
+
+ TCHAR* FuzzyQuery::toString(const TCHAR* field) const{
+ //Func - Returns the query string
+ //Pre - field != NULL
+ //Post - The query string has been returned
+
+ CND_PRECONDITION(field != NULL,"field is NULL");
+
+ StringBuffer buffer;
+ const TCHAR* b = MultiTermQuery::toString(field);
+
+ buffer.append ( b );
+ _CLDELETE_CARRAY(b);
+ buffer.append( _T("~") );
+
+ buffer.appendFloat(minimumSimilarity,1);
+
+ return buffer.toString();
+ }
+
+ const TCHAR* FuzzyQuery::getQueryName() const{
+ //Func - Returns the name of the query
+ //Pre - true
+ //post - The string FuzzyQuery has been returned
+
+ return getClassName();
+ }
+ const TCHAR* FuzzyQuery::getClassName(){
+ //Func - Returns the name of the query
+ //Pre - true
+ //post - The string FuzzyQuery has been returned
+
+ return _T("FuzzyQuery");
+ }
+
+
+ /**
+ * Returns the minimum similarity that is required for this query to match.
+ * @return float value between 0.0 and 1.0
+ */
+ qreal FuzzyQuery::getMinSimilarity() const {
+ return minimumSimilarity;
+ }
+
+ FuzzyQuery::FuzzyQuery(const FuzzyQuery& clone):
+ MultiTermQuery(clone)
+ {
+ this->minimumSimilarity = clone.getMinSimilarity();
+ this->prefixLength = clone.getPrefixLength();
+
+ //if(prefixLength < 0)
+ // _CLTHROWA(CL_ERR_IllegalArgument,"prefixLength < 0");
+ //else
+ if(prefixLength >= clone.getTerm()->textLength())
+ _CLTHROWA(CL_ERR_IllegalArgument,"prefixLength >= term.textLength()");
+
+ }
+
+ Query* FuzzyQuery::clone() const{
+ return _CLNEW FuzzyQuery(*this);
+ }
+ size_t FuzzyQuery::hashCode() const{
+ //todo: we should give the query a seeding value... but
+ //need to do it for all hascode functions
+ size_t val = Similarity::floatToByte(getBoost()) ^ getTerm()->hashCode();
+ val ^= Similarity::floatToByte(this->getMinSimilarity());
+ val ^= this->getPrefixLength();
+ return val;
+ }
+ bool FuzzyQuery::equals(Query* other) const{
+ if (!(other->instanceOf(FuzzyQuery::getClassName())))
+ return false;
+
+ FuzzyQuery* fq = (FuzzyQuery*)other;
+ return (this->getBoost() == fq->getBoost())
+ && this->getMinSimilarity() == fq->getMinSimilarity()
+ && this->getPrefixLength() == fq->getPrefixLength()
+ && getTerm()->equals(fq->getTerm());
+ }
+
+ /**
+ * Returns the prefix length, i.e. the number of characters at the start
+ * of a term that must be identical (not fuzzy) to the query term if the query
+ * is to match that term.
+ */
+ size_t FuzzyQuery::getPrefixLength() const {
+ return prefixLength;
+ }
+
+ FilteredTermEnum* FuzzyQuery::getEnum(IndexReader* reader){
+ Term* term = getTerm(false);
+ FuzzyTermEnum* ret = _CLNEW FuzzyTermEnum(reader, term, minimumSimilarity, prefixLength);
+ return ret;
+ }
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/search/FuzzyQuery.h b/src/3rdparty/clucene/src/CLucene/search/FuzzyQuery.h
new file mode 100644
index 0000000..e58637b
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/FuzzyQuery.h
@@ -0,0 +1,156 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_search_FuzzyQuery_
+#define _lucene_search_FuzzyQuery_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "CLucene/index/IndexReader.h"
+#include "CLucene/index/Term.h"
+#include "MultiTermQuery.h"
+
+
+CL_NS_DEF(search)
+
+ // class FuzzyQuery implements the fuzzy search query
+ class FuzzyQuery: public MultiTermQuery {
+ private:
+ qreal minimumSimilarity;
+ size_t prefixLength;
+ protected:
+ FuzzyQuery(const FuzzyQuery& clone);
+ public:
+ static qreal defaultMinSimilarity;
+
+ /**
+ * Create a new FuzzyQuery that will match terms with a similarity
+ * of at least <code>minimumSimilarity</code> to <code>term</code>.
+ * If a <code>prefixLength</code> &gt; 0 is specified, a common prefix
+ * of that length is also required.
+ *
+ * @param term the term to search for
+ * @param minimumSimilarity a value between 0 and 1 to set the required similarity
+ * between the query term and the matching terms. For example, for a
+ * <code>minimumSimilarity</code> of <code>0.5</code> a term of the same length
+ * as the query term is considered similar to the query term if the edit distance
+ * between both terms is less than <code>length(term)*0.5</code>
+ * @param prefixLength length of common (non-fuzzy) prefix
+ * @throws IllegalArgumentException if minimumSimilarity is &gt; 1 or &lt; 0
+ * or if prefixLength &lt; 0 or &gt; <code>term.text().length()</code>.
+ */
+ FuzzyQuery(CL_NS(index)::Term* term, qreal minimumSimilarity=defaultMinSimilarity, size_t prefixLength=0);
+ //Destructor
+ ~FuzzyQuery();
+
+ TCHAR* toString(const TCHAR* field) const;
+
+ //Returns the name "FuzzyQuery"
+ static const TCHAR* getClassName();
+ const TCHAR* getQueryName() const;
+
+ Query* clone() const;
+ bool equals(Query * other) const;
+ size_t hashCode() const;
+
+ /**
+ * Returns the minimum similarity that is required for this query to match.
+ * @return float value between 0.0 and 1.0
+ */
+ qreal getMinSimilarity() const;
+
+ /**
+ * Returns the prefix length, i.e. the number of characters at the start
+ * of a term that must be identical (not fuzzy) to the query term if the query
+ * is to match that term.
+ */
+ size_t getPrefixLength() const;
+
+ protected:
+ FilteredTermEnum* getEnum(CL_NS(index)::IndexReader* reader);
+ };
+
+ /** FuzzyTermEnum is a subclass of FilteredTermEnum for enumerating all
+ * terms that are similiar to the specified filter term.
+ *
+ * Term enumerations are always ordered by Term.compareTo(). Each term in
+ * the enumeration is greater than all that precede it.
+ */
+ class FuzzyTermEnum: public FilteredTermEnum {
+ private:
+ qreal distance;
+ bool _endEnum;
+
+ CL_NS(index)::Term* searchTerm;
+ TCHAR* text;
+ size_t textLen;
+ TCHAR* prefix;
+ size_t prefixLength;
+ qreal minimumSimilarity;
+ double scale_factor;
+
+
+ /**
+ * This static array saves us from the time required to create a new array
+ * everytime editDistance is called.
+ */
+ int32_t* e;
+ int32_t eWidth;
+ int32_t eHeight;
+
+ /******************************
+ * Compute Levenshtein distance
+ ******************************/
+
+ /**
+ Levenshtein distance also known as edit distance is a measure of similiarity
+ between two strings where the distance is measured as the number of character
+ deletions, insertions or substitutions required to transform one string to
+ the other string.
+ <p>This method takes in four parameters; two strings and their respective
+ lengths to compute the Levenshtein distance between the two strings.
+ The result is returned as an integer.
+ */
+ int32_t editDistance(const TCHAR* s, const TCHAR* t, const int32_t n, const int32_t m) ;
+
+ protected:
+ /**
+ The termCompare method in FuzzyTermEnum uses Levenshtein distance to
+ calculate the distance between the given term and the comparing term.
+ */
+ bool termCompare(CL_NS(index)::Term* term) ;
+
+ ///Returns the fact if the current term in the enumeration has reached the end
+ bool endEnum();
+ public:
+
+ /**
+ * Empty prefix and minSimilarity of 0.5f are used.
+ *
+ * @param reader
+ * @param term
+ * @throws IOException
+ * @see #FuzzyTermEnum(IndexReader, Term, qreal, int32_t)
+ */
+ FuzzyTermEnum(const CL_NS(index)::IndexReader* reader, CL_NS(index)::Term* term, qreal minSimilarity=FuzzyQuery::defaultMinSimilarity, size_t prefixLength=0);
+ /** Destructor */
+ ~FuzzyTermEnum();
+ /** Close the enumeration */
+ void close();
+
+ /** Returns the difference between the distance and the fuzzy threshold
+ * multiplied by the scale factor
+ */
+ qreal difference();
+
+
+ const char* getObjectName(){ return FuzzyTermEnum::getClassName(); }
+ static const char* getClassName(){ return "FuzzyTermEnum"; }
+ };
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/search/HitQueue.cpp b/src/3rdparty/clucene/src/CLucene/search/HitQueue.cpp
new file mode 100644
index 0000000..c9aecc6
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/HitQueue.cpp
@@ -0,0 +1,107 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "HitQueue.h"
+
+CL_NS_DEF(search)
+
+void HitQueue::upHeap(){
+ size_t i = _size;
+ ScoreDoc node = heap[i]; // save bottom node (WAS object)
+ int32_t j = ((uint32_t)i) >> 1;
+ while (j > 0 && lessThan(node,heap[j])) {
+ heap[i] = heap[j]; // shift parents down
+ i = j;
+ j = ((uint32_t)j) >> 1;
+ }
+ heap[i] = node; // install saved node
+}
+void HitQueue::downHeap(){
+ size_t i = 1;
+ ScoreDoc node = heap[i]; // save top node
+ size_t j = i << 1; // find smaller child
+ size_t k = j + 1;
+ if (k <= _size && lessThan(heap[k], heap[j])) {
+ j = k;
+ }
+ while (j <= _size && lessThan(heap[j],node)) {
+ heap[i] = heap[j]; // shift up child
+ i = j;
+ j = i << 1;
+ k = j + 1;
+ if (k <= _size && lessThan(heap[k], heap[j])) {
+ j = k;
+ }
+ }
+ heap[i] = node; // install saved node
+}
+
+void HitQueue::adjustTop(){
+ downHeap();
+}
+size_t HitQueue::size(){
+ return _size;
+}
+
+struct ScoreDoc& HitQueue::top(){
+ if ( _size == 0 )
+ _CLTHROWA(CL_ERR_IndexOutOfBounds, "Attempted to access empty hitqueue::top");
+ return heap[1];
+}
+
+void HitQueue::put(struct ScoreDoc& element){
+ if ( _size>=maxSize )
+ _CLTHROWA(CL_ERR_IndexOutOfBounds,"add is out of bounds");
+
+ _size++;
+ heap[_size] = element;
+ upHeap();
+}
+
+ScoreDoc HitQueue::pop(){
+ if (_size > 0) {
+ ScoreDoc result = heap[1]; // save first value
+ heap[1] = heap[_size]; // move last to first
+
+ _size--;
+ downHeap(); // adjust heap
+ return result;
+ } else
+ _CLTHROWA(CL_ERR_IndexOutOfBounds, "Attempted to access empty hitqueue::top");
+}
+
+bool HitQueue::insert(struct ScoreDoc& element){
+ if(_size < maxSize){
+ put(element);
+ return true;
+ }else if(_size > 0 && !lessThan(element, heap[1])){
+ heap[1] = element;
+ adjustTop();
+ return true;
+ }else
+ return false;
+}
+
+HitQueue::HitQueue(const int32_t maxSize){
+ _size = 0;
+ this->maxSize = maxSize;
+ int32_t heapSize = maxSize + 1;
+ heap = _CL_NEWARRAY(ScoreDoc,heapSize);
+}
+HitQueue::~HitQueue(){
+ _CLDELETE_ARRAY(heap);
+}
+
+bool HitQueue::lessThan(struct ScoreDoc& hitA, struct ScoreDoc& hitB){
+ if (hitA.score == hitB.score)
+ return hitA.doc > hitB.doc;
+ else
+ return hitA.score < hitB.score;
+}
+
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/search/HitQueue.h b/src/3rdparty/clucene/src/CLucene/search/HitQueue.h
new file mode 100644
index 0000000..0bd196a
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/HitQueue.h
@@ -0,0 +1,55 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_search_HitQueue_
+#define _lucene_search_HitQueue_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "SearchHeader.h"
+
+CL_NS_DEF(search)
+
+/**
+* An optimised PriorityQueue which takes ScoreDoc structs. Some by-ref passing
+* and memory related optimisations have been done.
+*/
+class HitQueue: LUCENE_BASE {
+private:
+ ScoreDoc* heap;
+ size_t _size;
+ size_t maxSize;
+
+ void upHeap();
+ void downHeap();
+
+protected:
+ bool lessThan(struct ScoreDoc& hitA, struct ScoreDoc& hitB);
+
+public:
+ void adjustTop();
+ struct ScoreDoc& top();
+ void put(struct ScoreDoc& element);
+ ScoreDoc pop();
+ /**
+ * Adds element to the PriorityQueue in log(size) time if either
+ * the PriorityQueue is not full, or not lessThan(element, top()).
+ * @param element
+ * @return true if element is added, false otherwise.
+ */
+ bool insert(struct ScoreDoc& element);
+ /**
+ * Returns the number of elements currently stored in the PriorityQueue.
+ */
+ size_t size();
+ HitQueue(const int32_t maxSize);
+ ~HitQueue();
+
+};
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/search/Hits.cpp b/src/3rdparty/clucene/src/CLucene/search/Hits.cpp
new file mode 100644
index 0000000..38c489f
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/Hits.cpp
@@ -0,0 +1,174 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+
+#include "SearchHeader.h"
+#include "CLucene/document/Document.h"
+#include "CLucene/index/IndexReader.h"
+#include "Filter.h"
+#include "CLucene/search/SearchHeader.h"
+
+CL_NS_USE(document)
+CL_NS_USE(util)
+CL_NS_USE(index)
+
+CL_NS_DEF(search)
+
+ HitDoc::HitDoc(const qreal s, const int32_t i)
+ {
+ //Func - Constructor
+ //Pre - true
+ //Post - The instance has been created
+
+ next = NULL;
+ prev = NULL;
+ doc = NULL;
+ score = s;
+ id = i;
+ }
+
+ HitDoc::~HitDoc(){
+ //Func - Destructor
+ //Pre - true
+ //Post - The instance has been destroyed
+
+ _CLDELETE(doc);
+ }
+
+
+ Hits::Hits(Searcher* s, Query* q, Filter* f, const Sort* _sort):
+ query(q), searcher(s), filter(f), sort(_sort)
+ {
+ //Func - Constructor
+ //Pre - s contains a valid reference to a searcher s
+ // q contains a valid reference to a Query
+ // f is NULL or contains a pointer to a filter
+ //Post - The instance has been created
+
+ _length = 0;
+ first = NULL;
+ last = NULL;
+ numDocs = 0;
+ maxDocs = 200;
+
+ //retrieve 100 initially
+ getMoreDocs(50);
+ }
+
+ Hits::~Hits(){
+
+ }
+ int32_t Hits::length() const {
+ return _length;
+ }
+
+ Document& Hits::doc(const int32_t n){
+ HitDoc* hitDoc = getHitDoc(n);
+
+ // Update LRU cache of documents
+ remove(hitDoc); // remove from list, if there
+ addToFront(hitDoc); // add to front of list
+ if (numDocs > maxDocs) { // if cache is full
+ HitDoc* oldLast = last;
+ remove(last); // flush last
+
+ _CLDELETE( oldLast->doc );
+ oldLast->doc = NULL;
+ }
+
+ if (hitDoc->doc == NULL){
+ hitDoc->doc = _CLNEW Document;
+ searcher->doc(hitDoc->id, hitDoc->doc); // cache miss: read document
+ }
+
+ return *hitDoc->doc;
+ }
+
+ int32_t Hits::id (const int32_t n){
+ return getHitDoc(n)->id;
+ }
+
+ qreal Hits::score(const int32_t n){
+ return getHitDoc(n)->score;
+ }
+
+ void Hits::getMoreDocs(const size_t m){
+ size_t _min = m;
+ {
+ size_t nHits = hitDocs.size();
+ if ( nHits > _min)
+ _min = nHits;
+ }
+
+ size_t n = _min * 2; // double # retrieved
+ TopDocs* topDocs = NULL;
+ if ( sort==NULL )
+ topDocs = (TopDocs*)((Searchable*)searcher)->_search(query, filter, n);
+ else
+ topDocs = (TopDocs*)((Searchable*)searcher)->_search(query, filter, n, sort);
+ _length = topDocs->totalHits;
+ ScoreDoc* scoreDocs = topDocs->scoreDocs;
+ int32_t scoreDocsLength = topDocs->scoreDocsLength;
+
+ qreal scoreNorm = 1.0f;
+ //Check that scoreDocs is a valid pointer before using it
+ if (scoreDocs != NULL){
+ if (_length > 0 && scoreDocs[0].score > 1.0f){
+ scoreNorm = 1.0f / scoreDocs[0].score;
+ }
+
+ int32_t end = scoreDocsLength < _length ? scoreDocsLength : _length;
+ for (int32_t i = hitDocs.size(); i < end; i++) {
+ hitDocs.push_back(_CLNEW HitDoc(scoreDocs[i].score*scoreNorm, scoreDocs[i].doc));
+ }
+ }
+
+ _CLDELETE(topDocs);
+ }
+
+ HitDoc* Hits::getHitDoc(const size_t n){
+ if (n >= _length){
+ TCHAR buf[100];
+ _sntprintf(buf, 100,_T("Not a valid hit number: %d"),n);
+ _CLTHROWT(CL_ERR_IndexOutOfBounds, buf );
+ }
+ if (n >= hitDocs.size())
+ getMoreDocs(n);
+
+ return hitDocs[n];
+ }
+
+ void Hits::addToFront(HitDoc* hitDoc) { // insert at front of cache
+ if (first == NULL)
+ last = hitDoc;
+ else
+ first->prev = hitDoc;
+
+ hitDoc->next = first;
+ first = hitDoc;
+ hitDoc->prev = NULL;
+
+ numDocs++;
+ }
+
+ void Hits::remove(const HitDoc* hitDoc) { // remove from cache
+ if (hitDoc->doc == NULL) // it's not in the list
+ return; // abort
+
+ if (hitDoc->next == NULL)
+ last = hitDoc->prev;
+ else
+ hitDoc->next->prev = hitDoc->prev;
+
+ if (hitDoc->prev == NULL)
+ first = hitDoc->next;
+ else
+ hitDoc->prev->next = hitDoc->next;
+
+ numDocs--;
+ }
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/search/IndexSearcher.cpp b/src/3rdparty/clucene/src/CLucene/search/IndexSearcher.cpp
new file mode 100644
index 0000000..c948cfa
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/IndexSearcher.cpp
@@ -0,0 +1,362 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright(C) 2007, 2008 by Nokia Corporation and/or its subsidiary(-ies), all rights reserved.
+*/
+#include "CLucene/StdHeader.h"
+#include "IndexSearcher.h"
+
+#include "SearchHeader.h"
+#include "Scorer.h"
+#include "FieldDocSortedHitQueue.h"
+#include "CLucene/store/Directory.h"
+#include "CLucene/document/Document.h"
+#include "CLucene/index/IndexReader.h"
+#include "CLucene/index/Term.h"
+#include "CLucene/util/BitSet.h"
+#include "FieldSortedHitQueue.h"
+
+CL_NS_USE(index)
+CL_NS_USE(util)
+CL_NS_USE(document)
+
+CL_NS_DEF(search)
+
+class SimpleTopDocsCollector : public HitCollector
+{
+private:
+ qreal minScore;
+ const CL_NS(util)::BitSet* bits;
+ HitQueue* hq;
+ size_t nDocs;
+ int32_t* totalHits;
+
+public:
+ SimpleTopDocsCollector(const CL_NS(util)::BitSet* bs, HitQueue* hitQueue,
+ int32_t* totalhits, size_t ndocs, const qreal ms=-1.0f)
+ : minScore(ms),
+ bits(bs),
+ hq(hitQueue),
+ nDocs(ndocs),
+ totalHits(totalhits) {}
+ ~SimpleTopDocsCollector() {}
+
+ void collect(const int32_t doc, const qreal score)
+ {
+ if (score > 0.0f // ignore zeroed buckets
+ && (bits == NULL || bits->get(doc))) { // skip docs not in bits
+ ++totalHits[0];
+ if (hq->size() < nDocs || (minScore==-1.0f || score >= minScore)) {
+ ScoreDoc sd = {doc, score};
+ hq->insert(sd); // update hit queue
+ if ( minScore != -1.0f )
+ minScore = hq->top().score; // maintain minScore
+ }
+ }
+ }
+};
+
+class SortedTopDocsCollector : public HitCollector
+{
+private:
+ const CL_NS(util)::BitSet* bits;
+ FieldSortedHitQueue* hq;
+ size_t nDocs;
+ int32_t* totalHits;
+public:
+ SortedTopDocsCollector(const CL_NS(util)::BitSet* bs,
+ FieldSortedHitQueue* hitQueue, int32_t* totalhits, size_t _nDocs)
+ : bits(bs),
+ hq(hitQueue),
+ nDocs(_nDocs),
+ totalHits(totalhits)
+ {
+ }
+ ~SortedTopDocsCollector() {}
+
+ void collect(const int32_t doc, const qreal score)
+ {
+ if (score > 0.0f && // ignore zeroed buckets
+ (bits==NULL || bits->get(doc))) { // skip docs not in bits
+ ++totalHits[0];
+ // TODO: see jlucene way... with fields def???
+ FieldDoc* fd = _CLNEW FieldDoc(doc, score);
+ if ( !hq->insert(fd) ) // update hit queue
+ _CLDELETE(fd);
+ }
+ }
+};
+
+class SimpleFilteredCollector : public HitCollector
+{
+private:
+ CL_NS(util)::BitSet* bits;
+ HitCollector* results;
+public:
+ SimpleFilteredCollector(CL_NS(util)::BitSet* bs, HitCollector* collector)
+ : bits(bs),
+ results(collector) {}
+ ~SimpleFilteredCollector() {}
+
+protected:
+ void collect(const int32_t doc, const qreal score)
+ {
+ // skip docs not in bits
+ if (bits->get(doc))
+ results->collect(doc, score);
+ }
+};
+
+
+IndexSearcher::IndexSearcher(const QString& path)
+{
+ //Func - Constructor
+ // Creates a searcher searching the index in the named directory.
+ //Pre - path != NULL
+ //Post - The instance has been created
+
+ CND_PRECONDITION(!path.isEmpty(), "path is NULL");
+
+ reader = IndexReader::open(path);
+ readerOwner = true;
+}
+
+IndexSearcher::IndexSearcher(CL_NS(store)::Directory* directory)
+{
+ //Func - Constructor
+ // Creates a searcher searching the index in the specified directory.
+ //Pre - path != NULL
+ //Post - The instance has been created
+
+ CND_PRECONDITION(directory != NULL, "directory is NULL");
+
+ reader = IndexReader::open(directory);
+ readerOwner = true;
+}
+
+IndexSearcher::IndexSearcher(IndexReader* r)
+{
+ //Func - Constructor
+ // Creates a searcher searching the index with the provide IndexReader
+ //Pre - path != NULL
+ //Post - The instance has been created
+
+ reader = r;
+ readerOwner = false;
+}
+
+IndexSearcher::~IndexSearcher()
+{
+ //Func - Destructor
+ //Pre - true
+ //Post - The instance has been destroyed
+
+ close();
+}
+
+void IndexSearcher::close()
+{
+ //Func - Frees resources associated with this Searcher.
+ //Pre - true
+ //Post - The resources associated have been freed
+ if (readerOwner && reader){
+ reader->close();
+ _CLDELETE(reader);
+ }
+}
+
+// inherit javadoc
+int32_t IndexSearcher::docFreq(const Term* term) const
+{
+ //Func -
+ //Pre - reader != NULL
+ //Post -
+
+ CND_PRECONDITION(reader != NULL, "reader is NULL");
+ return reader->docFreq(term);
+}
+
+// inherit javadoc
+bool IndexSearcher::doc(int32_t i, CL_NS(document)::Document* d)
+{
+ //Func - Retrieves i-th document found
+ // For use by HitCollector implementations.
+ //Pre - reader != NULL
+ //Post - The i-th document has been returned
+
+ CND_PRECONDITION(reader != NULL, "reader is NULL");
+ return reader->document(i,d);
+}
+
+// inherit javadoc
+int32_t IndexSearcher::maxDoc() const
+{
+ //Func - Return total number of documents including the ones marked deleted
+ //Pre - reader != NULL
+ //Post - The total number of documents including the ones marked deleted
+ // has been returned
+
+ CND_PRECONDITION(reader != NULL, "reader is NULL");
+ return reader->maxDoc();
+}
+
+TopDocs* IndexSearcher::_search(Query* query, Filter* filter, const int32_t nDocs)
+{
+ //Func -
+ //Pre - reader != NULL
+ //Post -
+
+ CND_PRECONDITION(reader != NULL, "reader is NULL");
+ CND_PRECONDITION(query != NULL, "query is NULL");
+
+ Weight* weight = query->weight(this);
+ Scorer* scorer = weight->scorer(reader);
+ if (scorer == NULL){
+ return _CLNEW TopDocs(0, NULL, 0);
+ }
+
+ BitSet* bits = filter != NULL ? filter->bits(reader) : NULL;
+ HitQueue* hq = _CLNEW HitQueue(nDocs);
+
+ //Check hq has been allocated properly
+ CND_CONDITION(hq != NULL, "Could not allocate memory for HitQueue hq");
+
+ int32_t* totalHits = _CL_NEWARRAY(int32_t,1);
+ totalHits[0] = 0;
+
+ SimpleTopDocsCollector hitCol(bits,hq,totalHits,nDocs,0.0f);
+ scorer->score( &hitCol );
+ _CLDELETE(scorer);
+
+ int32_t scoreDocsLength = hq->size();
+
+ ScoreDoc* scoreDocs = _CL_NEWARRAY(ScoreDoc,scoreDocsLength);
+
+ for (int32_t i = scoreDocsLength-1; i >= 0; --i) // put docs in array
+ scoreDocs[i] = hq->pop();
+
+ int32_t totalHitsInt = totalHits[0];
+
+ _CLDELETE(hq);
+ if ( bits != NULL && filter->shouldDeleteBitSet(bits) )
+ _CLDELETE(bits);
+ _CLDELETE_ARRAY(totalHits);
+ Query* wq = weight->getQuery();
+ if ( query != wq ) //query was re-written
+ _CLLDELETE(wq);
+ _CLDELETE(weight);
+
+ return _CLNEW TopDocs(totalHitsInt, scoreDocs, scoreDocsLength);
+}
+
+// inherit javadoc
+TopFieldDocs* IndexSearcher::_search(Query* query, Filter* filter,
+ const int32_t nDocs, const Sort* sort)
+{
+ CND_PRECONDITION(reader != NULL, "reader is NULL");
+ CND_PRECONDITION(query != NULL, "query is NULL");
+
+ Weight* weight = query->weight(this);
+ Scorer* scorer = weight->scorer(reader);
+ if (scorer == NULL) {
+ return _CLNEW TopFieldDocs(0, NULL, 0, NULL );
+ }
+
+ BitSet* bits = filter != NULL ? filter->bits(reader) : NULL;
+ FieldSortedHitQueue hq(reader, sort->getSort(), nDocs);
+ int32_t* totalHits = _CL_NEWARRAY(int32_t,1);
+ totalHits[0]=0;
+
+ SortedTopDocsCollector hitCol(bits,&hq,totalHits,nDocs);
+ scorer->score(&hitCol);
+ _CLDELETE(scorer);
+
+ int32_t hqLen = hq.size();
+ FieldDoc** fieldDocs = _CL_NEWARRAY(FieldDoc*,hqLen);
+ for (int32_t i = hqLen-1; i >= 0; --i){ // put docs in array
+ fieldDocs[i] = hq.fillFields (hq.pop());
+ }
+
+ Query* wq = weight->getQuery();
+ if ( query != wq ) //query was re-written
+ _CLLDELETE(wq);
+ _CLDELETE(weight);
+
+ SortField** hqFields = hq.getFields();
+ hq.setFields(NULL); //move ownership of memory over to TopFieldDocs
+ int32_t totalHits0 = totalHits[0];
+ if ( bits != NULL && filter->shouldDeleteBitSet(bits) )
+ _CLDELETE(bits);
+ _CLDELETE_ARRAY(totalHits);
+ return _CLNEW TopFieldDocs(totalHits0, fieldDocs, hqLen, hqFields );
+}
+
+void IndexSearcher::_search(Query* query, Filter* filter, HitCollector* results)
+{
+ //Func - _search an index and fetch the results
+ // Applications should only use this if they need all of the
+ // matching documents. The high-level search API (search(Query))
+ // is usually more efficient, as it skips non-high-scoring hits.
+ //Pre - query is a valid reference to a query filter may or may not be NULL
+ // results is a valid reference to a HitCollector and used to store the results
+ //Post - filter if non-NULL, a bitset used to eliminate some documents
+
+ CND_PRECONDITION(reader != NULL, "reader is NULL");
+ CND_PRECONDITION(query != NULL, "query is NULL");
+
+ BitSet* bits = NULL;
+ SimpleFilteredCollector* fc = NULL;
+
+ if (filter != NULL){
+ bits = filter->bits(reader);
+ fc = _CLNEW SimpleFilteredCollector(bits, results);
+ }
+
+ Weight* weight = query->weight(this);
+ Scorer* scorer = weight->scorer(reader);
+ if (scorer != NULL) {
+ if (fc == NULL){
+ scorer->score(results);
+ }else{
+ scorer->score((HitCollector*)fc);
+ }
+ _CLDELETE(scorer);
+ }
+
+ _CLDELETE(fc);
+ _CLDELETE(weight);
+ if ( bits != NULL && filter->shouldDeleteBitSet(bits) )
+ _CLDELETE(bits);
+}
+
+Query* IndexSearcher::rewrite(Query* original)
+{
+ Query* query = original;
+ Query* last = original;
+ for (Query* rewrittenQuery = query->rewrite(reader);
+ rewrittenQuery != query;
+ rewrittenQuery = query->rewrite(reader)) {
+ query = rewrittenQuery;
+ if ( query != last && last != original) {
+ _CLDELETE(last);
+ }
+ last = query;
+ }
+ return query;
+}
+
+void IndexSearcher::explain(Query* query, int32_t doc, Explanation* ret)
+{
+ Weight* weight = query->weight(this);
+ weight->explain(reader, doc, ret);
+
+ Query* wq = weight->getQuery();
+ if ( query != wq ) //query was re-written
+ _CLLDELETE(wq);
+ _CLDELETE(weight);
+}
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/search/IndexSearcher.h b/src/3rdparty/clucene/src/CLucene/search/IndexSearcher.h
new file mode 100644
index 0000000..307e026
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/IndexSearcher.h
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright(C) 2007, 2008 by Nokia Corporation and/or its subsidiary(-ies), all rights reserved.
+*/
+#ifndef _lucene_search_IndexSearcher_
+#define _lucene_search_IndexSearcher_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include <QtCore/QString>
+
+#include "SearchHeader.h"
+#include "CLucene/store/Directory.h"
+#include "CLucene/document/Document.h"
+#include "CLucene/index/IndexReader.h"
+#include "CLucene/index/Term.h"
+#include "CLucene/util/BitSet.h"
+#include "HitQueue.h"
+#include "FieldSortedHitQueue.h"
+
+CL_NS_DEF(search)
+/** Implements search over a single IndexReader.
+*
+* <p>Applications usually need only call the inherited {@link search(Query*)}
+* or {@link search(Query*,Filter*)} methods.
+*/
+class IndexSearcher:public Searcher{
+ CL_NS(index)::IndexReader* reader;
+ bool readerOwner;
+
+public:
+ /// Creates a searcher searching the index in the named directory.
+ IndexSearcher(const QString& path);
+
+ /// Creates a searcher searching the index in the specified directory.
+ IndexSearcher(CL_NS(store)::Directory* directory);
+
+ /// Creates a searcher searching the provided index.
+ IndexSearcher(CL_NS(index)::IndexReader* r);
+
+ ~IndexSearcher();
+
+ /// Frees resources associated with this Searcher.
+ void close();
+
+ int32_t docFreq(const CL_NS(index)::Term* term) const;
+
+ bool doc(int32_t i, CL_NS(document)::Document* document);
+
+ int32_t maxDoc() const;
+
+ TopDocs* _search(Query* query, Filter* filter, const int32_t nDocs);
+ TopFieldDocs* _search(Query* query, Filter* filter, const int32_t nDocs,
+ const Sort* sort);
+
+ void _search(Query* query, Filter* filter, HitCollector* results);
+
+ CL_NS(index)::IndexReader* getReader() {
+ return reader; }
+
+ Query* rewrite(Query* original);
+ void explain(Query* query, int32_t doc, Explanation* ret);
+};
+
+CL_NS_END
+
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/search/MultiSearcher.cpp b/src/3rdparty/clucene/src/CLucene/search/MultiSearcher.cpp
new file mode 100644
index 0000000..bed7f0d
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/MultiSearcher.cpp
@@ -0,0 +1,227 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "MultiSearcher.h"
+
+#include "SearchHeader.h"
+#include "HitQueue.h"
+#include "CLucene/document/Document.h"
+#include "CLucene/index/Term.h"
+#include "FieldDocSortedHitQueue.h"
+
+CL_NS_USE(index)
+CL_NS_USE(util)
+CL_NS_USE(document)
+
+CL_NS_DEF(search)
+
+ /** Creates a searcher which searches <i>searchers</i>. */
+ MultiSearcher::MultiSearcher(Searchable** _searchables):
+ _maxDoc(0) {
+ searchablesLen = 0;
+ while ( _searchables[searchablesLen] != NULL )
+ ++searchablesLen;
+
+ searchables=_CL_NEWARRAY(Searchable*,searchablesLen+1);
+ starts = _CL_NEWARRAY(int32_t,searchablesLen + 1); // build starts array
+ for (int32_t i = 0; i < searchablesLen; ++i) {
+ searchables[i]=_searchables[i];
+ starts[i] = _maxDoc;
+ _maxDoc += searchables[i]->maxDoc(); // compute maxDocs
+ }
+ starts[searchablesLen] = _maxDoc;
+ }
+
+ MultiSearcher::~MultiSearcher() {
+ _CLDELETE_ARRAY(searchables);
+ _CLDELETE_ARRAY(starts);
+ }
+
+
+ // inherit javadoc
+ void MultiSearcher::close() {
+ for (int32_t i = 0; i < searchablesLen; ++i){
+ searchables[i]->close();
+ searchables[i]=NULL;
+ }
+ }
+
+ int32_t MultiSearcher::docFreq(const Term* term) const {
+ int32_t docFreq = 0;
+ for (int32_t i = 0; i < searchablesLen; ++i)
+ docFreq += searchables[i]->docFreq(term);
+ return docFreq;
+ }
+
+ /** For use by {@link HitCollector} implementations. */
+ bool MultiSearcher::doc(int32_t n, Document* d) {
+ int32_t i = subSearcher(n); // find searcher index
+ return searchables[i]->doc(n - starts[i], d); // dispatch to searcher
+ }
+
+ int32_t MultiSearcher::searcherIndex(int32_t n) const{
+ return subSearcher(n);
+ }
+
+ /** Returns index of the searcher for document <code>n</code> in the array
+ * used to construct this searcher. */
+ int32_t MultiSearcher::subSearcher(int32_t n) const{
+ // replace w/ call to Arrays.binarySearch in Java 1.2
+ int32_t lo = 0; // search starts array
+ int32_t hi = searchablesLen - 1; // for first element less
+ // than n, return its index
+ int32_t mid,midValue;
+ while (hi >= lo) {
+ mid = (lo + hi) >> 1;
+ midValue = starts[mid];
+ if (n < midValue)
+ hi = mid - 1;
+ else if (n > midValue)
+ lo = mid + 1;
+ else{ // found a match
+ while (mid+1 < searchablesLen && starts[mid+1] == midValue) {
+ ++mid; // scan to last match
+ }
+ return mid;
+ }
+ }
+ return hi;
+ }
+
+ /** Returns the document number of document <code>n</code> within its
+ * sub-index. */
+ int32_t MultiSearcher::subDoc(int32_t n) const{
+ return n - starts[subSearcher(n)];
+ }
+
+ int32_t MultiSearcher::maxDoc() const{
+ return _maxDoc;
+ }
+
+ TopDocs* MultiSearcher::_search(Query* query, Filter* filter, const int32_t nDocs) {
+ HitQueue* hq = _CLNEW HitQueue(nDocs);
+ int32_t totalHits = 0;
+ TopDocs* docs;
+ int32_t j;
+ ScoreDoc* scoreDocs;
+ for (int32_t i = 0; i < searchablesLen; i++) { // search each searcher
+ docs = searchables[i]->_search(query, filter, nDocs);
+ totalHits += docs->totalHits; // update totalHits
+ scoreDocs = docs->scoreDocs;
+ for ( j = 0; j <docs->scoreDocsLength; ++j) { // merge scoreDocs int_to hq
+ scoreDocs[j].doc += starts[i]; // convert doc
+ if ( !hq->insert(scoreDocs[j]))
+ break; // no more scores > minScore
+ }
+
+ _CLDELETE(docs);
+ }
+
+ int32_t scoreDocsLen = hq->size();
+ scoreDocs = _CL_NEWARRAY(ScoreDoc, scoreDocsLen);
+ {//MSVC 6 scope fix
+ for (int32_t i = scoreDocsLen-1; i >= 0; --i) // put docs in array
+ scoreDocs[i] = hq->pop();
+ }
+
+ //cleanup
+ _CLDELETE(hq);
+
+ return _CLNEW TopDocs(totalHits, scoreDocs, scoreDocsLen);
+ }
+
+ /** Lower-level search API.
+ *
+ * <p>{@link HitCollector#collect(int32_t,qreal)} is called for every non-zero
+ * scoring document.
+ *
+ * <p>Applications should only use this if they need <i>all</i> of the
+ * matching documents. The high-level search API ({@link
+ * Searcher#search(Query)}) is usually more efficient, as it skips
+ * non-high-scoring hits.
+ *
+ * @param query to match documents
+ * @param filter if non-null, a bitset used to eliminate some documents
+ * @param results to receive hits
+ */
+ void MultiSearcher::_search(Query* query, Filter* filter, HitCollector* results){
+ for (int32_t i = 0; i < searchablesLen; ++i) {
+ /* DSR:CL_BUG: Old implementation leaked and was misconceived. We need
+ ** to have the original HitCollector ($results) collect *all* hits;
+ ** the MultiHitCollector instantiated below serves only to adjust
+ ** (forward by starts[i]) the docNo passed to $results.
+ ** Old implementation instead created a sort of linked list of
+ ** MultiHitCollectors that applied the adjustments in $starts
+ ** cumulatively (and was never deleted). */
+ HitCollector *docNoAdjuster = _CLNEW MultiHitCollector(results, starts[i]);
+ searchables[i]->_search(query, filter, docNoAdjuster);
+ _CLDELETE(docNoAdjuster);
+ }
+ }
+
+ TopFieldDocs* MultiSearcher::_search (Query* query, Filter* filter, const int32_t n, const Sort* sort){
+ FieldDocSortedHitQueue* hq = NULL;
+ int32_t totalHits = 0;
+ TopFieldDocs* docs;
+ int32_t j;
+ FieldDoc** fieldDocs;
+
+ for (int32_t i = 0; i < searchablesLen; ++i) { // search each searcher
+ docs = searchables[i]->_search (query, filter, n, sort);
+ if (hq == NULL){
+ hq = _CLNEW FieldDocSortedHitQueue (docs->fields, n);
+ docs->fields = NULL; //hit queue takes fields memory
+ }
+
+ totalHits += docs->totalHits; // update totalHits
+ fieldDocs = docs->fieldDocs;
+ for(j = 0;j<docs->scoreDocsLength;++j){ // merge scoreDocs into hq
+ fieldDocs[j]->scoreDoc.doc += starts[i]; // convert doc
+ if (!hq->insert (fieldDocs[j]) )
+ break; // no more scores > minScore
+ }
+ for ( int32_t x=0;x<j;++x )
+ fieldDocs[x]=NULL; //move ownership of FieldDoc to the hitqueue
+
+ _CLDELETE(docs);
+ }
+
+ int32_t hqlen = hq->size();
+ fieldDocs = _CL_NEWARRAY(FieldDoc*,hqlen);
+ for (j = hqlen - 1; j >= 0; j--) // put docs in array
+ fieldDocs[j] = hq->pop();
+
+ SortField** hqFields = hq->getFields();
+ hq->setFields(NULL); //move ownership of memory over to TopFieldDocs
+ _CLDELETE(hq);
+
+ return _CLNEW TopFieldDocs (totalHits, fieldDocs, hqlen, hqFields);
+ }
+
+ Query* MultiSearcher::rewrite(Query* original) {
+ Query** queries = _CL_NEWARRAY(Query*,searchablesLen+1);
+ for (int32_t i = 0; i < searchablesLen; ++i)
+ queries[i] = searchables[i]->rewrite(original);
+ queries[searchablesLen]=NULL;
+ return original->combine(queries);
+ }
+
+ void MultiSearcher::explain(Query* query, int32_t doc, Explanation* ret) {
+ int32_t i = subSearcher(doc); // find searcher index
+ searchables[i]->explain(query,doc-starts[i], ret); // dispatch to searcher
+ }
+
+ MultiHitCollector::MultiHitCollector(HitCollector* _results, int32_t _start):
+ results(_results),
+ start(_start) {
+ }
+
+ void MultiHitCollector::collect(const int32_t doc, const qreal score) {
+ results->collect(doc + start, score);
+ }
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/search/MultiSearcher.h b/src/3rdparty/clucene/src/CLucene/search/MultiSearcher.h
new file mode 100644
index 0000000..1021fbb
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/MultiSearcher.h
@@ -0,0 +1,95 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_search_multisearcher
+#define _lucene_search_multisearcher
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "SearchHeader.h"
+#include "CLucene/document/Document.h"
+#include "CLucene/index/Term.h"
+
+CL_NS_DEF(search)
+
+ class MultiHitCollector: public HitCollector{
+ private:
+ HitCollector* results;
+ int32_t start;
+ public:
+ MultiHitCollector(HitCollector* _results, int32_t _start);
+ void collect(const int32_t doc, const qreal score) ;
+ };
+
+
+ /** Implements search over a set of <code>Searchables</code>.
+ *
+ * <p>Applications usually need only call the inherited {@link #search(Query)}
+ * or {@link #search(Query,Filter)} methods.
+ */
+ class MultiSearcher: public Searcher {
+ private:
+ Searchable** searchables;
+ int32_t searchablesLen;
+ int32_t* starts;
+ int32_t _maxDoc;
+ protected:
+ int32_t* getStarts() {
+ return starts;
+ }
+
+ public:
+ /** Creates a searcher which searches <i>Searchables</i>. */
+ MultiSearcher(Searchable** searchables);
+
+ ~MultiSearcher();
+
+ /** Frees resources associated with this <code>Searcher</code>. */
+ void close() ;
+
+ int32_t docFreq(const CL_NS(index)::Term* term) const ;
+
+ /** For use by {@link HitCollector} implementations. */
+ bool doc(int32_t n, CL_NS(document)::Document* document);
+
+ /** For use by {@link HitCollector} implementations to identify the
+ * index of the sub-searcher that a particular hit came from. */
+ int32_t searcherIndex(int32_t n) const;
+
+ int32_t subSearcher(int32_t n) const;
+
+ int32_t subDoc(int32_t n) const;
+
+ int32_t maxDoc() const;
+
+ TopDocs* _search(Query* query, Filter* filter, const int32_t nDocs) ;
+
+ TopFieldDocs* _search (Query* query, Filter* filter, const int32_t n, const Sort* sort);
+
+ /** Lower-level search API.
+ *
+ * <p>{@link HitCollector#collect(int32_t,qreal)} is called for every non-zero
+ * scoring document.
+ *
+ * <p>Applications should only use this if they need <i>all</i> of the
+ * matching documents. The high-level search API ({@link
+ * Searcher#search(Query)}) is usually more efficient, as it skips
+ * non-high-scoring hits.
+ *
+ * @param query to match documents
+ * @param filter if non-null, a bitset used to eliminate some documents
+ * @param results to receive hits
+ */
+ void _search(Query* query, Filter* filter, HitCollector* results);
+
+ Query* rewrite(Query* original);
+ void explain(Query* query, int32_t doc, Explanation* ret);
+ };
+
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/search/MultiTermQuery.cpp b/src/3rdparty/clucene/src/CLucene/search/MultiTermQuery.cpp
new file mode 100644
index 0000000..3bf8d7a
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/MultiTermQuery.cpp
@@ -0,0 +1,98 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "MultiTermQuery.h"
+
+CL_NS_USE(index)
+CL_NS_USE(util)
+CL_NS_DEF(search)
+
+/** Constructs a query for terms matching <code>term</code>. */
+
+ MultiTermQuery::MultiTermQuery(Term* t){
+ //Func - Constructor
+ //Pre - t != NULL
+ //Post - The instance has been created
+
+ CND_PRECONDITION(t != NULL, "t is NULL");
+
+ term = _CL_POINTER(t);
+
+ }
+ MultiTermQuery::MultiTermQuery(const MultiTermQuery& clone):
+ Query(clone)
+ {
+ term = _CLNEW Term(clone.getTerm(false),clone.getTerm(false)->text());
+ }
+
+ MultiTermQuery::~MultiTermQuery(){
+ //Func - Destructor
+ //Pre - true
+ //Post - The instance has been destroyed
+
+ _CLDECDELETE(term);
+ }
+
+ Term* MultiTermQuery::getTerm(bool pointer) const{
+ if ( pointer )
+ return _CL_POINTER(term);
+ else
+ return term;
+ }
+
+ Query* MultiTermQuery::rewrite(IndexReader* reader) {
+ FilteredTermEnum* enumerator = getEnum(reader);
+ BooleanQuery* query = _CLNEW BooleanQuery();
+ try {
+ do {
+ Term* t = enumerator->term(false);
+ if (t != NULL) {
+ TermQuery* tq = _CLNEW TermQuery(t); // found a match
+ tq->setBoost(getBoost() * enumerator->difference()); // set the boost
+ query->add(tq,true, false, false); // add to q
+ }
+ } while (enumerator->next());
+ } _CLFINALLY ( enumerator->close(); _CLDELETE(enumerator) );
+
+ //if we only added one clause and the clause is not prohibited then
+ //we can just return the query
+ if (query->getClauseCount() == 1) { // optimize 1-clause queries
+ BooleanClause* c=0;
+ query->getClauses(&c);
+
+ if (!c->prohibited) { // just return clause
+ c->deleteQuery=false;
+ Query* ret = c->query;
+
+ _CLDELETE(query);
+ return ret;
+ }
+ }
+ return query;
+ }
+
+ Query* MultiTermQuery::combine(Query** queries) {
+ return Query::mergeBooleanQueries(queries);
+ }
+
+ /** Prints a user-readable version of this query. */
+ TCHAR* MultiTermQuery::toString(const TCHAR* field) const{
+ StringBuffer buffer;
+
+ if ( field==NULL || _tcscmp(term->field(),field)!=0 ) {
+ buffer.append(term->field());
+ buffer.append( _T(":"));
+ }
+ buffer.append(term->text());
+ if (getBoost() != 1.0f) {
+ buffer.appendChar ( '^' );
+ buffer.appendFloat( getBoost(),1);
+ }
+ return buffer.toString();
+ }
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/search/MultiTermQuery.h b/src/3rdparty/clucene/src/CLucene/search/MultiTermQuery.h
new file mode 100644
index 0000000..d376453
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/MultiTermQuery.h
@@ -0,0 +1,62 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_search_MultiTermQuery_
+#define _lucene_search_MultiTermQuery_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "CLucene/util/StringBuffer.h"
+#include "CLucene/index/IndexReader.h"
+#include "CLucene/index/Term.h"
+#include "CLucene/index/Terms.h"
+#include "FilteredTermEnum.h"
+#include "SearchHeader.h"
+#include "BooleanQuery.h"
+#include "TermQuery.h"
+
+CL_NS_DEF(search)
+ /**
+ * A {@link Query} that matches documents containing a subset of terms provided
+ * by a {@link FilteredTermEnum} enumeration.
+ * <P>
+ * <code>MultiTermQuery</code> is not designed to be used by itself.
+ * <BR>
+ * The reason being that it is not intialized with a {@link FilteredTermEnum}
+ * enumeration. A {@link FilteredTermEnum} enumeration needs to be provided.
+ * <P>
+ * For example, {@link WildcardQuery} and {@link FuzzyQuery} extend
+ * <code>MultiTermQuery</code> to provide {@link WildcardTermEnum} and
+ * {@link FuzzyTermEnum}, respectively.
+ */
+ class MultiTermQuery: public Query {
+ private:
+ CL_NS(index)::Term* term;
+ protected:
+ MultiTermQuery(const MultiTermQuery& clone);
+
+ /** Construct the enumeration to be used, expanding the pattern term. */
+ virtual FilteredTermEnum* getEnum(CL_NS(index)::IndexReader* reader) = 0;
+ public:
+ /** Constructs a query for terms matching <code>term</code>. */
+ MultiTermQuery(CL_NS(index)::Term* t);
+
+ virtual ~MultiTermQuery();
+
+ /** Returns the pattern term. */
+ CL_NS(index)::Term* getTerm(bool pointer=true) const;
+
+ Query* combine(Query** queries);
+
+ /** Prints a user-readable version of this query. */
+ TCHAR* toString(const TCHAR* field) const;
+
+ Query* rewrite(CL_NS(index)::IndexReader* reader);
+ };
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/search/PhrasePositions.cpp b/src/3rdparty/clucene/src/CLucene/search/PhrasePositions.cpp
new file mode 100644
index 0000000..7611056
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/PhrasePositions.cpp
@@ -0,0 +1,116 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "PhrasePositions.h"
+
+#include "CLucene/index/Terms.h"
+
+CL_NS_USE(index)
+CL_NS_DEF(search)
+
+ PhrasePositions::PhrasePositions(TermPositions* Tp, const int32_t OffSet){
+ //Func - Constructor
+ //Pre - t != NULL
+ // OffSet != NULL
+ //Post - The instance has been created
+
+ CND_PRECONDITION(Tp != NULL,"Tp is NULL");
+ CND_PRECONDITION(OffSet >= 0 ,"OffSet is a negative number");
+
+ tp = Tp;
+ offset = OffSet;
+ position = 0;
+ count = 0;
+ doc = 0;
+
+ _next = NULL;
+ }
+
+ PhrasePositions::~PhrasePositions(){
+ //Func - Destructor
+ //Pre - true
+ //Post - The instance has been deleted
+
+ //delete next Phrase position and by doing that
+ //all PhrasePositions in the list
+ _CLDELETE(_next);
+
+ //Check if tp is valid
+ if ( tp != NULL ){
+ //Close TermPositions tp
+ tp->close();
+ _CLDELETE(tp);
+ }
+ }
+
+ bool PhrasePositions::next(){
+ //Func - Increments to next doc
+ //Pre - tp != NULL
+ //Post - if there was no next then doc = INT_MAX otherwise
+ // doc contains the current document number
+
+ CND_PRECONDITION(tp != NULL,"tp is NULL");
+
+ //Move to the next in TermPositions tp
+ if (!tp->next()) {
+ //There is no next so close the stream
+ tp->close();
+ //delete tp and reset tp to NULL
+ _CLVDELETE(tp); //todo: not a clucene object... should be
+ //Assign Doc sentinel value
+ doc = INT_MAX;
+ return false;
+ }else{
+ doc = tp->doc();
+ position = 0;
+ return true;
+ }
+ }
+ bool PhrasePositions::skipTo(int32_t target){
+ if (!tp->skipTo(target)) {
+ tp->close(); // close stream
+ doc = LUCENE_INT32_MAX_SHOULDBE; // sentinel value
+ return false;
+ }
+ doc = tp->doc();
+ position = 0;
+ return true;
+ }
+ void PhrasePositions::firstPosition(){
+ //Func - Read the first TermPosition
+ //Pre - tp != NULL
+ //Post -
+
+ CND_PRECONDITION(tp != NULL,"tp is NULL");
+
+ //read first pos
+ count = tp->freq();
+ //Move to the next TermPosition
+ nextPosition();
+ }
+
+ bool PhrasePositions::nextPosition(){
+ //Func - Move to the next position
+ //Pre - tp != NULL
+ //Post -
+
+ CND_PRECONDITION(tp != NULL,"tp is NULL");
+
+ if (count-- > 0) {
+ //read subsequent pos's
+ position = tp->nextPosition() - offset;
+
+ //Check position always bigger than or equal to 0
+ //bvk: todo, bug??? position < 0 occurs, cant figure out why,
+ //old version does it too and will fail the "SearchTest" test
+ //CND_CONDITION(position >= 0, "position has become a negative number");
+ return true;
+ }else{
+ return false;
+ }
+ }
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/search/PhrasePositions.h b/src/3rdparty/clucene/src/CLucene/search/PhrasePositions.h
new file mode 100644
index 0000000..b6c8437
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/PhrasePositions.h
@@ -0,0 +1,41 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_search_PhrasePositions_
+#define _lucene_search_PhrasePositions_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "CLucene/index/Terms.h"
+
+CL_NS_DEF(search)
+
+ class PhrasePositions:LUCENE_BASE {
+ public:
+ int32_t doc; // current doc
+ int32_t position; // position in doc
+ int32_t count; // remaining pos in this doc
+ int32_t offset; // position in phrase
+ CL_NS(index)::TermPositions* tp; // stream of positions
+ PhrasePositions* _next; // used to make lists
+
+
+ //Constructor
+ PhrasePositions(CL_NS(index)::TermPositions* Tp, const int32_t o);
+ //Destructor
+ ~PhrasePositions();
+
+ bool next();
+ bool skipTo(int32_t target);
+
+ void firstPosition();
+
+ bool nextPosition();
+ };
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/search/PhraseQuery.cpp b/src/3rdparty/clucene/src/CLucene/search/PhraseQuery.cpp
new file mode 100644
index 0000000..899cb3c
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/PhraseQuery.cpp
@@ -0,0 +1,463 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "PhraseQuery.h"
+
+#include "SearchHeader.h"
+#include "Scorer.h"
+#include "BooleanQuery.h"
+#include "TermQuery.h"
+
+#include "CLucene/index/Term.h"
+#include "CLucene/index/Terms.h"
+#include "CLucene/index/IndexReader.h"
+
+#include "CLucene/util/StringBuffer.h"
+#include "CLucene/util/VoidList.h"
+#include "CLucene/util/Arrays.h"
+
+#include "ExactPhraseScorer.h"
+#include "SloppyPhraseScorer.h"
+
+CL_NS_USE(index)
+CL_NS_USE(util)
+CL_NS_DEF(search)
+
+ PhraseQuery::PhraseQuery():
+ terms(false)
+ {
+ //Func - Constructor
+ //Pre - true
+ //Post - An empty PhraseQuery has been created
+
+ slop = 0;
+
+ field = NULL;
+ }
+ PhraseQuery::PhraseQuery(const PhraseQuery& clone):
+ Query(clone), terms(false)
+ {
+ slop = clone.slop;
+ field = clone.field;
+ int32_t size=clone.positions.size();
+ { //msvc6 scope fix
+ for ( int32_t i=0;i<size;i++ ){
+ int32_t n = clone.positions[i];
+ this->positions.push_back( n );
+ }
+ }
+ size=clone.terms.size();
+ { //msvc6 scope fix
+ for ( int32_t i=0;i<size;i++ ){
+ this->terms.push_back( _CL_POINTER(clone.terms[i]));
+ }
+ }
+ }
+ Query* PhraseQuery::clone() const{
+ return _CLNEW PhraseQuery(*this);
+ }
+ bool PhraseQuery::equals(CL_NS(search)::Query *other) const{
+ if (!(other->instanceOf(PhraseQuery::getClassName())))
+ return false;
+
+ PhraseQuery* pq = (PhraseQuery*)other;
+ bool ret = (this->getBoost() == pq->getBoost())
+ && (this->slop == pq->slop);
+
+ if ( ret ){
+ CLListEquals<CL_NS(index)::Term,Term::Equals,
+ const CL_NS(util)::CLVector<CL_NS(index)::Term*>,
+ const CL_NS(util)::CLVector<CL_NS(index)::Term*> > comp;
+ ret = comp.equals(&this->terms,&pq->terms);
+ }
+
+ if ( ret ){
+ CLListEquals<int32_t,Equals::Int32,
+ const CL_NS(util)::CLVector<int32_t,CL_NS(util)::Deletor::DummyInt32>,
+ const CL_NS(util)::CLVector<int32_t,CL_NS(util)::Deletor::DummyInt32> > comp;
+ ret = comp.equals(&this->positions,&pq->positions);
+ }
+ return ret;
+ }
+
+
+ PhraseQuery::~PhraseQuery(){
+ //Func - Destructor
+ //Pre - true
+ //Post 0 The instance has been destroyed
+
+ //Iterate through all the terms
+ for (uint32_t i = 0; i < terms.size(); i++){
+ _CLLDECDELETE(terms[i]);
+ }
+ positions.clear();
+ }
+
+ size_t PhraseQuery::hashCode() const {
+ //todo: do cachedHashCode, and invalidate on add/remove clause
+ size_t ret = Similarity::floatToByte(getBoost()) ^ Similarity::floatToByte(slop);
+
+ { //msvc6 scope fix
+ for ( int32_t i=0;terms.size();i++ )
+ ret = 31 * ret + terms[i]->hashCode();
+ }
+ { //msvc6 scope fix
+ for ( int32_t i=0;positions.size();i++ )
+ ret = 31 * ret + positions[i];
+ }
+ return ret;
+ }
+
+ const TCHAR* PhraseQuery::getClassName(){
+ return _T("PhraseQuery");
+ }
+ const TCHAR* PhraseQuery::getQueryName() const{
+ //Func - Returns the string "PhraseQuery"
+ //Pre - true
+ //Post - The string "PhraseQuery" has been returned
+ return getClassName();
+ }
+
+
+ /**
+ * Adds a term to the end of the query phrase.
+ * The relative position of the term is the one immediately after the last term added.
+ */
+ void PhraseQuery::add(Term* term) {
+ CND_PRECONDITION(term != NULL,"term is NULL");
+
+ int32_t position = 0;
+
+ if(positions.size() > 0)
+ position = (positions[positions.size()-1]) + 1;
+
+ add(term, position);
+ }
+
+ void PhraseQuery::add(Term* term, int32_t position) {
+ //Func - Adds a term to the end of the query phrase.
+ //Pre - term != NULL
+ //Post - The term has been added if its field matches the field of the PhraseQuery
+ // and true is returned otherwise false is returned
+ CND_PRECONDITION(term != NULL,"term is NULL");
+
+ if (terms.size() == 0)
+ field = term->field();
+ else{
+ //Check if the field of the _CLNEW term matches the field of the PhraseQuery
+ //can use != because fields are interned
+ if ( term->field() != field){
+ //return false;
+ TCHAR buf[200];
+ _sntprintf(buf,200,_T("All phrase terms must be in the same field: %s"),term->field());
+ _CLTHROWT(CL_ERR_IllegalArgument,buf);
+ }
+ }
+ //Store the _CLNEW term
+ terms.push_back(_CL_POINTER(term));
+
+ positions.push_back(position);
+ }
+
+ void PhraseQuery::getPositions(Array<int32_t>& result) const{
+ result.length = positions.size();
+ result.values = _CL_NEWARRAY(int32_t,result.length);
+ for(int32_t i = 0; i < result.length; i++){
+ result.values[i] = positions[i];
+ }
+ }
+ int32_t* PhraseQuery::getPositions() const{
+ CND_WARNING(false,"getPositions() is deprecated")
+
+ Array<int32_t> arr;
+ getPositions(arr);
+ return arr.values;
+ }
+
+ Weight* PhraseQuery::_createWeight(Searcher* searcher) {
+ if (terms.size() == 1) { // optimize one-term case
+ Term* term = terms[0];
+ Query* termQuery = _CLNEW TermQuery(term);
+ termQuery->setBoost(getBoost());
+ Weight* ret = termQuery->_createWeight(searcher);
+ _CLDELETE(termQuery);
+ return ret;
+ }
+ return _CLNEW PhraseWeight(searcher,this);
+ }
+
+
+ Term** PhraseQuery::getTerms() const{
+ //Func - added by search highlighter
+ //Pre -
+ //Post -
+
+ //Let size contain the number of terms
+ int32_t size = terms.size();
+ Term** ret = _CL_NEWARRAY(Term*,size+1);
+
+ CND_CONDITION(ret != NULL,"Could not allocated memory for ret");
+
+ //Iterate through terms and copy each pointer to ret
+ for ( int32_t i=0;i<size;i++ ){
+ ret[i] = terms[i];
+ }
+ ret[size] = NULL;
+ return ret;
+ }
+
+ TCHAR* PhraseQuery::toString(const TCHAR* f) const{
+ //Func - Prints a user-readable version of this query.
+ //Pre - f != NULL
+ //Post - The query string has been returned
+
+ if ( terms.size()== 0 )
+ return NULL;
+
+ StringBuffer buffer;
+ if ( f==NULL || _tcscmp(field,f)!=0) {
+ buffer.append(field);
+ buffer.append( _T(":"));
+ }
+
+ buffer.append( _T("\"") );
+
+ Term *T = NULL;
+
+ //iterate through all terms
+ for (uint32_t i = 0; i < terms.size(); i++) {
+ //Get the i-th term
+ T = terms[i];
+
+ //Ensure T is a valid Term
+ CND_CONDITION(T !=NULL,"T is NULL");
+
+ buffer.append( T->text() );
+ //Check if i is at the end of terms
+ if (i != terms.size()-1){
+ buffer.append(_T(" "));
+ }
+ }
+
+ buffer.append( _T("\"") );
+
+ if (slop != 0) {
+ buffer.append(_T("~"));
+ buffer.appendFloat(slop,0);
+ }
+
+ //Check if there is an other boost factor than 1.0
+ if (getBoost() != 1.0f) {
+ buffer.append(_T("^"));
+ buffer.appendFloat( getBoost(),1 );
+ }
+
+ //return the query string
+ return buffer.toString();
+ }
+
+
+
+
+
+
+
+
+ PhraseQuery::PhraseWeight::PhraseWeight(Searcher* searcher, PhraseQuery* _this) {
+ this->_this=_this;
+ this->value = 0;
+ this->idf = 0;
+ this->queryNorm = 0;
+ this->queryWeight = 0;
+ this->searcher = searcher;
+ }
+
+ TCHAR* PhraseQuery::PhraseWeight::toString() {
+ return STRDUP_TtoT(_T("weight(PhraseQuery)"));
+ }
+ PhraseQuery::PhraseWeight::~PhraseWeight(){
+ }
+
+
+ Query* PhraseQuery::PhraseWeight::getQuery() { return _this; }
+ qreal PhraseQuery::PhraseWeight::getValue() { return value; }
+
+ qreal PhraseQuery::PhraseWeight::sumOfSquaredWeights(){
+ idf = _this->getSimilarity(searcher)->idf(&_this->terms, searcher);
+ queryWeight = idf * _this->getBoost(); // compute query weight
+ return queryWeight * queryWeight; // square it
+ }
+
+ void PhraseQuery::PhraseWeight::normalize(qreal queryNorm) {
+ this->queryNorm = queryNorm;
+ queryWeight *= queryNorm; // normalize query weight
+ value = queryWeight * idf; // idf for document
+ }
+
+ Scorer* PhraseQuery::PhraseWeight::scorer(IndexReader* reader) {
+ //Func -
+ //Pre -
+ //Post -
+
+ //Get the length of terms
+ int32_t tpsLength = _this->terms.size();
+
+ //optimize zero-term case
+ if (tpsLength == 0)
+ return NULL;
+
+ TermPositions** tps = _CL_NEWARRAY(TermPositions*,tpsLength+1);
+
+ //Check if tps has been allocated properly
+ CND_CONDITION(tps != NULL,"Could not allocate memory for tps");
+
+ TermPositions* p = NULL;
+
+ //Iterate through all terms
+ int32_t size = _this->terms.size();
+ for (int32_t i = 0; i < size; i++) {
+ //Get the termPostitions for the i-th term
+ p = reader->termPositions(_this->terms[i]);
+
+ //Check if p is valid
+ if (p == NULL) {
+ //Delete previous retrieved termPositions
+ while (--i >= 0){
+ _CLVDELETE(tps[i]); //todo: not a clucene object... should be
+ }
+ _CLDELETE_ARRAY(tps);
+ return NULL;
+ }
+
+ //Store p at i in tps
+ tps[i] = p;
+ }
+ tps[tpsLength] = NULL;
+
+ Scorer* ret = NULL;
+
+ Array<int32_t> positions;
+ _this->getPositions(positions);
+ int32_t slop = _this->getSlop();
+ if ( slop != 0)
+ // optimize exact case
+ //todo: need to pass these: this, tps,
+ ret = _CLNEW SloppyPhraseScorer(this,tps,positions.values,
+ _this->getSimilarity(searcher),
+ slop, reader->norms(_this->field));
+ else
+ ret = _CLNEW ExactPhraseScorer(this, tps, positions.values,
+ _this->getSimilarity(searcher),
+ reader->norms(_this->field));
+ positions.deleteArray();
+
+ CND_CONDITION(ret != NULL,"Could not allocate memory for ret");
+
+ //tps can be deleted safely. SloppyPhraseScorer or ExactPhraseScorer will take care
+ //of its values
+
+ _CLDELETE_ARRAY(tps);
+ return ret;
+ }
+
+ void PhraseQuery::PhraseWeight::explain(IndexReader* reader, int32_t doc, Explanation* result){
+ TCHAR descbuf[LUCENE_SEARCH_EXPLANATION_DESC_LEN+1];
+ TCHAR* tmp;
+
+ tmp = getQuery()->toString();
+ _sntprintf(descbuf,LUCENE_SEARCH_EXPLANATION_DESC_LEN,_T("weight(%s in %d), product of:"),
+ tmp,doc);
+ _CLDELETE_CARRAY(tmp);
+ result->setDescription(descbuf);
+
+ StringBuffer docFreqs;
+ StringBuffer query;
+ query.appendChar('\"');
+ for (uint32_t i = 0; i < _this->terms.size(); i++) {
+ if (i != 0) {
+ docFreqs.appendChar(' ');
+ query.appendChar(' ');
+ }
+
+ Term* term = _this->terms[i];
+
+ docFreqs.append(term->text());
+ docFreqs.appendChar('=');
+ docFreqs.appendInt(searcher->docFreq(term));
+
+ query.append(term->text());
+ }
+ query.appendChar('\"');
+
+ _sntprintf(descbuf,LUCENE_SEARCH_EXPLANATION_DESC_LEN,
+ _T("idf(%s: %s)"),_this->field,docFreqs.getBuffer());
+ Explanation* idfExpl = _CLNEW Explanation(idf, descbuf);
+
+ // explain query weight
+ Explanation* queryExpl = _CLNEW Explanation;
+ tmp = getQuery()->toString();
+ _sntprintf(descbuf,LUCENE_SEARCH_EXPLANATION_DESC_LEN,
+ _T("queryWeight(%s), product of:"),tmp);
+ _CLDELETE_CARRAY(tmp);
+ queryExpl->setDescription(descbuf);
+
+ Explanation* boostExpl = _CLNEW Explanation(_this->getBoost(), _T("boost"));
+ if (_this->getBoost() != 1.0f)
+ queryExpl->addDetail(boostExpl);
+ queryExpl->addDetail(idfExpl);
+
+ Explanation* queryNormExpl = _CLNEW Explanation(queryNorm,_T("queryNorm"));
+ queryExpl->addDetail(queryNormExpl);
+
+ queryExpl->setValue(boostExpl->getValue() *
+ idfExpl->getValue() *
+ queryNormExpl->getValue());
+
+ result->addDetail(queryExpl);
+
+ // explain field weight
+ Explanation* fieldExpl = _CLNEW Explanation;
+ _sntprintf(descbuf,LUCENE_SEARCH_EXPLANATION_DESC_LEN,
+ _T("fieldWeight(%s:%s in %d), product of:"),
+ _this->field,query.getBuffer(),doc);
+ fieldExpl->setDescription(descbuf);
+
+
+ Explanation* tfExpl = _CLNEW Explanation;
+ scorer(reader)->explain(doc, tfExpl);
+ fieldExpl->addDetail(tfExpl);
+ fieldExpl->addDetail(idfExpl);
+
+ Explanation* fieldNormExpl = _CLNEW Explanation();
+ uint8_t* fieldNorms = reader->norms(_this->field);
+ qreal fieldNorm =
+ fieldNorms!=NULL ? Similarity::decodeNorm(fieldNorms[doc]) : 0.0f;
+ fieldNormExpl->setValue(fieldNorm);
+
+
+ _sntprintf(descbuf,LUCENE_SEARCH_EXPLANATION_DESC_LEN,
+ _T("fieldNorm(field=%s, doc=%d)"),_this->field,doc);
+ fieldNormExpl->setDescription(descbuf);
+ fieldExpl->addDetail(fieldNormExpl);
+
+ fieldExpl->setValue(tfExpl->getValue() *
+ idfExpl->getValue() *
+ fieldNormExpl->getValue());
+
+ result->addDetail(fieldExpl);
+
+ // combine them
+ result->setValue(queryExpl->getValue() * fieldExpl->getValue());
+
+ if (queryExpl->getValue() == 1.0f){
+ result->set(*fieldExpl);
+ _CLDELETE(fieldExpl);
+ }
+ }
+
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/search/PhraseQuery.h b/src/3rdparty/clucene/src/CLucene/search/PhraseQuery.h
new file mode 100644
index 0000000..6b32558
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/PhraseQuery.h
@@ -0,0 +1,127 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_search_PhraseQuery_
+#define _lucene_search_PhraseQuery_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "SearchHeader.h"
+#include "Scorer.h"
+#include "BooleanQuery.h"
+#include "TermQuery.h"
+
+#include "CLucene/index/Term.h"
+#include "CLucene/index/Terms.h"
+#include "CLucene/index/IndexReader.h"
+
+#include "CLucene/util/StringBuffer.h"
+#include "CLucene/util/VoidList.h"
+
+#include "ExactPhraseScorer.h"
+#include "SloppyPhraseScorer.h"
+
+CL_NS_DEF(search)
+ // A Query that matches documents containing a particular sequence of terms.
+ // This may be combined with other terms with a {@link BooleanQuery}.
+ class PhraseQuery: public Query {
+ private:
+ CL_NS(util)::CLVector<int32_t,CL_NS(util)::Deletor::DummyInt32> positions;
+ int32_t slop;
+
+ const TCHAR* field;
+ CL_NS(util)::CLVector<CL_NS(index)::Term*> terms;
+
+
+ class PhraseWeight: public Weight {
+ private:
+ Searcher* searcher;
+ qreal value;
+ qreal idf;
+ qreal queryNorm;
+ qreal queryWeight;
+ PhraseQuery* _this;
+ public:
+ PhraseWeight(Searcher* searcher, PhraseQuery* _this);
+ ~PhraseWeight();
+ TCHAR* toString();
+
+ Query* getQuery();
+ qreal getValue();
+
+ qreal sumOfSquaredWeights();
+ void normalize(qreal queryNorm);
+ Scorer* scorer(CL_NS(index)::IndexReader* reader);
+ void explain(CL_NS(index)::IndexReader* reader, int32_t doc, Explanation* ret);
+ TCHAR* toString(TCHAR* f);
+ bool equals(PhraseWeight* o);
+ };
+ friend class PhraseWeight;
+ protected:
+ Weight* _createWeight(Searcher* searcher);
+ PhraseQuery(const PhraseQuery& clone);
+ public:
+ //Constructor
+ PhraseQuery();
+
+ //Destructor
+ ~PhraseQuery();
+
+ //Returns the string "PhraseQuery"
+ const TCHAR* getQueryName() const;
+ static const TCHAR* getClassName();
+
+ //Sets the number of other words permitted between words in query phrase.
+ //If zero, then this is an exact phrase search. For larger values this works
+ //like a WITHIN or NEAR operator.
+ //
+ //The slop is in fact an edit-distance, where the units correspond to
+ //moves of terms in the query phrase out of position. For example, to switch
+ //the order of two words requires two moves (the first move places the words
+ //atop one another), so to permit re-orderings of phrases, the slop must be
+ //at least two.
+ //
+ //More exact matches are scored higher than sloppier matches, thus search
+ //results are sorted by exactness.
+ //
+ //The slop is zero by default, requiring exact matches.
+ void setSlop(const int32_t s) { slop = s; }
+
+ //Returns the slop. See setSlop().
+ int32_t getSlop() const { return slop; }
+
+ //Adds a term to the end of the query phrase.
+ void add(CL_NS(index)::Term* term);
+ void add(CL_NS(index)::Term* term, int32_t position);
+
+
+
+ //Returns the sum of squared weights
+ qreal sumOfSquaredWeights(Searcher* searcher);
+
+ //Normalizes the Weight
+ void normalize(const qreal norm);
+
+ Scorer* scorer(CL_NS(index)::IndexReader* reader);
+
+ //added by search highlighter
+ CL_NS(index)::Term** getTerms() const;
+ _CL_DEPRECATED( deleteDocuments ) int32_t* getPositions() const; ///@deprecated. use getPositions(Array<int32_t>& result)
+ void getPositions(Array<int32_t>& result) const;
+ const TCHAR* getFieldName() const{ return field; }
+
+ //Prints a user-readable version of this query.
+ TCHAR* toString(const TCHAR* f) const;
+
+ Query* clone() const;
+ bool equals(CL_NS(search)::Query *) const;
+
+ size_t hashCode() const;
+ };
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/search/PhraseQueue.h b/src/3rdparty/clucene/src/CLucene/search/PhraseQueue.h
new file mode 100644
index 0000000..c0682fc
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/PhraseQueue.h
@@ -0,0 +1,36 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_search_PriorityQueue_
+#define _lucene_search_PriorityQueue_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "CLucene/util/PriorityQueue.h"
+#include "PhrasePositions.h"
+
+CL_NS_DEF(search)
+ class PhraseQueue: public CL_NS(util)::PriorityQueue<PhrasePositions*,
+ CL_NS(util)::Deletor::Object<PhrasePositions> > {
+ public:
+ PhraseQueue(const int32_t size) {
+ initialize(size,false);
+ }
+ ~PhraseQueue(){
+ }
+
+ protected:
+ bool lessThan(PhrasePositions* pp1, PhrasePositions* pp2) {
+ if (pp1->doc == pp2->doc)
+ return pp1->position < pp2->position;
+ else
+ return pp1->doc < pp2->doc;
+ }
+ };
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/search/PhraseScorer.cpp b/src/3rdparty/clucene/src/CLucene/search/PhraseScorer.cpp
new file mode 100644
index 0000000..b2da231
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/PhraseScorer.cpp
@@ -0,0 +1,225 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "PhraseScorer.h"
+
+#include "PhraseQueue.h"
+#include "PhrasePositions.h"
+#include "Scorer.h"
+#include "Similarity.h"
+
+CL_NS_USE(index)
+CL_NS_USE(util)
+CL_NS_DEF(search)
+
+
+ PhraseScorer::PhraseScorer(Weight* weight, TermPositions** tps,
+ int32_t* positions, Similarity* similarity, uint8_t* norms):
+ Scorer(similarity)
+ {
+ //Func - Constructor
+ //Pre - tps != NULL and is an array of TermPositions
+ // tpsLength >= 0
+ // n != NULL
+ //Post - The instance has been created
+
+ CND_PRECONDITION(tps != NULL,"tps is NULL");
+
+ //norms are only used if phraseFreq returns more than 0.0
+ //phraseFreq should only return more than 0.0 if norms != NULL
+ //CND_PRECONDITION(n != NULL,"n is NULL");
+
+ firstTime = true;
+ more = true;
+ this->norms = norms;
+ this->weight = weight;
+ this->value = weight->getValue();
+
+ //reset internal pointers
+ first = NULL;
+ last = NULL;
+
+ //use pq to build a sorted list of PhrasePositions
+ int32_t i = 0;
+ while(tps[i] != NULL){
+ PhrasePositions *pp = _CLNEW PhrasePositions(tps[i], positions[i]);
+ CND_CONDITION(pp != NULL,"Could not allocate memory for pp");
+
+ //Store PhrasePos into the PhrasePos pq
+ if (last != NULL) { // add next to end of list
+ last->_next = pp;
+ } else
+ first = pp;
+ last = pp;
+
+ i++;
+ }
+
+ pq = _CLNEW PhraseQueue(i); //i==tps.length
+ CND_CONDITION(pq != NULL,"Could not allocate memory for pq");
+ }
+
+ PhraseScorer::~PhraseScorer() {
+ //Func - Destructor
+ //Pre - true
+ //Post - The instance has been destroyed
+
+ //The PhraseQueue pq (which is a PriorityQueue) pq is actually empty at present, the elements
+ //having been transferred by pqToList() to the linked list starting with
+ //first. The nodes of that linked list are deleted by the destructor of
+ //first, rather than the destructor of pq.
+ _CLDELETE(first);
+ _CLDELETE(pq);
+ }
+
+ bool PhraseScorer::next(){
+ if (firstTime) {
+ init();
+ firstTime = false;
+ } else if (more) {
+ more = last->next(); // trigger further scanning
+ }
+ return doNext();
+ }
+
+ // next without initial increment
+ bool PhraseScorer::doNext() {
+ while (more) {
+ while (more && first->doc < last->doc) { // find doc w/ all the terms
+ more = first->skipTo(last->doc); // skip first upto last
+ firstToLast(); // and move it to the end
+ }
+
+ if (more) {
+ // found a doc with all of the terms
+ freq = phraseFreq(); // check for phrase
+ if (freq == 0.0f) // no match
+ more = last->next(); // trigger further scanning
+ else
+ return true; // found a match
+ }
+ }
+ return false; // no more matches
+ }
+
+ qreal PhraseScorer::score(){
+ //System.out.println("scoring " + first.doc);
+ qreal raw = getSimilarity()->tf(freq) * value; // raw score
+ return raw * Similarity::decodeNorm(norms[first->doc]); // normalize
+ }
+
+ bool PhraseScorer::skipTo(int32_t target) {
+ for (PhrasePositions* pp = first; more && pp != NULL; pp = pp->_next) {
+ more = pp->skipTo(target);
+ }
+ if (more)
+ sort(); // re-sort
+ return doNext();
+ }
+
+ void PhraseScorer::init() {
+ for (PhrasePositions* pp = first; more && pp != NULL; pp = pp->_next)
+ more = pp->next();
+ if(more)
+ sort();
+ }
+
+ void PhraseScorer::sort() {
+ pq->clear();
+ for (PhrasePositions* pp = first; pp != NULL; pp = pp->_next)
+ pq->put(pp);
+ pqToList();
+ }
+
+
+
+ void PhraseScorer::pqToList(){
+ //Func - Transfers the PhrasePositions from the PhraseQueue pq to
+ // the PhrasePositions list with first as its first element
+ //Pre - pq != NULL
+ // first = NULL
+ // last = NULL
+ //Post - All PhrasePositions have been transfered to the list
+ // of PhrasePositions of which the first element is pointed to by first
+ // and the last element is pointed to by last
+
+ CND_PRECONDITION(pq != NULL,"pq is NULL");
+
+ last = first = NULL;
+
+ PhrasePositions* PhrasePos = NULL;
+
+ //As long pq is not empty
+ while (pq->top() != NULL){
+ //Pop a PhrasePositions instance
+ PhrasePos = pq->pop();
+
+ // add next to end of list
+ if (last != NULL) {
+ last->_next = PhrasePos;
+ } else {
+ first = PhrasePos;
+ }
+
+ //Let last point to the new last PhrasePositions instance just added
+ last = PhrasePos;
+ //Reset the next of last to NULL
+ last->_next = NULL;
+ }
+
+ //Check to see that pq is empty now
+ CND_CONDITION(pq->size()==0, "pq is not empty while it should be");
+ }
+
+ void PhraseScorer::firstToLast(){
+ //Func - Moves first to the end of the list
+ //Pre - first is NULL or points to an PhrasePositions Instance
+ // last is NULL or points to an PhrasePositions Instance
+ // first and last both are NULL or both are not NULL
+ //Post - The first element has become the last element in the list
+
+ CND_PRECONDITION(((first==NULL && last==NULL) ||(first !=NULL && last != NULL)),
+ "Either first or last is NULL but not both");
+
+ //Check if first and last are valid pointers
+ if(first && last){
+ last->_next = first;
+ last = first;
+ first = first->_next;
+ last->_next = NULL;
+ }
+ }
+
+
+ void PhraseScorer::explain(int32_t _doc, Explanation* tfExplanation) {
+ while (next() && doc() < _doc){
+ }
+
+ qreal phraseFreq = (doc() == _doc) ? freq : 0.0f;
+ tfExplanation->setValue(getSimilarity()->tf(phraseFreq));
+
+ StringBuffer buf;
+ buf.append(_T("tf(phraseFreq="));
+ buf.appendFloat(phraseFreq,2);
+ buf.append(_T(")"));
+ tfExplanation->setDescription(buf.getBuffer());
+ }
+
+ TCHAR* PhraseScorer::toString() {
+ StringBuffer buf;
+ buf.append(_T("scorer("));
+
+ TCHAR* tmp = weight->toString();
+ buf.append(tmp);
+ _CLDELETE_CARRAY(tmp);
+
+ buf.append(_T(")"));
+
+ return buf.toString();
+ }
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/search/PhraseScorer.h b/src/3rdparty/clucene/src/CLucene/search/PhraseScorer.h
new file mode 100644
index 0000000..89f7a1f
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/PhraseScorer.h
@@ -0,0 +1,65 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_search_PhraseScorer_
+#define _lucene_search_PhraseScorer_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "PhraseQueue.h"
+#include "PhrasePositions.h"
+#include "Scorer.h"
+#include "Similarity.h"
+
+CL_NS_DEF(search)
+
+ class PhraseScorer: public Scorer {
+ private:
+ Weight* weight;
+ qreal freq;
+ bool firstTime;
+ bool more;
+
+ protected:
+ uint8_t* norms;
+ qreal value;
+
+ PhraseQueue* pq; //is used to order the list point to by first and last
+ PhrasePositions* first; //Points to the first in the list of PhrasePositions
+ PhrasePositions* last; //Points to the last in the list of PhrasePositions
+
+ public:
+ //Constructor
+ PhraseScorer(Weight* weight, CL_NS(index)::TermPositions** tps,
+ int32_t* positions, Similarity* similarity, uint8_t* norms);
+ virtual ~PhraseScorer();
+
+ int32_t doc() const { return first->doc; }
+ bool next();
+ qreal score();
+ bool skipTo(int32_t target);
+
+
+ void explain(int32_t doc, Explanation* ret);
+ TCHAR* toString();
+ protected:
+ virtual qreal phraseFreq() =0;
+
+ //Transfers the PhrasePositions from the PhraseQueue pq to
+ //the PhrasePositions list with first as its first element
+ void pqToList();
+
+ //Moves first to the end of the list
+ void firstToLast();
+ private:
+ bool doNext();
+ void init();
+ void sort();
+ };
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/search/PrefixQuery.cpp b/src/3rdparty/clucene/src/CLucene/search/PrefixQuery.cpp
new file mode 100644
index 0000000..6bb27d1
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/PrefixQuery.cpp
@@ -0,0 +1,273 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "PrefixQuery.h"
+#include "CLucene/util/BitSet.h"
+
+CL_NS_USE(util)
+CL_NS_USE(index)
+CL_NS_DEF(search)
+
+ PrefixQuery::PrefixQuery(Term* Prefix){
+ //Func - Constructor.
+ // Constructs a query for terms starting with prefix
+ //Pre - Prefix != NULL
+ //Post - The instance has been created
+
+ //Get a pointer to Prefix
+ prefix = _CL_POINTER(Prefix);
+ }
+
+ PrefixQuery::PrefixQuery(const PrefixQuery& clone):Query(clone){
+ prefix = _CL_POINTER(clone.prefix);
+ }
+ Query* PrefixQuery::clone() const{
+ return _CLNEW PrefixQuery(*this);
+ }
+
+ Term* PrefixQuery::getPrefix(bool pointer){
+ if ( pointer )
+ return _CL_POINTER(prefix);
+ else
+ return prefix;
+ }
+
+ PrefixQuery::~PrefixQuery(){
+ //Func - Destructor
+ //Pre - true
+ //Post - The instance has been destroyed.
+
+ //Delete prefix by finalizing it
+ _CLDECDELETE(prefix);
+ }
+
+
+ /** Returns a hash code value for this object.*/
+ size_t PrefixQuery::hashCode() const {
+ return Similarity::floatToByte(getBoost()) ^ prefix->hashCode();
+ }
+
+ const TCHAR* PrefixQuery::getQueryName()const{
+ //Func - Returns the name "PrefixQuery"
+ //Pre - true
+ //Post - The string "PrefixQuery" has been returned
+
+ return getClassName();
+ }
+ const TCHAR* PrefixQuery::getClassName(){
+ //Func - Returns the name "PrefixQuery"
+ //Pre - true
+ //Post - The string "PrefixQuery" has been returned
+
+ return _T("PrefixQuery");
+ }
+
+ bool PrefixQuery::equals(Query * other) const{
+ if (!(other->instanceOf(PrefixQuery::getClassName())))
+ return false;
+
+ PrefixQuery* rq = (PrefixQuery*)other;
+ bool ret = (this->getBoost() == rq->getBoost())
+ && (this->prefix->equals(rq->prefix));
+
+ return ret;
+ }
+
+ Query* PrefixQuery::rewrite(IndexReader* reader){
+ BooleanQuery* query = _CLNEW BooleanQuery();
+ TermEnum* enumerator = reader->terms(prefix);
+ Term* lastTerm = NULL;
+ try {
+ const TCHAR* prefixText = prefix->text();
+ const TCHAR* prefixField = prefix->field();
+ const TCHAR* tmp;
+ size_t i;
+ int32_t prefixLen = prefix->textLength();
+ do {
+ lastTerm = enumerator->term();
+ if (lastTerm != NULL && lastTerm->field() == prefixField ){
+
+ //now see if term->text() starts with prefixText
+ int32_t termLen = lastTerm->textLength();
+ if ( prefixLen>termLen )
+ break; //the prefix is longer than the term, can't be matched
+
+ tmp = lastTerm->text();
+
+ //check for prefix match in reverse, since most change will be at the end
+ for ( i=prefixLen-1;i!=-1;--i ){
+ if ( tmp[i] != prefixText[i] ){
+ tmp=NULL;//signals inequality
+ break;
+ }
+ }
+ if ( tmp == NULL )
+ break;
+
+ TermQuery* tq = _CLNEW TermQuery(lastTerm); // found a match
+ tq->setBoost(getBoost()); // set the boost
+ query->add(tq,true,false, false); // add to query
+ } else
+ break;
+ _CLDECDELETE(lastTerm);
+ } while (enumerator->next());
+ }_CLFINALLY(
+ enumerator->close();
+ _CLDELETE(enumerator);
+ _CLDECDELETE(lastTerm);
+ );
+ _CLDECDELETE(lastTerm);
+
+
+ //if we only added one clause and the clause is not prohibited then
+ //we can just return the query
+ if (query->getClauseCount() == 1) { // optimize 1-clause queries
+ BooleanClause* c=0;
+ query->getClauses(&c);
+
+ if (!c->prohibited) { // just return clause
+ c->deleteQuery=false;
+ Query* ret = c->query;
+
+ _CLDELETE(query);
+ return ret;
+ }
+ }
+
+ return query;
+ }
+
+ Query* PrefixQuery::combine(Query** queries) {
+ return Query::mergeBooleanQueries(queries);
+ }
+
+ TCHAR* PrefixQuery::toString(const TCHAR* field) const{
+ //Func - Creates a user-readable version of this query and returns it as as string
+ //Pre - field != NULL
+ //Post - a user-readable version of this query has been returned as as string
+
+ //Instantiate a stringbuffer buffer to store the readable version temporarily
+ CL_NS(util)::StringBuffer buffer;
+ //check if field equal to the field of prefix
+ if( field==NULL || _tcscmp(prefix->field(),field) != 0 ) {
+ //Append the field of prefix to the buffer
+ buffer.append(prefix->field());
+ //Append a colon
+ buffer.append(_T(":") );
+ }
+ //Append the text of the prefix
+ buffer.append(prefix->text());
+ //Append a wildchar character
+ buffer.append(_T("*"));
+ //if the boost factor is not eaqual to 1
+ if (getBoost() != 1.0f) {
+ //Append ^
+ buffer.append(_T("^"));
+ //Append the boost factor
+ buffer.appendFloat( getBoost(),1);
+ }
+ //Convert StringBuffer buffer to TCHAR block and return it
+ return buffer.toString();
+ }
+
+
+
+
+
+
+
+
+PrefixFilter::PrefixFilter( Term* prefix )
+{
+ this->prefix = _CL_POINTER(prefix);
+}
+
+PrefixFilter::~PrefixFilter()
+{
+ _CLDECDELETE(prefix);
+}
+
+PrefixFilter::PrefixFilter( const PrefixFilter& copy ) :
+ prefix( _CL_POINTER(copy.prefix) )
+{
+}
+
+Filter* PrefixFilter::clone() const {
+ return _CLNEW PrefixFilter(*this );
+}
+
+TCHAR* PrefixFilter::toString()
+{
+ //Instantiate a stringbuffer buffer to store the readable version temporarily
+ CL_NS(util)::StringBuffer buffer;
+ //check if field equal to the field of prefix
+ if( prefix->field() != NULL ) {
+ //Append the field of prefix to the buffer
+ buffer.append(prefix->field());
+ //Append a colon
+ buffer.append(_T(":") );
+ }
+ //Append the text of the prefix
+ buffer.append(prefix->text());
+ buffer.append(_T("*"));
+
+ //Convert StringBuffer buffer to TCHAR block and return it
+ return buffer.toString();
+}
+
+/** Returns a BitSet with true for documents which should be permitted in
+search results, and false for those that should not. */
+BitSet* PrefixFilter::bits( IndexReader* reader )
+{
+ BitSet* bts = _CLNEW BitSet( reader->maxDoc() );
+ TermEnum* enumerator = reader->terms(prefix);
+ TermDocs* docs = reader->termDocs();
+ const TCHAR* prefixText = prefix->text();
+ const TCHAR* prefixField = prefix->field();
+ const TCHAR* tmp;
+ size_t i;
+ int32_t prefixLen = prefix->textLength();
+ Term* lastTerm = NULL;
+
+ try{
+ do{
+ lastTerm = enumerator->term(false);
+ if (lastTerm != NULL && lastTerm->field() == prefixField ){
+ //now see if term->text() starts with prefixText
+ int32_t termLen = lastTerm->textLength();
+ if ( prefixLen>termLen )
+ break; //the prefix is longer than the term, can't be matched
+
+ tmp = lastTerm->text();
+
+ //check for prefix match in reverse, since most change will be at the end
+ for ( i=prefixLen-1;i!=-1;--i ){
+ if ( tmp[i] != prefixText[i] ){
+ tmp=NULL;//signals inequality
+ break;
+ }
+ }
+ if ( tmp == NULL )
+ break;
+
+ docs->seek(enumerator);
+ while (docs->next()) {
+ bts->set(docs->doc());
+ }
+ }
+ }while(enumerator->next());
+ } _CLFINALLY(
+ docs->close();
+ _CLDELETE(docs);
+ enumerator->close();
+ _CLDELETE(enumerator);
+ )
+
+ return bts;
+}
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/search/PrefixQuery.h b/src/3rdparty/clucene/src/CLucene/search/PrefixQuery.h
new file mode 100644
index 0000000..8e3f413
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/PrefixQuery.h
@@ -0,0 +1,75 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_search_PrefixQuery
+#define _lucene_search_PrefixQuery
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "CLucene/index/Term.h"
+#include "CLucene/index/Terms.h"
+#include "CLucene/index/IndexReader.h"
+#include "SearchHeader.h"
+#include "BooleanQuery.h"
+#include "TermQuery.h"
+#include "CLucene/util/StringBuffer.h"
+
+CL_NS_DEF(search)
+ //PrefixQuery is a Query that matches documents containing terms with a specified prefix.
+
+ class PrefixQuery: public Query {
+ private:
+ CL_NS(index)::Term* prefix;
+ protected:
+ PrefixQuery(const PrefixQuery& clone);
+ public:
+
+ //Constructor. Constructs a query for terms starting with prefix
+ PrefixQuery(CL_NS(index)::Term* Prefix);
+
+ //Destructor
+ ~PrefixQuery();
+
+ //Returns the name "PrefixQuery"
+ const TCHAR* getQueryName() const;
+ static const TCHAR* getClassName();
+
+ /** Returns the prefix of this query. */
+ CL_NS(index)::Term* getPrefix(bool pointer=true);
+
+ Query* combine(Query** queries);
+ Query* rewrite(CL_NS(index)::IndexReader* reader);
+ Query* clone() const;
+ bool equals(Query * other) const;
+
+ //Creates a user-readable version of this query and returns it as as string
+ TCHAR* toString(const TCHAR* field) const;
+
+ size_t hashCode() const;
+ };
+
+
+ class PrefixFilter: public Filter
+ {
+ private:
+ CL_NS(index)::Term* prefix;
+ protected:
+ PrefixFilter( const PrefixFilter& copy );
+
+ public:
+ PrefixFilter(CL_NS(index)::Term* prefix);
+ ~PrefixFilter();
+
+ /** Returns a BitSet with true for documents which should be permitted in
+ search results, and false for those that should not. */
+ CL_NS(util)::BitSet* bits( CL_NS(index)::IndexReader* reader );
+
+ Filter* clone() const;
+ TCHAR* toString();
+ };
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/search/QueryFilter.cpp b/src/3rdparty/clucene/src/CLucene/search/QueryFilter.cpp
new file mode 100644
index 0000000..2dbe2d7
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/QueryFilter.cpp
@@ -0,0 +1,73 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "QueryFilter.h"
+#include "IndexSearcher.h"
+
+CL_NS_DEF(search)
+CL_NS_USE(util)
+CL_NS_USE(index)
+
+
+QueryFilter::QueryFilter( const Query* query )
+{
+ this->query = query->clone();
+}
+
+
+QueryFilter::~QueryFilter()
+{
+ _CLDELETE( query );
+}
+
+
+QueryFilter::QueryFilter( const QueryFilter& copy )
+{
+ this->query = copy.query->clone();
+}
+
+
+Filter* QueryFilter::clone() const {
+ return _CLNEW QueryFilter(*this );
+}
+
+
+TCHAR* QueryFilter::toString()
+{
+ TCHAR* qt = query->toString();
+ size_t len = _tcslen(qt) + 14;
+ TCHAR* ret = _CL_NEWARRAY( TCHAR, len );
+ ret[0] = 0;
+ _sntprintf( ret, len, _T("QueryFilter(%s)"), qt );
+ _CLDELETE_CARRAY(qt);
+ return ret;
+}
+
+
+/** Returns a BitSet with true for documents which should be permitted in
+search results, and false for those that should not. */
+BitSet* QueryFilter::bits( IndexReader* reader )
+{
+ BitSet* bits = _CLNEW BitSet(reader->maxDoc());
+
+ IndexSearcher s(reader);
+ QFHitCollector hc(bits);
+ s._search(query, NULL, &hc);
+ return bits;
+}
+
+
+QueryFilter::QFHitCollector::QFHitCollector(CL_NS(util)::BitSet* bits){
+ this->bits = bits;
+}
+
+void QueryFilter::QFHitCollector::collect(const int32_t doc, const qreal score) {
+ bits->set(doc); // set bit for hit
+}
+
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/search/QueryFilter.h b/src/3rdparty/clucene/src/CLucene/search/QueryFilter.h
new file mode 100644
index 0000000..8d423b2
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/QueryFilter.h
@@ -0,0 +1,44 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_search_QueryFilter_
+#define _lucene_search_QueryFilter_
+
+#include "CLucene/util/BitSet.h"
+#include "CLucene/index/IndexReader.h"
+#include "SearchHeader.h"
+#include "CachingWrapperFilter.h"
+
+CL_NS_DEF(search)
+
+class QueryFilter: public Filter
+{
+private:
+ Query* query;
+
+ class QFHitCollector: public HitCollector{
+ CL_NS(util)::BitSet* bits;
+ public:
+ QFHitCollector(CL_NS(util)::BitSet* bits);
+ void collect(const int32_t doc, const qreal score);
+ };
+
+protected:
+ QueryFilter( const QueryFilter& copy );
+public:
+ QueryFilter( const Query* query );
+
+ ~QueryFilter();
+
+ CL_NS(util)::BitSet* bits( CL_NS(index)::IndexReader* reader );
+
+ Filter *clone() const;
+
+ TCHAR *toString();
+};
+
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/search/RangeFilter.cpp b/src/3rdparty/clucene/src/CLucene/search/RangeFilter.cpp
new file mode 100644
index 0000000..66ee5ce
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/RangeFilter.cpp
@@ -0,0 +1,150 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "RangeFilter.h"
+
+CL_NS_DEF(search)
+CL_NS_USE(index)
+CL_NS_USE(util)
+CL_NS_USE(document)
+
+
+RangeFilter::RangeFilter( const TCHAR* fieldName, const TCHAR* lowerTerm, const TCHAR* upperTerm, bool includeLower, bool includeUpper )
+{
+ this->field = STRDUP_TtoT(fieldName);
+ if ( lowerTerm != NULL )
+ this->lowerValue = STRDUP_TtoT(lowerTerm);
+ else
+ this->lowerValue = NULL;
+ if ( upperTerm != NULL )
+ this->upperValue = STRDUP_TtoT(upperTerm);
+ else
+ this->upperValue = NULL;
+ this->includeLower = includeLower;
+ this->includeUpper = includeUpper;
+}
+
+
+/**
+ * Constructs a filter for field <code>fieldName</code> matching
+ * less than or equal to <code>upperTerm</code>.
+ */
+RangeFilter* RangeFilter::Less( TCHAR* fieldName, TCHAR* upperTerm ) {
+ return new RangeFilter( fieldName, NULL, upperTerm, false, true );
+}
+
+
+/**
+* Constructs a filter for field <code>fieldName</code> matching
+* more than or equal to <code>lowerTerm</code>.
+*/
+RangeFilter* RangeFilter::More( TCHAR* fieldName, TCHAR* lowerTerm ) {
+ return new RangeFilter( fieldName, lowerTerm, NULL, true, false );
+}
+
+
+RangeFilter::~RangeFilter()
+{
+ _CLDELETE_CARRAY( lowerValue );
+ _CLDELETE_CARRAY( field );
+ _CLDELETE_CARRAY( upperValue );
+}
+
+
+RangeFilter::RangeFilter( const RangeFilter& copy ) :
+ field( STRDUP_TtoT(copy.field) ),
+ lowerValue( STRDUP_TtoT(copy.lowerValue) ),
+ upperValue( STRDUP_TtoT(copy.upperValue) ),
+ includeLower( copy.includeLower ),
+ includeUpper( copy.includeUpper )
+{
+}
+
+
+Filter* RangeFilter::clone() const {
+ return _CLNEW RangeFilter(*this );
+}
+
+
+TCHAR* RangeFilter::toString()
+{
+ size_t len = (field ? _tcslen(field) : 0) + (lowerValue ? _tcslen(lowerValue) : 0) + (upperValue ? _tcslen(upperValue) : 0) + 8;
+ TCHAR* ret = _CL_NEWARRAY( TCHAR, len );
+ ret[0] = 0;
+ _sntprintf( ret, len, _T("%s: [%s-%s]"), field, (lowerValue?lowerValue:_T("")), (upperValue?upperValue:_T("")) );
+
+ return ret;
+}
+
+
+/** Returns a BitSet with true for documents which should be permitted in
+search results, and false for those that should not. */
+BitSet* RangeFilter::bits( IndexReader* reader )
+{
+ BitSet* bts = _CLNEW BitSet( reader->maxDoc() );
+ Term* term = NULL;
+
+ Term* t = _CLNEW Term( field, (lowerValue ? lowerValue : _T("")), false );
+ TermEnum* enumerator = reader->terms( t ); // get enumeration of all terms after lowerValue
+ _CLDECDELETE( t );
+
+ if( enumerator->term(false) == NULL ) {
+ _CLDELETE( enumerator );
+ return bts;
+ }
+
+ bool checkLower = false;
+ if( !includeLower ) // make adjustments to set to exclusive
+ checkLower = true;
+
+ TermDocs* termDocs = reader->termDocs();
+
+ try
+ {
+ do
+ {
+ term = enumerator->term();
+
+ if( term == NULL || _tcscmp(term->field(), field) )
+ break;
+
+ if( !checkLower || lowerValue == NULL || _tcscmp(term->text(), lowerValue) > 0 )
+ {
+ checkLower = false;
+ if( upperValue != NULL )
+ {
+ int compare = _tcscmp( upperValue, term->text() );
+
+ /* if beyond the upper term, or is exclusive and
+ * this is equal to the upper term, break out */
+ if( (compare < 0) || (!includeUpper && compare == 0) )
+ break;
+ }
+
+ termDocs->seek( enumerator->term(false) );
+ while( termDocs->next() ) {
+ bts->set( termDocs->doc() );
+ }
+ }
+
+ _CLDECDELETE( term );
+ }
+ while( enumerator->next() );
+ }
+ _CLFINALLY
+ (
+ _CLDECDELETE( term );
+ termDocs->close();
+ _CLVDELETE( termDocs );
+ enumerator->close();
+ _CLDELETE( enumerator );
+ );
+
+ return bts;
+}
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/search/RangeFilter.h b/src/3rdparty/clucene/src/CLucene/search/RangeFilter.h
new file mode 100644
index 0000000..0865e35
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/RangeFilter.h
@@ -0,0 +1,51 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+
+#ifndef _lucene_search_RangeFilter_
+#define _lucene_search_RangeFilter_
+
+#include "CLucene/document/DateField.h"
+#include "CLucene/index/Term.h"
+#include "CLucene/index/Terms.h"
+#include "CLucene/index/IndexReader.h"
+#include "CLucene/util/BitSet.h"
+#include "CLucene/search/Filter.h"
+
+CL_NS_DEF(search)
+
+class RangeFilter: public Filter
+{
+private:
+ const TCHAR* field;
+ TCHAR* lowerValue;
+ TCHAR* upperValue;
+ bool includeLower;
+ bool includeUpper;
+
+protected:
+ RangeFilter( const RangeFilter& copy );
+
+public:
+ RangeFilter( const TCHAR* fieldName, const TCHAR* lowerValue, const TCHAR* upperValue, bool includeLower, bool includeUpper );
+
+ static RangeFilter* Less( TCHAR* fieldName, TCHAR* upperTerm );
+
+ static RangeFilter* More( TCHAR* fieldName, TCHAR* lowerTerm );
+
+ ~RangeFilter();
+
+ /** Returns a BitSet with true for documents which should be permitted in
+ search results, and false for those that should not. */
+ CL_NS(util)::BitSet* bits( CL_NS(index)::IndexReader* reader );
+
+ Filter* clone() const;
+
+ TCHAR* toString();
+};
+
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/search/RangeQuery.cpp b/src/3rdparty/clucene/src/CLucene/search/RangeQuery.cpp
new file mode 100644
index 0000000..4fc2420
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/RangeQuery.cpp
@@ -0,0 +1,204 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "RangeQuery.h"
+
+#include "SearchHeader.h"
+#include "Scorer.h"
+#include "BooleanQuery.h"
+#include "TermQuery.h"
+
+#include "CLucene/index/Term.h"
+#include "CLucene/index/Terms.h"
+#include "CLucene/index/IndexReader.h"
+#include "CLucene/util/StringBuffer.h"
+
+
+CL_NS_USE(index)
+CL_NS_USE(util)
+CL_NS_DEF(search)
+
+ RangeQuery::RangeQuery(Term* lowerTerm, Term* upperTerm, const bool Inclusive){
+ //Func - Constructor
+ //Pre - (LowerTerm != NULL OR UpperTerm != NULL) AND
+ // if LowerTerm and UpperTerm are valid pointer then the fieldnames must be the same
+ //Post - The instance has been created
+
+ if (lowerTerm == NULL && upperTerm == NULL)
+ {
+ _CLTHROWA(CL_ERR_IllegalArgument,"At least one term must be non-null");
+ }
+ if (lowerTerm != NULL && upperTerm != NULL && lowerTerm->field() != upperTerm->field())
+ {
+ _CLTHROWA(CL_ERR_IllegalArgument,"Both terms must be for the same field");
+ }
+
+ // if we have a lowerTerm, start there. otherwise, start at beginning
+ if (lowerTerm != NULL) {
+ this->lowerTerm = _CL_POINTER(lowerTerm);
+ }
+ else {
+ this->lowerTerm = _CLNEW Term(upperTerm, LUCENE_BLANK_STRING);
+ }
+ this->upperTerm = (upperTerm != NULL ? _CL_POINTER(upperTerm) : NULL);
+ this->inclusive = Inclusive;
+ }
+ RangeQuery::RangeQuery(const RangeQuery& clone):
+ Query(clone){
+ this->inclusive = clone.inclusive;
+ this->upperTerm = (clone.upperTerm != NULL ? _CL_POINTER(clone.upperTerm) : NULL );
+ this->lowerTerm = (clone.lowerTerm != NULL ? _CL_POINTER(clone.lowerTerm) : NULL );
+ }
+ Query* RangeQuery::clone() const{
+ return _CLNEW RangeQuery(*this);
+ }
+
+ RangeQuery::~RangeQuery() {
+ //Func - Destructor
+ //Pre - true
+ //Post - The instance has been destroyed
+
+ _CLDECDELETE(lowerTerm);
+ _CLDECDELETE(upperTerm);
+ }
+
+ /** Returns a hash code value for this object.*/
+ size_t RangeQuery::hashCode() const {
+ return Similarity::floatToByte(getBoost()) ^
+ (lowerTerm != NULL ? lowerTerm->hashCode() : 0) ^
+ (upperTerm != NULL ? upperTerm->hashCode() : 0) ^
+ (this->inclusive ? 1 : 0);
+ }
+
+ const TCHAR* RangeQuery::getQueryName() const{
+ return getClassName();
+ }
+ const TCHAR* RangeQuery::getClassName(){
+ return _T("RangeQuery");
+ }
+
+ Query* RangeQuery::combine(Query** queries) {
+ return Query::mergeBooleanQueries(queries);
+ }
+
+ bool RangeQuery::equals(Query * other) const{
+ if (!(other->instanceOf(RangeQuery::getClassName())))
+ return false;
+
+ RangeQuery* rq = (RangeQuery*)other;
+ bool ret = (this->getBoost() == rq->getBoost())
+ && (this->isInclusive() == rq->isInclusive())
+ && (this->getLowerTerm()->equals(rq->getLowerTerm()))
+ && (this->getUpperTerm()->equals(rq->getUpperTerm()));
+
+ return ret;
+ }
+
+
+ /**
+ * FIXME: Describe <code>rewrite</code> method here.
+ *
+ * @param reader an <code>IndexReader</code> value
+ * @return a <code>Query</code> value
+ * @exception IOException if an error occurs
+ */
+ Query* RangeQuery::rewrite(IndexReader* reader){
+
+ BooleanQuery* query = _CLNEW BooleanQuery;
+ TermEnum* enumerator = reader->terms(lowerTerm);
+ Term* lastTerm = NULL;
+ try {
+ bool checkLower = false;
+ if (!inclusive) // make adjustments to set to exclusive
+ checkLower = true;
+
+ const TCHAR* testField = getField();
+ do {
+ lastTerm = enumerator->term();
+ if (lastTerm != NULL && lastTerm->field() == testField ) {
+ if (!checkLower || _tcscmp(lastTerm->text(),lowerTerm->text()) > 0) {
+ checkLower = false;
+ if (upperTerm != NULL) {
+ int compare = _tcscmp(upperTerm->text(),lastTerm->text());
+ /* if beyond the upper term, or is exclusive and
+ * this is equal to the upper term, break out */
+ if ((compare < 0) || (!inclusive && compare == 0))
+ break;
+ }
+ TermQuery* tq = _CLNEW TermQuery(lastTerm); // found a match
+ tq->setBoost(getBoost()); // set the boost
+ query->add(tq, true, false, false); // add to query
+ }
+ }else {
+ break;
+ }
+ _CLDECDELETE(lastTerm);
+ }
+ while (enumerator->next());
+ }catch(...){
+ _CLDECDELETE(lastTerm); //always need to delete this
+ _CLDELETE(query); //in case of error, delete the query
+ enumerator->close();
+ _CLDELETE(enumerator);
+ throw; //rethrow
+ }
+ _CLDECDELETE(lastTerm); //always need to delete this
+ enumerator->close();
+ _CLDELETE(enumerator);
+
+ return query;
+ }
+
+ /** Prints a user-readable version of this query. */
+ TCHAR* RangeQuery::toString(const TCHAR* field) const
+ {
+ StringBuffer buffer;
+ if ( field==NULL || _tcscmp(getField(),field)!=0 )
+ {
+ buffer.append( getField() );
+ buffer.append( _T(":"));
+ }
+ buffer.append(inclusive ? _T("[") : _T("{"));
+ buffer.append(lowerTerm != NULL ? lowerTerm->text() : _T("NULL"));
+ buffer.append(_T(" TO "));
+ buffer.append(upperTerm != NULL ? upperTerm->text() : _T("NULL"));
+ buffer.append(inclusive ? _T("]") : _T("}"));
+ if (getBoost() != 1.0f)
+ {
+ buffer.append( _T("^"));
+ buffer.appendFloat( getBoost(),1 );
+ }
+ return buffer.toString();
+ }
+
+
+ const TCHAR* RangeQuery::getField() const
+ {
+ return (lowerTerm != NULL ? lowerTerm->field() : upperTerm->field());
+ }
+
+ /** Returns the lower term of this range query */
+ Term* RangeQuery::getLowerTerm(bool pointer) const {
+ if ( pointer )
+ return _CL_POINTER(lowerTerm);
+ else
+ return lowerTerm;
+ }
+
+ /** Returns the upper term of this range query */
+ Term* RangeQuery::getUpperTerm(bool pointer) const {
+ if ( pointer )
+ return _CL_POINTER(upperTerm);
+ else
+ return upperTerm;
+ }
+
+ /** Returns <code>true</code> if the range query is inclusive */
+ bool RangeQuery::isInclusive() const { return inclusive; }
+
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/search/RangeQuery.h b/src/3rdparty/clucene/src/CLucene/search/RangeQuery.h
new file mode 100644
index 0000000..9a7733c
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/RangeQuery.h
@@ -0,0 +1,71 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_search_RangeQuery_
+#define _lucene_search_RangeQuery_
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "SearchHeader.h"
+#include "Scorer.h"
+#include "TermQuery.h"
+
+#include "CLucene/index/Term.h"
+#include "CLucene/index/Terms.h"
+
+#include "CLucene/util/StringBuffer.h"
+
+
+CL_NS_DEF(search)
+ /** Constructs a query selecting all terms greater than
+ * <code>lowerTerm</code> but less than <code>upperTerm</code>.
+ * There must be at least one term and either term may be null,
+ * in which case there is no bound on that side, but if there are
+ * two terms, both terms <b>must</b> be for the same field.
+ */
+ class RangeQuery: public Query
+ {
+ private:
+ CL_NS(index)::Term* lowerTerm;
+ CL_NS(index)::Term* upperTerm;
+ bool inclusive;
+ protected:
+ RangeQuery(const RangeQuery& clone);
+
+ public:
+ // Constructs a query selecting all terms greater than
+ // <code>lowerTerm</code> but less than <code>upperTerm</code>.
+ // There must be at least one term and either term may be NULL--
+ // in which case there is no bound on that side, but if there are
+ // two term, both terms <b>must</b> be for the same field.
+ RangeQuery(CL_NS(index)::Term* LowerTerm, CL_NS(index)::Term* UpperTerm, const bool Inclusive);
+ ~RangeQuery();
+
+ const TCHAR* getQueryName() const;
+ static const TCHAR* getClassName();
+
+ Query* rewrite(CL_NS(index)::IndexReader* reader);
+
+ Query* combine(Query** queries);
+
+ // Prints a user-readable version of this query.
+ TCHAR* toString(const TCHAR* field) const;
+
+ Query* clone() const;
+
+ bool equals(Query * other) const;
+
+ CL_NS(index)::Term* getLowerTerm(bool pointer=true) const;
+ CL_NS(index)::Term* getUpperTerm(bool pointer=true) const;
+ bool isInclusive() const;
+ const TCHAR* getField() const;
+
+ size_t hashCode() const;
+ };
+
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/search/Scorer.h b/src/3rdparty/clucene/src/CLucene/search/Scorer.h
new file mode 100644
index 0000000..0d1d435
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/Scorer.h
@@ -0,0 +1,80 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_search_Scorer_
+#define _lucene_search_Scorer_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "Similarity.h"
+#include "SearchHeader.h"
+#include "Explanation.h"
+
+CL_NS_DEF(search)
+ /** Expert: Implements scoring for a class of queries. */
+class Scorer: LUCENE_BASE {
+ private:
+ Similarity* similarity;
+ protected:
+ /** Constructs a Scorer. */
+ Scorer(Similarity* similarity) {
+ this->similarity = similarity;
+ }
+ public:
+ virtual ~Scorer(){
+ }
+
+ /** Returns the Similarity implementation used by this scorer. */
+ Similarity* getSimilarity() const{
+ return this->similarity;
+ }
+
+ /** Scores all documents and passes them to a collector. */
+ void score(HitCollector* hc) {
+ while (next()) {
+ hc->collect(doc(), score());
+ }
+ }
+
+ /** Advance to the next document matching the query. Returns true iff there
+ * is another match. */
+ virtual bool next() = 0;
+
+ /** Returns the current document number. Initially invalid, until {@link
+ * #next()} is called the first time. */
+ virtual int32_t doc() const = 0;
+
+ /** Returns the score of the current document. Initially invalid, until
+ * {@link #next()} is called the first time. */
+ virtual qreal score() = 0;
+
+ /** Skips to the first match beyond the current whose document number is
+ * greater than or equal to <i>target</i>. <p>Returns true iff there is such
+ * a match. <p>Behaves as if written: <pre>
+ * boolean skipTo(int32_t target) {
+ * do {
+ * if (!next())
+ * return false;
+ * } while (target > doc());
+ * return true;
+ * }
+ * </pre>
+ * Most implementations are considerably more efficient than that.
+ */
+ virtual bool skipTo(int32_t target) = 0;
+
+ /** Returns an explanation of the score for <code>doc</code>. */
+ virtual void explain(int32_t doc, Explanation* ret) = 0;
+
+
+ /** Returns an string which explains the object */
+ virtual TCHAR* toString() = 0;
+
+ };
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/search/SearchHeader.cpp b/src/3rdparty/clucene/src/CLucene/search/SearchHeader.cpp
new file mode 100644
index 0000000..56e4ad5
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/SearchHeader.cpp
@@ -0,0 +1,141 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "SearchHeader.h"
+#include "BooleanQuery.h"
+#include "FieldDocSortedHitQueue.h"
+
+CL_NS_USE(index)
+CL_NS_DEF(search)
+
+CL_NS(document)::Document* Searchable::doc(const int32_t i){
+ CL_NS(document)::Document* ret = _CLNEW CL_NS(document)::Document;
+ if (!doc(i,ret) )
+ _CLDELETE(ret);
+ return ret;
+}
+
+//static
+Query* Query::mergeBooleanQueries(Query** queries) {
+ CL_NS(util)::CLVector<BooleanClause*> allClauses;
+ int32_t i = 0;
+ while ( queries[i] != NULL ){
+ BooleanQuery* bq = (BooleanQuery*)queries[i];
+
+ int32_t size = bq->getClauseCount();
+ BooleanClause** clauses = _CL_NEWARRAY(BooleanClause*, size);
+ bq->getClauses(clauses);
+
+ for (int32_t j = 0;j<size;++j ){
+ allClauses.push_back(clauses[j]);
+ j++;
+ }
+ _CLDELETE_ARRAY(clauses);
+ i++;
+ }
+
+ BooleanQuery* result = _CLNEW BooleanQuery();
+ CL_NS(util)::CLVector<BooleanClause*>::iterator itr = allClauses.begin();
+ while (itr != allClauses.end() ) {
+ result->add(*itr);
+ }
+ return result;
+}
+
+Query::Query(const Query& clone):boost(clone.boost){
+ //constructor
+}
+Weight* Query::_createWeight(Searcher* searcher){
+ _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: Query::_createWeight");
+}
+
+Query::Query():
+ boost(1.0f)
+{
+ //constructor
+}
+Query::~Query(){
+}
+
+/** Expert: called to re-write queries into primitive queries. */
+Query* Query::rewrite(CL_NS(index)::IndexReader* reader){
+ return this;
+}
+
+Query* Query::combine(Query** queries){
+ _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: Query::combine");
+}
+Similarity* Query::getSimilarity(Searcher* searcher) {
+ return searcher->getSimilarity();
+}
+bool Query::instanceOf(const TCHAR* other) const{
+ const TCHAR* t = getQueryName();
+ if ( t==other || _tcscmp( t, other )==0 )
+ return true;
+ else
+ return false;
+}
+TCHAR* Query::toString() const{
+ return toString(LUCENE_BLANK_STRING);
+}
+
+void Query::setBoost(qreal b) { boost = b; }
+
+qreal Query::getBoost() const { return boost; }
+
+Weight* Query::weight(Searcher* searcher){
+ Query* query = searcher->rewrite(this);
+ Weight* weight = query->_createWeight(searcher);
+ qreal sum = weight->sumOfSquaredWeights();
+ qreal norm = getSimilarity(searcher)->queryNorm(sum);
+ weight->normalize(norm);
+ return weight;
+}
+
+TopFieldDocs::TopFieldDocs (int32_t totalHits, FieldDoc** fieldDocs, int32_t scoreDocsLen, SortField** fields):
+ TopDocs (totalHits, NULL, scoreDocsLen)
+{
+ this->fields = fields;
+ this->fieldDocs = fieldDocs;
+ this->scoreDocs = _CL_NEWARRAY(ScoreDoc,scoreDocsLen);
+ for (int32_t i=0;i<scoreDocsLen;i++ )
+ this->scoreDocs[i] = this->fieldDocs[i]->scoreDoc;
+}
+TopFieldDocs::~TopFieldDocs(){
+ if ( fieldDocs ){
+ for (int32_t i=0;i<scoreDocsLength;i++)
+ _CLDELETE(fieldDocs[i]);
+ _CLDELETE_ARRAY(fieldDocs);
+ }
+ if ( fields != NULL ){
+ for ( int i=0;fields[i]!=NULL;i++ )
+ _CLDELETE(fields[i]);
+ _CLDELETE_ARRAY(fields);
+ }
+}
+
+TopDocs::TopDocs(const int32_t th, ScoreDoc*sds, int32_t scoreDocsLen):
+ totalHits(th),
+ scoreDocsLength(scoreDocsLen),
+ scoreDocs(sds)
+{
+//Func - Constructor
+//Pre - sds may or may not be NULL
+// sdLength >= 0
+//Post - The instance has been created
+
+}
+
+TopDocs::~TopDocs(){
+//Func - Destructor
+//Pre - true
+//Post - The instance has been destroyed
+
+ _CLDELETE_ARRAY(scoreDocs);
+}
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/search/SearchHeader.h b/src/3rdparty/clucene/src/CLucene/search/SearchHeader.h
new file mode 100644
index 0000000..4a896a5
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/SearchHeader.h
@@ -0,0 +1,456 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_search_SearchHeader_
+#define _lucene_search_SearchHeader_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "CLucene/index/IndexReader.h"
+#include "CLucene/index/Term.h"
+#include "Filter.h"
+#include "CLucene/document/Document.h"
+#include "Sort.h"
+#include "CLucene/util/VoidList.h"
+#include "Explanation.h"
+#include "Similarity.h"
+
+CL_NS_DEF(search)
+
+ //predefine classes
+ class Scorer;
+ class Query;
+ class Hits;
+ class Sort;
+ class FieldDoc;
+ class TopFieldDocs;
+
+ /** Expert: Returned by low-level search implementations.
+ * @see TopDocs */
+ struct ScoreDoc {
+ /** Expert: A hit document's number.
+ * @see Searcher#doc(int32_t)
+ */
+ int32_t doc;
+
+ /** Expert: The score of this document for the query. */
+ qreal score;
+ };
+
+ /** Expert: Returned by low-level search implementations.
+ * @see Searcher#search(Query,Filter,int32_t) */
+ class TopDocs:LUCENE_BASE {
+ public:
+ /** Expert: The total number of hits for the query.
+ * @see Hits#length()
+ */
+ int32_t totalHits;
+
+ /** Expert: The top hits for the query. */
+ ScoreDoc* scoreDocs;
+ int32_t scoreDocsLength;
+
+ /** Expert: Constructs a TopDocs. TopDocs takes ownership of the ScoreDoc array*/
+ TopDocs(const int32_t th, ScoreDoc* sds, int32_t scoreDocsLength);
+ ~TopDocs();
+ };
+
+ // Lower-level search API.
+ // @see Searcher#search(Query,HitCollector)
+ class HitCollector: LUCENE_BASE {
+ public:
+ /** Called once for every non-zero scoring document, with the document number
+ * and its score.
+ *
+ * <P>If, for example, an application wished to collect all of the hits for a
+ * query in a BitSet, then it might:<pre>
+ * Searcher searcher = new IndexSearcher(indexReader);
+ * final BitSet bits = new BitSet(indexReader.maxDoc());
+ * searcher.search(query, new HitCollector() {
+ * public void collect(int32_t doc, float score) {
+ * bits.set(doc);
+ * }
+ * });
+ * </pre>
+ *
+ * <p>Note: This is called in an inner search loop. For good search
+ * performance, implementations of this method should not call
+ * {@link Searcher#doc(int32_t)} or
+ * {@link IndexReader#document(int32_t)} on every
+ * document number encountered. Doing so can slow searches by an order
+ * of magnitude or more.
+ * <p>Note: The <code>score</code> passed to this method is a raw score.
+ * In other words, the score will not necessarily be a float whose value is
+ * between 0 and 1.
+ */
+ virtual void collect(const int32_t doc, const qreal score) = 0;
+ virtual ~HitCollector(){}
+ };
+
+ /** Expert: Calculate query weights and build query scorers.
+ *
+ * <p>A Weight is constructed by a query, given a Searcher ({@link
+ * Query#_createWeight(Searcher)}). The {@link #sumOfSquaredWeights()} method
+ * is then called on the top-level query to compute the query normalization
+ * factor (@link Similarity#queryNorm(qreal)}). This factor is then passed to
+ * {@link #normalize(qreal)}. At this point the weighting is complete and a
+ * scorer may be constructed by calling {@link #scorer(IndexReader)}.
+ */
+ class Weight: LUCENE_BASE {
+ public:
+ virtual ~Weight(){
+ };
+
+ /** The query that this concerns. */
+ virtual Query* getQuery() = 0;
+
+ /** The weight for this query. */
+ virtual qreal getValue() = 0;
+
+ /** The sum of squared weights of contained query clauses. */
+ virtual qreal sumOfSquaredWeights() = 0;
+
+ /** Assigns the query normalization factor to this. */
+ virtual void normalize(qreal norm) = 0;
+
+ /** Constructs a scorer for this. */
+ virtual Scorer* scorer(CL_NS(index)::IndexReader* reader) = 0;
+
+ /** An explanation of the score computation for the named document. */
+ virtual void explain(CL_NS(index)::IndexReader* reader, int32_t doc, Explanation* ret) = 0;
+
+ virtual TCHAR* toString(){
+ return STRDUP_TtoT(_T("Weight"));
+ }
+ };
+
+ class HitDoc:LUCENE_BASE {
+ public:
+ qreal score;
+ int32_t id;
+ CL_NS(document)::Document* doc;
+
+ HitDoc* next; // in doubly-linked cache
+ HitDoc* prev; // in doubly-linked cache
+
+ HitDoc(const qreal s, const int32_t i);
+ ~HitDoc();
+ };
+
+
+
+ // A ranked list of documents, used to hold search results.
+ class Hits:LUCENE_BASE {
+ private:
+ Query* query;
+ Searcher* searcher;
+ Filter* filter;
+ const Sort* sort;
+
+ size_t _length; // the total number of hits
+ CL_NS(util)::CLVector<HitDoc*, CL_NS(util)::Deletor::Object<HitDoc> > hitDocs; // cache of hits retrieved
+
+ HitDoc* first; // head of LRU cache
+ HitDoc* last; // tail of LRU cache
+ int32_t numDocs; // number cached
+ int32_t maxDocs; // max to cache
+
+ public:
+ Hits(Searcher* s, Query* q, Filter* f, const Sort* sort=NULL);
+ ~Hits();
+
+ /** Returns the total number of hits available in this set. */
+ int32_t length() const;
+
+ /** Returns the stored fields of the n<sup>th</sup> document in this set.
+ <p>Documents are cached, so that repeated requests for the same element may
+ return the same Document object.
+ *
+ * @memory Memory belongs to the hits object. Don't delete the return value.
+ */
+ CL_NS(document)::Document& doc(const int32_t n);
+
+ /** Returns the id for the nth document in this set. */
+ int32_t id (const int32_t n);
+
+ /** Returns the score for the nth document in this set. */
+ qreal score(const int32_t n);
+
+ private:
+ // Tries to add new documents to hitDocs.
+ // Ensures that the hit numbered <code>_min</code> has been retrieved.
+ void getMoreDocs(const size_t _min);
+
+ HitDoc* getHitDoc(const size_t n);
+
+ void addToFront(HitDoc* hitDoc);
+
+ void remove(const HitDoc* hitDoc);
+
+ };
+
+ /** The interface for search implementations.
+ *
+ * <p>Implementations provide search over a single index, over multiple
+ * indices, and over indices on remote servers.
+ */
+ class Searchable: LUCENE_BASE {
+ public:
+ virtual ~Searchable(){
+ }
+
+ /** Lower-level search API.
+ *
+ * <p>{@link HitCollector#collect(int32_t,qreal)} is called for every non-zero
+ * scoring document.
+ *
+ * <p>Applications should only use this if they need <i>all</i> of the
+ * matching documents. The high-level search API ({@link
+ * Searcher#search(Query*)}) is usually more efficient, as it skips
+ * non-high-scoring hits.
+ *
+ * @param query to match documents
+ * @param filter if non-null, a bitset used to eliminate some documents
+ * @param results to receive hits
+ */
+ virtual void _search(Query* query, Filter* filter, HitCollector* results) = 0;
+
+ /** Frees resources associated with this Searcher.
+ * Be careful not to call this method while you are still using objects
+ * like {@link Hits}.
+ */
+ virtual void close() = 0;
+
+ /** Expert: Returns the number of documents containing <code>term</code>.
+ * Called by search code to compute term weights.
+ * @see IndexReader#docFreq(Term).
+ */
+ virtual int32_t docFreq(const CL_NS(index)::Term* term) const = 0;
+
+ /** Expert: Returns one greater than the largest possible document number.
+ * Called by search code to compute term weights.
+ * @see IndexReader#maxDoc().
+ */
+ virtual int32_t maxDoc() const = 0;
+
+ /** Expert: Low-level search implementation. Finds the top <code>n</code>
+ * hits for <code>query</code>, applying <code>filter</code> if non-null.
+ *
+ * <p>Called by {@link Hits}.
+ *
+ * <p>Applications should usually call {@link Searcher#search(Query*)} or
+ * {@link Searcher#search(Query*,Filter*)} instead.
+ */
+ virtual TopDocs* _search(Query* query, Filter* filter, const int32_t n) = 0;
+
+ /** Expert: Returns the stored fields of document <code>i</code>.
+ * Called by {@link HitCollector} implementations.
+ * @see IndexReader#document(int32_t).
+ */
+ virtual bool doc(int32_t i, CL_NS(document)::Document* d) = 0;
+ _CL_DEPRECATED( doc(i, document) ) CL_NS(document)::Document* doc(const int32_t i);
+
+ /** Expert: called to re-write queries into primitive queries. */
+ virtual Query* rewrite(Query* query) = 0;
+
+ /** Returns an Explanation that describes how <code>doc</code> scored against
+ * <code>query</code>.
+ *
+ * <p>This is intended to be used in developing Similarity implementations,
+ * and, for good performance, should not be displayed with every hit.
+ * Computing an explanation is as expensive as executing the query over the
+ * entire index.
+ */
+ virtual void explain(Query* query, int32_t doc, Explanation* ret) = 0;
+
+ /** Expert: Low-level search implementation with arbitrary sorting. Finds
+ * the top <code>n</code> hits for <code>query</code>, applying
+ * <code>filter</code> if non-null, and sorting the hits by the criteria in
+ * <code>sort</code>.
+ *
+ * <p>Applications should usually call {@link
+ * Searcher#search(Query,Filter,Sort)} instead.
+ */
+ virtual TopFieldDocs* _search(Query* query, Filter* filter, const int32_t n, const Sort* sort) = 0;
+ };
+
+
+
+ /** An abstract base class for search implementations.
+ * Implements some common utility methods.
+ */
+ class Searcher:public Searchable {
+ private:
+ /** The Similarity implementation used by this searcher. */
+ Similarity* similarity;
+
+ public:
+ Searcher(){
+ similarity = Similarity::getDefault();
+ }
+ virtual ~Searcher(){
+ }
+
+ // Returns the documents matching <code>query</code>.
+ Hits* search(Query* query) {
+ return search(query, (Filter*)NULL );
+ }
+
+ // Returns the documents matching <code>query</code> and
+ // <code>filter</code>.
+ Hits* search(Query* query, Filter* filter) {
+ return _CLNEW Hits(this, query, filter);
+ }
+
+ /** Returns documents matching <code>query</code> sorted by
+ * <code>sort</code>.
+ */
+ Hits* search(Query* query, const Sort* sort){
+ return _CLNEW Hits(this, query, NULL, sort);
+ }
+
+ /** Returns documents matching <code>query</code> and <code>filter</code>,
+ * sorted by <code>sort</code>.
+ */
+ Hits* search(Query* query, Filter* filter, const Sort* sort){
+ return _CLNEW Hits(this, query, filter, sort);
+ }
+
+ /** Lower-level search API.
+ *
+ * <p>{@link HitCollector#collect(int32_t ,qreal)} is called for every non-zero
+ * scoring document.
+ *
+ * <p>Applications should only use this if they need <i>all</i> of the
+ * matching documents. The high-level search API ({@link
+ * Searcher#search(Query*)}) is usually more efficient, as it skips
+ * non-high-scoring hits.
+ * <p>Note: The <code>score</code> passed to this method is a raw score.
+ * In other words, the score will not necessarily be a float whose value is
+ * between 0 and 1.
+ */
+ void _search(Query* query, HitCollector* results) {
+ Searchable::_search(query, NULL, results);
+ }
+
+ /** Expert: Set the Similarity implementation used by this Searcher.
+ *
+ * @see Similarity#setDefault(Similarity)
+ */
+ void setSimilarity(Similarity* similarity) {
+ this->similarity = similarity;
+ }
+
+ /** Expert: Return the Similarity implementation used by this Searcher.
+ *
+ * <p>This defaults to the current value of {@link Similarity#getDefault()}.
+ */
+ Similarity* getSimilarity(){
+ return this->similarity;
+ }
+ };
+
+ /** The abstract base class for queries.
+ <p>Instantiable subclasses are:
+ <ul>
+ <li> {@link TermQuery}
+ <li> {@link MultiTermQuery}
+ <li> {@link BooleanQuery}
+ <li> {@link WildcardQuery}
+ <li> {@link PhraseQuery}
+ <li> {@link PrefixQuery}
+ <li> {@link PhrasePrefixQuery}
+ <li> {@link FuzzyQuery}
+ <li> {@link RangeQuery}
+ <li> {@link spans.SpanQuery}
+ </ul>
+ <p>A parser for queries is contained in:
+ <ul>
+ <li>{@link queryParser.QueryParser QueryParser}
+ </ul>
+ */
+ class Query :LUCENE_BASE {
+ private:
+ // query boost factor
+ qreal boost;
+ protected:
+ Query(const Query& clone);
+ public:
+ Query();
+ virtual ~Query();
+
+ /** Sets the boost for this query clause to <code>b</code>. Documents
+ * matching this clause will (in addition to the normal weightings) have
+ * their score multiplied by <code>b</code>.
+ */
+ void setBoost(qreal b);
+
+ /** Gets the boost for this clause. Documents matching
+ * this clause will (in addition to the normal weightings) have their score
+ * multiplied by <code>b</code>. The boost is 1.0 by default.
+ */
+ qreal getBoost() const;
+
+ /** Expert: Constructs an initializes a Weight for a top-level query. */
+ Weight* weight(Searcher* searcher);
+
+ /** Expert: called to re-write queries into primitive queries. */
+ virtual Query* rewrite(CL_NS(index)::IndexReader* reader);
+
+ /** Expert: called when re-writing queries under MultiSearcher.
+ *
+ * <p>Only implemented by derived queries, with no
+ * {@link #_createWeight(Searcher)} implementatation.
+ */
+ virtual Query* combine(Query** queries);
+
+ /** Expert: merges the clauses of a set of BooleanQuery's into a single
+ * BooleanQuery.
+ *
+ *<p>A utility for use by {@link #combine(Query[])} implementations.
+ */
+ static Query* mergeBooleanQueries(Query** queries);
+
+ /** Expert: Returns the Similarity implementation to be used for this query.
+ * Subclasses may override this method to specify their own Similarity
+ * implementation, perhaps one that delegates through that of the Searcher.
+ * By default the Searcher's Similarity implementation is returned.*/
+ Similarity* getSimilarity(Searcher* searcher);
+
+ /** Returns a clone of this query. */
+ virtual Query* clone() const = 0;
+ virtual const TCHAR* getQueryName() const = 0;
+ bool instanceOf(const TCHAR* other) const;
+
+ /** Prints a query to a string, with <code>field</code> as the default field
+ * for terms. <p>The representation used is one that is readable by
+ * {@link queryParser.QueryParser QueryParser}
+ * (although, if the query was created by the parser, the printed
+ * representation may not be exactly what was parsed).
+ */
+ virtual TCHAR* toString(const TCHAR* field) const = 0;
+
+ virtual bool equals(Query* other) const = 0;
+ virtual size_t hashCode() const = 0;
+
+ /** Prints a query to a string. */
+ TCHAR* toString() const;
+
+
+ /** Expert: Constructs an appropriate Weight implementation for this query.
+ *
+ * <p>Only implemented by primitive queries, which re-write to themselves.
+ * <i>This is an Internal function</i>
+ */
+ virtual Weight* _createWeight(Searcher* searcher);
+
+ };
+
+
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/search/Similarity.cpp b/src/3rdparty/clucene/src/CLucene/search/Similarity.cpp
new file mode 100644
index 0000000..d33a036
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/Similarity.cpp
@@ -0,0 +1,233 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "Similarity.h"
+
+#include "CLucene/index/Term.h"
+#include "SearchHeader.h"
+
+CL_NS_USE(index)
+CL_NS_DEF(search)
+
+#ifdef _CL_HAVE_NO_FLOAT_BYTE
+ #if defined(_LUCENE_PRAGMA_WARNINGS)
+ #pragma message ("==================Using fallback float<->byte encodings!!!==================")
+ #else
+ #warning "==================Using fallback float<->byte encodings!!!=================="
+ #endif
+
+ //if the autoconf figured out that we can't do the conversions properly, then
+ //we fall back on the old, inaccurate way of doing things.
+ qreal NORM_TABLE[] = {
+ 0.0,5.820766E-10,6.9849193E-10,8.1490725E-10,9.313226E-10,1.1641532E-9,1.3969839E-9,
+ 1.6298145E-9,1.8626451E-9,2.3283064E-9,2.7939677E-9,3.259629E-9,3.7252903E-9,
+ 4.656613E-9,5.5879354E-9,6.519258E-9,7.4505806E-9,9.313226E-9,1.1175871E-8,1.3038516E-8,
+ 1.4901161E-8,1.8626451E-8,2.2351742E-8,2.6077032E-8,2.9802322E-8,3.7252903E-8,4.4703484E-8,
+ 5.2154064E-8,5.9604645E-8,7.4505806E-8,8.940697E-8,1.0430813E-7,1.1920929E-7,1.4901161E-7,
+ 1.7881393E-7,2.0861626E-7,2.3841858E-7,2.9802322E-7,3.5762787E-7,4.172325E-7,4.7683716E-7,
+ 5.9604645E-7,7.1525574E-7,8.34465E-7,9.536743E-7,1.1920929E-6,1.4305115E-6,1.66893E-6,
+ 1.9073486E-6,2.3841858E-6,2.861023E-6,3.33786E-6,3.8146973E-6,4.7683716E-6,5.722046E-6,
+ 6.67572E-6,7.6293945E-6,9.536743E-6,1.1444092E-5,1.335144E-5,1.5258789E-5,1.9073486E-5,
+ 2.2888184E-5,2.670288E-5,3.0517578E-5,3.8146973E-5,4.5776367E-5,5.340576E-5,6.1035156E-5,
+ 7.6293945E-5,9.1552734E-5,1.0681152E-4,1.2207031E-4,1.5258789E-4,1.8310547E-4,2.1362305E-4,
+ 2.4414062E-4,3.0517578E-4,3.6621094E-4,4.272461E-4,4.8828125E-4,6.1035156E-4,7.324219E-4,
+ 8.544922E-4,9.765625E-4,0.0012207031,0.0014648438,0.0017089844,0.001953125,0.0024414062,
+ 0.0029296875,0.0034179688,0.00390625,0.0048828125,0.005859375,0.0068359375,
+ 0.0078125,0.009765625,0.01171875,0.013671875,0.015625,0.01953125,0.0234375,
+ 0.02734375,0.03125,0.0390625,0.046875,0.0546875,0.0625,0.078125,0.09375,0.109375,
+ 0.125,0.15625,0.1875,0.21875,0.25,0.3125,0.375,0.4375,0.5,0.625,0.75,
+ 0.875,1.0,1.25,1.5,1.75,2,2.5,3,3.5,4.0,5.0,6.0,7.0,8.0,10.0,12.0,14.0,16.0,20.0,24.0,28.0,32.0,40.0,48.0,56.0,
+ 64.0,80.0,96.0,112.0,128.0,160.0,192.0,224.0,256.0,320.0,384.0,448.0,512.0,640.0,768.0,896.0,1024.0,1280.0,1536.0,1792.0,
+ 2048.0,2560.0,3072.0,3584.0,4096.0,5120.0,6144.0,7168.0,8192.0,10240.0,12288.0,14336.0,16384.0,20480.0,24576.0,
+ 28672.0,32768.0,40960.0,49152.0,57344.0,65536.0,81920.0,98304.0,114688.0,131072.0,163840.0,196608.0,
+ 229376.0,262144.0,327680.0,393216.0,458752.0,524288.0,655360.0,786432.0,917504.0,1048576.0,1310720.0,
+ 1572864.0,1835008.0,2097152.0,2621440.0,3145728.0,3670016.0,4194304.0,5242880.0,6291456.0,7340032.0,
+ 8388608.0,10485760.0,12582912.0,14680064.0,16777216.0,20971520.0,25165824.0,29360128.0,33554432.0,
+ 41943040.0,50331648.0,58720256.0,67108864.0,83886080.0,100663296.0,117440512.0,134217728.0,
+ 167772160.0,201326592.0,234881024.0,268435456.0,335544320.0,402653184.0,469762048.0,536870912.0,
+ 671088640.0,805306368.0,939524096.0,1073741824.0,1342177280.0,1610612736.0,1879048192.0,
+ 2147483648.0,2684354560.0,3221225472.0,3758096384.0,4294967296.0,5368709120.0,6442450944.0,7516192768.0
+ };
+
+ qreal Similarity::byteToFloat(uint8_t b) {
+ return NORM_TABLE[b];
+ }
+
+ uint8_t Similarity::floatToByte(qreal f) {
+ return Similarity::encodeNorm(f);
+ }
+
+#else
+
+ /** Cache of decoded bytes. */
+ qreal NORM_TABLE[256];
+ bool NORM_TABLE_initd=false;
+
+ //float to bits conversion utilities...
+ union clvalue {
+ int32_t i;
+ float f; //must use a float type, else types dont match up
+ };
+
+ int32_t floatToIntBits(qreal value)
+ {
+ clvalue u;
+ int32_t e, f;
+ u.f = (float)value;
+ e = u.i & 0x7f800000;
+ f = u.i & 0x007fffff;
+
+ if (e == 0x7f800000 && f != 0)
+ u.i = 0x7fc00000;
+
+ return u.i;
+ }
+
+ qreal intBitsToFloat(int32_t bits)
+ {
+ clvalue u;
+ u.i = bits;
+ return u.f;
+ }
+
+
+ qreal Similarity::byteToFloat(uint8_t b) {
+ if (b == 0) // zero is a special case
+ return 0.0f;
+ int32_t mantissa = b & 7;
+ int32_t exponent = (b >> 3) & 31;
+ int32_t bits = ((exponent+(63-15)) << 24) | (mantissa << 21);
+ return intBitsToFloat(bits);
+ }
+
+ uint8_t Similarity::floatToByte(qreal f) {
+ if (f < 0.0f) // round negatives up to zero
+ f = 0.0f;
+
+ if (f == 0.0f) // zero is a special case
+ return 0;
+
+ int32_t bits = floatToIntBits(f); // parse qreal into parts
+ int32_t mantissa = (bits & 0xffffff) >> 21;
+ int32_t exponent = (((bits >> 24) & 0x7f) - 63) + 15;
+
+ if (exponent > 31) { // overflow: use max value
+ exponent = 31;
+ mantissa = 7;
+ }
+
+ if (exponent < 0) { // underflow: use min value
+ exponent = 0;
+ mantissa = 1;
+ }
+
+ return (uint8_t)((exponent << 3) | mantissa); // pack into a uint8_t
+ }
+#endif
+
+ /** The Similarity implementation used by default. */
+ Similarity* _defaultImpl=NULL;
+
+ void Similarity::setDefault(Similarity* similarity) {
+ _defaultImpl = similarity;
+ }
+
+ Similarity* Similarity::getDefault() {
+ if ( _defaultImpl == NULL ){
+ _defaultImpl = _CLNEW DefaultSimilarity();
+ }
+ return _defaultImpl;
+ }
+
+ qreal Similarity::decodeNorm(uint8_t b) {
+#ifndef _CL_HAVE_NO_FLOAT_BYTE
+ if ( !NORM_TABLE_initd ){
+ for (int i = 0; i < 256; i++)
+ NORM_TABLE[i] = byteToFloat(i);
+ NORM_TABLE_initd=true;
+ }
+#endif
+ return NORM_TABLE[b];
+ }
+
+ uint8_t Similarity::encodeNorm(qreal f) {
+#ifdef _CL_HAVE_NO_FLOAT_BYTE
+ int32_t i=0;
+ if ( f <= 0 )
+ return 0;
+
+ while ( i<256 && f > NORM_TABLE[i] ){
+ i++;
+ }
+ if ( i == 0 )
+ return 0;
+ else if ( i == 255 && f>NORM_TABLE[255] )
+ return 255;
+ else
+ return i;
+#else
+ return floatToByte(f);
+#endif
+ }
+
+
+ qreal Similarity::idf(Term* term, Searcher* searcher) {
+ return idf(searcher->docFreq(term), searcher->maxDoc());
+ }
+
+
+ qreal Similarity::idf(CL_NS(util)::CLVector<Term*>* terms, Searcher* searcher) {
+ qreal _idf = 0.0f;
+ for (CL_NS(util)::CLVector<Term*>::iterator i = terms->begin(); i != terms->end(); i++ ) {
+ _idf += idf((Term*)*i, searcher);
+ }
+ return _idf;
+ }
+
+ Similarity::~Similarity(){
+ }
+
+
+
+
+ DefaultSimilarity::DefaultSimilarity(){
+ }
+ DefaultSimilarity::~DefaultSimilarity(){
+ }
+
+ qreal DefaultSimilarity::lengthNorm(const TCHAR* fieldName, int32_t numTerms) {
+ if ( numTerms == 0 ) //prevent div by zero
+ return 0;
+ qreal ret = (qreal)(1.0 / sqrt((qreal)numTerms));
+ return ret;
+ }
+
+ qreal DefaultSimilarity::queryNorm(qreal sumOfSquaredWeights) {
+ if ( sumOfSquaredWeights == 0 ) //prevent div by zero
+ return 0.0f;
+ qreal ret = (qreal)(1.0 / sqrt(sumOfSquaredWeights));
+ return ret;
+ }
+
+ qreal DefaultSimilarity::tf(qreal freq) {
+ return sqrt(freq);
+ }
+
+ qreal DefaultSimilarity::sloppyFreq(int32_t distance) {
+ return 1.0f / (distance + 1);
+ }
+
+ qreal DefaultSimilarity::idf(int32_t docFreq, int32_t numDocs) {
+ return (qreal)(log(numDocs/(qreal)(docFreq+1)) + 1.0);
+ }
+
+ qreal DefaultSimilarity::coord(int32_t overlap, int32_t maxOverlap) {
+ if ( maxOverlap == 0 )
+ return 0.0f;
+ return overlap / (qreal)maxOverlap;
+ }
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/search/Similarity.h b/src/3rdparty/clucene/src/CLucene/search/Similarity.h
new file mode 100644
index 0000000..426af69
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/Similarity.h
@@ -0,0 +1,268 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_search_Similarity_
+#define _lucene_search_Similarity_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "CLucene/index/Term.h"
+
+CL_NS_DEF(search)
+
+class Searcher;//save including the searchheader.h
+class DefaultSimilarity;
+
+/** Expert: Scoring API.
+* <p>Subclasses implement search scoring.
+*
+* <p>The score of query <code>q</code> for document <code>d</code> is defined
+* in terms of these methods as follows:
+*
+* <table cellpadding="0" cellspacing="0" border="0">
+* <tr>
+* <td valign="middle" align="right" rowspan="2">score(q,d) =<br></td>
+* <td valign="middle" align="center">
+* <big><big><big><big><big>&Sigma;</big></big></big></big></big></td>
+* <td valign="middle"><small>
+* {@link #tf(int32_t) tf}(t in d) *
+* {@link #idf(Term,Searcher) idf}(t) *
+* {@link Field#getBoost getBoost}(t.field in d) *
+* {@link #lengthNorm(TCHAR*,int32_t) lengthNorm}(t.field in d)
+* </small></td>
+* <td valign="middle" rowspan="2">&nbsp;*
+* {@link #coord(int32_t,int32_t) coord}(q,d) *
+* {@link #queryNorm(qreal) queryNorm}(q)
+* </td>
+* </tr>
+* <tr>
+* <td valign="top" align="right">
+* <small>t in q</small>
+* </td>
+* </tr>
+* </table>
+*
+* @see #setDefault(Similarity)
+* @see IndexWriter#setSimilarity(Similarity)
+* @see Searcher#setSimilarity(Similarity)
+*/
+class Similarity:LUCENE_BASE {
+public:
+ virtual ~Similarity();
+
+ /** Set the default Similarity implementation used by indexing and search
+ * code.
+ *
+ * @see Searcher#setSimilarity(Similarity)
+ * @see IndexWriter#setSimilarity(Similarity)
+ */
+ static void setDefault(Similarity* similarity);
+
+ /** Return the default Similarity implementation used by indexing and search
+ * code.
+ *
+ * <p>This is initially an instance of {@link DefaultSimilarity}.
+ *
+ * @see Searcher#setSimilarity(Similarity)
+ * @see IndexWriter#setSimilarity(Similarity)
+ */
+ static Similarity* getDefault();
+
+ /** Encodes a normalization factor for storage in an index.
+ *
+ * <p>The encoding uses a five-bit exponent and three-bit mantissa, thus
+ * representing values from around 7x10^9 to 2x10^-9 with about one
+ * significant decimal digit of accuracy. Zero is also represented.
+ * Negative numbers are rounded up to zero. Values too large to represent
+ * are rounded down to the largest representable value. Positive values too
+ * small to represent are rounded up to the smallest positive representable
+ * value.
+ *
+ * @see Field#setBoost(qreal)
+ */
+ static uint8_t encodeNorm(qreal f);
+
+ /** Decodes a normalization factor stored in an index.
+ * @see #encodeNorm(qreal)
+ */
+ static qreal decodeNorm(uint8_t b);
+
+ static uint8_t floatToByte(qreal f);
+ static qreal byteToFloat(uint8_t b);
+
+ /** Computes a score factor for a phrase.
+ *
+ * <p>The default implementation sums the {@link #idf(Term,Searcher)} factor
+ * for each term in the phrase.
+ *
+ * @param terms the terms in the phrase
+ * @param searcher the document collection being searched
+ * @return a score factor for the phrase
+ */
+ qreal idf(CL_NS(util)::CLVector<CL_NS(index)::Term*>* terms, Searcher* searcher);
+ //qreal idf(Term** terms, Searcher* searcher);
+
+
+ /** Computes a score factor for a simple term.
+ *
+ * <p>The default implementation is:<pre>
+ * return idf(searcher.docFreq(term), searcher.maxDoc());
+ * </pre>
+ *
+ * Note that {@link Searcher#maxDoc()} is used instead of
+ * {@link IndexReader#numDocs()} because it is proportional to
+ * {@link Searcher#docFreq(Term)} , i.e., when one is inaccurate,
+ * so is the other, and in the same direction.
+ *
+ * @param term the term in question
+ * @param searcher the document collection being searched
+ * @return a score factor for the term
+ */
+ qreal idf(CL_NS(index)::Term* term, Searcher* searcher);
+
+
+ /** Computes a score factor based on a term or phrase's frequency in a
+ * document. This value is multiplied by the {@link #idf(Term, Searcher)}
+ * factor for each term in the query and these products are then summed to
+ * form the initial score for a document.
+ *
+ * <p>Terms and phrases repeated in a document indicate the topic of the
+ * document, so implementations of this method usually return larger values
+ * when <code>freq</code> is large, and smaller values when <code>freq</code>
+ * is small.
+ *
+ * <p>The default implementation calls {@link #tf(qreal)}.
+ *
+ * @param freq the frequency of a term within a document
+ * @return a score factor based on a term's within-document frequency
+ */
+ inline qreal tf(int32_t freq){ return tf((qreal)freq); }
+
+ /** Computes the normalization value for a field given the total number of
+ * terms contained in a field. These values, together with field boosts, are
+ * stored in an index and multipled into scores for hits on each field by the
+ * search code.
+ *
+ * <p>Matches in longer fields are less precise, so implemenations of this
+ * method usually return smaller values when <code>numTokens</code> is large,
+ * and larger values when <code>numTokens</code> is small.
+ *
+ * <p>That these values are computed under {@link
+ * IndexWriter#addDocument(Document)} and stored then using
+ * {#encodeNorm(qreal)}. Thus they have limited precision, and documents
+ * must be re-indexed if this method is altered.
+ *
+ * @param fieldName the name of the field
+ * @param numTokens the total number of tokens contained in fields named
+ * <i>fieldName</i> of <i>doc</i>.
+ * @return a normalization factor for hits on this field of this document
+ *
+ * @see Field#setBoost(qreal)
+ */
+ virtual qreal lengthNorm(const TCHAR* fieldName, int32_t numTokens) = 0;
+
+ /** Computes the normalization value for a query given the sum of the squared
+ * weights of each of the query terms. This value is then multipled into the
+ * weight of each query term.
+ *
+ * <p>This does not affect ranking, but rather just attempts to make scores
+ * from different queries comparable.
+ *
+ * @param sumOfSquaredWeights the sum of the squares of query term weights
+ * @return a normalization factor for query weights
+ */
+ virtual qreal queryNorm(qreal sumOfSquaredWeights) = 0;
+
+ /** Computes the amount of a sloppy phrase match, based on an edit distance.
+ * This value is summed for each sloppy phrase match in a document to form
+ * the frequency that is passed to {@link #tf(qreal)}.
+ *
+ * <p>A phrase match with a small edit distance to a document passage more
+ * closely matches the document, so implementations of this method usually
+ * return larger values when the edit distance is small and smaller values
+ * when it is large.
+ *
+ * @see PhraseQuery#setSlop(int32_t)
+ * @param distance the edit distance of this sloppy phrase match
+ * @return the frequency increment for this match
+ */
+ virtual qreal sloppyFreq(int32_t distance) = 0;
+
+ /** Computes a score factor based on a term or phrase's frequency in a
+ * document. This value is multiplied by the {@link #idf(Term, Searcher)}
+ * factor for each term in the query and these products are then summed to
+ * form the initial score for a document.
+ *
+ * <p>Terms and phrases repeated in a document indicate the topic of the
+ * document, so implemenations of this method usually return larger values
+ * when <code>freq</code> is large, and smaller values when <code>freq</code>
+ * is small.
+ *
+ * @param freq the frequency of a term within a document
+ * @return a score factor based on a term's within-document frequency
+ */
+ virtual qreal tf(qreal freq) = 0;
+
+ /** Computes a score factor based on a term's document frequency (the number
+ * of documents which contain the term). This value is multiplied by the
+ * {@link #tf(int32_t)} factor for each term in the query and these products are
+ * then summed to form the initial score for a document.
+ *
+ * <p>Terms that occur in fewer documents are better indicators of topic, so
+ * implemenations of this method usually return larger values for rare terms,
+ * and smaller values for common terms.
+ *
+ * @param docFreq the number of documents which contain the term
+ * @param numDocs the total number of documents in the collection
+ * @return a score factor based on the term's document frequency
+ */
+ virtual qreal idf(int32_t docFreq, int32_t numDocs) = 0;
+
+ /** Computes a score factor based on the fraction of all query terms that a
+ * document contains. This value is multiplied into scores.
+ *
+ * <p>The presence of a large portion of the query terms indicates a better
+ * match with the query, so implemenations of this method usually return
+ * larger values when the ratio between these parameters is large and smaller
+ * values when the ratio between them is small.
+ *
+ * @param overlap the number of query terms matched in the document
+ * @param maxOverlap the total number of terms in the query
+ * @return a score factor based on term overlap with the query
+ */
+ virtual qreal coord(int32_t overlap, int32_t maxOverlap) = 0;
+};
+
+
+/** Expert: Default scoring implementation. */
+class DefaultSimilarity: public Similarity {
+public:
+ DefaultSimilarity();
+ ~DefaultSimilarity();
+
+ /** Implemented as <code>1/sqrt(numTerms)</code>. */
+ qreal lengthNorm(const TCHAR* fieldName, int32_t numTerms);
+
+ /** Implemented as <code>1/sqrt(sumOfSquaredWeights)</code>. */
+ qreal queryNorm(qreal sumOfSquaredWeights);
+
+ /** Implemented as <code>sqrt(freq)</code>. */
+ inline qreal tf(qreal freq);
+
+ /** Implemented as <code>1 / (distance + 1)</code>. */
+ qreal sloppyFreq(int32_t distance);
+
+ /** Implemented as <code>log(numDocs/(docFreq+1)) + 1</code>. */
+ qreal idf(int32_t docFreq, int32_t numDocs);
+
+ /** Implemented as <code>overlap / maxOverlap</code>. */
+ qreal coord(int32_t overlap, int32_t maxOverlap);
+};
+
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/search/SloppyPhraseScorer.cpp b/src/3rdparty/clucene/src/CLucene/search/SloppyPhraseScorer.cpp
new file mode 100644
index 0000000..b7683b0
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/SloppyPhraseScorer.cpp
@@ -0,0 +1,106 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "SloppyPhraseScorer.h"
+
+#include "PhraseScorer.h"
+#include "CLucene/index/Terms.h"
+
+CL_NS_USE(index)
+CL_NS_DEF(search)
+
+ SloppyPhraseScorer::SloppyPhraseScorer(Weight* weight, CL_NS(index)::TermPositions** tps,
+ int32_t* positions, Similarity* similarity,
+ int32_t slop, uint8_t* norms):
+ PhraseScorer(weight,tps,positions,similarity,norms){
+ //Func - Constructor
+ //Pre - tps != NULL
+ // tpsLength >= 0
+ // n != NULL
+ //Post - Instance has been created
+
+ CND_PRECONDITION(tps != NULL, "tps is NULL");
+ //CND_PRECONDITION(n != NULL, _T("n is NULL")) = checked in PhraseScorer;
+
+ this->slop = slop;
+ }
+
+ qreal SloppyPhraseScorer::phraseFreq() {
+ //Func - Returns the freqency of the phrase
+ //Pre - first != NULL
+ // last != NULL
+ // pq != NULL
+ //Post - The frequency of the phrase has been returned
+
+ CND_PRECONDITION(first != NULL,"first is NULL");
+ CND_PRECONDITION(last != NULL,"last is NULL");
+ CND_PRECONDITION(pq != NULL,"pq is NULL");
+
+ //Clear the PhraseQueue pq;
+ pq->clear();
+
+ int32_t end = 0;
+
+ //declare iterator
+ PhrasePositions* pp = NULL;
+
+ // build pq from list
+
+ //Sort the list of PhrasePositions using pq
+ for (pp = first; pp != NULL; pp = pp->_next) {
+ //Read the first TermPosition of the current PhrasePositions pp
+ pp->firstPosition();
+ //Check if the position of the pp is bigger than end
+ if (pp->position > end){
+ end = pp->position;
+ }
+ //Store the current PhrasePositions pp into the PhraseQueue pp
+ pq->put(pp);
+ }
+
+ qreal freq = 0.0f;
+
+ bool done = false;
+
+ do {
+ //Pop a PhrasePositions pp from the PhraseQueue pp
+ pp = pq->pop();
+ //Get start position
+ int32_t start = pp->position;
+ //Get next position
+ int32_t next = pq->top()->position;
+
+ for (int32_t pos = start; pos <= next; pos = pp->position) {
+ //advance pp to min window
+ start = pos;
+
+ if (!pp->nextPosition()) {
+ //ran out of a term -- done
+ done = true;
+ break;
+ }
+ }
+
+ //Calculate matchLength
+ int32_t matchLength = end - start;
+ //Check if matchLength is smaller than slop
+ if (matchLength <= slop){
+ // penalize longer matches
+ freq += 1.0 / (matchLength + 1);
+ }
+
+ if (pp->position > end){
+ end = pp->position;
+ }
+
+ //restore pq
+ pq->put(pp);
+ }while (!done);
+
+ return freq;
+ }
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/search/SloppyPhraseScorer.h b/src/3rdparty/clucene/src/CLucene/search/SloppyPhraseScorer.h
new file mode 100644
index 0000000..31516e3
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/SloppyPhraseScorer.h
@@ -0,0 +1,34 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_search_SloppyPhraseScorer_
+#define _lucene_search_SloppyPhraseScorer_
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "PhraseScorer.h"
+#include "CLucene/index/Terms.h"
+
+
+CL_NS_DEF(search)
+ class SloppyPhraseScorer: public PhraseScorer {
+ private:
+ int32_t slop;
+
+ public:
+ SloppyPhraseScorer(Weight* weight, CL_NS(index)::TermPositions** tps,
+ int32_t* positions, Similarity* similarity,
+ int32_t slop, uint8_t* norms);
+ ~SloppyPhraseScorer(){
+ }
+
+ protected:
+ qreal phraseFreq();
+ };
+CL_NS_END
+#endif
+
diff --git a/src/3rdparty/clucene/src/CLucene/search/Sort.cpp b/src/3rdparty/clucene/src/CLucene/search/Sort.cpp
new file mode 100644
index 0000000..5a17a78
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/Sort.cpp
@@ -0,0 +1,345 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "Sort.h"
+#include "Compare.h"
+
+CL_NS_USE(util)
+CL_NS_DEF(search)
+
+
+
+ /** Represents sorting by document score (relevancy). */
+ SortField* SortField::FIELD_SCORE = _CLNEW SortField (NULL, DOCSCORE,false);
+
+ /** Represents sorting by document number (index order). */
+ SortField* SortField::FIELD_DOC = _CLNEW SortField (NULL, DOC,false);
+
+
+ /** Represents sorting by computed relevance. Using this sort criteria
+ * returns the same results as calling {@link Searcher#search(Query) Searcher#search()}
+ * without a sort criteria, only with slightly more overhead. */
+ Sort* Sort::RELEVANCE = _CLNEW Sort();
+
+ /** Represents sorting by index order. */
+ Sort* Sort::INDEXORDER = _CLNEW Sort (SortField::FIELD_DOC);
+
+
+
+
+ /** Creates a sort by terms in the given field where the type of term value
+ * is determined dynamically ({@link #AUTO AUTO}).
+ * @param field Name of field to sort by, cannot be <code>null</code>.
+ */
+ SortField::SortField (const TCHAR* field) {
+ this->type = AUTO;
+ this->reverse = false;
+ this->field = CLStringIntern::intern(field CL_FILELINE);
+ this->factory = NULL;
+ }
+
+ /** Creates a sort, possibly in reverse, by terms in the given field where
+ * the type of term value is determined dynamically ({@link #AUTO AUTO}).
+ * @param field Name of field to sort by, cannot be <code>null</code>.
+ * @param reverse True if natural order should be reversed.
+
+ SortField::SortField (const TCHAR* field, bool reverse) {
+ this->field = CLStringIntern::intern(field CL_FILELINE);
+ this->reverse = reverse;
+ this->type = AUTO;
+ this->factory = NULL;
+ }*/
+
+
+ /** Creates a sort, possibly in reverse, by terms in the given field with the
+ * type of term values explicitly given.
+ * @param field Name of field to sort by. Can be <code>null</code> if
+ * <code>type</code> is SCORE or DOC.
+ * @param type Type of values in the terms.
+ * @param reverse True if natural order should be reversed (default=false).
+ */
+ SortField::SortField (const TCHAR* field, int32_t type, bool reverse) {
+ this->field = (field != NULL) ? CLStringIntern::intern(field CL_FILELINE) : field;
+ this->type = type;
+ this->reverse = reverse;
+ this->factory = NULL;
+ }
+
+ SortField::SortField(const SortField& clone){
+ this->field = (clone.field != NULL) ? CLStringIntern::intern(clone.field CL_FILELINE) : clone.field;
+ this->type = clone.type;
+ this->reverse = clone.reverse;
+ this->factory = clone.factory;
+ }
+ SortField* SortField::clone() const{
+ return _CLNEW SortField(*this);
+ }
+
+ /** Creates a sort by terms in the given field sorted
+ * according to the given locale.
+ * @param field Name of field to sort by, cannot be <code>null</code>.
+ * @param locale Locale of values in the field.
+ */
+ /*SortField::SortField (TCHAR* field, Locale* locale) {
+ this->field = (field != NULL) ? CLStringIntern::intern(field): field;
+ this->type = STRING;
+ this->locale = locale;
+ }*/
+
+ /** Creates a sort, possibly in reverse, by terms in the given field sorted
+ * according to the given locale.
+ * @param field Name of field to sort by, cannot be <code>null</code>.
+ * @param locale Locale of values in the field.
+ */
+ /*SortField::SortField (TCHAR* field, Locale* locale, bool reverse) {
+ this->field = (field != NULL) ? CLStringIntern::intern(field): field;
+ this->type = STRING;
+ this->locale = locale;
+ this->reverse = reverse;
+ }*/
+
+
+ /** Creates a sort, possibly in reverse, with a custom comparison function.
+ * @param field Name of field to sort by; cannot be <code>null</code>.
+ * @param comparator Returns a comparator for sorting hits.
+ * @param reverse True if natural order should be reversed (default=false).
+ */
+ SortField::SortField (const TCHAR* field, SortComparatorSource* comparator, bool reverse) {
+ this->field = (field != NULL) ? CLStringIntern::intern(field CL_FILELINE): field;
+ this->type = CUSTOM;
+ this->reverse = reverse;
+ this->factory = comparator;
+ }
+
+ SortField::~SortField(){
+ CLStringIntern::unintern(field);
+ }
+
+ TCHAR* SortField::toString() const {
+ CL_NS(util)::StringBuffer buffer;
+ switch (type) {
+ case DOCSCORE: buffer.append(_T("<score>"));
+ break;
+
+ case DOC: buffer.append(_T("<doc>"));
+ break;
+
+ case CUSTOM: buffer.append (_T("<custom:\""));
+ buffer.append( field );
+ buffer.append( _T("\": "));
+ buffer.append(factory->getName());
+ buffer.append(_T(">"));
+ break;
+
+ default: buffer.append( _T("\""));
+ buffer.append( field );
+ buffer.append( _T("\"") );
+ break;
+ }
+
+ //if (locale != null) buffer.append ("("+locale+")"); todo:
+ if (reverse) buffer.appendChar('!');
+
+ return buffer.toString();
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+ /** Sorts by computed relevance. This is the same sort criteria as
+ * calling {@link Searcher#search(Query) Searcher#search()} without a sort criteria, only with
+ * slightly more overhead. */
+ Sort::Sort() {
+ fields=NULL;
+ SortField** fields=_CL_NEWARRAY(SortField*,3);
+ fields[0]=SortField::FIELD_SCORE;
+ fields[1]=SortField::FIELD_DOC;
+ fields[2]=NULL;
+ setSort (fields);
+ _CLDELETE_ARRAY(fields);
+ }
+
+ Sort::~Sort(){
+ clear();
+ }
+ void Sort::clear(){
+ if ( fields != NULL ){
+ int32_t i=0;
+ while ( fields[i] != NULL ){
+ if ( fields[i] != SortField::FIELD_SCORE &&
+ fields[i] != SortField::FIELD_DOC ){
+ _CLDELETE(fields[i]);
+ }
+ i++;
+ }
+ _CLDELETE_ARRAY(fields);
+ }
+ }
+
+ /** Sorts possibly in reverse by the terms in <code>field</code> then by
+ * index order (document number). The type of value in <code>field</code> is determined
+ * automatically.
+ * @see SortField#AUTO
+ */
+ Sort::Sort (const TCHAR* field, bool reverse) {
+ this->fields=NULL;
+ setSort (field, reverse);
+ }
+
+
+ /** Sorts in succession by the terms in each field.
+ * The type of value in <code>field</code> is determined
+ * automatically.
+ * @see SortField#AUTO
+ */
+ Sort::Sort (const TCHAR** fields) {
+ this->fields=NULL;
+ setSort (fields);
+ }
+
+
+ /** Sorts by the criteria in the given SortField. */
+ Sort::Sort (SortField* field) {
+ this->fields=NULL;
+ setSort (field);
+ }
+
+
+ /** Sorts in succession by the criteria in each SortField. */
+ Sort::Sort (SortField** fields) {
+ this->fields=NULL;
+ setSort (fields);
+ }
+
+
+ /** Sets the sort to the terms in <code>field</code> possibly in reverse,
+ * then by index order (document number). */
+ void Sort::setSort (const TCHAR* field, bool reverse) {
+ clear();
+ fields = _CL_NEWARRAY(SortField*,3);
+ fields[0] = _CLNEW SortField (field, SortField::AUTO, reverse);
+ fields[1] = SortField::FIELD_DOC;
+ fields[2] = NULL;
+ }
+
+
+ /** Sets the sort to the terms in each field in succession. */
+ void Sort::setSort (const TCHAR** fieldnames) {
+ clear();
+
+ int32_t n = 0;
+ while ( fieldnames[n] != NULL )
+ n++;
+
+ fields = _CL_NEWARRAY(SortField*,n+1);
+ for (int32_t i = 0; i < n; ++i) {
+ fields[i] = _CLNEW SortField (fieldnames[i], SortField::AUTO,false);
+ }
+ fields[n]=NULL;
+ }
+
+
+ /** Sets the sort to the given criteria. */
+ void Sort::setSort (SortField* field) {
+ clear();
+
+ this->fields = _CL_NEWARRAY(SortField*,2);
+ this->fields[0] = field;
+ this->fields[1] = NULL;
+ }
+
+
+ /** Sets the sort to the given criteria in succession. */
+ void Sort::setSort (SortField** fields) {
+ clear();
+
+ int n=0;
+ while ( fields[n] != NULL )
+ n++;
+ this->fields = _CL_NEWARRAY(SortField*,n+1);
+ for (int i=0;i<n+1;i++)
+ this->fields[i]=fields[i];
+ }
+
+ TCHAR* Sort::toString() const {
+ CL_NS(util)::StringBuffer buffer;
+
+ int32_t i = 0;
+ while ( fields[i] != NULL ){
+ if (i>0)
+ buffer.appendChar(',');
+
+ const TCHAR* p = fields[i]->toString();
+ buffer.append(p);
+ _CLDELETE_CARRAY(p);
+
+ i++;
+ }
+
+ return buffer.toString();
+ }
+
+
+
+
+
+ ScoreDocComparator* ScoreDocComparator::INDEXORDER = _CLNEW ScoreDocComparators::IndexOrder;
+ ScoreDocComparator* ScoreDocComparator::RELEVANCE = _CLNEW ScoreDocComparators::Relevance;
+
+ ScoreDocComparator::~ScoreDocComparator(){
+ }
+
+
+class ScoreDocComparatorImpl: public ScoreDocComparator{
+ Comparable** cachedValues;
+ FieldCacheAuto* fca;
+ int32_t cachedValuesLen;
+public:
+ ScoreDocComparatorImpl(FieldCacheAuto* fca){
+ this->fca = fca;
+ if ( fca->contentType != FieldCacheAuto::COMPARABLE_ARRAY )
+ _CLTHROWA(CL_ERR_InvalidCast,"Invalid field cache auto type");
+ this->cachedValues = fca->comparableArray;
+ this->cachedValuesLen = fca->contentLen;
+ }
+ ~ScoreDocComparatorImpl(){
+ }
+ int32_t compare (struct ScoreDoc* i, struct ScoreDoc* j){
+ CND_PRECONDITION(i->doc >= 0 && i->doc < cachedValuesLen, "i->doc out of range")
+ CND_PRECONDITION(j->doc >= 0 && j->doc < cachedValuesLen, "j->doc out of range")
+ return cachedValues[i->doc]->compareTo (cachedValues[j->doc]);
+ }
+
+ CL_NS(util)::Comparable* sortValue (struct ScoreDoc* i){
+ CND_PRECONDITION(i->doc >= 0 && i->doc < cachedValuesLen, "i->doc out of range")
+ return cachedValues[i->doc];
+ }
+
+ int32_t sortType(){
+ return SortField::CUSTOM;
+ }
+};
+
+ScoreDocComparator* SortComparator::newComparator (CL_NS(index)::IndexReader* reader, const TCHAR* fieldname){
+ return _CLNEW ScoreDocComparatorImpl(FieldCache::DEFAULT->getCustom (reader, fieldname, this));
+}
+SortComparator::SortComparator(){
+}
+SortComparator::~SortComparator(){
+}
+
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/search/Sort.h b/src/3rdparty/clucene/src/CLucene/search/Sort.h
new file mode 100644
index 0000000..cfe96d5
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/Sort.h
@@ -0,0 +1,356 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_search_Sort_
+#define _lucene_search_Sort_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "CLucene/index/IndexReader.h"
+#include "SearchHeader.h"
+
+CL_NS_DEF(search)
+
+ class SortField; //predefine
+ class Sort;
+
+/**
+ * Expert: Compares two ScoreDoc objects for sorting.
+ *
+ */
+ class ScoreDocComparator:LUCENE_BASE {
+ protected:
+ ScoreDocComparator(){}
+ public:
+ virtual ~ScoreDocComparator();
+// CL_NS(util)::Comparable** cachedValues;
+// ScoreDocComparator(CL_NS(util)::Comparable** cachedValues);
+
+ /**
+ * Compares two ScoreDoc objects and returns a result indicating their
+ * sort order.
+ * @param i First ScoreDoc
+ * @param j Second ScoreDoc
+ * @return <code>-1</code> if <code>i</code> should come before <code>j</code><br><code>1</code> if <code>i</code> should come after <code>j</code><br><code>0</code> if they are equal
+ * @see java.util.Comparator
+ */
+ virtual int32_t compare (struct ScoreDoc* i, struct ScoreDoc* j) = 0;
+
+ /**
+ * Returns the value used to sort the given document. The
+ * object returned must implement the java.io.Serializable
+ * interface. This is used by multisearchers to determine how to collate results from their searchers.
+ * @see FieldDoc
+ * @param i Document
+ * @return Serializable object
+ */
+ virtual CL_NS(util)::Comparable* sortValue (struct ScoreDoc* i) = 0;
+
+
+ /**
+ * Returns the type of sort. Should return <code>SortField.SCORE</code>, <code>SortField.DOC</code>, <code>SortField.STRING</code>, <code>SortField.INTEGER</code>,
+ * <code>SortField::FLOAT</code> or <code>SortField.CUSTOM</code>. It is not valid to return <code>SortField.AUTO</code>.
+ * This is used by multisearchers to determine how to collate results from their searchers.
+ * @return One of the constants in SortField.
+ * @see SortField
+ */
+ virtual int32_t sortType() = 0;
+
+ /** Special comparator for sorting hits according to computed relevance (document score). */
+ static ScoreDocComparator* RELEVANCE;
+
+ /** Special comparator for sorting hits according to index order (document number). */
+ static ScoreDocComparator* INDEXORDER;
+ };
+
+/**
+ * Expert: returns a comparator for sorting ScoreDocs.
+ *
+ */
+class SortComparatorSource:LUCENE_BASE {
+public:
+ virtual ~SortComparatorSource(){
+ }
+
+ /**
+ * return a reference to a string describing the name of the comparator
+ * this is used in the explanation
+ */
+ virtual TCHAR* getName() = 0;
+
+ virtual size_t hashCode() = 0;
+
+ /**
+ * Creates a comparator for the field in the given index.
+ * @param reader Index to create comparator for.
+ * @param fieldname Field to create comparator for.
+ * @return Comparator of ScoreDoc objects.
+ * @throws IOException If an error occurs reading the index.
+ */
+ virtual ScoreDocComparator* newComparator (CL_NS(index)::IndexReader* reader, const TCHAR* fieldname) = 0;
+};
+
+
+/**
+ * Abstract base class for sorting hits returned by a Query.
+ *
+ * <p>This class should only be used if the other SortField
+ * types (SCORE, DOC, STRING, INT, FLOAT) do not provide an
+ * adequate sorting. It maintains an internal cache of values which
+ * could be quite large. The cache is an array of Comparable,
+ * one for each document in the index. There is a distinct
+ * Comparable for each unique term in the field - if
+ * some documents have the same term in the field, the cache
+ * array will have entries which reference the same Comparable.
+ *
+ */
+class SortComparator: public SortComparatorSource {
+public:
+ virtual ScoreDocComparator* newComparator (CL_NS(index)::IndexReader* reader, const TCHAR* fieldname);
+
+ SortComparator();
+ virtual ~SortComparator();
+
+ /**
+ * Returns an object which, when sorted according to natural order,
+ * will order the Term values in the correct order.
+ * <p>For example, if the Terms contained integer values, this method
+ * would return <code>new Integer(termtext)</code>. Note that this
+ * might not always be the most efficient implementation - for this
+ * particular example, a better implementation might be to make a
+ * ScoreDocLookupComparator that uses an internal lookup table of int.
+ * @param termtext The textual value of the term.
+ * @return An object representing <code>termtext</code> that sorts
+ * according to the natural order of <code>termtext</code>.
+ * @see Comparable
+ * @see ScoreDocComparator
+ */
+ virtual CL_NS(util)::Comparable* getComparable (const TCHAR* termtext) = 0;
+
+};
+
+
+/**
+ * Stores information about how to sort documents by terms in an individual
+ * field. Fields must be indexed in order to sort by them.
+ *
+ */
+class SortField:LUCENE_BASE {
+private:
+ const TCHAR* field;
+ int32_t type; // defaults to determining type dynamically
+ //Locale* locale; // defaults to "natural order" (no Locale)
+ bool reverse; // defaults to natural order
+ SortComparatorSource* factory;
+
+protected:
+ SortField (const SortField& clone);
+public:
+ virtual ~SortField();
+
+ /** Sort by document score (relevancy). Sort values are Float and higher
+ * values are at the front.
+ * PORTING: this is the same as SCORE in java, it had to be renamed because
+ * SCORE is a system macro on some platforms (AIX).
+ */
+ LUCENE_STATIC_CONSTANT(int32_t, DOCSCORE=0);
+
+ /** Sort by document number (index order). Sort values are Integer and lower
+ * values are at the front. */
+ LUCENE_STATIC_CONSTANT(int32_t, DOC=1);
+
+ /** Guess type of sort based on field contents. A regular expression is used
+ * to look at the first term indexed for the field and determine if it
+ * represents an integer number, a floating point number, or just arbitrary
+ * string characters. */
+ LUCENE_STATIC_CONSTANT(int32_t, AUTO=2);
+
+ /** Sort using term values as Strings. Sort values are String and lower
+ * values are at the front. */
+ LUCENE_STATIC_CONSTANT(int32_t, STRING=3);
+
+ /** Sort using term values as encoded Integers. Sort values are Integer and
+ * lower values are at the front. */
+ LUCENE_STATIC_CONSTANT(int32_t, INT=4);
+
+ /** Sort using term values as encoded Floats. Sort values are Float and
+ * lower values are at the front. */
+ LUCENE_STATIC_CONSTANT(int32_t, FLOAT=5);
+
+ /** Sort using a custom Comparator. Sort values are any Comparable and
+ * sorting is done according to natural order. */
+ LUCENE_STATIC_CONSTANT(int32_t, CUSTOM=9);
+
+ // IMPLEMENTATION NOTE: the FieldCache.STRING_INDEX is in the same "namespace"
+ // as the above static int values. Any new values must not have the same value
+ // as FieldCache.STRING_INDEX.
+
+ /** Represents sorting by document score (relevancy). */
+ static SortField* FIELD_SCORE;
+
+ /** Represents sorting by document number (index order). */
+ static SortField* FIELD_DOC;
+
+ SortField (const TCHAR* field);
+ //SortField (const TCHAR* field, bool reverse);
+ //todo: we cannot make reverse use default field of =false.
+ //because bool and int are the same type in c, overloading is not possible
+ SortField (const TCHAR* field, int32_t type, bool reverse);
+
+ /*
+ SortField (TCHAR* field, Locale* locale) {
+ SortField (TCHAR* field, Locale* locale, bool reverse);*/
+
+ SortField (const TCHAR* field, SortComparatorSource* comparator, bool reverse=false);
+
+ /** Returns the name of the field. Could return <code>null</code>
+ * if the sort is by SCORE or DOC.
+ * @return Name of field, possibly <code>null</code>.
+ */
+ const TCHAR* getField() const { return field; }
+
+ SortField* clone() const;
+
+ /** Returns the type of contents in the field.
+ * @return One of the constants SCORE, DOC, AUTO, STRING, INT or FLOAT.
+ */
+ int32_t getType() const { return type; }
+
+ /** Returns the Locale by which term values are interpreted.
+ * May return <code>null</code> if no Locale was specified.
+ * @return Locale, or <code>null</code>.
+ */
+ /*Locale getLocale() {
+ return locale;
+ }*/
+
+ /** Returns whether the sort should be reversed.
+ * @return True if natural order should be reversed.
+ */
+ bool getReverse() const { return reverse; }
+
+ SortComparatorSource* getFactory() const { return factory; }
+
+ TCHAR* toString() const;
+};
+
+
+
+/**
+ * Encapsulates sort criteria for returned hits.
+ *
+ * <p>The fields used to determine sort order must be carefully chosen.
+ * Documents must contain a single term in such a field,
+ * and the value of the term should indicate the document's relative position in
+ * a given sort order. The field must be indexed, but should not be tokenized,
+ * and does not need to be stored (unless you happen to want it back with the
+ * rest of your document data). In other words:
+ *
+ * <dl><dd><code>document.add (new Field ("byNumber", Integer.toString(x), false, true, false));</code>
+ * </dd></dl>
+ *
+ * <p><h3>Valid Types of Values</h3>
+ *
+ * <p>There are three possible kinds of term values which may be put into
+ * sorting fields: Integers, Floats, or Strings. Unless
+ * {@link SortField SortField} objects are specified, the type of value
+ * in the field is determined by parsing the first term in the field.
+ *
+ * <p>Integer term values should contain only digits and an optional
+ * preceeding negative sign. Values must be base 10 and in the range
+ * <code>Integer.MIN_VALUE</code> and <code>Integer.MAX_VALUE</code> inclusive.
+ * Documents which should appear first in the sort
+ * should have low value integers, later documents high values
+ * (i.e. the documents should be numbered <code>1..n</code> where
+ * <code>1</code> is the first and <code>n</code> the last).
+ *
+ * <p>Float term values should conform to values accepted by
+ * {@link Float Float.valueOf(String)} (except that <code>NaN</code>
+ * and <code>Infinity</code> are not supported).
+ * Documents which should appear first in the sort
+ * should have low values, later documents high values.
+ *
+ * <p>String term values can contain any valid String, but should
+ * not be tokenized. The values are sorted according to their
+ * {@link Comparable natural order}. Note that using this type
+ * of term value has higher memory requirements than the other
+ * two types.
+ *
+ * <p><h3>Object Reuse</h3>
+ *
+ * <p>One of these objects can be
+ * used multiple times and the sort order changed between usages.
+ *
+ * <p>This class is thread safe.
+ *
+ * <p><h3>Memory Usage</h3>
+ *
+ * <p>Sorting uses of caches of term values maintained by the
+ * internal HitQueue(s). The cache is static and contains an integer
+ * or float array of length <code>IndexReader.maxDoc()</code> for each field
+ * name for which a sort is performed. In other words, the size of the
+ * cache in bytes is:
+ *
+ * <p><code>4 * IndexReader.maxDoc() * (# of different fields actually used to sort)</code>
+ *
+ * <p>For String fields, the cache is larger: in addition to the
+ * above array, the value of every term in the field is kept in memory.
+ * If there are many unique terms in the field, this could
+ * be quite large.
+ *
+ * <p>Note that the size of the cache is not affected by how many
+ * fields are in the index and <i>might</i> be used to sort - only by
+ * the ones actually used to sort a result set.
+ *
+ * <p>The cache is cleared each time a new <code>IndexReader</code> is
+ * passed in, or if the value returned by <code>maxDoc()</code>
+ * changes for the current IndexReader. This class is not set up to
+ * be able to efficiently sort hits from more than one index
+ * simultaneously.
+ *
+ */
+class Sort:LUCENE_BASE {
+ // internal representation of the sort criteria
+ SortField** fields;
+ void clear();
+public:
+ ~Sort();
+
+ /** Represents sorting by computed relevance. Using this sort criteria
+ * returns the same results as calling {@link Searcher#search(Query) Searcher#search()}
+ * without a sort criteria, only with slightly more overhead. */
+ static Sort* RELEVANCE;
+
+ /** Represents sorting by index order. */
+ static Sort* INDEXORDER;
+
+ Sort();
+ Sort (const TCHAR* field, bool reverse=false);
+ Sort (const TCHAR** fields);
+ Sort (SortField* field);
+ Sort (SortField** fields);
+ void setSort (const TCHAR* field, bool reverse=false);
+ void setSort (const TCHAR** fieldnames);
+ void setSort (SortField* field);
+ void setSort (SortField** fields);
+
+ TCHAR* toString() const;
+
+ /**
+ * Representation of the sort criteria.
+ * @return a pointer to the of SortField array used in this sort criteria
+ */
+ SortField** getSort() const{ return fields; }
+};
+
+
+
+
+
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/search/TermQuery.cpp b/src/3rdparty/clucene/src/CLucene/search/TermQuery.cpp
new file mode 100644
index 0000000..a04c20f
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/TermQuery.cpp
@@ -0,0 +1,213 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "TermQuery.h"
+
+#include "SearchHeader.h"
+#include "Scorer.h"
+#include "CLucene/index/Term.h"
+#include "TermScorer.h"
+#include "CLucene/index/IndexReader.h"
+#include "CLucene/util/StringBuffer.h"
+#include "CLucene/index/Terms.h"
+
+CL_NS_USE(index)
+CL_NS_DEF(search)
+
+
+ /** Constructs a query for the term <code>t</code>. */
+ TermQuery::TermQuery(Term* t):
+ term( _CL_POINTER(t) )
+ {
+ }
+ TermQuery::TermQuery(const TermQuery& clone):
+ Query(clone){
+ this->term=_CL_POINTER(clone.term);
+ }
+ TermQuery::~TermQuery(){
+ _CLDECDELETE(term);
+ }
+
+ Query* TermQuery::clone() const{
+ return _CLNEW TermQuery(*this);
+ }
+
+ const TCHAR* TermQuery::getClassName(){
+ return _T("TermQuery");
+ }
+ const TCHAR* TermQuery::getQueryName() const{
+ return getClassName();
+ }
+ size_t TermQuery::hashCode() const {
+ return Similarity::floatToByte(getBoost()) ^ term->hashCode();
+ }
+
+
+ //added by search highlighter
+ Term* TermQuery::getTerm(bool pointer) const
+ {
+ if ( pointer )
+ return _CL_POINTER(term);
+ else
+ return term;
+ }
+
+
+ /** Prints a user-readable version of this query. */
+ TCHAR* TermQuery::toString(const TCHAR* field) const{
+ CL_NS(util)::StringBuffer buffer;
+ if ( field==NULL || _tcscmp(term->field(),field)!= 0 ) {
+ buffer.append(term->field());
+ buffer.append(_T(":"));
+ }
+ buffer.append(term->text());
+ if (getBoost() != 1.0f) {
+ buffer.append(_T("^"));
+ buffer.appendFloat( getBoost(),1 );
+ }
+ return buffer.toString();
+ }
+
+ /** Returns true iff <code>o</code> is equal to this. */
+ bool TermQuery::equals(Query* other) const {
+ if (!(other->instanceOf(TermQuery::getClassName())))
+ return false;
+
+ TermQuery* tq = (TermQuery*)other;
+ return (this->getBoost() == tq->getBoost())
+ && this->term->equals(tq->term);
+ }
+
+
+ TermQuery::TermWeight::TermWeight(Searcher* searcher, TermQuery* _this, Term* _term) {
+ this->_this = _this;
+ this->_term = _term;
+ this->searcher = searcher;
+ value=0;
+ idf=0;
+ queryNorm=0;
+ queryWeight=0;
+ }
+ TermQuery::TermWeight::~TermWeight(){
+ }
+
+ //return a *new* string describing this object
+ TCHAR* TermQuery::TermWeight::toString() {
+ int32_t size=_tcslen(_this->getQueryName()) + 10;
+ TCHAR* tmp = _CL_NEWARRAY(TCHAR, size);//_tcslen(weight())
+ _sntprintf(tmp,size,_T("weight(%s)"),_this->getQueryName());
+ return tmp;
+ }
+
+ qreal TermQuery::TermWeight::sumOfSquaredWeights() {
+ idf = _this->getSimilarity(searcher)->idf(_term, searcher); // compute idf
+ queryWeight = idf * _this->getBoost(); // compute query weight
+ return queryWeight * queryWeight; // square it
+ }
+
+ void TermQuery::TermWeight::normalize(qreal queryNorm) {
+ this->queryNorm = queryNorm;
+ queryWeight *= queryNorm; // normalize query weight
+ value = queryWeight * idf; // idf for document
+ }
+
+ Scorer* TermQuery::TermWeight::scorer(IndexReader* reader) {
+ TermDocs* termDocs = reader->termDocs(_term);
+
+ if (termDocs == NULL)
+ return NULL;
+
+ return _CLNEW TermScorer(this, termDocs, _this->getSimilarity(searcher),
+ reader->norms(_term->field()));
+ }
+
+ void TermQuery::TermWeight::explain(IndexReader* reader, int32_t doc, Explanation* result){
+ TCHAR buf[LUCENE_SEARCH_EXPLANATION_DESC_LEN];
+ TCHAR* tmp;
+
+ tmp = getQuery()->toString();
+ _sntprintf(buf,LUCENE_SEARCH_EXPLANATION_DESC_LEN,
+ _T("weight(%s in %d), product of:"),tmp,doc);
+ _CLDELETE_CARRAY(tmp);
+ result->setDescription(buf);
+
+ _sntprintf(buf,LUCENE_SEARCH_EXPLANATION_DESC_LEN,
+ _T("idf(docFreq=%d)"), searcher->docFreq(_term) );
+ Explanation* idfExpl = _CLNEW Explanation(idf, buf);
+
+ // explain query weight
+ Explanation* queryExpl = _CLNEW Explanation();
+ tmp = getQuery()->toString();
+ _sntprintf(buf,LUCENE_SEARCH_EXPLANATION_DESC_LEN,
+ _T("queryWeight(%s), product of:"), tmp);
+ _CLDELETE_CARRAY(tmp);
+ queryExpl->setDescription(buf);
+
+ Explanation* boostExpl = _CLNEW Explanation(_this->getBoost(), _T("boost"));
+ if (_this->getBoost() != 1.0f)
+ queryExpl->addDetail(boostExpl);
+ else
+ _CLDELETE(boostExpl);
+
+ queryExpl->addDetail(idfExpl->clone());
+
+ Explanation* queryNormExpl = _CLNEW Explanation(queryNorm,_T("queryNorm"));
+ queryExpl->addDetail(queryNormExpl);
+
+ queryExpl->setValue(_this->getBoost()* // always 1.0
+ idfExpl->getValue() *
+ queryNormExpl->getValue());
+
+ // explain field weight
+ const TCHAR* field = _term->field();
+ Explanation* fieldExpl = _CLNEW Explanation();
+
+ tmp = _term->toString();
+ _sntprintf(buf,LUCENE_SEARCH_EXPLANATION_DESC_LEN,
+ _T("fieldWeight(%s in %d), product of:"),tmp,doc);
+ _CLDELETE_CARRAY(tmp);
+ fieldExpl->setDescription(buf);
+
+ Scorer* sc = scorer(reader);
+ Explanation* tfExpl = _CLNEW Explanation;
+ sc->explain(doc, tfExpl);
+ _CLDELETE(sc);
+ fieldExpl->addDetail(tfExpl);
+ fieldExpl->addDetail(idfExpl);
+
+ Explanation* fieldNormExpl = _CLNEW Explanation();
+ uint8_t* fieldNorms = reader->norms(field);
+ qreal fieldNorm =
+ fieldNorms!=NULL ? Similarity::decodeNorm(fieldNorms[doc]) : 0.0f;
+ fieldNormExpl->setValue(fieldNorm);
+
+ _sntprintf(buf,LUCENE_SEARCH_EXPLANATION_DESC_LEN,
+ _T("fieldNorm(field=%s, doc=%d)"),field,doc);
+ fieldNormExpl->setDescription(buf);
+ fieldExpl->addDetail(fieldNormExpl);
+
+ fieldExpl->setValue(tfExpl->getValue() *
+ idfExpl->getValue() *
+ fieldNormExpl->getValue());
+
+ /*if (queryExpl->getValue() == 1.0f){
+ _CLDELETE(result);
+ return fieldExpl;
+ }else{*/
+ result->addDetail(queryExpl);
+ result->addDetail(fieldExpl);
+
+ // combine them
+ result->setValue(queryExpl->getValue() * fieldExpl->getValue());
+ //}
+ }
+
+ Weight* TermQuery::_createWeight(Searcher* searcher) {
+ return _CLNEW TermWeight(searcher,this,term);
+ }
+CL_NS_END
+
diff --git a/src/3rdparty/clucene/src/CLucene/search/TermQuery.h b/src/3rdparty/clucene/src/CLucene/search/TermQuery.h
new file mode 100644
index 0000000..a7dd803
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/TermQuery.h
@@ -0,0 +1,81 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_search_TermQuery_
+#define _lucene_search_TermQuery_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "SearchHeader.h"
+#include "Scorer.h"
+#include "CLucene/index/Term.h"
+#include "TermScorer.h"
+#include "CLucene/index/IndexReader.h"
+#include "CLucene/util/StringBuffer.h"
+#include "CLucene/index/Terms.h"
+
+CL_NS_DEF(search)
+
+
+ /** A Query that matches documents containing a term.
+ This may be combined with other terms with a {@link BooleanQuery}.
+ */
+ class TermQuery: public Query {
+ private:
+ CL_NS(index)::Term* term;
+
+
+ class TermWeight: public Weight {
+ private:
+ Searcher* searcher;
+ qreal value;
+ qreal idf;
+ qreal queryNorm;
+ qreal queryWeight;
+ TermQuery* _this;
+ CL_NS(index)::Term* _term;
+
+ public:
+ TermWeight(Searcher* searcher, TermQuery* _this, CL_NS(index)::Term* _term);
+ ~TermWeight();
+ TCHAR* toString();
+ Query* getQuery() { return (Query*)_this; }
+ qreal getValue() { return value; }
+
+ qreal sumOfSquaredWeights();
+ void normalize(qreal queryNorm);
+ Scorer* scorer(CL_NS(index)::IndexReader* reader);
+ void explain(CL_NS(index)::IndexReader* reader, int32_t doc, Explanation* ret);
+ };
+
+ protected:
+ Weight* _createWeight(Searcher* searcher);
+ TermQuery(const TermQuery& clone);
+ public:
+ // Constructs a query for the term <code>t</code>.
+ TermQuery(CL_NS(index)::Term* t);
+ ~TermQuery();
+
+ static const TCHAR* getClassName();
+ const TCHAR* getQueryName() const;
+
+ //added by search highlighter
+ CL_NS(index)::Term* getTerm(bool pointer=true) const;
+
+ // Prints a user-readable version of this query.
+ TCHAR* toString(const TCHAR* field) const;
+
+ bool equals(Query* other) const;
+ Query* clone() const;
+
+ /** Returns a hash code value for this object.*/
+ size_t hashCode() const;
+ };
+CL_NS_END
+#endif
+
diff --git a/src/3rdparty/clucene/src/CLucene/search/TermScorer.cpp b/src/3rdparty/clucene/src/CLucene/search/TermScorer.cpp
new file mode 100644
index 0000000..ddd7f74
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/TermScorer.cpp
@@ -0,0 +1,120 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "TermScorer.h"
+
+#include "CLucene/index/Terms.h"
+#include "TermQuery.h"
+
+CL_NS_USE(index)
+CL_NS_DEF(search)
+
+ //TermScorer takes TermDocs and delets it when TermScorer is cleaned up
+ TermScorer::TermScorer(Weight* w, CL_NS(index)::TermDocs* td,
+ Similarity* similarity,uint8_t* _norms):
+ Scorer(similarity),
+ termDocs(td),
+ norms(_norms),
+ weight(w),
+ weightValue(w->getValue()),
+ _doc(0),
+ pointer(0),
+ pointerMax(0)
+ {
+ memset(docs,0,32*sizeof(int32_t));
+ memset(freqs,0,32*sizeof(int32_t));
+
+ for (int32_t i = 0; i < LUCENE_SCORE_CACHE_SIZE; i++)
+ scoreCache[i] = getSimilarity()->tf(i) * weightValue;
+ }
+
+ TermScorer::~TermScorer(){
+ _CLDELETE(termDocs);
+ }
+ bool TermScorer::next(){
+ pointer++;
+ if (pointer >= pointerMax) {
+ pointerMax = termDocs->read(docs, freqs, 32); // refill buffer
+ if (pointerMax != 0) {
+ pointer = 0;
+ } else {
+ termDocs->close(); // close stream
+ _doc = LUCENE_INT32_MAX_SHOULDBE; // set to sentinel value
+ return false;
+ }
+ }
+ _doc = docs[pointer];
+ return true;
+ }
+
+ bool TermScorer::skipTo(int32_t target) {
+ // first scan in cache
+ for (pointer++; pointer < pointerMax; pointer++) {
+ if (docs[pointer] >= target) {
+ _doc = docs[pointer];
+ return true;
+ }
+ }
+
+ // not found in cache, seek underlying stream
+ bool result = termDocs->skipTo(target);
+ if (result) {
+ pointerMax = 1;
+ pointer = 0;
+ docs[pointer] = _doc = termDocs->doc();
+ freqs[pointer] = termDocs->freq();
+ } else {
+ _doc = LUCENE_INT32_MAX_SHOULDBE;
+ }
+ return result;
+ }
+
+ void TermScorer::explain(int32_t doc, Explanation* tfExplanation) {
+ TermQuery* query = (TermQuery*)weight->getQuery();
+ int32_t tf = 0;
+ while (pointer < pointerMax) {
+ if (docs[pointer] == doc)
+ tf = freqs[pointer];
+ pointer++;
+ }
+ if (tf == 0) {
+ while (termDocs->next()) {
+ if (termDocs->doc() == doc) {
+ tf = termDocs->freq();
+ }
+ }
+ }
+ termDocs->close();
+ tfExplanation->setValue(getSimilarity()->tf(tf));
+
+ TCHAR buf[LUCENE_SEARCH_EXPLANATION_DESC_LEN+1];
+ TCHAR* termToString = query->getTerm(false)->toString();
+ _sntprintf(buf,LUCENE_SEARCH_EXPLANATION_DESC_LEN,_T("tf(termFreq(%s)=%d)"), termToString, tf);
+ _CLDELETE_CARRAY(termToString);
+ tfExplanation->setDescription(buf);
+ }
+
+ TCHAR* TermScorer::toString() {
+ TCHAR* wb = weight->toString();
+ int32_t rl = _tcslen(wb) + 9; //9=_tcslen("scorer(" ")") + 1
+ TCHAR* ret = _CL_NEWARRAY(TCHAR,rl);
+ _sntprintf(ret,rl,_T("scorer(%s)"), wb);
+ _CLDELETE_ARRAY(wb);
+ return ret;
+ }
+
+ qreal TermScorer::score(){
+ int32_t f = freqs[pointer];
+ qreal raw = // compute tf(f)*weight
+ f < LUCENE_SCORE_CACHE_SIZE // check cache
+ ? scoreCache[f] // cache hit
+ : getSimilarity()->tf(f) * weightValue; // cache miss
+
+ return raw * Similarity::decodeNorm(norms[_doc]); // normalize for field
+ }
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/search/TermScorer.h b/src/3rdparty/clucene/src/CLucene/search/TermScorer.h
new file mode 100644
index 0000000..ccbf5f7
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/TermScorer.h
@@ -0,0 +1,53 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_search_TermScorer_
+#define _lucene_search_TermScorer_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "Scorer.h"
+#include "CLucene/index/Terms.h"
+#include "CLucene/search/Similarity.h"
+#include "SearchHeader.h"
+
+CL_NS_DEF(search)
+
+ class TermScorer: public Scorer {
+ private:
+ CL_NS(index)::TermDocs* termDocs;
+ uint8_t* norms;
+ Weight* weight;
+ const qreal weightValue;
+ int32_t _doc;
+
+ int32_t docs[32]; // buffered doc numbers
+ int32_t freqs[32]; // buffered term freqs
+ int32_t pointer;
+ int32_t pointerMax;
+
+ qreal scoreCache[LUCENE_SCORE_CACHE_SIZE];
+ public:
+
+ //TermScorer takes TermDocs and delets it when TermScorer is cleaned up
+ TermScorer(Weight* weight, CL_NS(index)::TermDocs* td,
+ Similarity* similarity, uint8_t* _norms);
+
+ ~TermScorer();
+
+ int32_t doc() const { return _doc; }
+
+ bool next();
+ bool skipTo(int32_t target);
+ void explain(int32_t doc, Explanation* ret);
+ TCHAR* toString();
+
+ qreal score();
+ };
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/search/WildcardQuery.cpp b/src/3rdparty/clucene/src/CLucene/search/WildcardQuery.cpp
new file mode 100644
index 0000000..9373cef
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/WildcardQuery.cpp
@@ -0,0 +1,147 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "WildcardQuery.h"
+#include "CLucene/util/BitSet.h"
+
+CL_NS_USE(index)
+CL_NS_USE(util)
+CL_NS_DEF(search)
+
+
+ WildcardQuery::WildcardQuery(Term* term):
+ MultiTermQuery( term ){
+ //Func - Constructor
+ //Pre - term != NULL
+ //Post - Instance has been created
+
+ }
+
+ WildcardQuery::~WildcardQuery(){
+ //Func - Destructor
+ //Pre - true
+ //Post - true
+
+ }
+
+ const TCHAR* WildcardQuery::getQueryName() const{
+ //Func - Returns the string "WildcardQuery"
+ //Pre - true
+ //Post - The string "WildcardQuery" has been returned
+ return getClassName();
+ }
+
+ const TCHAR* WildcardQuery::getClassName(){
+ return _T("WildcardQuery");
+ }
+
+
+ FilteredTermEnum* WildcardQuery::getEnum(IndexReader* reader) {
+ return _CLNEW WildcardTermEnum(reader, getTerm(false));
+ }
+
+ WildcardQuery::WildcardQuery(const WildcardQuery& clone):
+ MultiTermQuery(clone)
+ {
+ }
+
+ Query* WildcardQuery::clone() const{
+ return _CLNEW WildcardQuery(*this);
+ }
+ size_t WildcardQuery::hashCode() const{
+ //todo: we should give the query a seeding value... but
+ //need to do it for all hascode functions
+ return Similarity::floatToByte(getBoost()) ^ getTerm()->hashCode();
+ }
+ bool WildcardQuery::equals(Query* other) const{
+ if (!(other->instanceOf(WildcardQuery::getClassName())))
+ return false;
+
+ WildcardQuery* tq = (WildcardQuery*)other;
+ return (this->getBoost() == tq->getBoost())
+ && getTerm()->equals(tq->getTerm());
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+WildcardFilter::WildcardFilter( Term* term )
+{
+ this->term = _CL_POINTER(term);
+}
+
+WildcardFilter::~WildcardFilter()
+{
+ _CLDECDELETE(term);
+}
+
+WildcardFilter::WildcardFilter( const WildcardFilter& copy ) :
+ term( _CL_POINTER(copy.term) )
+{
+}
+
+Filter* WildcardFilter::clone() const {
+ return _CLNEW WildcardFilter(*this );
+}
+
+
+TCHAR* WildcardFilter::toString()
+{
+ //Instantiate a stringbuffer buffer to store the readable version temporarily
+ CL_NS(util)::StringBuffer buffer;
+ //check if field equal to the field of prefix
+ if( term->field() != NULL ) {
+ //Append the field of prefix to the buffer
+ buffer.append(term->field());
+ //Append a colon
+ buffer.append(_T(":") );
+ }
+ //Append the text of the prefix
+ buffer.append(term->text());
+
+ //Convert StringBuffer buffer to TCHAR block and return it
+ return buffer.toString();
+}
+
+
+/** Returns a BitSet with true for documents which should be permitted in
+search results, and false for those that should not. */
+BitSet* WildcardFilter::bits( IndexReader* reader )
+{
+ BitSet* bts = _CLNEW BitSet( reader->maxDoc() );
+
+ WildcardTermEnum termEnum (reader, term);
+ if (termEnum.term(false) == NULL)
+ return bts;
+
+ TermDocs* termDocs = reader->termDocs();
+ try{
+ do{
+ termDocs->seek(&termEnum);
+
+ while (termDocs->next()) {
+ bts->set(termDocs->doc());
+ }
+ }while(termEnum.next());
+ } _CLFINALLY(
+ termDocs->close();
+ _CLDELETE(termDocs);
+ termEnum.close();
+ )
+
+ return bts;
+}
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/search/WildcardQuery.h b/src/3rdparty/clucene/src/CLucene/search/WildcardQuery.h
new file mode 100644
index 0000000..cfc38f6
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/WildcardQuery.h
@@ -0,0 +1,69 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_search_WildcardQuery_
+#define _lucene_search_WildcardQuery_
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "CLucene/index/IndexReader.h"
+#include "CLucene/index/Term.h"
+#include "MultiTermQuery.h"
+#include "WildcardTermEnum.h"
+
+CL_NS_DEF(search)
+
+ /** Implements the wildcard search query. Supported wildcards are <code>*</code>, which
+ * matches any character sequence (including the empty one), and <code>?</code>,
+ * which matches any single character. Note this query can be slow, as it
+ * needs to iterate over all terms. In order to prevent extremely slow WildcardQueries,
+ * a Wildcard term must not start with one of the wildcards <code>*</code> or
+ * <code>?</code>.
+ *
+ * @see WildcardTermEnum
+ */
+ class WildcardQuery: public MultiTermQuery {
+ protected:
+ FilteredTermEnum* getEnum(CL_NS(index)::IndexReader* reader);
+ WildcardQuery(const WildcardQuery& clone);
+ public:
+ WildcardQuery(CL_NS(index)::Term* term);
+ ~WildcardQuery();
+
+ //Returns the string "WildcardQuery"
+ const TCHAR* getQueryName() const;
+ static const TCHAR* getClassName();
+
+ size_t hashCode() const;
+ bool equals(Query* other) const;
+ Query* clone() const;
+ };
+
+
+
+class WildcardFilter: public Filter
+{
+private:
+ CL_NS(index)::Term* term;
+protected:
+ WildcardFilter( const WildcardFilter& copy );
+
+public:
+ WildcardFilter(CL_NS(index)::Term* term);
+ ~WildcardFilter();
+
+ /** Returns a BitSet with true for documents which should be permitted in
+ search results, and false for those that should not. */
+ CL_NS(util)::BitSet* bits( CL_NS(index)::IndexReader* reader );
+
+ Filter* clone() const;
+ TCHAR* toString();
+};
+
+
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/search/WildcardTermEnum.cpp b/src/3rdparty/clucene/src/CLucene/search/WildcardTermEnum.cpp
new file mode 100644
index 0000000..bed9e6e
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/WildcardTermEnum.cpp
@@ -0,0 +1,150 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "WildcardTermEnum.h"
+
+CL_NS_USE(index)
+CL_NS_DEF(search)
+
+ bool WildcardTermEnum::termCompare(Term* term) {
+ if ( term!=NULL && __term->field() == term->field() ) {
+ const TCHAR* searchText = term->text();
+ const TCHAR* patternText = __term->text();
+ if ( _tcsncmp( searchText, pre, preLen ) == 0 ){
+ return wildcardEquals(patternText+preLen, __term->textLength()-preLen, 0, searchText, term->textLength(), preLen);
+ }
+ }
+ _endEnum = true;
+ return false;
+ }
+
+ /** Creates new WildcardTermEnum */
+ WildcardTermEnum::WildcardTermEnum(IndexReader* reader, Term* term):
+ FilteredTermEnum(),
+ __term(_CL_POINTER(term)),
+ fieldMatch(false),
+ _endEnum(false)
+ {
+
+ pre = stringDuplicate(term->text());
+
+ const TCHAR* sidx = _tcschr( pre, LUCENE_WILDCARDTERMENUM_WILDCARD_STRING );
+ const TCHAR* cidx = _tcschr( pre, LUCENE_WILDCARDTERMENUM_WILDCARD_CHAR );
+ const TCHAR* tidx = sidx;
+ if (tidx == NULL)
+ tidx = cidx;
+ else if ( cidx && cidx > pre)
+ tidx = min(sidx, cidx);
+ CND_PRECONDITION(tidx != NULL, "tidx==NULL");
+ int32_t idx = (int32_t)(tidx - pre);
+ preLen = idx;
+ CND_PRECONDITION(preLen<term->textLength(), "preLen >= term->textLength()");
+ pre[preLen]=0; //trim end
+
+ Term* t = _CLNEW Term(__term, pre);
+ setEnum( reader->terms(t) );
+ _CLDECDELETE(t);
+ }
+
+ void WildcardTermEnum::close()
+ {
+ if ( __term != NULL ){
+ FilteredTermEnum::close();
+
+ _CLDECDELETE(__term);
+ __term = NULL;
+
+ _CLDELETE_CARRAY( pre );
+ }
+ }
+ WildcardTermEnum::~WildcardTermEnum() {
+ close();
+ }
+
+ qreal WildcardTermEnum::difference() {
+ return 1.0f;
+ }
+
+ bool WildcardTermEnum::endEnum() {
+ return _endEnum;
+ }
+
+ bool WildcardTermEnum::wildcardEquals(const TCHAR* pattern, int32_t patternLen, int32_t patternIdx, const TCHAR* str, int32_t strLen, int32_t stringIdx)
+ {
+ for (int32_t p = patternIdx; ; ++p)
+ {
+ for (int32_t s = stringIdx; ; ++p, ++s)
+ {
+ // End of str yet?
+ bool sEnd = (s >= strLen);
+ // End of pattern yet?
+ bool pEnd = (p >= patternLen);
+
+ // If we're looking at the end of the str...
+ if (sEnd)
+ {
+ // Assume the only thing left on the pattern is/are wildcards
+ bool justWildcardsLeft = true;
+
+ // Current wildcard position
+ int32_t wildcardSearchPos = p;
+ // While we haven't found the end of the pattern,
+ // and haven't encountered any non-wildcard characters
+ while (wildcardSearchPos < patternLen && justWildcardsLeft)
+ {
+ // Check the character at the current position
+ TCHAR wildchar = pattern[wildcardSearchPos];
+ // If it's not a wildcard character, then there is more
+ // pattern information after this/these wildcards.
+
+ if (wildchar != LUCENE_WILDCARDTERMENUM_WILDCARD_CHAR &&
+ wildchar != LUCENE_WILDCARDTERMENUM_WILDCARD_STRING){
+ justWildcardsLeft = false;
+ }else{
+ // to prevent "cat" matches "ca??"
+ if (wildchar == LUCENE_WILDCARDTERMENUM_WILDCARD_CHAR)
+ return false;
+
+ wildcardSearchPos++; // Look at the next character
+ }
+ }
+
+ // This was a prefix wildcard search, and we've matched, so
+ // return true.
+ if (justWildcardsLeft)
+ return true;
+ }
+
+ // If we've gone past the end of the str, or the pattern,
+ // return false.
+ if (sEnd || pEnd)
+ break;
+
+ // Match a single character, so continue.
+ if (pattern[p] == LUCENE_WILDCARDTERMENUM_WILDCARD_CHAR)
+ continue;
+
+ if (pattern[p] == LUCENE_WILDCARDTERMENUM_WILDCARD_STRING)
+ {
+ // Look at the character beyond the '*'.
+ ++p;
+ // Examine the str, starting at the last character.
+ for (int32_t i = strLen; i >= s; --i)
+ {
+ if (wildcardEquals(pattern, patternLen, p, str, strLen, i))
+ return true;
+ }
+ break;
+ }
+ if (pattern[p] != str[s])
+ break;
+ }
+ return false;
+ }
+ }
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/search/WildcardTermEnum.h b/src/3rdparty/clucene/src/CLucene/search/WildcardTermEnum.h
new file mode 100644
index 0000000..2a03735
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/search/WildcardTermEnum.h
@@ -0,0 +1,67 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_search_WildcardTermEnum_
+#define _lucene_search_WildcardTermEnum_
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "CLucene/index/IndexReader.h"
+#include "CLucene/index/Term.h"
+#include "CLucene/index/Terms.h"
+#include "FilteredTermEnum.h"
+
+CL_NS_DEF(search)
+ /**
+ * Subclass of FilteredTermEnum for enumerating all terms that match the
+ * specified wildcard filter term->
+ * <p>
+ * Term enumerations are always ordered by term->compareTo(). Each term in
+ * the enumeration is greater than all that precede it.
+ */
+ class WildcardTermEnum: public FilteredTermEnum {
+ private:
+ CL_NS(index)::Term* __term;
+ TCHAR* pre;
+ int32_t preLen;
+ bool fieldMatch;
+ bool _endEnum;
+
+ /********************************************
+ * const TCHAR* equality with support for wildcards
+ ********************************************/
+
+ protected:
+ bool termCompare(CL_NS(index)::Term* term) ;
+
+ public:
+
+ /**
+ * Creates a new <code>WildcardTermEnum</code>. Passing in a
+ * {@link Term Term} that does not contain a
+ * <code>LUCENE_WILDCARDTERMENUM_WILDCARD_STRING</code> or
+ * <code>LUCENE_WILDCARDTERMENUM_WILDCARD_CHAR</code> will cause an exception to be thrown.
+ */
+ WildcardTermEnum(CL_NS(index)::IndexReader* reader, CL_NS(index)::Term* term);
+ ~WildcardTermEnum();
+
+ qreal difference() ;
+
+ bool endEnum() ;
+
+ /**
+ * Determines if a word matches a wildcard pattern.
+ */
+ static bool wildcardEquals(const TCHAR* pattern, int32_t patternLen, int32_t patternIdx, const TCHAR* str, int32_t strLen, int32_t stringIdx);
+
+ void close();
+
+ const char* getObjectName(){ return WildcardTermEnum::getClassName(); }
+ static const char* getClassName(){ return "WildcardTermEnum"; }
+ };
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/store/Directory.h b/src/3rdparty/clucene/src/CLucene/store/Directory.h
new file mode 100644
index 0000000..818bc7a
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/store/Directory.h
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+*/
+#ifndef _lucene_store_Directory
+#define _lucene_store_Directory
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include <QtCore/QStringList>
+
+#include "CLucene/store/Lock.h"
+#include "CLucene/util/VoidList.h"
+#include "CLucene/util/Misc.h"
+
+#include "IndexInput.h"
+#include "IndexOutput.h"
+
+CL_NS_DEF(store)
+
+/** A Directory is a flat list of files. Files may be written once, when they
+* are created. Once a file is created it may only be opened for read, or
+* deleted. Random access is permitted both when reading and writing.
+*
+* <p> Direct i/o is not used directly, but rather all i/o is
+* through this API. This permits things such as: <ul>
+* <li> implementation of RAM-based indices;
+* <li> implementation indices stored in a database, via a database;
+* <li> implementation of an index as a single file;
+* </ul>
+*
+*/
+class Directory : LUCENE_REFBASE
+{
+protected:
+ Directory() {}
+ // Removes an existing file in the directory.
+ virtual bool doDeleteFile(const QString& name) = 0;
+
+public:
+ DEFINE_MUTEX(THIS_LOCK)
+
+ virtual ~Directory() {};
+
+ // Returns an array of strings, one for each file in the directory.
+ virtual QStringList list() const = 0;
+
+ // Returns true iff a file with the given name exists.
+ virtual bool fileExists(const QString& name) const = 0;
+
+ // Returns the time the named file was last modified.
+ virtual int64_t fileModified(const QString& name) const = 0;
+
+ // Returns the length of a file in the directory.
+ virtual int64_t fileLength(const QString& name) const = 0;
+
+ // Returns a stream reading an existing file.
+ virtual IndexInput* openInput(const QString& name) = 0;
+ virtual IndexInput* openInput(const QString& name, int32_t bufferSize)
+ {
+ // didnt overload bufferSize
+ return openInput(name);
+ }
+
+ // Set the modified time of an existing file to now.
+ virtual void touchFile(const QString& name) = 0;
+
+ // Removes an existing file in the directory.
+ virtual bool deleteFile(const QString& name, const bool throwError = true) {
+ bool ret = doDeleteFile(name);
+ if (!ret && throwError) {
+ char buffer[200];
+ _snprintf(buffer, 200, "couldn't delete file %s",
+ name.toLocal8Bit().constData());
+ _CLTHROWA(CL_ERR_IO, buffer);
+ }
+ return ret;
+ }
+
+ // Renames an existing file in the directory.
+ // If a file already exists with the new name, then it is replaced.
+ virtual void renameFile(const QString& from, const QString& to) = 0;
+
+ // Creates a new, empty file in the directory with the given name.
+ // Returns a stream writing this file.
+ virtual IndexOutput* createOutput(const QString& name) = 0;
+
+ // Construct a {@link Lock}.
+ // @param name the name of the lock file
+ virtual LuceneLock* makeLock(const QString& name) = 0;
+
+ // Closes the store.
+ virtual void close() = 0;
+
+ virtual QString toString() const = 0;
+
+ virtual QString getDirectoryType() const = 0;
+};
+
+CL_NS_END
+
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/store/FSDirectory.cpp b/src/3rdparty/clucene/src/CLucene/store/FSDirectory.cpp
new file mode 100644
index 0000000..36c170a
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/store/FSDirectory.cpp
@@ -0,0 +1,637 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+*/
+#include <QtCore/QDir>
+#include <QtCore/QDateTime>
+#include <QtCore/QFileInfo>
+#include <QtCore/QByteArray>
+#include <QtCore/QCryptographicHash>
+
+#include "CLucene/StdHeader.h"
+#include "FSDirectory.h"
+#include "CLucene/index/IndexReader.h"
+#include "CLucene/util/Misc.h"
+#include "CLucene/debug/condition.h"
+
+CL_NS_DEF(store)
+CL_NS_USE(util)
+
+bool FSDirectory::disableLocks = false;
+
+// This cache of directories ensures that there is a unique Directory instance
+// per path, so that synchronization on the Directory can be used to synchronize
+// access between readers and writers.
+static CL_NS(util)::CLHashMap<QString, FSDirectory*,
+ CL_NS(util)::Compare::Qstring, CL_NS(util)::Equals::Qstring,
+ CL_NS(util)::Deletor::DummyQString> DIRECTORIES(false, false);
+
+// # pragma mark -- FSDirectory::FSLock
+
+FSDirectory::FSLock::FSLock(const QString& _lockDir, const QString& name)
+ : lockDir(_lockDir)
+ , lockFile(_lockDir + QDir::separator() + name)
+{
+}
+
+FSDirectory::FSLock::~FSLock()
+{
+}
+
+bool FSDirectory::FSLock::obtain()
+{
+ if (disableLocks)
+ return true;
+
+ if (QFile::exists(lockFile))
+ return false;
+
+ QDir dir(lockDir);
+ if (!dir.exists()) {
+ if (!dir.mkpath(lockDir)) {
+ // 34: len of "Couldn't create lock directory: "
+ char* err = _CL_NEWARRAY(
+ char, 34 + strlen(lockDir.toLocal8Bit().constData()) + 1);
+ strcpy(err, "Couldn't create lock directory: ");
+ strcat(err, lockDir.toLocal8Bit().constData());
+ _CLTHROWA_DEL(CL_ERR_IO, err);
+ }
+ }
+
+ QFile file(lockFile);
+ return file.open(QIODevice::ReadWrite);
+}
+
+void FSDirectory::FSLock::release()
+{
+ if (disableLocks)
+ return;
+
+ QFile file(lockFile);
+ file.remove();
+}
+
+bool FSDirectory::FSLock::isLocked()
+{
+ if (disableLocks)
+ return false;
+ return QFile::exists(lockFile);
+}
+
+QString FSDirectory::FSLock::toString() const
+{
+ QString ret(QLatin1String("Lock@"));
+ return ret.append(lockFile);
+}
+
+// # pragma mark -- FSDirectory::FSIndexInput
+
+FSDirectory::FSIndexInput::FSIndexInput(const QString& path, int32_t bufferSize)
+ : BufferedIndexInput(bufferSize)
+{
+ CND_PRECONDITION(!path.isEmpty(), "path is NULL");
+
+ handle = _CLNEW SharedHandle();
+ handle->fhandle.setFileName(path);
+ handle->fhandle.open(QIODevice::ReadOnly);
+
+ if (handle->fhandle.error() != QFile::NoError) {
+ switch(handle->fhandle.error()) {
+ case 1:
+ _CLTHROWA(CL_ERR_IO, "An error occurred when reading from the file");
+ break;
+ case 2:
+ _CLTHROWA(CL_ERR_IO, "An error occurred when writing to the file.");
+ break;
+ case 5:
+ _CLTHROWA(CL_ERR_IO, "The file could not be opened.");
+ break;
+ case 6:
+ _CLTHROWA(CL_ERR_IO, "The operation was aborted.");
+ break;
+ case 7:
+ _CLTHROWA(CL_ERR_IO, "A timeout occurred.");
+ break;
+ case 8:
+ _CLTHROWA(CL_ERR_IO, "An unspecified error occurred.");
+ break;
+ case 9:
+ _CLTHROWA(CL_ERR_IO, "The file could not be removed.");
+ break;
+ case 10:
+ _CLTHROWA(CL_ERR_IO, "The file could not be renamed.");
+ break;
+ case 11:
+ _CLTHROWA(CL_ERR_IO, "The position in the file could not be changed.");
+ break;
+ case 12:
+ _CLTHROWA(CL_ERR_IO, "The file could not be resized.e");
+ break;
+ case 13:
+ _CLTHROWA(CL_ERR_IO, "The file could not be accessed.");
+ break;
+ case 14:
+ _CLTHROWA(CL_ERR_IO, "The file could not be copied.");
+ break;
+ case 4:
+ default:
+ _CLTHROWA(CL_ERR_IO, "A fatal error occurred.");
+ }
+ }
+
+ //Store the file length
+ handle->_length = handle->fhandle.size();
+ handle->_fpos = 0;
+ this->_pos = 0;
+}
+
+FSDirectory::FSIndexInput::FSIndexInput(const FSIndexInput& other)
+ : BufferedIndexInput(other)
+{
+ if (other.handle == NULL)
+ _CLTHROWA(CL_ERR_NullPointer, "other handle is null");
+
+ SCOPED_LOCK_MUTEX(other.handle->THIS_LOCK)
+
+ _pos = other.handle->_fpos;
+ handle = _CL_POINTER(other.handle);
+}
+
+FSDirectory::FSIndexInput::~FSIndexInput()
+{
+ FSIndexInput::close();
+}
+
+void FSDirectory::FSIndexInput::close()
+{
+ BufferedIndexInput::close();
+ _CLDECDELETE(handle);
+}
+
+IndexInput* FSDirectory::FSIndexInput::clone() const
+{
+ return _CLNEW FSDirectory::FSIndexInput(*this);
+}
+
+void FSDirectory::FSIndexInput::seekInternal(const int64_t position)
+{
+ CND_PRECONDITION(position >= 0 && position < handle->_length,
+ "Seeking out of range")
+ _pos = position;
+}
+
+void FSDirectory::FSIndexInput::readInternal(uint8_t* b, const int32_t len)
+{
+ SCOPED_LOCK_MUTEX(handle->THIS_LOCK)
+
+ CND_PRECONDITION(handle != NULL, "shared file handle has closed");
+ CND_PRECONDITION(handle->fhandle.isOpen(), "file is not open");
+
+ if (handle->_fpos != _pos) {
+ handle->fhandle.seek(_pos);
+ if (handle->fhandle.pos() != _pos)
+ _CLTHROWA( CL_ERR_IO, "File IO Seek error");
+ handle->_fpos = _pos;
+ }
+
+ bufferLength = (int32_t)handle->fhandle.read((char*)b, len);
+ if (bufferLength == 0)
+ _CLTHROWA(CL_ERR_IO, "read past EOF");
+
+ if (bufferLength == -1)
+ _CLTHROWA(CL_ERR_IO, "read error");
+
+ _pos += bufferLength;
+ handle->_fpos =_pos;
+}
+
+// # pragma mark -- FSDirectory::FSIndexInput::SharedHandle
+
+FSDirectory::FSIndexInput::SharedHandle::SharedHandle()
+ : _fpos(0)
+ , _length(0)
+
+{
+}
+
+FSDirectory::FSIndexInput::SharedHandle::~SharedHandle()
+{
+ if (fhandle.isOpen())
+ fhandle.close();
+}
+
+// # pragma mark -- FSDirectory::FSIndexOutput
+
+FSDirectory::FSIndexOutput::FSIndexOutput(const QString& path)
+{
+ //O_BINARY - Opens file in binary (untranslated) mode
+ //O_CREAT - Creates and opens new file for writing. Has no effect if file specified by filename exists
+ //O_RANDOM - Specifies that caching is optimized for, but not restricted to, random access from disk.
+ //O_WRONLY - Opens file for writing only;
+ fhandle.setFileName(path);
+ fhandle.open(QIODevice::ReadWrite | QIODevice::Truncate);
+
+ if (fhandle.error() != QFile::NoError) {
+ switch(fhandle.error()) {
+ case 1:
+ _CLTHROWA(CL_ERR_IO, "An error occurred when reading from the file");
+ break;
+ case 2:
+ _CLTHROWA(CL_ERR_IO, "An error occurred when writing to the file.");
+ break;
+ case 5:
+ _CLTHROWA(CL_ERR_IO, "The file could not be opened.");
+ break;
+ case 6:
+ _CLTHROWA(CL_ERR_IO, "The operation was aborted.");
+ break;
+ case 7:
+ _CLTHROWA(CL_ERR_IO, "A timeout occurred.");
+ break;
+ case 8:
+ _CLTHROWA(CL_ERR_IO, "An unspecified error occurred.");
+ break;
+ case 9:
+ _CLTHROWA(CL_ERR_IO, "The file could not be removed.");
+ break;
+ case 10:
+ _CLTHROWA(CL_ERR_IO, "The file could not be renamed.");
+ break;
+ case 11:
+ _CLTHROWA(CL_ERR_IO, "The position in the file could not be changed.");
+ break;
+ case 12:
+ _CLTHROWA(CL_ERR_IO, "The file could not be resized.e");
+ break;
+ case 13:
+ _CLTHROWA(CL_ERR_IO, "The file could not be accessed.");
+ break;
+ case 14:
+ _CLTHROWA(CL_ERR_IO, "The file could not be copied.");
+ break;
+ case 4:
+ default:
+ _CLTHROWA(CL_ERR_IO, "A fatal error occurred.");
+ }
+ }
+}
+
+FSDirectory::FSIndexOutput::~FSIndexOutput()
+{
+ if (fhandle.isOpen()) {
+ try {
+ FSIndexOutput::close();
+ } catch (CLuceneError& err) {
+ //ignore IO errors...
+ if (err.number() != CL_ERR_IO)
+ throw;
+ }
+ }
+}
+
+void FSDirectory::FSIndexOutput::close()
+{
+ try {
+ BufferedIndexOutput::close();
+ } catch (CLuceneError& err) {
+ //ignore IO errors...
+ if (err.number() != CL_ERR_IO)
+ throw;
+ }
+ fhandle.close();
+}
+
+int64_t FSDirectory::FSIndexOutput::length()
+{
+ CND_PRECONDITION(fhandle.isOpen(), "file is not open");
+ return fhandle.size();
+}
+
+void FSDirectory::FSIndexOutput::seek(const int64_t pos)
+{
+ CND_PRECONDITION(fhandle.isOpen(), "file is not open");
+
+ BufferedIndexOutput::seek(pos);
+ fhandle.seek(pos);
+ if (fhandle.pos() != pos)
+ _CLTHROWA(CL_ERR_IO, "File IO Seek error");
+}
+
+void FSDirectory::FSIndexOutput::flushBuffer(const uint8_t* b, const int32_t size)
+{
+ CND_PRECONDITION(fhandle.isOpen(), "file is not open");
+
+ if (size > 0 && fhandle.write((const char*)b, size) != size)
+ _CLTHROWA(CL_ERR_IO, "File IO Write error");
+}
+
+// # pragma mark -- FSDirectory
+
+FSDirectory::FSDirectory(const QString& path, const bool createDir)
+ : Directory()
+ , refCount(0)
+ , useMMap(false)
+{
+ //set a realpath so that if we change directory, we can still function
+ directory = QFileInfo(path).absoluteFilePath();
+ lockDir = directory;
+
+ QDir dir(lockDir);
+ if (!dir.exists()) {
+ if (!dir.mkpath(lockDir))
+ _CLTHROWA_DEL(CL_ERR_IO, "Cannot create temp directory");
+ }
+
+ QFileInfo info(lockDir);
+ if (info.isFile() || info.isSymLink())
+ _CLTHROWA(CL_ERR_IO, "Found regular file where directory expected");
+
+ if (createDir)
+ create();
+
+ dir.setPath(directory);
+ if (!dir.exists()) {
+ //19: len of " is not a directory"
+ char* err =
+ _CL_NEWARRAY(char, 19 + strlen(path.toLocal8Bit().constData()) + 1);
+ strcpy(err, path.toLocal8Bit().constData());
+ strcat(err, " is not a directory");
+ _CLTHROWA_DEL(CL_ERR_IO, err);
+ }
+}
+
+void FSDirectory::create()
+{
+ SCOPED_LOCK_MUTEX(THIS_LOCK)
+
+ bool clear = false;
+ QDir dir(directory);
+ if (!dir.exists()) {
+ if (!dir.mkpath(directory)) {
+ char* err = _CL_NEWARRAY( // 27 len of "Couldn't create directory:"
+ char, 27 + strlen(directory.toLocal8Bit().constData()) + 1);
+ strcpy(err, "Couldn't create directory: ");
+ strcat(err, directory.toLocal8Bit().constData());
+ _CLTHROWA_DEL(CL_ERR_IO, err);
+ }
+ } else {
+ clear = true;
+ }
+
+ QFileInfo info(directory);
+ if (info.isFile() || info.isSymLink()) {
+ char tmp[1024];
+ _snprintf(tmp, 1024, "%s not a directory",
+ directory.toLocal8Bit().constData());
+ _CLTHROWA(CL_ERR_IO, tmp);
+ }
+
+ if (clear) {
+ dir.setPath(directory);
+ // clear probably existing lucene index files
+ QStringList fileList = dir.entryList(QDir::Files | QDir::Hidden
+ | QDir::NoSymLinks);
+ foreach(const QString file, fileList) {
+ if (CL_NS(index)::IndexReader::isLuceneFile(file)) {
+ if (!dir.remove(file))
+ _CLTHROWA(CL_ERR_IO, "Couldn't delete file ");
+ }
+ }
+
+ // clear probably existing file locks
+ QFileInfo dirInfo(lockDir);
+ if (dirInfo.exists() && dirInfo.isReadable() && dirInfo.isWritable()
+ && !dirInfo.isFile() && !dirInfo.isSymLink()) {
+ QDir lockDirectory(lockDir);
+ fileList = dir.entryList(QStringList() << getLockPrefix()
+ + QLatin1Char('*'), QDir::Files | QDir::Hidden | QDir::NoSymLinks);
+
+ foreach(const QString file, fileList) {
+ if (!lockDirectory.remove(file))
+ _CLTHROWA(CL_ERR_IO, "Couldn't delete file ");
+ }
+ }
+ else {
+ //todo: richer error: + lockDir.getAbsolutePath());
+ _CLTHROWA(CL_ERR_IO, "Cannot read lock directory");
+ }
+ }
+}
+
+void FSDirectory::priv_getFN(QString& buffer, const QString& name) const
+{
+ buffer.clear();
+ buffer.append(directory);
+ buffer.append(QDir::separator());
+ buffer.append(name);
+}
+
+FSDirectory::~FSDirectory()
+{
+}
+
+QStringList FSDirectory::list() const
+{
+ CND_PRECONDITION(!directory.isEmpty(), "directory is not open");
+
+ QDir dir(directory);
+ return dir.entryList(QDir::Files | QDir::Hidden);
+}
+
+bool FSDirectory::fileExists(const QString& name) const
+{
+ CND_PRECONDITION(!directory.isEmpty(), "directory is not open");
+
+ QDir dir(directory);
+ return dir.entryList().contains(name);
+}
+
+QString FSDirectory::getDirName() const
+{
+ return directory;
+}
+
+//static
+FSDirectory* FSDirectory::getDirectory(const QString& file, const bool _create)
+{
+ FSDirectory* dir = NULL;
+ {
+ if (file.isEmpty())
+ _CLTHROWA(CL_ERR_IO, "Invalid directory");
+
+ SCOPED_LOCK_MUTEX(DIRECTORIES.THIS_LOCK)
+ dir = DIRECTORIES.get(file);
+ if ( dir == NULL ){
+ dir = _CLNEW FSDirectory(file, _create);
+ DIRECTORIES.put(dir->directory, dir);
+ } else if (_create) {
+ dir->create();
+ }
+
+ {
+ SCOPED_LOCK_MUTEX(dir->THIS_LOCK)
+ dir->refCount++;
+ }
+ }
+
+ return _CL_POINTER(dir);
+}
+
+int64_t FSDirectory::fileModified(const QString& name) const
+{
+ CND_PRECONDITION(!directory.isEmpty(), "directory is not open");
+
+ QFileInfo fInfo(directory + QDir::separator() + name);
+ return fInfo.lastModified().toTime_t();
+}
+
+//static
+int64_t FSDirectory::fileModified(const QString& dir, const QString& name)
+{
+ QFileInfo fInfo(dir + QDir::separator() + name);
+ return fInfo.lastModified().toTime_t();
+}
+
+void FSDirectory::touchFile(const QString& name)
+{
+ CND_PRECONDITION(!directory.isEmpty(), "directory is not open");
+
+ QFile file(directory + QDir::separator() + name);
+ if (!file.open(QIODevice::ReadWrite))
+ _CLTHROWA(CL_ERR_IO, "IO Error while touching file");
+}
+
+int64_t FSDirectory::fileLength(const QString& name) const
+{
+ CND_PRECONDITION(!directory.isEmpty(), "directory is not open");
+
+ QFileInfo fInfo(directory + QDir::separator() + name);
+ return fInfo.size();
+}
+
+IndexInput* FSDirectory::openInput(const QString& name)
+{
+ return openInput(name, CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE);
+}
+
+IndexInput* FSDirectory::openInput(const QString& name, int32_t bufferSize )
+{
+ CND_PRECONDITION(directory[0]!=0,"directory is not open")
+
+ return _CLNEW FSIndexInput(directory + QDir::separator() + name, bufferSize);
+}
+
+void FSDirectory::close()
+{
+ SCOPED_LOCK_MUTEX(DIRECTORIES.THIS_LOCK)
+ {
+ SCOPED_LOCK_MUTEX(THIS_LOCK)
+
+ CND_PRECONDITION(!directory.isEmpty(), "directory is not open");
+
+ //refcount starts at 1
+ if (--refCount <= 0) {
+ Directory* dir = DIRECTORIES.get(getDirName());
+ if (dir) {
+ //this will be removed in ~FSDirectory
+ DIRECTORIES.remove(getDirName());
+ _CLDECDELETE(dir);
+ }
+ }
+ }
+}
+
+QString FSDirectory::getLockPrefix() const
+{
+ CND_PRECONDITION(!directory.isEmpty(), "directory is not open");
+
+ QString dirName(QFileInfo(directory).absoluteFilePath());
+ if (dirName.isEmpty())
+ _CLTHROWA(CL_ERR_Runtime, "Invalid directory path");
+
+ // to be compatible with jlucene,
+ // we need to make some changes ...
+ if (dirName.at(1) == QLatin1Char(':'))
+ dirName[0] = dirName.at(0).toUpper();
+
+ TCHAR tBuffer[2048] = { 0 };
+ dirName.toWCharArray(tBuffer);
+
+ char aBuffer[4096] = { 0 };
+ STRCPY_TtoA(aBuffer, tBuffer, 4096);
+
+ QString string(QLatin1String("lucene-"));
+ QByteArray hash(QCryptographicHash::hash(aBuffer, QCryptographicHash::Md5));
+
+ // TODO: verify this !!!
+ return string.append(QLatin1String(hash.toHex().constData()));
+}
+
+bool FSDirectory::doDeleteFile(const QString& name)
+{
+ CND_PRECONDITION(!directory.isEmpty(), "directory is not open");
+
+ QDir dir(directory);
+ return dir.remove(name);
+}
+
+void FSDirectory::renameFile(const QString& from, const QString& to)
+{
+ CND_PRECONDITION(!directory.isEmpty(), "directory is not open");
+ SCOPED_LOCK_MUTEX(THIS_LOCK)
+
+ if (fileExists(to))
+ deleteFile(to, false);
+
+ QFile file(directory + QDir::separator() + from);
+ QString newFile(directory + QDir::separator() + to);
+ if (!file.rename(newFile)) {
+ // try a second time if we fail
+ if (fileExists(to))
+ deleteFile(to, false);
+
+ if (!file.rename(newFile)) {
+ QString error(QLatin1String("Could not rename: %1 to %2!!!!"));
+ error.arg(from).arg(newFile);
+ QByteArray bArray(error.toLocal8Bit());
+ _CLTHROWA(CL_ERR_IO, bArray.constData());
+ }
+ }
+}
+
+IndexOutput* FSDirectory::createOutput(const QString& name)
+{
+ CND_PRECONDITION(!directory.isEmpty(), "directory is not open");
+
+ QString file = directory + QDir::separator() + name;
+ if (QFileInfo(file).exists()) {
+ if (!QFile::remove(file)) {
+ QByteArray bArray("Cannot overwrite: ");
+ bArray.append(name.toLocal8Bit());
+ _CLTHROWA(CL_ERR_IO, bArray.constData());
+ }
+ }
+ return _CLNEW FSIndexOutput(file);
+}
+
+LuceneLock* FSDirectory::makeLock(const QString& name)
+{
+ CND_PRECONDITION(!directory.isEmpty(), "directory is not open");
+
+
+ QString lockFile(getLockPrefix());
+ lockFile.append(QLatin1String("-")).append(name);
+
+ return _CLNEW FSLock(lockDir, lockFile);
+}
+
+QString FSDirectory::toString() const
+{
+ return QString::fromLatin1("FSDirectory@").append(directory);
+}
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/store/FSDirectory.h b/src/3rdparty/clucene/src/CLucene/store/FSDirectory.h
new file mode 100644
index 0000000..1302edf
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/store/FSDirectory.h
@@ -0,0 +1,216 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+*/
+#ifndef _lucene_store_FSDirectory_
+#define _lucene_store_FSDirectory_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include <QtCore/QFile>
+#include <QtCore/QString>
+#include <QtCore/QStringList>
+
+#include "Directory.h"
+#include "Lock.h"
+#include "CLucene/util/VoidMap.h"
+#include "CLucene/util/StringBuffer.h"
+
+CL_NS_DEF(store)
+
+/**
+* Straightforward implementation of {@link Directory} as a directory of files.
+* <p>If the system property 'disableLuceneLocks' has the String value of
+* "true", lock creation will be disabled.
+*
+* @see Directory
+*/
+class FSDirectory : public Directory
+{
+public:
+ // Destructor - only call this if you are sure the directory
+ // is not being used anymore. Otherwise use the ref-counting
+ // facilities of _CLDECDELETE
+ ~FSDirectory();
+
+ // Get a list of strings, one for each file in the directory.
+ QStringList list() const;
+
+ // Returns true iff a file with the given name exists.
+ bool fileExists(const QString& name) const;
+
+ // Returns the text name of the directory
+ QString getDirName() const; ///<returns reference
+
+ /**
+ Returns the directory instance for the named location.
+
+ Do not delete this instance, only use close, otherwise other instances
+ will lose this instance.
+
+ <p>Directories are cached, so that, for a given canonical path, the same
+ FSDirectory instance will always be returned. This permits
+ synchronization on directories.
+
+ @param file the path to the directory.
+ @param create if true, create, or erase any existing contents.
+ @return the FSDirectory for the named file.
+ */
+ static FSDirectory* getDirectory(const QString& file, const bool create);
+
+ // Returns the time the named file was last modified.
+ int64_t fileModified(const QString& name) const;
+
+ //static
+ // Returns the time the named file was last modified.
+ static int64_t fileModified(const QString& dir, const QString& name);
+
+ // static
+ // Returns the length in bytes of a file in the directory.
+ int64_t fileLength(const QString& name) const;
+
+ // Returns a stream reading an existing file.
+ IndexInput* openInput(const QString& name);
+ IndexInput* openInput(const QString& name, int32_t bufferSize);
+
+ // Renames an existing file in the directory.
+ void renameFile(const QString& from, const QString& to);
+
+ // Set the modified time of an existing file to now.
+ void touchFile(const QString& name);
+
+ // Creates a new, empty file in the directory with the given name.
+ // Returns a stream writing this file.
+ IndexOutput* createOutput(const QString& name);
+
+ // Construct a {@link Lock}.
+ // @param name the name of the lock file
+ LuceneLock* makeLock(const QString& name);
+
+ // Decrease the ref-count to the directory by one. If the object is no
+ // longer needed, then the object is removed from the directory pool.
+ void close();
+
+ // If MMap is available, this can disable use of mmap reading.
+ void setUseMMap(bool value) { useMMap = value; }
+
+ // Gets whether the directory is using MMap for inputstreams.
+ bool getUseMMap() const { return useMMap; }
+
+ QString toString() const;
+
+ static QString DirectoryType() { return QLatin1String("FS"); }
+ QString getDirectoryType() const { return QLatin1String("FS"); }
+
+ // Set whether Lucene's use of lock files is disabled. By default,
+ // lock files are enabled. They should only be disabled if the index
+ // is on a read-only medium like a CD-ROM.
+ static void setDisableLocks(bool doDisableLocks)
+ { disableLocks = doDisableLocks; }
+
+ // Returns whether Lucene's use of lock files is disabled.
+ // @return true if locks are disabled, false if locks are enabled.
+ static bool getDisableLocks() { return disableLocks; }
+
+protected:
+ FSDirectory(const QString& path, const bool createDir);
+ // Removes an existing file in the directory.
+ bool doDeleteFile(const QString& name);
+
+private:
+ class FSLock : public LuceneLock {
+ public:
+ FSLock (const QString& lockDir, const QString& name);
+ ~FSLock();
+
+ bool obtain();
+ void release();
+ bool isLocked();
+ QString toString() const;
+
+ QString lockDir;
+ QString lockFile;
+ };
+ friend class FSDirectory::FSLock;
+
+ class FSIndexInput : public BufferedIndexInput {
+ public:
+ FSIndexInput(const QString& path, int32_t bufferSize =
+ CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE);
+ ~FSIndexInput();
+
+ void close();
+ IndexInput* clone() const;
+
+ int64_t length()
+ { return handle->_length; }
+
+ QString getDirectoryType() const
+ { return FSDirectory::DirectoryType(); }
+
+ protected:
+ FSIndexInput(const FSIndexInput& clone);
+ // Random-access methods
+ void seekInternal(const int64_t position);
+ // IndexInput methods
+ void readInternal(uint8_t* b, const int32_t len);
+
+ private:
+ // We used a shared handle between all the fsindexinput clones.
+ // This reduces number of file handles we need, and it means
+ // we dont have to use file tell (which is slow) before doing a read.
+ class SharedHandle : LUCENE_REFBASE {
+ public:
+ SharedHandle();
+ ~SharedHandle();
+
+ int64_t _fpos;
+ int64_t _length;
+
+ QFile fhandle;
+ DEFINE_MUTEX(THIS_LOCK)
+ };
+ SharedHandle* handle;
+ int64_t _pos;
+ };
+ friend class FSDirectory::FSIndexInput;
+
+ class FSIndexOutput : public BufferedIndexOutput {
+ public:
+ FSIndexOutput(const QString& path);
+ ~FSIndexOutput();
+
+ void close();
+ int64_t length();
+ void seek(const int64_t pos);
+
+ protected:
+ void flushBuffer(const uint8_t* b, const int32_t size);
+
+ private:
+ QFile fhandle;
+ };
+ friend class FSDirectory::FSIndexOutput;
+
+private:
+ QString directory;
+ int refCount;
+ void create();
+
+ QString lockDir;
+ QString getLockPrefix() const;
+ static bool disableLocks;
+
+ void priv_getFN(QString& buffer, const QString& name) const;
+ bool useMMap;
+};
+
+CL_NS_END
+
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/store/IndexInput.cpp b/src/3rdparty/clucene/src/CLucene/store/IndexInput.cpp
new file mode 100644
index 0000000..cf7bd16
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/store/IndexInput.cpp
@@ -0,0 +1,233 @@
+ /*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "IndexInput.h"
+
+CL_NS_USE(util)
+CL_NS_DEF(store)
+
+ IndexInput::IndexInput()
+ {
+ }
+ IndexInput::IndexInput(const IndexInput& other)
+ {
+ }
+
+ int32_t IndexInput::readInt() {
+ int32_t b = (readByte() << 24);
+ b |= (readByte() << 16);
+ b |= (readByte() << 8);
+ return (b | readByte());
+ }
+
+ int32_t IndexInput::readVInt() {
+ uint8_t b = readByte();
+ int32_t i = b & 0x7F;
+ for (int32_t shift = 7; (b & 0x80) != 0; shift += 7) {
+ b = readByte();
+ i |= (b & 0x7F) << shift;
+ }
+ return i;
+ }
+
+ int64_t IndexInput::readLong() {
+ int64_t i = ((int64_t)readInt() << 32);
+ return (i | ((int64_t)readInt() & 0xFFFFFFFFL));
+ }
+
+ int64_t IndexInput::readVLong() {
+ uint8_t b = readByte();
+ int64_t i = b & 0x7F;
+ for (int32_t shift = 7; (b & 0x80) != 0; shift += 7) {
+ b = readByte();
+ i |= (((int64_t)b) & 0x7FL) << shift;
+ }
+ return i;
+ }
+
+ void IndexInput::skipChars( const int32_t count) {
+ for (int32_t i = 0; i < count; i++) {
+ TCHAR b = readByte();
+ if ((b & 0x80) == 0) {
+ // Do Nothing.
+ } else if ((b & 0xE0) != 0xE0) {
+ readByte();
+ } else {
+ readByte();
+ readByte();
+ }
+ }
+ }
+
+ int32_t IndexInput::readString(TCHAR* buffer, const int32_t maxLength){
+ int32_t len = readVInt();
+ int32_t ml=maxLength-1;
+ if ( len >= ml ){
+ readChars(buffer, 0, ml);
+ buffer[ml] = 0;
+ //we have to finish reading all the data for this string!
+ if ( len-ml > 0 ){
+ //seek(getFilePointer()+(len-ml)); <- that was the wrong way to "finish reading"
+ skipChars(len-ml);
+ }
+ return ml;
+ }else{
+ readChars(buffer, 0, len);
+ buffer[len] = 0;
+ return len;
+ }
+ }
+
+ TCHAR* IndexInput::readString(const bool _unique){
+ int32_t len = readVInt();
+
+ if ( len == 0){
+ if ( _unique ) //todo: does non unique ever occur?
+ return stringDuplicate(LUCENE_BLANK_STRING);
+ else
+ return LUCENE_BLANK_STRING;
+ }
+
+ TCHAR* ret = _CL_NEWARRAY(TCHAR,len+1);
+ readChars(ret, 0, len);
+ ret[len] = 0;
+
+ return ret;
+ }
+
+ void IndexInput::readChars( TCHAR* buffer, const int32_t start, const int32_t len) {
+ const int32_t end = start + len;
+ TCHAR b;
+ for (int32_t i = start; i < end; ++i) {
+ b = readByte();
+ if ((b & 0x80) == 0) {
+ b = (b & 0x7F);
+ } else if ((b & 0xE0) != 0xE0) {
+ b = (((b & 0x1F) << 6)
+ | (readByte() & 0x3F));
+ } else {
+ b = ((b & 0x0F) << 12) | ((readByte() & 0x3F) << 6);
+ b |= (readByte() & 0x3F);
+ }
+ buffer[i] = b;
+ }
+ }
+
+
+
+
+
+
+BufferedIndexInput::BufferedIndexInput(int32_t _bufferSize):
+ buffer(NULL),
+ bufferSize(_bufferSize),
+ bufferStart(0),
+ bufferLength(0),
+ bufferPosition(0)
+ {
+ }
+
+ BufferedIndexInput::BufferedIndexInput(const BufferedIndexInput& other):
+ IndexInput(other),
+ buffer(NULL),
+ bufferSize(other.bufferSize),
+ bufferStart(other.bufferStart),
+ bufferLength(other.bufferLength),
+ bufferPosition(other.bufferPosition)
+ {
+ /* DSR: Does the fact that sometime clone.buffer is not NULL even when
+ ** clone.bufferLength is zero indicate memory corruption/leakage?
+ ** if ( clone.buffer != NULL) { */
+ if (other.bufferLength != 0 && other.buffer != NULL) {
+ buffer = _CL_NEWARRAY(uint8_t,bufferLength);
+ memcpy(buffer,other.buffer,bufferLength * sizeof(uint8_t));
+ }
+ }
+
+ void BufferedIndexInput::readBytes(uint8_t* b, const int32_t len){
+ if (len < bufferSize) {
+ for (int32_t i = 0; i < len; ++i) // read byte-by-byte
+ b[i] = readByte();
+ } else { // read all-at-once
+ int64_t start = getFilePointer();
+ seekInternal(start);
+ readInternal(b, len);
+
+ bufferStart = start + len; // adjust stream variables
+ bufferPosition = 0;
+ bufferLength = 0; // trigger refill() on read
+ }
+ }
+
+ int64_t BufferedIndexInput::getFilePointer() const{
+ return bufferStart + bufferPosition;
+ }
+
+ void BufferedIndexInput::seek(const int64_t pos) {
+ if ( pos < 0 )
+ _CLTHROWA(CL_ERR_IO, "IO Argument Error. Value must be a positive value.");
+ if (pos >= bufferStart && pos < (bufferStart + bufferLength))
+ bufferPosition = (int32_t)(pos - bufferStart); // seek within buffer
+ else {
+ bufferStart = pos;
+ bufferPosition = 0;
+ bufferLength = 0; // trigger refill() on read()
+ seekInternal(pos);
+ }
+ }
+ void BufferedIndexInput::close(){
+ _CLDELETE_ARRAY(buffer);
+ bufferLength = 0;
+ bufferPosition = 0;
+ bufferStart = 0;
+ }
+
+
+ BufferedIndexInput::~BufferedIndexInput(){
+ BufferedIndexInput::close();
+ }
+
+ void BufferedIndexInput::refill() {
+ int64_t start = bufferStart + bufferPosition;
+ int64_t end = start + bufferSize;
+ if (end > length()) // don't read past EOF
+ end = length();
+ bufferLength = (int32_t)(end - start);
+ if (bufferLength == 0)
+ _CLTHROWA(CL_ERR_IO, "IndexInput read past EOF");
+
+ if (buffer == NULL){
+ buffer = _CL_NEWARRAY(uint8_t,bufferSize); // allocate buffer lazily
+ }
+ readInternal(buffer, bufferLength);
+
+
+ bufferStart = start;
+ bufferPosition = 0;
+ }
+
+
+IndexInputStream::IndexInputStream(IndexInput* input){
+ this->input = input;
+ this->size = input->length();
+ this->position = input->getFilePointer();
+}
+IndexInputStream::~IndexInputStream(){
+}
+int32_t IndexInputStream::fillBuffer(char* start, int32_t space){
+ int64_t avail = input->length()-input->getFilePointer();
+ if ( avail == 0 )
+ return -1;
+ else if ( avail<space )
+ space = (int32_t)avail;
+
+ input->readBytes((uint8_t*)start,space);
+ return space;
+}
+
+CL_NS_END
+
diff --git a/src/3rdparty/clucene/src/CLucene/store/IndexInput.h b/src/3rdparty/clucene/src/CLucene/store/IndexInput.h
new file mode 100644
index 0000000..9453b5c
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/store/IndexInput.h
@@ -0,0 +1,190 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright(C) 2007, 2008 by Nokia Corporation and/or its subsidiary(-ies), all rights reserved.
+*/
+#ifndef _lucene_store_IndexInput_
+#define _lucene_store_IndexInput_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include <QtCore/QString>
+
+#include "CLucene/util/bufferedstream.h"
+#include "IndexOutput.h"
+
+CL_NS_DEF(store)
+
+ /** Abstract base class for input from a file in a {@link Directory}. A
+ * random-access input stream. Used for all Lucene index input operations.
+ * @see Directory
+ * @see IndexOutput
+ */
+ class IndexInput: LUCENE_BASE {
+ private:
+ void skipChars( const int32_t count);
+ protected:
+ IndexInput();
+ IndexInput(const IndexInput& clone);
+ public:
+ virtual ~IndexInput(){}
+ virtual IndexInput* clone() const =0;
+
+ DEFINE_MUTEX(THIS_LOCK)
+
+ /** Reads and returns a single byte.
+ * @see IndexOutput#writeByte(byte)
+ */
+ virtual uint8_t readByte() =0;
+
+ /** Reads a specified number of bytes into an array at the specified offset.
+ * @param b the array to read bytes into
+ * @param offset the offset in the array to start storing bytes
+ * @param len the number of bytes to read
+ * @see IndexOutput#writeBytes(byte[],int32_t)
+ */
+ virtual void readBytes(uint8_t* b, const int32_t len) =0;
+
+ /** Reads four bytes and returns an int.
+ * @see IndexOutput#writeInt(int32_t)
+ */
+ int32_t readInt();
+
+ /** Reads an int stored in variable-length format. Reads between one and
+ * five bytes. Smaller values take fewer bytes. Negative numbers are not
+ * supported.
+ * @see IndexOutput#writeVInt(int32_t)
+ */
+ virtual int32_t readVInt();
+
+ /** Reads eight bytes and returns a long.
+ * @see IndexOutput#writeLong(long)
+ */
+ int64_t readLong();
+
+ /** Reads a long stored in variable-length format. Reads between one and
+ * nine bytes. Smaller values take fewer bytes. Negative numbers are not
+ * supported. */
+ int64_t readVLong();
+
+ /** Reads a string.
+ * @see IndexOutput#writeString(String)
+ * maxLength is the amount read into the buffer, the whole string is still read from the stream
+ * returns the amount read
+ */
+ int32_t readString(TCHAR* buffer, const int32_t maxlength);
+
+ /** Reads a string.
+ * @see IndexOutput#writeString(String)
+ * If unique is true (default) the string will be duplicated.
+ * If false and the length is zero, LUCENE_BLANK_STRING is returned
+ */
+ TCHAR* readString(const bool unique=true);
+
+
+ /** Reads UTF-8 encoded characters into an array.
+ * @param buffer the array to read characters into
+ * @param start the offset in the array to start storing characters
+ * @param length the number of characters to read
+ * @see IndexOutput#writeChars(String,int32_t,int32_t)
+ */
+ void readChars( TCHAR* buffer, const int32_t start, const int32_t len);
+
+ /** Closes the stream to futher operations. */
+ virtual void close() =0;
+
+ /** Returns the current position in this file, where the next read will
+ * occur.
+ * @see #seek(long)
+ */
+ virtual int64_t getFilePointer() const =0;
+
+ /** Sets current position in this file, where the next read will occur.
+ * @see #getFilePointer()
+ */
+ virtual void seek(const int64_t pos) =0;
+
+ /** The number of bytes in the file. */
+ virtual int64_t length() = 0;
+
+ virtual QString getDirectoryType() const = 0;
+ };
+
+ /** Abstract base class for input from a file in a {@link Directory}. A
+ * random-access input stream. Used for all Lucene index input operations.
+ * @see Directory
+ * @see IndexOutput
+ */
+ class BufferedIndexInput: public IndexInput{
+ private:
+ uint8_t* buffer; //array of bytes
+ void refill();
+ protected:
+ int32_t bufferSize; //size of the buffer
+ int64_t bufferStart; // position in file of buffer
+ int32_t bufferLength; // end of valid l_byte_ts
+ int32_t bufferPosition; // next uint8_t to read
+
+ /** Returns a clone of this stream.
+ *
+ * <p>Clones of a stream access the same data, and are positioned at the same
+ * point as the stream they were cloned from.
+ *
+ * <p>Expert: Subclasses must ensure that clones may be positioned at
+ * different points in the input from each other and from the stream they
+ * were cloned from.
+ */
+ BufferedIndexInput(const BufferedIndexInput& clone);
+ BufferedIndexInput(int32_t bufferSize = CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE);
+ public:
+
+ virtual ~BufferedIndexInput();
+ virtual IndexInput* clone() const = 0;
+ void close();
+ inline uint8_t readByte(){
+ if (bufferPosition >= bufferLength)
+ refill();
+
+ return buffer[bufferPosition++];
+ }
+ void readBytes(uint8_t* b, const int32_t len);
+ int64_t getFilePointer() const;
+ void seek(const int64_t pos);
+
+ protected:
+ /** Expert: implements buffer refill. Reads bytes from the current position
+ * in the input.
+ * @param b the array to read bytes into
+ * @param offset the offset in the array to start storing bytes
+ * @param length the number of bytes to read
+ */
+ virtual void readInternal(uint8_t* b, const int32_t len) = 0;
+
+ /** Expert: implements seek. Sets current position in this file, where the
+ * next {@link #readInternal(byte[],int32_t,int32_t)} will occur.
+ * @see #readInternal(byte[],int32_t,int32_t)
+ */
+ virtual void seekInternal(const int64_t pos) = 0;
+ };
+
+ /**
+ * JStream InputStream which reads from an IndexInput. This class is
+ * used by the FieldReader to create binary fields. You can then use
+ * a GZipInputStream to read compressed data or any of the other
+ * JStream stream types.
+ *
+ */
+ class IndexInputStream: public jstreams::BufferedInputStream<char>{
+ IndexInput* input;
+ public:
+ IndexInputStream(IndexInput* input);
+ ~IndexInputStream();
+ int32_t fillBuffer(char* start, int32_t space);
+ };
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/store/IndexOutput.cpp b/src/3rdparty/clucene/src/CLucene/store/IndexOutput.cpp
new file mode 100644
index 0000000..04f78c3
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/store/IndexOutput.cpp
@@ -0,0 +1,163 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "IndexOutput.h"
+
+CL_NS_USE(util)
+CL_NS_DEF(store)
+
+
+ IndexOutput::IndexOutput()
+ {
+ }
+
+ IndexOutput::~IndexOutput(){
+ }
+
+ BufferedIndexOutput::BufferedIndexOutput()
+ {
+ buffer = _CL_NEWARRAY(uint8_t, BUFFER_SIZE );
+ bufferStart = 0;
+ bufferPosition = 0;
+ }
+
+ BufferedIndexOutput::~BufferedIndexOutput(){
+ if ( buffer != NULL )
+ close();
+ }
+
+ void BufferedIndexOutput::close(){
+ flush();
+ _CLDELETE_ARRAY( buffer );
+
+ bufferStart = 0;
+ bufferPosition = 0;
+ }
+
+ void BufferedIndexOutput::writeByte(const uint8_t b) {
+ CND_PRECONDITION(buffer!=NULL,"IndexOutput is closed")
+ if (bufferPosition >= BUFFER_SIZE)
+ flush();
+ buffer[bufferPosition++] = b;
+ }
+
+ void BufferedIndexOutput::writeBytes(const uint8_t* b, const int32_t length) {
+ if ( length < 0 )
+ _CLTHROWA(CL_ERR_IllegalArgument, "IO Argument Error. Value must be a positive value.");
+ int32_t bytesLeft = BUFFER_SIZE - bufferPosition;
+ // is there enough space in the buffer?
+ if (bytesLeft >= length) {
+ // we add the data to the end of the buffer
+ memcpy(buffer + bufferPosition, b, length);
+ bufferPosition += length;
+ // if the buffer is full, flush it
+ if (BUFFER_SIZE - bufferPosition == 0)
+ flush();
+ } else {
+ // is data larger then buffer?
+ if (length > BUFFER_SIZE) {
+ // we flush the buffer
+ if (bufferPosition > 0)
+ flush();
+ // and write data at once
+ flushBuffer(b, length);
+ bufferStart += length;
+ } else {
+ // we fill/flush the buffer (until the input is written)
+ int64_t pos = 0; // position in the input data
+ int32_t pieceLength;
+ while (pos < length) {
+ if ( length - pos < bytesLeft )
+ pieceLength = length - pos;
+ else
+ pieceLength = bytesLeft;
+ memcpy(buffer + bufferPosition, b + pos, pieceLength);
+ pos += pieceLength;
+ bufferPosition += pieceLength;
+ // if the buffer is full, flush it
+ bytesLeft = BUFFER_SIZE - bufferPosition;
+ if (bytesLeft == 0) {
+ flush();
+ bytesLeft = BUFFER_SIZE;
+ }
+ }
+ }
+ }
+ }
+
+ void IndexOutput::writeInt(const int32_t i) {
+ writeByte((uint8_t)(i >> 24));
+ writeByte((uint8_t)(i >> 16));
+ writeByte((uint8_t)(i >> 8));
+ writeByte((uint8_t) i);
+ }
+
+ void IndexOutput::writeVInt(const int32_t vi) {
+ uint32_t i = vi;
+ while ((i & ~0x7F) != 0) {
+ writeByte((uint8_t)((i & 0x7f) | 0x80));
+ i >>= 7; //doing unsigned shift
+ }
+ writeByte( (uint8_t)i );
+ }
+
+ void IndexOutput::writeLong(const int64_t i) {
+ writeInt((int32_t) (i >> 32));
+ writeInt((int32_t) i);
+ }
+
+ void IndexOutput::writeVLong(const int64_t vi) {
+ uint64_t i = vi;
+ while ((i & ~0x7F) != 0) {
+ writeByte((uint8_t)((i & 0x7f) | 0x80));
+ i >>= 7; //doing unsigned shift
+ }
+ writeByte((uint8_t)i);
+ }
+
+ void IndexOutput::writeString(const TCHAR* s, const int32_t length ) {
+ writeVInt(length);
+ writeChars(s, 0, length);
+ }
+
+ void IndexOutput::writeChars(const TCHAR* s, const int32_t start, const int32_t length){
+ if ( length < 0 || start < 0 )
+ _CLTHROWA(CL_ERR_IllegalArgument, "IO Argument Error. Value must be a positive value.");
+
+ const int32_t end = start + length;
+ for (int32_t i = start; i < end; ++i) {
+ const int32_t code = (int32_t)s[i];
+ if (code >= 0x01 && code <= 0x7F)
+ writeByte((uint8_t)code);
+ else if (((code >= 0x80) && (code <= 0x7FF)) || code == 0) {
+ writeByte((uint8_t)(0xC0 | (code >> 6)));
+ writeByte((uint8_t)(0x80 | (code & 0x3F)));
+ } else {
+ writeByte((uint8_t)(0xE0 | (((uint32_t)code) >> 12))); //unsigned shift
+ writeByte((uint8_t)(0x80 | ((code >> 6) & 0x3F)));
+ writeByte((uint8_t)(0x80 | (code & 0x3F)));
+ }
+ }
+ }
+
+
+ int64_t BufferedIndexOutput::getFilePointer() const{
+ return bufferStart + bufferPosition;
+ }
+
+ void BufferedIndexOutput::seek(const int64_t pos) {
+ flush();
+ bufferStart = pos;
+ }
+
+ void BufferedIndexOutput::flush() {
+ flushBuffer(buffer, bufferPosition);
+ bufferStart += bufferPosition;
+ bufferPosition = 0;
+ }
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/store/IndexOutput.h b/src/3rdparty/clucene/src/CLucene/store/IndexOutput.h
new file mode 100644
index 0000000..c47ee73
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/store/IndexOutput.h
@@ -0,0 +1,152 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_store_IndexOutput_
+#define _lucene_store_IndexOutput_
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+CL_NS_DEF(store)
+
+
+/** Abstract class for output to a file in a Directory. A random-access output
+* stream. Used for all Lucene index output operations.
+* @see Directory
+* @see IndexInput
+*/
+class IndexOutput:LUCENE_BASE{
+ bool isclosed;
+public:
+ IndexOutput();
+ virtual ~IndexOutput();
+
+ /** Writes a single byte.
+ * @see IndexInput#readByte()
+ */
+ virtual void writeByte(const uint8_t b) = 0;
+
+ /** Writes an array of bytes.
+ * @param b the bytes to write
+ * @param length the number of bytes to write
+ * @see IndexInput#readBytes(byte[],int32_t,int32_t)
+ */
+ virtual void writeBytes(const uint8_t* b, const int32_t length) = 0;
+
+ /** Writes an int as four bytes.
+ * @see IndexInput#readInt()
+ */
+ void writeInt(const int32_t i);
+
+ /** Writes an int in a variable-length format. Writes between one and
+ * five bytes. Smaller values take fewer bytes. Negative numbers are not
+ * supported.
+ * @see IndexInput#readVInt()
+ */
+ void writeVInt(const int32_t vi);
+
+ /** Writes a long as eight bytes.
+ * @see IndexInput#readLong()
+ */
+ void writeLong(const int64_t i);
+
+ /** Writes an long in a variable-length format. Writes between one and five
+ * bytes. Smaller values take fewer bytes. Negative numbers are not
+ * supported.
+ * @see IndexInput#readVLong()
+ */
+ void writeVLong(const int64_t vi);
+
+ /** Writes a string.
+ * @see IndexInput#readString()
+ */
+ void writeString(const TCHAR* s, const int32_t length);
+
+ /** Writes a sequence of UTF-8 encoded characters from a string.
+ * @param s the source of the characters
+ * @param start the first character in the sequence
+ * @param length the number of characters in the sequence
+ * @see IndexInput#readChars(char[],int32_t,int32_t)
+ */
+ void writeChars(const TCHAR* s, const int32_t start, const int32_t length);
+
+ /** Closes this stream to further operations. */
+ virtual void close() = 0;
+
+ /** Returns the current position in this file, where the next write will
+ * occur.
+ * @see #seek(long)
+ */
+ virtual int64_t getFilePointer() const = 0;
+
+ /** Sets current position in this file, where the next write will occur.
+ * @see #getFilePointer()
+ */
+ virtual void seek(const int64_t pos) = 0;
+
+ /** The number of bytes in the file. */
+ virtual int64_t length() = 0;
+
+ /** Forces any buffered output to be written. */
+ virtual void flush() = 0;
+};
+
+/** Base implementation class for buffered {@link IndexOutput}. */
+class BufferedIndexOutput : public IndexOutput{
+public:
+ LUCENE_STATIC_CONSTANT(int32_t, BUFFER_SIZE=LUCENE_STREAM_BUFFER_SIZE);
+private:
+ uint8_t* buffer;
+ int64_t bufferStart; // position in file of buffer
+ int32_t bufferPosition; // position in buffer
+
+public:
+ BufferedIndexOutput();
+ virtual ~BufferedIndexOutput();
+
+ /** Writes a single byte.
+ * @see IndexInput#readByte()
+ */
+ virtual void writeByte(const uint8_t b);
+
+ /** Writes an array of bytes.
+ * @param b the bytes to write
+ * @param length the number of bytes to write
+ * @see IndexInput#readBytes(byte[],int32_t,int32_t)
+ */
+ virtual void writeBytes(const uint8_t* b, const int32_t length);
+
+ /** Closes this stream to further operations. */
+ virtual void close();
+
+ /** Returns the current position in this file, where the next write will
+ * occur.
+ * @see #seek(long)
+ */
+ int64_t getFilePointer() const;
+
+ /** Sets current position in this file, where the next write will occur.
+ * @see #getFilePointer()
+ */
+ virtual void seek(const int64_t pos);
+
+ /** The number of bytes in the file. */
+ virtual int64_t length() = 0;
+
+ /** Forces any buffered output to be written. */
+ void flush();
+
+protected:
+ /** Expert: implements buffer write. Writes bytes at the current position in
+ * the output.
+ * @param b the bytes to write
+ * @param len the number of bytes to write
+ */
+ virtual void flushBuffer(const uint8_t* b, const int32_t len) = 0;
+};
+
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/store/InputStream.h b/src/3rdparty/clucene/src/CLucene/store/InputStream.h
new file mode 100644
index 0000000..f56819e
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/store/InputStream.h
@@ -0,0 +1,21 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_store_InputStream_
+#define _lucene_store_InputStream_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+CL_NS_DEF(store)
+
+deprecated... please use IndexInput.h header
+and change InputStream to IndexInput
+
+
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/store/Lock.cpp b/src/3rdparty/clucene/src/CLucene/store/Lock.cpp
new file mode 100644
index 0000000..a66e784
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/store/Lock.cpp
@@ -0,0 +1,27 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "Lock.h"
+
+CL_NS_DEF(store)
+
+ bool LuceneLock::obtain(int64_t lockWaitTimeout) {
+ bool locked = obtain();
+ int maxSleepCount = (int)(lockWaitTimeout / LOCK_POLL_INTERVAL);
+ int sleepCount = 0;
+ while (!locked) {
+ if (sleepCount++ == maxSleepCount) {
+ _CLTHROWA(CL_ERR_IO,"Lock obtain timed out");
+ }
+ _LUCENE_SLEEP(LOCK_POLL_INTERVAL);
+ locked = obtain();
+ }
+ return locked;
+ }
+
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/store/Lock.h b/src/3rdparty/clucene/src/CLucene/store/Lock.h
new file mode 100644
index 0000000..b5dda3b
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/store/Lock.h
@@ -0,0 +1,106 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright(C) 2007, 2008 by Nokia Corporation and/or its subsidiary(-ies), all rights reserved.
+*/
+#ifndef _lucene_store_Lock_
+#define _lucene_store_Lock_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+CL_NS_DEF(store)
+
+class LuceneLock : LUCENE_BASE
+{
+public:
+ LUCENE_STATIC_CONSTANT(int64_t, LOCK_POLL_INTERVAL = 1000);
+
+ virtual ~LuceneLock() {}
+
+ // Attempts to obtain exclusive access and immediately return upon success
+ // or failure. Return true if exclusive access is obtained.
+ virtual bool obtain() = 0;
+
+ // Attempts to obtain an exclusive lock within amount of time given.
+ // Currently polls once per second until lockWaitTimeout is passed.
+ // @param lockWaitTimeout length of time to wait in ms
+ // @return true if lock was obtained
+ // @throws IOException if lock wait times out or obtain() throws an IOException
+ bool obtain(int64_t lockWaitTimeout);
+
+ // Release exclusive access.
+ virtual void release() = 0;
+
+ // Returns true if the resource is currently locked. Note that one must
+ // still call {@link #obtain()} before using the resource.
+ virtual bool isLocked() = 0;
+
+ virtual QString toString() const = 0;
+};
+
+
+// Utility class for executing code with exclusive access.
+template<typename T>
+class LuceneLockWith
+{
+public:
+ // Constructs an executor that will grab the named lock. Defaults
+ // lockWaitTimeout to LUCENE_COMMIT_LOCK_TIMEOUT.
+ // @deprecated Kept only to avoid breaking existing code.
+ LuceneLockWith(LuceneLock* lock, int64_t lockWaitTimeout)
+ {
+ this->lock = lock;
+ this->lockWaitTimeout = lockWaitTimeout;
+ }
+
+ virtual ~LuceneLockWith() {}
+
+ // Calls {@link #doBody} while <i>lock</i> is obtained. Blocks if lock
+ // cannot be obtained immediately. Retries to obtain lock once per second
+ // until it is obtained, or until it has tried ten times. Lock is released
+ // when {@link #doBody} exits.
+ T runAndReturn()
+ {
+ bool locked = false;
+ T ret = NULL;
+ try {
+ locked = lock->obtain(lockWaitTimeout);
+ ret = doBody();
+ } _CLFINALLY (
+ if (locked)
+ lock->release();
+ );
+ return ret;
+ }
+
+ // @see runAndReturn
+ // Same as runAndReturn, except doesn't return any value. The only
+ // difference is that no void values are used
+ void run()
+ {
+ bool locked = false;
+ try {
+ locked = lock->obtain(lockWaitTimeout);
+ doBody();
+ } _CLFINALLY (
+ if (locked)
+ lock->release();
+ );
+ }
+
+protected:
+ virtual T doBody() = 0;
+
+private:
+ LuceneLock* lock;
+ int64_t lockWaitTimeout;
+};
+
+CL_NS_END
+
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/store/MMapInput.cpp b/src/3rdparty/clucene/src/CLucene/store/MMapInput.cpp
new file mode 100644
index 0000000..d660032
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/store/MMapInput.cpp
@@ -0,0 +1,203 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#if defined(LUCENE_FS_MMAP)
+
+#include "FSDirectory.h"
+#include "CLucene/util/Misc.h"
+#include "CLucene/debug/condition.h"
+
+#ifndef _CLCOMPILER_MSVC
+ #include <sys/mman.h>
+#endif
+
+CL_NS_DEF(store)
+CL_NS_USE(util)
+
+ FSDirectory::MMapIndexInput::MMapIndexInput(const char* path):
+ pos(0),
+ data(NULL),
+ _length(0),
+ isClone(false)
+ {
+ //Func - Constructor.
+ // Opens the file named path
+ //Pre - path != NULL
+ //Post - if the file could not be opened an exception is thrown.
+
+ CND_PRECONDITION(path != NULL, "path is NULL");
+
+#ifdef _CLCOMPILER_MSVC
+ mmaphandle = NULL;
+ fhandle = CreateFileA(path,GENERIC_READ,FILE_SHARE_READ, 0,OPEN_EXISTING,0,0);
+
+ //Check if a valid fhandle was retrieved
+ if (fhandle < 0){
+ DWORD err = GetLastError();
+ if ( err == ERROR_FILE_NOT_FOUND )
+ _CLTHROWA(CL_ERR_IO, "File does not exist");
+ else if ( err == EACCES )
+ _CLTHROWA(ERROR_ACCESS_DENIED, "File Access denied");
+ else if ( err == ERROR_TOO_MANY_OPEN_FILES )
+ _CLTHROWA(CL_ERR_IO, "Too many open files");
+ else
+ _CLTHROWA(CL_ERR_IO, "File IO Error");
+ }
+
+ DWORD dummy=0;
+ _length = GetFileSize(fhandle,&dummy);
+
+ if ( _length > 0 ){
+ mmaphandle = CreateFileMappingA(fhandle,NULL,PAGE_READONLY,0,0,NULL);
+ if ( mmaphandle != NULL ){
+ void* address = MapViewOfFile(mmaphandle,FILE_MAP_READ,0,0,0);
+ if ( address != NULL ){
+ data = (uint8_t*)address;
+ return; //SUCCESS!
+ }
+ }
+ CloseHandle(mmaphandle);
+
+ char* lpMsgBuf=0;
+ DWORD dw = GetLastError();
+
+ FormatMessageA(
+ FORMAT_MESSAGE_ALLOCATE_BUFFER |
+ FORMAT_MESSAGE_FROM_SYSTEM,
+ NULL,
+ dw,
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+ lpMsgBuf,
+ 0, NULL );
+
+ char* errstr = _CL_NEWARRAY(char, strlen(lpMsgBuf)+40);
+ sprintf(errstr, "MMapIndexInput::MMapIndexInput failed with error %d: %s", dw, lpMsgBuf);
+ LocalFree(lpMsgBuf);
+
+ _CLTHROWA_DEL(CL_ERR_IO,errstr);
+ }
+
+#else //_CLCOMPILER_MSVC
+ fhandle = ::open (path, O_RDONLY);
+ if (fhandle < 0){
+ _CLTHROWA(CL_ERR_IO,strerror(errno));
+ }else{
+ // stat it
+ struct stat sb;
+ if (::fstat (fhandle, &sb)){
+ _CLTHROWA(CL_ERR_IO,strerror(errno));
+ }else{
+ // get length from stat
+ _length = sb.st_size;
+
+ // mmap the file
+ void* address = ::mmap(0, _length, PROT_READ, MAP_SHARED, fhandle, 0);
+ if (address == MAP_FAILED){
+ _CLTHROWA(CL_ERR_IO,strerror(errno));
+ }else{
+ data = (uint8_t*)address;
+ }
+ }
+ }
+#endif
+ }
+
+ FSDirectory::MMapIndexInput::MMapIndexInput(const MMapIndexInput& clone): IndexInput(clone){
+ //Func - Constructor
+ // Uses clone for its initialization
+ //Pre - clone is a valide instance of FSIndexInput
+ //Post - The instance has been created and initialized by clone
+
+#ifdef _CLCOMPILER_MSVC
+ mmaphandle = NULL;
+ fhandle = NULL;
+#endif
+
+ data = clone.data;
+ pos = clone.pos;
+
+ //clone the file length
+ _length = clone._length;
+ //Keep in mind that this instance is a clone
+ isClone = true;
+ }
+
+ uint8_t FSDirectory::MMapIndexInput::readByte(){
+ return *(data+(pos++));
+ }
+
+ void FSDirectory::MMapIndexInput::readBytes(uint8_t* b, const int32_t len){
+ memcpy(b, data+pos, len);
+ pos+=len;
+ }
+ int32_t FSDirectory::MMapIndexInput::readVInt(){
+ uint8_t b = *(data+(pos++));
+ int32_t i = b & 0x7F;
+ for (int shift = 7; (b & 0x80) != 0; shift += 7) {
+ b = *(data+(pos++));
+ i |= (b & 0x7F) << shift;
+ }
+ return i;
+ }
+ int64_t FSDirectory::MMapIndexInput::getFilePointer() const{
+ return pos;
+ }
+ void FSDirectory::MMapIndexInput::seek(const int64_t pos){
+ this->pos=pos;
+ }
+
+ FSDirectory::MMapIndexInput::~MMapIndexInput(){
+ //Func - Destructor
+ //Pre - True
+ //Post - The file for which this instance is responsible has been closed.
+ // The instance has been destroyed
+
+ close();
+ }
+
+ IndexInput* FSDirectory::MMapIndexInput::clone() const
+ {
+ return _CLNEW FSDirectory::MMapIndexInput(*this);
+ }
+ void FSDirectory::MMapIndexInput::close() {
+ //IndexInput::close();
+
+ if ( !isClone ){
+#ifdef _CLCOMPILER_MSVC
+ if ( data != NULL ){
+ if ( ! UnmapViewOfFile(data) ){
+ CND_PRECONDITION( false, "UnmapViewOfFile(data) failed"); //todo: change to rich error
+ }
+ }
+
+ if ( mmaphandle != NULL ){
+ if ( ! CloseHandle(mmaphandle) ){
+ CND_PRECONDITION( false, "CloseHandle(mmaphandle) failed");
+ }
+ }
+ if ( fhandle != NULL ){
+ if ( !CloseHandle(fhandle) ){
+ CND_PRECONDITION( false, "CloseHandle(fhandle) failed");
+ }
+ }
+ mmaphandle = NULL;
+ fhandle = NULL;
+#else
+ if ( data != NULL )
+ ::munmap(data, _length);
+ if ( fhandle > 0 )
+ ::close(fhandle);
+ fhandle = 0;
+#endif
+ }
+ data = NULL;
+ pos = 0;
+ }
+
+
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/store/OutputStream.h b/src/3rdparty/clucene/src/CLucene/store/OutputStream.h
new file mode 100644
index 0000000..a82d671
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/store/OutputStream.h
@@ -0,0 +1,23 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_store_IndexOutput_
+#define _lucene_store_IndexOutput_
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+CL_NS_DEF(store)
+
+
+deprecated... please use IndexOutput.h header
+and change OutputStream to OutdexInput
+
+
+
+CL_NS_END
+
+#endif // _lucene_store_IndexOutput_
diff --git a/src/3rdparty/clucene/src/CLucene/store/RAMDirectory.cpp b/src/3rdparty/clucene/src/CLucene/store/RAMDirectory.cpp
new file mode 100644
index 0000000..b0a7c4d
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/store/RAMDirectory.cpp
@@ -0,0 +1,446 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+*/
+#include "CLucene/StdHeader.h"
+#include "RAMDirectory.h"
+
+#include "Lock.h"
+#include "Directory.h"
+#include "FSDirectory.h"
+#include "CLucene/index/IndexReader.h"
+#include "CLucene/util/VoidMap.h"
+#include "CLucene/util/Misc.h"
+#include "CLucene/debug/condition.h"
+
+CL_NS_USE(util)
+CL_NS_DEF(store)
+
+RAMFile::RAMFile()
+{
+ length = 0;
+ lastModified = Misc::currentTimeMillis();
+}
+
+RAMFile::~RAMFile()
+{
+}
+
+
+RAMDirectory::RAMLock::RAMLock(const QString& name, RAMDirectory* dir)
+ : directory(dir)
+{
+ fname = name;
+}
+
+RAMDirectory::RAMLock::~RAMLock()
+{
+ directory = NULL;
+}
+
+QString RAMDirectory::RAMLock::toString() const
+{
+ return QLatin1String("LockFile@RAM");
+}
+
+bool RAMDirectory::RAMLock::isLocked()
+{
+ return directory->fileExists(fname);
+}
+
+bool RAMDirectory::RAMLock::obtain()
+{
+ SCOPED_LOCK_MUTEX(directory->files_mutex);
+ if (!directory->fileExists(fname)) {
+ IndexOutput* tmp = directory->createOutput(fname);
+ tmp->close();
+ _CLDELETE(tmp);
+
+ return true;
+ }
+ return false;
+}
+
+void RAMDirectory::RAMLock::release()
+{
+ directory->deleteFile(fname);
+}
+
+RAMIndexOutput::~RAMIndexOutput()
+{
+ if (deleteFile)
+ _CLDELETE(file);
+ file = NULL;
+}
+
+RAMIndexOutput::RAMIndexOutput(RAMFile* f)
+ : file(f)
+{
+ pointer = 0;
+ deleteFile = false;
+}
+
+RAMIndexOutput::RAMIndexOutput()
+ : file(_CLNEW RAMFile)
+{
+ pointer = 0;
+ deleteFile = true;
+}
+
+void RAMIndexOutput::writeTo(IndexOutput* out)
+{
+ flush();
+ int64_t end = file->length;
+ int64_t pos = 0;
+ int32_t p = 0;
+ while (pos < end) {
+ int32_t length = CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE;
+ int64_t nextPos = pos + length;
+ if (nextPos > end) { // at the last buffer
+ length = (int32_t)(end - pos);
+ }
+ out->writeBytes((uint8_t*)file->buffers[p++], length);
+ pos = nextPos;
+ }
+}
+
+void RAMIndexOutput::reset()
+{
+ seek(_ILONGLONG(0));
+ file->length = _ILONGLONG(0);
+}
+
+void RAMIndexOutput::flushBuffer(const uint8_t* src, const int32_t len)
+{
+ uint8_t* b = NULL;
+ int32_t bufferPos = 0;
+ while (bufferPos != len) {
+ uint32_t bufferNumber = pointer/CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE;
+ int32_t bufferOffset = pointer%CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE;
+ int32_t bytesInBuffer = CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE - bufferOffset;
+ int32_t remainInSrcBuffer = len - bufferPos;
+ int32_t bytesToCopy = bytesInBuffer >= remainInSrcBuffer ? remainInSrcBuffer : bytesInBuffer;
+
+ if (bufferNumber == file->buffers.size()){
+ b = _CL_NEWARRAY(uint8_t, CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE);
+ file->buffers.push_back( b );
+ }else{
+ b = file->buffers[bufferNumber];
+ }
+ memcpy(b+bufferOffset, src+bufferPos, bytesToCopy * sizeof(uint8_t));
+ bufferPos += bytesToCopy;
+ pointer += bytesToCopy;
+ }
+ if (pointer > file->length)
+ file->length = pointer;
+
+ file->lastModified = Misc::currentTimeMillis();
+}
+
+void RAMIndexOutput::close()
+{
+ BufferedIndexOutput::close();
+}
+
+/** Random-at methods */
+void RAMIndexOutput::seek(const int64_t pos)
+{
+ BufferedIndexOutput::seek(pos);
+ pointer = (int32_t)pos;
+}
+
+int64_t RAMIndexOutput::length()
+{
+ return file->length;
+}
+
+
+RAMIndexInput::RAMIndexInput(RAMFile* f)
+ : file(f)
+{
+ pointer = 0;
+ _length = f->length;
+}
+
+RAMIndexInput::RAMIndexInput(const RAMIndexInput& other)
+ : BufferedIndexInput(other)
+{
+ file = other.file;
+ pointer = other.pointer;
+ _length = other._length;
+}
+
+RAMIndexInput::~RAMIndexInput()
+{
+ RAMIndexInput::close();
+}
+
+IndexInput* RAMIndexInput::clone() const
+{
+ return _CLNEW RAMIndexInput(*this);
+}
+
+int64_t RAMIndexInput::length()
+{
+ return _length;
+}
+
+QString RAMIndexInput::getDirectoryType() const
+{
+ return RAMDirectory::DirectoryType();
+}
+
+void RAMIndexInput::readInternal(uint8_t* dest, const int32_t len)
+{
+ const int64_t bytesAvailable = file->length - pointer;
+ int64_t remainder = len <= bytesAvailable ? len : bytesAvailable;
+ int32_t start = pointer;
+ int32_t destOffset = 0;
+ while (remainder != 0) {
+ int32_t bufferNumber = start / CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE;
+ int32_t bufferOffset = start % CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE;
+ int32_t bytesInBuffer = CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE - bufferOffset;
+
+ /* The buffer's entire length (bufferLength) is defined by IndexInput.h
+ ** as int32_t, so obviously the number of bytes in a given segment of the
+ ** buffer won't exceed the the capacity of int32_t. Therefore, the
+ ** int64_t->int32_t cast on the next line is safe. */
+ int32_t bytesToCopy = bytesInBuffer >= remainder ? static_cast<int32_t>(remainder) : bytesInBuffer;
+ uint8_t* b = file->buffers[bufferNumber];
+ memcpy(dest + destOffset, b + bufferOffset, bytesToCopy * sizeof(uint8_t));
+
+ destOffset += bytesToCopy;
+ start += bytesToCopy;
+ remainder -= bytesToCopy;
+ pointer += bytesToCopy;
+ }
+}
+
+void RAMIndexInput::close()
+{
+ BufferedIndexInput::close();
+}
+
+void RAMIndexInput::seekInternal(const int64_t pos)
+{
+ CND_PRECONDITION(pos >= 0 && pos < this->_length, "Seeking out of range")
+ pointer = (int32_t)pos;
+}
+
+// #pragma mark -- RAMDirectory
+
+QStringList RAMDirectory::list() const
+{
+ SCOPED_LOCK_MUTEX(files_mutex);
+
+ QStringList names;
+
+ FileMap::const_iterator itr;
+ for (itr = files.begin(); itr != files.end(); ++itr)
+ names.push_back(itr->first);
+
+ return names;
+}
+
+RAMDirectory::RAMDirectory()
+ : Directory()
+ , files(false, true)
+{
+}
+
+RAMDirectory::~RAMDirectory()
+{
+ //todo: should call close directory?
+}
+
+void RAMDirectory::_copyFromDir(Directory* dir, bool closeDir)
+{
+ QStringList names = dir->list();
+ uint8_t buf[CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE];
+
+ foreach (const QString& name, names) {
+ if (!CL_NS(index)::IndexReader::isLuceneFile(name))
+ continue;
+
+ // make place on ram disk
+ IndexOutput* os = createOutput(name);
+ // read current file
+ IndexInput* is = dir->openInput(name);
+
+ // and copy to ram disk
+ //todo: this could be a problem when copying from big indexes...
+ int64_t readCount = 0;
+ int64_t len = is->length();
+ while (readCount < len) {
+ int32_t toRead = CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE;
+ if ((readCount + toRead) > len)
+ toRead = int32_t(len - readCount);
+ is->readBytes(buf, toRead);
+ os->writeBytes(buf, toRead);
+ readCount += toRead;
+ }
+
+ // graceful cleanup
+ is->close();
+ _CLDELETE(is);
+ os->close();
+ _CLDELETE(os);
+ }
+ if (closeDir)
+ dir->close();
+}
+
+RAMDirectory::RAMDirectory(Directory* dir)
+ : Directory()
+ , files(false, true)
+{
+ _copyFromDir(dir, false);
+}
+
+RAMDirectory::RAMDirectory(const QString& dir)
+ : Directory()
+ , files(false, true)
+{
+ Directory* fsdir = FSDirectory::getDirectory(dir, false);
+ try {
+ _copyFromDir(fsdir, false);
+ } _CLFINALLY (
+ fsdir->close();
+ _CLDECDELETE(fsdir);
+ );
+}
+
+bool RAMDirectory::fileExists(const QString& name) const
+{
+ SCOPED_LOCK_MUTEX(files_mutex);
+ return files.exists(name);
+}
+
+int64_t RAMDirectory::fileModified(const QString& name) const
+{
+ SCOPED_LOCK_MUTEX(files_mutex);
+ const RAMFile* f = files.get(name);
+ return f->lastModified;
+}
+
+int64_t RAMDirectory::fileLength(const QString& name) const
+{
+ SCOPED_LOCK_MUTEX(files_mutex);
+ RAMFile* f = files.get(name);
+ return f->length;
+}
+
+
+IndexInput* RAMDirectory::openInput(const QString& name)
+{
+ SCOPED_LOCK_MUTEX(files_mutex);
+ RAMFile* file = files.get(name);
+ if (file == NULL) {
+ _CLTHROWA(CL_ERR_IO, // DSR:PROPOSED: Better error checking.
+ "[RAMDirectory::open] The requested file does not exist.");
+ }
+ return _CLNEW RAMIndexInput(file);
+}
+
+void RAMDirectory::close()
+{
+ SCOPED_LOCK_MUTEX(files_mutex);
+ files.clear();
+}
+
+bool RAMDirectory::doDeleteFile(const QString& name)
+{
+ SCOPED_LOCK_MUTEX(files_mutex);
+ files.remove(name);
+ return true;
+}
+
+void RAMDirectory::renameFile(const QString& from, const QString& to)
+{
+ SCOPED_LOCK_MUTEX(files_mutex);
+ FileMap::iterator itr = files.find(from);
+
+ /* DSR:CL_BUG_LEAK:
+ ** If a file named $to already existed, its old value was leaked.
+ ** My inclination would be to prevent this implicit deletion with an
+ ** exception, but it happens routinely in CLucene's internals (e.g., during
+ ** IndexWriter.addIndexes with the file named 'segments'). */
+ if (files.exists(to))
+ files.remove(to);
+
+ if (itr == files.end()) {
+ char tmp[1024];
+ _snprintf(tmp, 1024, "cannot rename %s, file does not exist",
+ from.toLocal8Bit().constData());
+ _CLTHROWT(CL_ERR_IO, tmp);
+ }
+
+ CND_PRECONDITION(itr != files.end(), "itr == files.end()")
+
+ RAMFile* file = itr->second;
+ files.removeitr(itr, true, true);
+ files.put(to, file);
+}
+
+
+void RAMDirectory::touchFile(const QString& name)
+{
+ RAMFile* file = NULL;
+ {
+ SCOPED_LOCK_MUTEX(files_mutex);
+ file = files.get(name);
+ }
+ uint64_t ts1 = file->lastModified;
+ uint64_t ts2 = Misc::currentTimeMillis();
+
+ //make sure that the time has actually changed
+ while (ts1 == ts2) {
+ _LUCENE_SLEEP(1);
+ ts2 = Misc::currentTimeMillis();
+ };
+
+ file->lastModified = ts2;
+}
+
+IndexOutput* RAMDirectory::createOutput(const QString& name)
+{
+ /* Check the $files VoidMap to see if there was a previous file named
+ ** $name. If so, delete the old RAMFile object, but reuse the existing
+ ** char buffer ($n) that holds the filename. If not, duplicate the
+ ** supplied filename buffer ($name) and pass ownership of that memory ($n)
+ ** to $files. */
+
+ SCOPED_LOCK_MUTEX(files_mutex);
+
+ QString n = files.getKey(name);
+ if (!n.isEmpty()) {
+ RAMFile* rf = files.get(name);
+ _CLDELETE(rf);
+ } else {
+ n = name;
+ }
+
+ RAMFile* file = _CLNEW RAMFile();
+#ifdef _DEBUG
+ file->filename = n;
+#endif
+ files[n] = file;
+
+ return _CLNEW RAMIndexOutput(file);
+}
+
+LuceneLock* RAMDirectory::makeLock(const QString& name)
+{
+ return _CLNEW RAMLock(name, this);
+}
+
+QString RAMDirectory::toString() const
+{
+ return QLatin1String("RAMDirectory");
+}
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/store/RAMDirectory.h b/src/3rdparty/clucene/src/CLucene/store/RAMDirectory.h
new file mode 100644
index 0000000..af92e30
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/store/RAMDirectory.h
@@ -0,0 +1,195 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+*/
+#ifndef _lucene_store_RAMDirectory_
+#define _lucene_store_RAMDirectory_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include <QtCore/QString>
+#include <QtCore/QStringList>
+
+#include "Lock.h"
+#include "Directory.h"
+#include "CLucene/util/VoidMap.h"
+#include "CLucene/util/Arrays.h"
+
+CL_NS_DEF(store)
+
+class RAMFile : LUCENE_BASE
+{
+public:
+ CL_NS(util)::CLVector<uint8_t*, CL_NS(util)::Deletor::Array<uint8_t> > buffers;
+ int64_t length;
+ uint64_t lastModified;
+
+#ifdef _DEBUG
+ QString filename;
+#endif
+
+ RAMFile();
+ ~RAMFile();
+};
+
+class RAMIndexOutput : public BufferedIndexOutput
+{
+protected:
+ RAMFile* file;
+ int32_t pointer;
+ bool deleteFile;
+
+ // output methods:
+ void flushBuffer(const uint8_t* src, const int32_t len);
+
+public:
+ RAMIndexOutput(RAMFile* f);
+ RAMIndexOutput();
+ /** Construct an empty output buffer. */
+ virtual ~RAMIndexOutput();
+
+ virtual void close();
+
+ // Random-at methods
+ virtual void seek(const int64_t pos);
+ int64_t length();
+ /** Resets this to an empty buffer. */
+ void reset();
+ /** Copy the current contents of this buffer to the named output. */
+ void writeTo(IndexOutput* output);
+};
+
+class RAMIndexInput : public BufferedIndexInput
+{
+private:
+ RAMFile* file;
+ int32_t pointer;
+ int64_t _length;
+
+protected:
+ /** IndexInput methods */
+ RAMIndexInput(const RAMIndexInput& clone);
+ void readInternal(uint8_t *dest, const int32_t len);
+
+ /** Random-at methods */
+ void seekInternal(const int64_t pos);
+
+public:
+ RAMIndexInput(RAMFile* f);
+ ~RAMIndexInput();
+ IndexInput* clone() const;
+
+ void close();
+ int64_t length();
+ QString getDirectoryType() const;
+};
+
+
+/**
+* A memory-resident {@link Directory} implementation.
+*/
+class RAMDirectory : public Directory
+{
+ class RAMLock : public LuceneLock
+ {
+ private:
+ RAMDirectory* directory;
+ QString fname;
+ public:
+ RAMLock(const QString& name, RAMDirectory* dir);
+ virtual ~RAMLock();
+ bool obtain();
+ void release();
+ bool isLocked();
+ virtual QString toString() const;
+ };
+
+ typedef CL_NS(util)::CLHashMap<QString, RAMFile*,
+ CL_NS(util)::Compare::Qstring, CL_NS(util)::Equals::Qstring,
+ CL_NS(util)::Deletor::DummyQString,
+ CL_NS(util)::Deletor::Object<RAMFile> > FileMap;
+
+protected:
+ /// Removes an existing file in the directory.
+ virtual bool doDeleteFile(const QString& name);
+
+ /**
+ * Creates a new <code>RAMDirectory</code> instance from a different
+ * <code>Directory</code> implementation. This can be used to load
+ * a disk-based index into memory.
+ * <P>
+ * This should be used only with indices that can fit into memory.
+ *
+ * @param dir a <code>Directory</code> value
+ * @exception IOException if an error occurs
+ */
+ void _copyFromDir(Directory* dir, bool closeDir);
+ FileMap files; // unlike the java Hashtable, FileMap is not synchronized, and all access must be protected by a lock
+
+public:
+#ifndef _CL_DISABLE_MULTITHREADING //do this so that the mutable keyword still works without mt enabled
+ mutable DEFINE_MUTEX(files_mutex) // mutable: const methods must also be able to synchronize properly
+#endif
+
+ // Returns a null terminated array of strings, one for each file in the directory.
+ QStringList list() const;
+
+ /** Constructs an empty {@link Directory}. */
+ RAMDirectory();
+
+ // Destructor - only call this if you are sure the directory
+ // is not being used anymore. Otherwise use the ref-counting
+ // facilities of dir->close
+ virtual ~RAMDirectory();
+ RAMDirectory(Directory* dir);
+
+ /**
+ * Creates a new <code>RAMDirectory</code> instance from the {@link FSDirectory}.
+ *
+ * @param dir a <code>String</code> specifying the full index directory path
+ */
+ RAMDirectory(const QString& dir);
+
+ /// Returns true iff the named file exists in this directory.
+ bool fileExists(const QString& name) const;
+
+ /// Returns the time the named file was last modified.
+ int64_t fileModified(const QString& name) const;
+
+ /// Returns the length in bytes of a file in the directory.
+ int64_t fileLength(const QString& name) const;
+
+ /// Removes an existing file in the directory.
+ virtual void renameFile(const QString& from, const QString& to);
+
+ /** Set the modified time of an existing file to now. */
+ void touchFile(const QString& name);
+
+ /// Creates a new, empty file in the directory with the given name.
+ /// Returns a stream writing this file.
+ virtual IndexOutput* createOutput(const QString& name);
+
+ /// Construct a {@link Lock}.
+ /// @param name the name of the lock file
+ LuceneLock* makeLock(const QString& name);
+
+ /// Returns a stream reading an existing file.
+ IndexInput* openInput(const QString& name);
+
+ virtual void close();
+
+ QString toString() const;
+
+ static QString DirectoryType() { return QLatin1String("RAM"); }
+ QString getDirectoryType() const { return DirectoryType(); }
+};
+
+CL_NS_END
+
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/store/TransactionalRAMDirectory.cpp b/src/3rdparty/clucene/src/CLucene/store/TransactionalRAMDirectory.cpp
new file mode 100644
index 0000000..056fa9b
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/store/TransactionalRAMDirectory.cpp
@@ -0,0 +1,212 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright(C) 2007, 2008 by Nokia Corporation and/or its subsidiary(-ies), all rights reserved.
+*/
+#include "CLucene/StdHeader.h"
+#include "TransactionalRAMDirectory.h"
+
+CL_NS_DEF(store)
+CL_NS_USE(util)
+
+TransactionalRAMDirectory::TransactionalRAMDirectory()
+ : RAMDirectory()
+ , filesToRestoreOnAbort(false, true)
+{
+ transOpen = false;
+}
+
+TransactionalRAMDirectory::~TransactionalRAMDirectory()
+{
+}
+
+bool TransactionalRAMDirectory::archiveOrigFileIfNecessary(const QString& name)
+{
+ // If a file named $name was present when the transaction started and the
+ // original RAMFile object has not been archived for restoration upon
+ // transaction abort, then do so, and return true.
+ // In any other case, return false.
+ if (fileExists(name) && filesToRemoveOnAbort.find(name) == filesToRemoveOnAbort.end()) {
+ // The file exists, but isn't recorded as having been created after the
+ // start of the transaction, so it must've been present at the start of
+ // the transaction.
+
+ // Transfer memory ownership of both the key and the value from files to
+ // filesToRestoreOnAbort.
+ QString origName = files.getKey(name);
+ RAMFile* origFile = files.get(name);
+ files.remove(name, true, true);
+ filesToRestoreOnAbort.put(origName, origFile);
+
+ CND_CONDITION(!fileExists(name),
+ "File should not exist immediately after archival.");
+ return true;
+ }
+
+ return false;
+}
+
+void TransactionalRAMDirectory::unarchiveOrigFile(const QString& name)
+{
+ QString origName = filesToRestoreOnAbort.getKey(name);
+ if (origName.isEmpty()) {
+ _CLTHROWA(CL_ERR_RAMTransaction,
+ "File submitted for unarchival was not archived.");
+ }
+ RAMFile* origFile = filesToRestoreOnAbort.get(name);
+ // Transfer memory ownership back to files from filesToRestoreOnAbort.
+ filesToRestoreOnAbort.remove(name, true, true);
+ files.put(origName, origFile);
+}
+
+bool TransactionalRAMDirectory::transIsOpen() const
+{
+ return transOpen;
+}
+
+void TransactionalRAMDirectory::transStart()
+{
+ if (transOpen) {
+ _CLTHROWA(CL_ERR_RAMTransaction,
+ "Must resolve previous transaction before starting another.");
+ }
+
+ CND_CONDITION(filesToRemoveOnAbort.size() == 0,
+ "filesToRemoveOnAbort should have been cleared by either its"
+ " constructor or transResolved.");
+
+ CND_CONDITION(filesToRestoreOnAbort.size() == 0,
+ "filesToRestoreOnAbort should have been cleared by either its"
+ " constructor or transResolved.");
+
+ transOpen = true;
+}
+
+void TransactionalRAMDirectory::transResolved()
+{
+ // This method implements actions common to both forms of transaction
+ // resolution.
+ filesToRemoveOnAbort.clear();
+ filesToRestoreOnAbort.clear();
+ transOpen = false;
+}
+
+void TransactionalRAMDirectory::transCommit()
+{
+ if (!transOpen)
+ _CLTHROWA(CL_ERR_RAMTransaction, "There is no open transaction.");
+
+ // All storage is in memory, so commit is ultra-simple.
+ transResolved();
+}
+
+void TransactionalRAMDirectory::transAbort()
+{
+ if (!transOpen)
+ _CLTHROWA(CL_ERR_RAMTransaction, "There is no open transaction.");
+
+ // Delete each file in filesToRemoveOnAbort.
+ FilenameSet::const_iterator itrDel = filesToRemoveOnAbort.begin();
+ for ( ; itrDel != filesToRemoveOnAbort.end(); ++itrDel) {
+ size_t nameLength = itrDel->first.length();
+
+ // Special exception: Refrain from deleting a lock's flag file, as that
+ // would interfere with the operation of the lock.
+ if (!(nameLength >= 5
+ && itrDel->first.rightRef(5) == QLatin1String(".lock"))) {
+ RAMDirectory::deleteFile(itrDel->first);
+ }
+ }
+ // Ownership of the memory of both the key and the value never left files,
+ // so there's no need for a special directive to filesToRemoveOnAbort.
+ filesToRemoveOnAbort.clear();
+
+ // Now that any new-since-trans-start files with the same names as
+ // already-present-at-trans-start files are out of the way, restore each
+ // file in filesToRestoreOnAbort.
+ TransFileMap::const_iterator itr = filesToRestoreOnAbort.begin();
+ for ( ; itr != filesToRestoreOnAbort.end(); ++itr) {
+ files.put(itr->first, itr->second);
+ filesToRestoreOnAbort.remove(itr->first);
+ }
+
+ CND_CONDITION(filesToRestoreOnAbort.size() == 0,
+ "filesToRestoreOnAbort should be empty.");
+
+ transResolved();
+}
+
+bool TransactionalRAMDirectory::doDeleteFile(const QString& name)
+{
+ if (!transOpen)
+ return RAMDirectory::doDeleteFile(name);
+
+ bool wasOriginalAndWasArchived = archiveOrigFileIfNecessary(name);
+ if (!wasOriginalAndWasArchived) {
+ // The file to be deleted wasn't present at transaction start, so instead
+ // of archiving it, we delete it the conventional way, making sure to
+ // erase its record in filesToRemoveOnAbort if it was listed there.
+ filesToRemoveOnAbort.remove(name);
+ return RAMDirectory::doDeleteFile(name);
+ }
+ return true;
+}
+
+void TransactionalRAMDirectory::renameFile(const QString& from, const QString& to)
+{
+ // During the review on 2005.03.18, decided not to implement transactional
+ // renameFile for two reasons:
+ // a) It's not needed in the limited scenario for which
+ // TransactionalRAMDirectory was designed (IndexWriter::addDocument and
+ // subcode).
+ // b) Supporting renaming during a transaction would add considerable
+ // bookkeeping overhead, reducing the performance of the overwhelmingly
+ // typical case (commit) in order to support the rare case (abort).
+ //
+ // This was not a thinly disguised punt due to the complication of
+ // implementing renameFile transactionally; rather, several implementations
+ // were considered, but it seemed wrongheaded to degrade the performance of
+ // the typical case based on the mere potential need to support renameFile
+ // at some future point for the benefit of the atypical case.
+ if (transOpen) {
+ _CLTHROWA(CL_ERR_RAMTransaction,
+ "TransactionalRAMDirectory disallows renameFile during a transaction.");
+ }
+ RAMDirectory::renameFile(from, to);
+}
+
+IndexOutput* TransactionalRAMDirectory::createOutput(const QString& name)
+{
+ if (!transOpen)
+ return RAMDirectory::createOutput(name);
+
+ bool wasOriginalAndWasArchived = archiveOrigFileIfNecessary(name);
+ try {
+ IndexOutput* ret = RAMDirectory::createOutput(name);
+ // Importantly, we store a pointer to the filename memory managed by
+ // files, rather than that passed in by the client (name). We don't make
+ // an additional copy of the filename's memory because the transactional
+ // metadata container filesToRemoveOnAbort is not at risk of outliving
+ // files.
+ filesToRemoveOnAbort.put(files.getKey(name), NULL);
+ return ret;
+ } catch (...) {
+ if (wasOriginalAndWasArchived) {
+ unarchiveOrigFile(name);
+ }
+ throw;
+ }
+}
+
+void TransactionalRAMDirectory::close()
+{
+ if (transOpen)
+ transAbort();
+
+ RAMDirectory::close();
+}
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/store/TransactionalRAMDirectory.h b/src/3rdparty/clucene/src/CLucene/store/TransactionalRAMDirectory.h
new file mode 100644
index 0000000..44c5e8e
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/store/TransactionalRAMDirectory.h
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright(C) 2007, 2008 by Nokia Corporation and/or its subsidiary(-ies), all rights reserved.
+*/
+#ifndef _lucene_store_TransactionalRAMDirectory_
+#define _lucene_store_TransactionalRAMDirectory_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include <QtCore/QString>
+
+#include "RAMDirectory.h"
+#include "CLucene/util/VoidList.h"
+
+CL_NS_DEF(store)
+
+/***
+This transactional in-memory Directory was created to address a specific
+situation, and was deliberately pared down to the simplest viable
+implementation. For the sake of simplicity, this implementation imposes
+restrictions on what operations can be performed in the directory while a
+transaction is in progress (documented in TransactionalRAMDirectory.cpp).
+
+Because the Lucene Directory interface itself is rather simplistic, it
+would not be difficult to expand TransactionalRAMDirectory so that it
+provided fully general transactionality. However, the developer of this
+original implementation was of the opinion that the last thing CLucene
+needs is gratuitous features that exceed their required complexity and
+haven't been rigorously tested.
+*/
+class TransactionalRAMDirectory : public RAMDirectory
+{
+private:
+ typedef CL_NS(util)::CLSet<QString, void*, CL_NS(util)::Compare::Qstring,
+ CL_NS(util)::Deletor::DummyQString> FilenameSet;
+ FilenameSet filesToRemoveOnAbort;
+
+ typedef CL_NS(util)::CLSet<QString, RAMFile*, CL_NS(util)::Compare::Qstring,
+ CL_NS(util)::Deletor::DummyQString,
+ CL_NS(util)::Deletor::Object<RAMFile> > TransFileMap;
+ TransFileMap filesToRestoreOnAbort;
+
+ bool transOpen;
+
+ void transResolved();
+ bool archiveOrigFileIfNecessary(const QString& name);
+ void unarchiveOrigFile(const QString& name);
+
+protected:
+ bool doDeleteFile(const QString& name);
+
+public:
+ TransactionalRAMDirectory();
+ virtual ~TransactionalRAMDirectory();
+
+ bool transIsOpen() const;
+ void transStart();
+ void transCommit();
+ void transAbort();
+
+ // Constrained operations:
+ void renameFile(const QString& from, const QString& to);
+ IndexOutput* createOutput(const QString& name);
+
+ void close();
+};
+
+CL_NS_END
+
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/util/Arrays.h b/src/3rdparty/clucene/src/CLucene/util/Arrays.h
new file mode 100644
index 0000000..ba60c56
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/util/Arrays.h
@@ -0,0 +1,164 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_util_Arrays_
+#define _lucene_util_Arrays_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "VoidList.h"
+
+CL_NS_DEF(util)
+ class Arrays{
+ public:
+ template<typename _type>
+ class _Arrays {
+ protected:
+ //used by binarySearch to check for equality
+ virtual bool equals(_type a,_type b) const = 0;
+ virtual int32_t compare(_type a,_type b) const = 0;
+ public:
+ virtual ~_Arrays(){
+ }
+
+ void sort(_type* a, int32_t alen, int32_t fromIndex, int32_t toIndex) const{
+ CND_PRECONDITION(fromIndex < toIndex,"fromIndex >= toIndex");
+ CND_PRECONDITION(fromIndex >= 0,"fromIndex < 0");
+
+ // First presort the array in chunks of length 6 with insertion
+ // sort. A mergesort would give too much overhead for this length.
+ for (int32_t chunk = fromIndex; chunk < toIndex; chunk += 6)
+ {
+ int32_t end = min(chunk + 6, toIndex);
+ for (int32_t i = chunk + 1; i < end; i++)
+ {
+ if (compare(a[i - 1], a[i]) > 0)
+ {
+ // not already sorted
+ int32_t j = i;
+ _type elem = a[j];
+ do
+ {
+ a[j] = a[j - 1];
+ j--;
+ }
+ while (j > chunk && compare(a[j - 1], elem) > 0);
+ a[j] = elem;
+ }
+ }
+ }
+
+ int32_t len = toIndex - fromIndex;
+ // If length is smaller or equal 6 we are done.
+ if (len <= 6)
+ return;
+
+ _type* src = a;
+ _type* dest = _CL_NEWARRAY(_type,alen);
+ _type* t = NULL; // t is used for swapping src and dest
+
+ // The difference of the fromIndex of the src and dest array.
+ int32_t srcDestDiff = -fromIndex;
+
+ // The merges are done in this loop
+ for (int32_t size = 6; size < len; size <<= 1)
+ {
+ for (int32_t start = fromIndex; start < toIndex; start += size << 1)
+ {
+ // mid is the start of the second sublist;
+ // end the start of the next sublist (or end of array).
+ int32_t mid = start + size;
+ int32_t end = min(toIndex, mid + size);
+
+ // The second list is empty or the elements are already in
+ // order - no need to merge
+ if (mid >= end || compare(src[mid - 1], src[mid]) <= 0)
+ {
+ memcpy(dest + start + srcDestDiff, src+start, (end-start)*sizeof(_type));
+ }// The two halves just need swapping - no need to merge
+ else if (compare(src[start], src[end - 1]) > 0)
+ {
+ memcpy(dest+end-size+srcDestDiff, src+start, size * sizeof(_type));
+ memcpy(dest+start+srcDestDiff, src+mid, (end-mid) * sizeof(_type));
+
+ }else{
+ // Declare a lot of variables to save repeating
+ // calculations. Hopefully a decent JIT will put these
+ // in registers and make this fast
+ int32_t p1 = start;
+ int32_t p2 = mid;
+ int32_t i = start + srcDestDiff;
+
+ // The main merge loop; terminates as soon as either
+ // half is ended
+ while (p1 < mid && p2 < end)
+ {
+ dest[i++] = src[(compare(src[p1], src[p2]) <= 0
+ ? p1++ : p2++)];
+ }
+
+ // Finish up by copying the remainder of whichever half
+ // wasn't finished.
+ if (p1 < mid)
+ memcpy(dest+i,src+p1, (mid-p1) * sizeof(_type));
+ else
+ memcpy(dest+i,src+p2, (end-p2) * sizeof(_type));
+ }
+ }
+ // swap src and dest ready for the next merge
+ t = src;
+ src = dest;
+ dest = t;
+ fromIndex += srcDestDiff;
+ toIndex += srcDestDiff;
+ srcDestDiff = -srcDestDiff;
+ }
+
+ // make sure the result ends up back in the right place. Note
+ // that src and dest may have been swapped above, so src
+ // contains the sorted array.
+ if (src != a)
+ {
+ // Note that fromIndex == 0.
+ memcpy(a+srcDestDiff,src,toIndex * sizeof(_type));
+ }
+ }
+ };
+ };
+
+ template <typename _kt, typename _comparator,
+ typename class1, typename class2>
+ class CLListEquals:
+ public CL_NS_STD(binary_function)<class1*,class2*,bool>
+ {
+ typedef typename class1::const_iterator _itr1;
+ typedef typename class2::const_iterator _itr2;
+ public:
+ CLListEquals(){
+ }
+ bool equals( class1* val1, class2* val2 ) const{
+ static _comparator comp;
+ if ( val1 == val2 )
+ return true;
+ size_t size = val1->size();
+ if ( size != val2->size() )
+ return false;
+
+ _itr1 itr1 = val1->begin();
+ _itr2 itr2 = val2->begin();
+ while ( --size >= 0 ){
+ if ( !comp(*itr1,*itr2) )
+ return false;
+ itr1++;
+ itr2++;
+ }
+ return true;
+ }
+ };
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/util/BitSet.cpp b/src/3rdparty/clucene/src/CLucene/util/BitSet.cpp
new file mode 100644
index 0000000..3679bd1
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/util/BitSet.cpp
@@ -0,0 +1,119 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright(C) 2007, 2008 by Nokia Corporation and/or its subsidiary(-ies), all rights reserved.
+*/
+#include "CLucene/StdHeader.h"
+#include "BitSet.h"
+#include "CLucene/store/Directory.h"
+
+CL_NS_USE(store)
+CL_NS_DEF(util)
+
+BitSet::BitSet(const BitSet& copy)
+ : _size(copy._size)
+ , _count(-1)
+{
+ int32_t len = (_size >> 3) + 1;
+ bits = _CL_NEWARRAY(uint8_t, len);
+ memcpy(bits, copy.bits, len);
+}
+
+BitSet::BitSet(int32_t size)
+ : _size(size)
+ , _count(-1)
+{
+ int32_t len = (_size >> 3) + 1;
+ bits = _CL_NEWARRAY(uint8_t, len);
+ memset(bits, 0, len);
+}
+
+BitSet::BitSet(CL_NS(store)::Directory* d, const QString& name)
+{
+ _count = -1;
+ CL_NS(store)::IndexInput* input = d->openInput(name);
+ try {
+ _size = input->readInt(); // read size
+ _count = input->readInt(); // read count
+
+ bits = _CL_NEWARRAY(uint8_t,(_size >> 3) + 1); // allocate bits
+ input->readBytes(bits, (_size >> 3) + 1); // read bits
+ } _CLFINALLY (
+ input->close();
+ _CLDELETE(input );
+ );
+}
+
+void BitSet::write(CL_NS(store)::Directory* d, const QString& name)
+{
+ CL_NS(store)::IndexOutput* output = d->createOutput(name);
+ try {
+ output->writeInt(size()); // write size
+ output->writeInt(count()); // write count
+ output->writeBytes(bits, (_size >> 3) + 1); // write bits
+ } _CLFINALLY (
+ output->close();
+ _CLDELETE(output);
+ );
+}
+
+BitSet::~BitSet()
+{
+ _CLDELETE_ARRAY(bits);
+}
+
+void BitSet::set(int32_t bit, bool val)
+{
+ if (val)
+ bits[bit >> 3] |= 1 << (bit & 7);
+ else
+ bits[bit >> 3] &= ~(1 << (bit & 7));
+
+ _count = -1;
+}
+
+int32_t BitSet::size() const
+{
+ return _size;
+}
+
+int32_t BitSet::count()
+{
+ // if the BitSet has been modified
+ if (_count == -1) {
+ static const uint8_t BYTE_COUNTS[] = {
+ 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4,
+ 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
+ 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
+ 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
+ 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
+ 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
+ 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
+ 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
+ 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
+ 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
+ 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
+ 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
+ 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
+ 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
+ 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
+ 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8};
+
+ int32_t c = 0;
+ int32_t end = (_size >> 3) + 1;
+ for (int32_t i = 0; i < end; i++)
+ c += BYTE_COUNTS[bits[i]]; // sum bits per uint8_t
+ _count = c;
+ }
+ return _count;
+}
+
+BitSet* BitSet::clone() const
+{
+ return _CLNEW BitSet(*this);
+}
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/util/BitSet.h b/src/3rdparty/clucene/src/CLucene/util/BitSet.h
new file mode 100644
index 0000000..e93847e
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/util/BitSet.h
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright(C) 2007, 2008 by Nokia Corporation and/or its subsidiary(-ies), all rights reserved.
+*/
+#ifndef _lucene_util_BitSet_
+#define _lucene_util_BitSet_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include <QtCore/QString>
+
+#include "CLucene/store/Directory.h"
+
+CL_NS_DEF(util)
+
+class BitSet : LUCENE_BASE
+{
+public:
+ // Create a bitset with the specified size
+ BitSet (int32_t size);
+ BitSet(CL_NS(store)::Directory* d, const QString& name);
+ void write(CL_NS(store)::Directory* d, const QString& name);
+
+ // Destructor for the bit set
+ ~BitSet();
+
+ // get the value of the specified bit
+ inline bool get(const int32_t bit) const
+ {
+ return (bits[bit >> 3] & (1 << (bit & 7))) != 0;
+ }
+
+ // set the value of the specified bit
+ void set(int32_t bit, bool val = true);
+
+ ///returns the size of the bitset
+ int32_t size() const;
+
+ // Returns the total number of one bits in this BitSet. This is
+ // efficiently computed and cached, so that, if the BitSet is not changed,
+ // no recomputation is done for repeated calls.
+ int32_t count();
+ BitSet *clone() const;
+
+protected:
+ BitSet(const BitSet& copy);
+
+private:
+ int32_t _size;
+ int32_t _count;
+ uint8_t *bits;
+};
+
+CL_NS_END
+
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/util/Equators.cpp b/src/3rdparty/clucene/src/CLucene/util/Equators.cpp
new file mode 100644
index 0000000..e112bd2
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/util/Equators.cpp
@@ -0,0 +1,180 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright(C) 2007, 2008 by Nokia Corporation and/or its subsidiary(-ies), all rights reserved.
+*/
+#include "CLucene/StdHeader.h"
+#include "Equators.h"
+
+CL_NS_DEF(util)
+
+bool Equals::Int32::operator()(const int32_t val1, const int32_t val2) const
+{
+ return (val1)==(val2);
+}
+
+bool Equals::Char::operator()(const char* val1, const char* val2) const
+{
+ if ( val1 == val2 )
+ return true;
+ return (strcmp(val1, val2) == 0);
+}
+
+#ifdef _UCS2
+bool Equals::WChar::operator()(const wchar_t* val1, const wchar_t* val2) const
+{
+ if (val1 == val2)
+ return true;
+ return (_tcscmp(val1, val2) == 0);
+}
+#endif
+
+bool Equals::Qstring::operator()(const QString& val1, const QString& val2) const
+{
+ return (val1 == val2);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// Comparors
+///////////////////////////////////////////////////////////////////////////////
+
+int32_t Compare::Int32::getValue() const
+{
+ return value;
+}
+
+Compare::Int32::Int32(int32_t val)
+{
+ value = val;
+}
+
+Compare::Int32::Int32()
+{
+ value = 0;
+}
+
+int32_t Compare::Int32::compareTo(void* o)
+{
+ try {
+ Int32* other = (Int32*)o;
+ if (value == other->value)
+ return 0;
+ // Returns just -1 or 1 on inequality; doing math might overflow.
+ return value > other->value ? 1 : -1;
+ } catch(...) {
+ _CLTHROWA(CL_ERR_Runtime, "Couldnt compare types");
+ }
+}
+
+bool Compare::Int32::operator()(int32_t t1, int32_t t2) const
+{
+ return t1 > t2 ? true : false;
+}
+
+size_t Compare::Int32::operator()(int32_t t) const
+{
+ return t;
+}
+
+qreal Compare::Float::getValue() const
+{
+ return value;
+}
+
+Compare::Float::Float(qreal val)
+{
+ value = val;
+}
+
+int32_t Compare::Float::compareTo(void* o)
+{
+ try {
+ Float* other = (Float*)o;
+ if (value == other->value)
+ return 0;
+ // Returns just -1 or 1 on inequality; doing math might overflow.
+ return value > other->value ? 1 : -1;
+ } catch(...) {
+ _CLTHROWA(CL_ERR_Runtime,"Couldnt compare types");
+ }
+}
+
+bool Compare::Char::operator()(const char* val1, const char* val2) const
+{
+ if ( val1 == val2)
+ return false;
+ return (strcmp(val1, val2) < 0);
+}
+
+size_t Compare::Char::operator()(const char* val1) const
+{
+ return CL_NS(util)::Misc::ahashCode(val1);
+}
+
+#ifdef _UCS2
+bool Compare::WChar::operator()(const wchar_t* val1, const wchar_t* val2) const
+{
+ if ( val1==val2)
+ return false;
+ return (_tcscmp(val1, val2) < 0);
+}
+
+size_t Compare::WChar::operator()(const wchar_t* val1) const
+{
+ return CL_NS(util)::Misc::whashCode(val1);
+}
+#endif
+
+const TCHAR* Compare::TChar::getValue() const
+{
+ return s;
+}
+
+Compare::TChar::TChar()
+{
+ s = NULL;
+}
+
+Compare::TChar::TChar(const TCHAR* str)
+{
+ this->s = str;
+}
+
+int32_t Compare::TChar::compareTo(void* o)
+{
+ try {
+ TChar* os = (TChar*)o;
+ return _tcscmp(s, os->s);
+ } catch(...) {
+ _CLTHROWA(CL_ERR_Runtime,"Couldnt compare types");
+ }
+
+}
+
+bool Compare::TChar::operator()(const TCHAR* val1, const TCHAR* val2) const
+{
+ if (val1 == val2)
+ return false;
+
+ return (_tcscmp(val1, val2) < 0);
+}
+
+size_t Compare::TChar::operator()(const TCHAR* val1) const
+{
+ return CL_NS(util)::Misc::thashCode(val1);
+}
+
+bool Compare::Qstring::operator()(const QString& val1, const QString& val2) const
+{
+ return (val1 < val2);
+}
+
+size_t Compare::Qstring::operator ()(const QString& val1) const
+{
+ return CL_NS(util)::Misc::qhashCode(val1);
+}
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/util/Equators.h b/src/3rdparty/clucene/src/CLucene/util/Equators.h
new file mode 100644
index 0000000..11fcb0e
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/util/Equators.h
@@ -0,0 +1,274 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright(C) 2007, 2008 by Nokia Corporation and/or its subsidiary(-ies), all rights reserved.
+*/
+#ifndef _lucene_util_Equators_
+#define _lucene_util_Equators_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include <QtCore/QString>
+
+//#ifdef QT_LINUXBASE
+// we are going to use qreal now, we basically maintain our own clucene anyway
+//// LSB doesn't define float_t - see http://bugs.linuxbase.org/show_bug.cgi?id=2374
+//typedef float float_t;
+//#endif
+
+CL_NS_DEF(util)
+
+///////////////////////////////////////////////////////////////////////////////
+// Equators
+///////////////////////////////////////////////////////////////////////////////
+
+class Equals{
+public:
+ class Int32:public CL_NS_STD(binary_function)<const int32_t*,const int32_t*,bool>
+ {
+ public:
+ bool operator()( const int32_t val1, const int32_t val2 ) const;
+ };
+
+ class Char:public CL_NS_STD(binary_function)<const char*,const char*,bool>
+ {
+ public:
+ bool operator()( const char* val1, const char* val2 ) const;
+ };
+#ifdef _UCS2
+ class WChar: public CL_NS_STD(binary_function)<const wchar_t*,const wchar_t*,bool>
+ {
+ public:
+ bool operator()( const wchar_t* val1, const wchar_t* val2 ) const;
+ };
+ class TChar: public WChar{
+ };
+#else
+ class TChar: public Char{
+ };
+#endif
+
+ template<typename _cl>
+ class Void:public CL_NS_STD(binary_function)<const void*,const void*,bool>
+ {
+ public:
+ bool operator()( _cl* val1, _cl* val2 ) const{
+ return val1==val2;
+ }
+ };
+
+ class Qstring : public CL_NS_STD(binary_function)<const QString&, const QString&, bool>
+ {
+ public:
+ bool operator() (const QString& val1, const QString& val2) const;
+ };
+};
+
+
+///////////////////////////////////////////////////////////////////////////////
+// Comparors
+///////////////////////////////////////////////////////////////////////////////
+
+class Comparable : LUCENE_BASE
+{
+public:
+ virtual ~Comparable(){
+ }
+
+ virtual int32_t compareTo(void* o) = 0;
+};
+
+/** @internal */
+class Compare{
+public:
+ class _base
+ { // traits class for hash containers
+ public:
+ enum
+ { // parameters for hash table
+ bucket_size = 4, // 0 < bucket_size
+ min_buckets = 8
+ }; // min_buckets = 2 ^^ N, 0 < N
+
+ _base()
+ {
+ }
+ };
+
+ class Int32:public _base, public Comparable{
+ int32_t value;
+ public:
+ int32_t getValue() const;
+ Int32(int32_t val);
+ Int32();
+ int32_t compareTo(void* o);
+ bool operator()( int32_t t1, int32_t t2 ) const;
+ size_t operator()( int32_t t ) const;
+ };
+
+
+ class Float:public Comparable{
+ qreal value;
+ public:
+ qreal getValue() const;
+ Float(qreal val);
+ int32_t compareTo(void* o);
+ };
+
+
+ class Char: public _base //<char*>
+ {
+ public:
+ bool operator()( const char* val1, const char* val2 ) const;
+ size_t operator()( const char* val1) const;
+ };
+
+#ifdef _UCS2
+ class WChar: public _base //<wchar_t*>
+ {
+ public:
+ bool operator()( const wchar_t* val1, const wchar_t* val2 ) const;
+ size_t operator()( const wchar_t* val1) const;
+ };
+#endif
+
+ class TChar: public _base, public Comparable{
+ const TCHAR* s;
+ public:
+ const TCHAR* getValue() const;
+
+ TChar();
+ TChar(const TCHAR* str);
+ int32_t compareTo(void* o);
+ bool operator()( const TCHAR* val1, const TCHAR* val2 ) const;
+ size_t operator()( const TCHAR* val1) const;
+ };
+
+
+ template<typename _cl>
+ class Void:public _base //<const void*,const void*,bool>
+ {
+ public:
+ int32_t compareTo(_cl* o){
+ if ( this == o )
+ return o;
+ else
+ return this > o ? 1 : -1;
+ }
+ bool operator()( _cl* t1, _cl* t2 ) const{
+ return t1 > t2 ? true : false;
+ }
+ size_t operator()( _cl* t ) const{
+ return (size_t)t;
+ }
+ };
+
+ class Qstring : public _base
+ {
+ public:
+ bool operator() (const QString& val1, const QString& val2) const;
+ size_t operator() (const QString& val1) const;
+ };
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// allocators
+///////////////////////////////////////////////////////////////////////////////
+
+class Deletor
+{
+public:
+
+ template<typename _kt>
+ class Array{
+ public:
+ static void doDelete(_kt* arr){
+ _CLDELETE_LARRAY(arr);
+ }
+ };
+ class tcArray{
+ public:
+ static void doDelete(const TCHAR* arr){
+ _CLDELETE_CARRAY(arr);
+ }
+ };
+ class acArray{
+ public:
+ static void doDelete(const char* arr){
+ _CLDELETE_CaARRAY(arr);
+ }
+ };
+
+ class Unintern{
+ public:
+ static void doDelete(TCHAR* arr);
+ };
+ template<typename _kt>
+ class Object{
+ public:
+ static void doDelete(_kt* obj){
+ _CLLDELETE(obj);
+ }
+ };
+ template<typename _kt>
+ class Void{
+ public:
+ static void doDelete(_kt* obj){
+ _CLVDELETE(obj);
+ }
+ };
+ class Dummy{
+ public:
+ static void doDelete(const void* nothing)
+ {
+ // TODO: remove all occurances where it hits this point
+ // CND_WARNING(false, "Deletor::Dummy::doDelete run, set deleteKey
+ // or deleteValue to false");
+ }
+ };
+ class DummyInt32{
+ public:
+ static void doDelete(const int32_t nothing){
+ }
+ };
+ class DummyFloat{
+ public:
+ static void doDelete(const qreal nothing){
+ }
+ };
+ template <typename _type>
+ class ConstNullVal{
+ public:
+ static void doDelete(const _type nothing)
+ {
+ // TODO: remove all occurances where it hits this point
+ // CND_WARNING(false, "Deletor::Dummy::doDelete run, set deleteKey
+ // or deleteValue to false");
+ }
+ };
+
+ template <typename _type>
+ class NullVal{
+ public:
+ static void doDelete(_type nothing)
+ {
+ // TODO: remove all occurances where it hits this point
+ // CND_WARNING(false, "Deletor::Dummy::doDelete run, set deleteKey
+ // or deleteValue to false");
+ }
+ };
+ class DummyQString {
+ public:
+ static void doDelete(const QString& nothing) {
+ }
+ };
+};
+////////////////////////////////////////////////////////////////////////////////
+
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/util/FastCharStream.cpp b/src/3rdparty/clucene/src/CLucene/util/FastCharStream.cpp
new file mode 100644
index 0000000..f9fbe9b
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/util/FastCharStream.cpp
@@ -0,0 +1,107 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "FastCharStream.h"
+
+#include "CLucene/util/Reader.h"
+
+CL_NS_DEF(util)
+
+const int32_t FastCharStream::maxRewindSize = LUCENE_MAX_WORD_LEN*2;
+
+ FastCharStream::FastCharStream(Reader* reader):
+ pos(0),
+ rewindPos(0),
+ resetPos(0),
+ col(1),
+ line(1),
+ input(reader)
+ {
+ input->mark(maxRewindSize);
+ }
+ FastCharStream::~FastCharStream(){
+ }
+ void FastCharStream::readChar(TCHAR &c) {
+ try{
+ int32_t r = input->read();
+ if ( r == -1 )
+ input = NULL;
+ c = r;
+ }catch(CLuceneError& err){
+ if ( err.number() == CL_ERR_IO )
+ input = 0;
+ throw err;
+ }
+ }
+ int FastCharStream::GetNext()
+ {
+ // printf("getnext\n");
+ if (input == 0 ) // end of file
+ {
+ _CLTHROWA(CL_ERR_IO,"warning : FileReader.GetNext : Read TCHAR over EOS.");
+ }
+ // this is rather inefficient
+ // implementing the functions from the java version of
+ // charstream will be much more efficient.
+ ++pos;
+ if ( pos > resetPos + maxRewindSize && rewindPos == 0) {
+ // move the marker one position (~expensive)
+ resetPos = pos-(maxRewindSize/2);
+ if ( resetPos != input->reset(resetPos) )
+ _CLTHROWA(CL_ERR_IO,"Unexpected reset() result");
+ input->mark(maxRewindSize);
+ input->skip((maxRewindSize/2) - 1);
+ }
+ TCHAR ch;
+ readChar(ch);
+
+ if (input == NULL) { // eof
+ return -1;
+ }
+ if (rewindPos == 0) {
+ col += 1;
+ if(ch == '\n') {
+ line++;
+ col = 1;
+ }
+ } else {
+ rewindPos--;
+ }
+ return ch;
+ }
+
+ void FastCharStream::UnGet(){
+// printf("UnGet \n");
+ if (input == 0)
+ return;
+ if ( pos == 0 ) {
+ _CLTHROWA(CL_ERR_IO,"error : No character can be UnGet");
+ }
+ rewindPos++;
+
+ input->reset(pos-1);
+ pos--;
+ }
+
+ int FastCharStream::Peek() {
+ int c = GetNext();
+ UnGet();
+ return c;
+ }
+
+ bool FastCharStream::Eos() const {
+ return input==NULL;
+ }
+
+ int32_t FastCharStream::Column() const {
+ return col;
+ }
+
+ int32_t FastCharStream::Line() const {
+ return line;
+ }
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/util/FastCharStream.h b/src/3rdparty/clucene/src/CLucene/util/FastCharStream.h
new file mode 100644
index 0000000..24e5b56
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/util/FastCharStream.h
@@ -0,0 +1,55 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_util_FastCharStream_
+#define _lucene_util_FastCharStream_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "CLucene/util/Reader.h"
+
+CL_NS_DEF(util)
+
+ /** Ported implementation of the FastCharStream class. */
+ class FastCharStream:LUCENE_BASE
+ {
+ static const int32_t maxRewindSize;
+ int32_t pos;
+ int32_t rewindPos;
+ int64_t resetPos;
+ int32_t col;
+ int32_t line;
+ // read character from stream return false on error
+ void readChar(TCHAR &);
+ public:
+ Reader* input;
+
+ /// Initializes a new instance of the FastCharStream class LUCENE_EXPORT.
+ FastCharStream(Reader* reader);
+ ~FastCharStream();
+
+ /// Returns the next TCHAR from the stream.
+ int GetNext();
+
+ void UnGet();
+
+ /// Returns the current top TCHAR from the input stream without removing it.
+ int Peek();
+
+
+ /// Returns <b>True</b> if the end of stream was reached.
+ bool Eos() const;
+
+ /// Gets the current column.
+ int32_t Column() const;
+
+ /// Gets the current line.
+ int32_t Line() const;
+ };
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/util/Misc.cpp b/src/3rdparty/clucene/src/CLucene/util/Misc.cpp
new file mode 100644
index 0000000..069b487
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/util/Misc.cpp
@@ -0,0 +1,288 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright(C) 2007, 2008 by Nokia Corporation and/or its subsidiary(-ies), all rights reserved.
+*/
+#include "CLucene/StdHeader.h"
+#include "Misc.h"
+
+#ifdef _CL_TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# if defined(_CL_HAVE_SYS_TIME_H)
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+
+#ifdef _CL_HAVE_SYS_TIMEB_H
+# include <sys/timeb.h>
+#endif
+
+CL_NS_DEF(util)
+
+uint64_t Misc::currentTimeMillis()
+{
+#if defined(_CLCOMPILER_MSVC) || defined(__MINGW32__) || defined(__BORLANDC__)
+ struct _timeb tstruct;
+ _ftime(&tstruct);
+
+ return (((uint64_t) tstruct.time) * 1000) + tstruct.millitm;
+#else
+ struct timeval tstruct;
+ if (gettimeofday(&tstruct, NULL) < 0) {
+ _CLTHROWA(CL_ERR_Runtime,"Error in gettimeofday call.");
+ }
+
+ return (((uint64_t) tstruct.tv_sec) * 1000) + tstruct.tv_usec / 1000;
+#endif
+}
+
+// #pragma mark -- char related utils
+
+size_t Misc::ahashCode(const char* str)
+{
+ // Compute the hash code using a local variable to be reentrant.
+ size_t hashCode = 0;
+ while (*str != 0)
+ hashCode = hashCode * 31 + *str++;
+ return hashCode;
+}
+
+size_t Misc::ahashCode(const char* str, size_t len)
+{
+ // Compute the hash code using a local variable to be reentrant.
+ size_t count = len;
+ size_t hashCode = 0;
+ for (size_t i = 0; i < count; i++)
+ hashCode = hashCode * 31 + *str++;
+ return hashCode;
+}
+
+char* Misc::ajoin(const char* a, const char* b, const char* c, const char* d,
+ const char* e, const char* f)
+{
+#define aLEN(x) (x == NULL ? 0 : strlen(x))
+ const size_t totalLen = aLEN(a) + aLEN(b) + aLEN(c) + aLEN(d) + aLEN(e)
+ + aLEN(f) + sizeof(char); /* Space for terminator. */
+
+ char* buf = _CL_NEWARRAY(char, totalLen);
+ buf[0] = 0;
+ if (a != NULL)
+ strcat(buf, a);
+
+ if (b != NULL)
+ strcat(buf, b);
+
+ if (c != NULL)
+ strcat(buf, c);
+
+ if (d != NULL)
+ strcat(buf, d);
+
+ if (e != NULL)
+ strcat(buf, e);
+
+ if (f != NULL)
+ strcat(buf, f);
+
+ return buf;
+}
+
+char* Misc::segmentname(const char* segment, const char* ext, int32_t x)
+{
+ CND_PRECONDITION(ext != NULL, "ext is NULL");
+
+ char* buf = _CL_NEWARRAY(char, CL_MAX_PATH);
+ if (x == -1)
+ _snprintf(buf, CL_MAX_PATH, "%s%s", segment, ext);
+ else
+ _snprintf(buf, CL_MAX_PATH, "%s%s%d", segment, ext, x);
+ return buf;
+}
+
+void Misc::segmentname(char* buffer, int32_t bufferLen, const char* segment,
+ const char* ext, int32_t x)
+{
+ CND_PRECONDITION(buffer != NULL, "buffer is NULL");
+ CND_PRECONDITION(segment != NULL, "segment is NULL");
+ CND_PRECONDITION(ext != NULL, "extention is NULL");
+
+ if (x == -1)
+ _snprintf(buffer, bufferLen, "%s%s", segment, ext);
+ else
+ _snprintf(buffer, bufferLen, "%s%s%d", segment, ext, x);
+}
+
+// #pragma mark -- qt related utils
+
+size_t Misc::qhashCode(const QString& str)
+{
+ size_t hashCode = 0;
+ for (int i = 0; i < str.count(); ++i)
+ hashCode = hashCode * 31 + str.at(i).unicode();
+ return hashCode;
+}
+
+size_t Misc::qhashCode(const QString& str, size_t len)
+{
+ size_t count = len;
+ size_t hashCode = 0;
+ for (size_t i = 0; i < count; ++i)
+ hashCode = hashCode * 31 + str.at(i).unicode();
+ return hashCode;
+}
+
+QString Misc::qjoin(const QString &a, const QString &b, const QString &c,
+ const QString &d, const QString &e, const QString &f)
+{
+ QString buffer;
+
+ if (!a.isNull() && !a.isEmpty())
+ buffer.append(a);
+
+ if (!b.isNull() && !b.isEmpty())
+ buffer.append(b);
+
+ if (!c.isNull() && !c.isEmpty())
+ buffer.append(c);
+
+ if (!d.isNull() && !d.isEmpty())
+ buffer.append(d);
+
+ if (!e.isNull() && !e.isEmpty())
+ buffer.append(e);
+
+ if (!f.isNull() && !f.isEmpty())
+ buffer.append(f);
+
+ return buffer;
+}
+
+QString Misc::segmentname(const QString& segment, const QString& ext, int32_t x)
+{
+ CND_PRECONDITION(!ext.isEmpty(), "ext is NULL");
+
+ if (x == -1)
+ return QString(segment + ext);
+
+ QString buf(QLatin1String("%1%2%3"));
+ return buf.arg(segment).arg(ext).arg(x);
+}
+
+void Misc::segmentname(QString& buffer, int32_t bufferLen,
+ const QString& segment, const QString& ext, int32_t x)
+{
+ CND_PRECONDITION(!segment.isEmpty(), "segment is NULL");
+ CND_PRECONDITION(!ext.isEmpty(), "extention is NULL");
+
+ buffer.clear();
+ if (x == -1) {
+ buffer = QString(segment + ext);
+ } else {
+ buffer = QString(QLatin1String("%1%2%3")).arg(segment).arg(ext).arg(x);
+ }
+}
+
+// #pragma mark -- TCHAR related utils
+
+int32_t Misc::stringDifference(const TCHAR* s1, int32_t len1, const TCHAR* s2,
+ int32_t len2)
+{
+ int32_t len = len1 < len2 ? len1 : len2;
+ for (int32_t i = 0; i < len; i++)
+ if (s1[i] != s2[i])
+ return i;
+ return len;
+}
+
+/* DSR:CL_BUG: (See comment for join method in Misc.h): */
+TCHAR* Misc::join (const TCHAR* a, const TCHAR* b, const TCHAR* c,
+ const TCHAR* d, const TCHAR* e, const TCHAR* f)
+{
+#define LEN(x) (x == NULL ? 0 : _tcslen(x))
+ const size_t totalLen = LEN(a) + LEN(b) + LEN(c) + LEN(d) + LEN(e) + LEN(f)
+ + sizeof(TCHAR); /* Space for terminator. */
+
+ TCHAR* buf = _CL_NEWARRAY(TCHAR, totalLen);
+ buf[0] = 0;
+ if (a != NULL)
+ _tcscat(buf, a);
+
+ if (b != NULL)
+ _tcscat(buf, b);
+
+ if (c != NULL)
+ _tcscat(buf, c);
+
+ if (d != NULL)
+ _tcscat(buf, d);
+
+ if (e != NULL)
+ _tcscat(buf, e);
+
+ if (f != NULL)
+ _tcscat(buf, f);
+
+ return buf;
+}
+
+#ifdef _UCS2
+
+size_t Misc::whashCode(const wchar_t* str)
+{
+ // Compute the hash code using a local variable to be reentrant.
+ size_t hashCode = 0;
+ while (*str != 0)
+ hashCode = hashCode * 31 + *str++;
+ return hashCode;
+}
+
+size_t Misc::whashCode(const wchar_t* str, size_t len)
+{
+ // Compute the hash code using a local variable to be reentrant.
+ size_t count = len;
+ size_t hashCode = 0;
+ for (size_t i = 0; i < count; i++)
+ hashCode = hashCode * 31 + *str++;
+ return hashCode;
+}
+
+char* Misc::_wideToChar(const wchar_t* s CL_FILELINEPARAM)
+{
+ size_t len = _tcslen(s);
+ char* msg = _CL_NEWARRAY(char, len + 1);
+ _cpywideToChar(s, msg, len + 1);
+ return msg;
+}
+
+void Misc::_cpywideToChar(const wchar_t* s, char* d, size_t len)
+{
+ size_t sLen = wcslen(s);
+ for (uint32_t i = 0; i < len && i < sLen + 1; i++)
+ d[i] = LUCENE_OOR_CHAR(s[i]);
+}
+
+wchar_t* Misc::_charToWide(const char* s CL_FILELINEPARAM)
+{
+ size_t len = strlen(s);
+ wchar_t* msg = _CL_NEWARRAY(wchar_t, len + 1);
+ _cpycharToWide(s, msg, len + 1);
+ return msg;
+}
+
+void Misc::_cpycharToWide(const char* s, wchar_t* d, size_t len)
+{
+ size_t sLen = strlen(s);
+ for (uint32_t i = 0; i < len && i < sLen + 1; i++)
+ d[i] = s[i];
+}
+
+#endif
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/util/Misc.h b/src/3rdparty/clucene/src/CLucene/util/Misc.h
new file mode 100644
index 0000000..561c6e4
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/util/Misc.h
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+ *
+ * Distributable under the terms of either the Apache License (Version 2.0) or
+ * the GNU Lesser General Public License, as specified in the COPYING file.
+ *
+ * Changes are Copyright(C) 2007, 2008 by Nokia Corporation and/or its subsidiary(-ies), all rights reserved.
+*/
+#ifndef _lucene_util_Misc_H
+#define _lucene_util_Misc_H
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include <QtCore/QString>
+
+CL_NS_DEF(util)
+
+class Misc
+{
+public:
+ static uint64_t currentTimeMillis();
+
+ static size_t ahashCode(const char* str);
+ static size_t ahashCode(const char* str, size_t len);
+ static char* ajoin(const char* a, const char* b, const char* c = NULL,
+ const char* d = NULL, const char* e = NULL, const char* f = NULL);
+ static char* segmentname(const char* segment, const char* ext, int32_t x = -1);
+ static void segmentname(char* buffer, int32_t bufferLen, const char* segment,
+ const char* ext, int32_t x = -1);
+
+ static size_t qhashCode(const QString& str);
+ static size_t qhashCode(const QString& str, size_t len);
+ static QString qjoin(const QString& a, const QString& b,
+ const QString& c = QString(), const QString& d = QString(),
+ const QString& e = QString(), const QString& f = QString());
+ static QString segmentname(const QString& segment, const QString& ext,
+ int32_t x = -1 );
+ static void segmentname(QString& buffer, int32_t bufferLen,
+ const QString& Segment, const QString& ext, int32_t x = -1);
+
+ // Compares two strings, character by character, and returns the
+ // first position where the two strings differ from one another.
+ //
+ // @param s1 The first string to compare
+ // @param s1Len The length of the first string to compare
+ // @param s2 The second string to compare
+ // @param s2Len The length of the second string to compare
+ // @return The first position where the two strings differ.
+ static int32_t stringDifference(const TCHAR* s1, int32_t s1Len,
+ const TCHAR* s2, int32_t s2Len);
+ static TCHAR* join (const TCHAR* a, const TCHAR* b, const TCHAR* c = NULL,
+ const TCHAR* d = NULL, const TCHAR* e = NULL, const TCHAR* f = NULL );
+
+#ifdef _UCS2
+ static size_t whashCode(const wchar_t* str);
+ static size_t whashCode(const wchar_t* str, size_t len);
+
+# define thashCode whashCode
+
+ static char* _wideToChar(const wchar_t* s CL_FILELINEPARAM);
+ static void _cpywideToChar(const wchar_t* s, char* d, size_t len);
+
+ static wchar_t* _charToWide(const char* s CL_FILELINEPARAM);
+ static void _cpycharToWide(const char* s, wchar_t* d, size_t len);
+
+#else
+# define thashCode ahashCode
+#endif
+};
+
+CL_NS_END
+
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/util/PriorityQueue.h b/src/3rdparty/clucene/src/CLucene/util/PriorityQueue.h
new file mode 100644
index 0000000..45649ee
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/util/PriorityQueue.h
@@ -0,0 +1,177 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_util_PriorityQueue_
+#define _lucene_util_PriorityQueue_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+CL_NS_DEF(util)
+
+// A PriorityQueue maintains a partial ordering of its elements such that the
+// least element can always be found in constant time. Put()'s and pop()'s
+// require log(size) time.
+template <class _type,typename _valueDeletor> class PriorityQueue:LUCENE_BASE {
+ private:
+ _type* heap; //(was object[])
+ size_t _size;
+ bool dk;
+ size_t maxSize;
+
+ void upHeap(){
+ size_t i = _size;
+ _type node = heap[i]; // save bottom node (WAS object)
+ int32_t j = ((uint32_t)i) >> 1;
+ while (j > 0 && lessThan(node,heap[j])) {
+ heap[i] = heap[j]; // shift parents down
+ i = j;
+ j = ((uint32_t)j) >> 1;
+ }
+ heap[i] = node; // install saved node
+ }
+ void downHeap(){
+ size_t i = 1;
+ _type node = heap[i]; // save top node
+ size_t j = i << 1; // find smaller child
+ size_t k = j + 1;
+ if (k <= _size && lessThan(heap[k], heap[j])) {
+ j = k;
+ }
+ while (j <= _size && lessThan(heap[j],node)) {
+ heap[i] = heap[j]; // shift up child
+ i = j;
+ j = i << 1;
+ k = j + 1;
+ if (k <= _size && lessThan(heap[k], heap[j])) {
+ j = k;
+ }
+ }
+ heap[i] = node; // install saved node
+ }
+
+ protected:
+ PriorityQueue(){
+ this->_size = 0;
+ this->dk = false;
+ this->heap = NULL;
+ this->maxSize = 0;
+ }
+
+ // Determines the ordering of objects in this priority queue. Subclasses
+ // must define this one method.
+ virtual bool lessThan(_type a, _type b)=0;
+
+ // Subclass constructors must call this.
+ void initialize(const int32_t maxSize, bool deleteOnClear){
+ _size = 0;
+ dk = deleteOnClear;
+ int32_t heapSize = maxSize + 1;
+ heap = _CL_NEWARRAY(_type,heapSize);
+ this->maxSize = maxSize;
+ }
+
+ public:
+ virtual ~PriorityQueue(){
+ clear();
+ _CLDELETE_ARRAY(heap);
+ }
+
+ /**
+ * Adds an Object to a PriorityQueue in log(size) time.
+ * If one tries to add more objects than maxSize from initialize
+ * a RuntimeException (ArrayIndexOutOfBound) is thrown.
+ */
+ void put(_type element){
+ if ( _size>=maxSize )
+ _CLTHROWA(CL_ERR_IndexOutOfBounds,"add is out of bounds");
+
+ ++_size;
+ heap[_size] = element;
+ upHeap();
+ }
+
+ /**
+ * Adds element to the PriorityQueue in log(size) time if either
+ * the PriorityQueue is not full, or not lessThan(element, top()).
+ * @param element
+ * @return true if element is added, false otherwise.
+ */
+ bool insert(_type element){
+ if(_size < maxSize){
+ put(element);
+ return true;
+ }else if(_size > 0 && !lessThan(element, top())){
+ if ( dk ){
+ _valueDeletor::doDelete(heap[1]);
+ }
+ heap[1] = element;
+ adjustTop();
+ return true;
+ }else
+ return false;
+ }
+
+ /**
+ * Returns the least element of the PriorityQueue in constant time.
+ */
+ _type top(){
+ if (_size > 0)
+ return heap[1];
+ else
+ return NULL;
+ }
+
+ /** Removes and returns the least element of the PriorityQueue in log(size)
+ * time.
+ */
+ _type pop(){
+ if (_size > 0) {
+ _type result = heap[1]; // save first value
+ heap[1] = heap[_size]; // move last to first
+
+ heap[_size] = (_type)0; // permit GC of objects
+ --_size;
+ downHeap(); // adjust heap
+ return result;
+ } else
+ return (_type)NULL;
+ }
+
+ /**Should be called when the object at top changes values. Still log(n)
+ worst case, but it's at least twice as fast to <pre>
+ { pq.top().change(); pq.adjustTop(); }
+ </pre> instead of <pre>
+ { o = pq.pop(); o.change(); pq.push(o); }
+ </pre>
+ */
+ void adjustTop(){
+ downHeap();
+ }
+
+
+ /**
+ * Returns the number of elements currently stored in the PriorityQueue.
+ */
+ size_t size(){
+ return _size;
+ }
+
+ /**
+ * Removes all entries from the PriorityQueue.
+ */
+ void clear(){
+ for (size_t i = 1; i <= _size; ++i){
+ if ( dk ){
+ _valueDeletor::doDelete(heap[i]);
+ }
+ }
+ _size = 0;
+ }
+ };
+
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/util/Reader.cpp b/src/3rdparty/clucene/src/CLucene/util/Reader.cpp
new file mode 100644
index 0000000..1ce9710
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/util/Reader.cpp
@@ -0,0 +1,186 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "Reader.h"
+
+CL_NS_DEF(util)
+
+StringReader::StringReader ( const TCHAR* value ):
+ Reader(NULL,true){
+ reader = new jstreams::StringReader<TCHAR>(value);
+}
+StringReader::StringReader ( const TCHAR* value, const int32_t length ):
+ Reader(NULL,true){
+ reader = new jstreams::StringReader<TCHAR>(value,length);
+}
+StringReader::StringReader ( const TCHAR* value, const int32_t length, bool copyData ):
+ Reader(NULL,true){
+ reader = new jstreams::StringReader<TCHAR>(value,length, copyData);
+}
+StringReader::~StringReader(){
+}
+
+
+FileReader::FileReader ( const char* path, const char* enc,
+ const int32_t cachelen, const int32_t /*cachebuff*/ ):
+ Reader(NULL, true)
+{
+ this->input = new jstreams::FileInputStream(path, cachelen);
+ this->reader = new SimpleInputStreamReader(this->input,enc); //(this is a jstream object)
+}
+
+FileReader::~FileReader (){
+ if (input)
+ delete input;
+}
+int32_t FileReader::read(const TCHAR*& start, int32_t _min, int32_t _max) {
+ return reader->read(start, _min, _max);
+}
+int64_t FileReader::mark(int32_t readlimit) {
+ return reader->mark(readlimit);
+}
+int64_t FileReader::reset(int64_t newpos) {
+ return reader->reset(newpos);
+}
+
+
+
+SimpleInputStreamReader::SimpleInputStreamReader(jstreams::StreamBase<char> *i, const char* enc)
+{
+ finishedDecoding = false;
+ input = i;
+ charbuf.setSize(262);
+
+ if ( strcmp(enc,"ASCII")==0 )
+ encoding = ASCII;
+#ifdef _UCS2
+ else if ( strcmp(enc,"UTF-8")==0 )
+ encoding = UTF8;
+ else if ( strcmp(enc,"UCS-2LE")==0 )
+ encoding = UCS2_LE;
+#endif
+ else
+ _CLTHROWA(CL_ERR_IllegalArgument,"Unsupported encoding, use jstreams iconv based instead");
+
+ mark(262);
+ charsLeft = 0;
+}
+SimpleInputStreamReader::~SimpleInputStreamReader(){
+ input = NULL;
+}
+int32_t SimpleInputStreamReader::decode(TCHAR* start, int32_t space){
+ // decode from charbuf
+ const char *inbuf = charbuf.readPos;
+ const char *inbufend = charbuf.readPos + charbuf.avail;
+ TCHAR *outbuf = start;
+ const TCHAR *outbufend = outbuf + space;
+
+ if ( encoding == ASCII ){
+ while ( outbuf<outbufend && inbuf<inbufend ){
+ *outbuf = *inbuf;
+ outbuf++;
+ inbuf++;
+ }
+
+#ifdef _UCS2
+ }
+ else if ( encoding == UCS2_LE ){
+ while ( outbuf<outbufend && (inbuf+1)<inbufend ){
+ uint8_t c1 = *inbuf;
+ uint8_t c2 = *(inbuf+1);
+ unsigned short c = c1 | (c2<<8);
+
+ #ifdef _UCS2
+ *outbuf = c;
+ #else
+ *outbuf = LUCENE_OOR_CHAR(c);
+ #endif
+ outbuf++;
+ inbuf+=2;
+ }
+
+ }else if ( encoding == UTF8 ){
+ while ( outbuf<outbufend && inbuf<inbufend ){
+ size_t utflen = lucene_utf8charlen(inbuf);
+ if ( utflen==0 ){
+ error = "Invalid multibyte sequence.";
+ status = jstreams::Error;
+ return -1;
+ }else if ( inbuf+utflen > inbufend ){
+ break; //character incomplete
+ }else{
+ size_t rd = lucene_utf8towc(outbuf,inbuf,inbufend-inbuf);
+ if ( rd == 0 ){
+ error = "Invalid multibyte sequence.";
+ status = jstreams::Error;
+ return -1;
+ }else{
+ inbuf+=rd;
+ outbuf++;
+ }
+ }
+ }
+#endif //_UCS2
+ }else
+ _CLTHROWA(CL_ERR_Runtime,"Unexpected encoding");
+
+ if ( outbuf < outbufend ) {
+ //we had enough room to convert the entire input
+ if ( inbuf < inbufend ) {
+ // last character is incomplete
+ // move from inbuf to the end to the start of
+ // the buffer
+ memmove(charbuf.start, inbuf, inbufend-inbuf);
+ charbuf.readPos = charbuf.start;
+ charbuf.avail = inbufend-inbuf;
+ } else if ( outbuf < outbufend ) { //input sequence was completely converted
+ charbuf.readPos = charbuf.start;
+ charbuf.avail = 0;
+ if (input == NULL) {
+ finishedDecoding = true;
+ }
+ }
+ } else {
+ charbuf.readPos += charbuf.avail - (inbufend-inbuf);
+ charbuf.avail = inbufend-inbuf;
+ }
+ return outbuf-start;
+}
+
+int32_t SimpleInputStreamReader::fillBuffer(TCHAR* start, int32_t space) {
+ // fill up charbuf
+ if (input && charbuf.readPos == charbuf.start) {
+ const char *begin;
+ int32_t numRead;
+ numRead = input->read(begin, 1, charbuf.size - charbuf.avail);
+ //printf("filled up charbuf\n");
+ if (numRead < -1) {
+ error = input->getError();
+ status = jstreams::Error;
+ input = 0;
+ return numRead;
+ }
+ if (numRead < 1) {
+ // signal end of input buffer
+ input = 0;
+ if (charbuf.avail) {
+ error = "stream ends on incomplete character";
+ status = jstreams::Error;
+ }
+ return -1;
+ }
+ // copy data into other buffer
+ memmove( charbuf.start + charbuf.avail, begin, numRead * sizeof(char));
+ charbuf.avail = numRead + charbuf.avail;
+ }
+ // decode
+ int32_t n = decode(start, space);
+ //printf("decoded %i\n", n);
+ return n;
+}
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/util/Reader.h b/src/3rdparty/clucene/src/CLucene/util/Reader.h
new file mode 100644
index 0000000..6b018b3
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/util/Reader.h
@@ -0,0 +1,138 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_util_Reader_
+#define _lucene_util_Reader_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "streambase.h"
+#include "stringreader.h"
+#include "fileinputstream.h"
+#include "bufferedstream.h"
+
+CL_NS_DEF(util)
+/**
+* An inline wrapper that reads from Jos van den Oever's jstreams
+*/
+class Reader:LUCENE_BASE {
+typedef jstreams::StreamBase<TCHAR> jsReader;
+public:
+ bool deleteReader;
+ jsReader* reader;
+
+ Reader(jsReader* reader, bool deleteReader){
+ this->reader = reader;
+ this->deleteReader = deleteReader;
+ }
+ virtual ~Reader(){
+ if ( deleteReader )
+ delete reader;
+ reader = NULL;
+ }
+ inline int read(){
+ const TCHAR*b;
+ int32_t nread = reader->read(b, 1,1);
+ if ( nread < -1 ) //if not eof
+ _CLTHROWA(CL_ERR_IO,reader->getError() );
+ else if ( nread == -1 )
+ return -1;
+ else
+ return b[0];
+ }
+ /**
+ * Read at least 1 character, and as much as is conveniently available
+ */
+ inline int32_t read(const TCHAR*& start){
+ int32_t nread = reader->read(start,1,0);
+ if ( nread < -1 ) //if not eof
+ _CLTHROWA(CL_ERR_IO,reader->getError());
+ else
+ return nread;
+ }
+ inline int32_t read(const TCHAR*& start, int32_t len){
+ int32_t nread = reader->read(start, len, len);
+ if ( nread < -1 ) //if not eof
+ _CLTHROWA(CL_ERR_IO,reader->getError());
+ else
+ return nread;
+ }
+ inline int64_t skip(int64_t ntoskip){
+ int64_t skipped = reader->skip(ntoskip);
+ if ( skipped < 0 )
+ _CLTHROWA(CL_ERR_IO,reader->getError());
+ else
+ return skipped;
+ }
+ inline int64_t mark(int32_t readAheadlimit){
+ int64_t pos = reader->mark(readAheadlimit);
+ if ( pos < 0 )
+ _CLTHROWA(CL_ERR_IO,reader->getError());
+ else
+ return pos;
+ }
+ int64_t reset(int64_t pos){
+ int64_t r = reader->reset(pos);
+ if ( r < 0 )
+ _CLTHROWA(CL_ERR_IO,reader->getError());
+ else
+ return r;
+ }
+};
+
+///A helper class which constructs a the jstreams StringReader.
+class StringReader: public Reader{
+public:
+ StringReader ( const TCHAR* value );
+ StringReader ( const TCHAR* value, const int32_t length );
+ StringReader ( const TCHAR* value, const int32_t length, bool copyData );
+ ~StringReader();
+};
+
+/** A very simple inputstreamreader implementation. For a
+* more complete InputStreamReader, use the jstreams version
+* located in the contrib package
+*/
+class SimpleInputStreamReader: public jstreams::BufferedInputStream<TCHAR>{
+ int32_t decode(TCHAR* start, int32_t space);
+ int encoding;
+ enum{
+ ASCII=1,
+ UTF8=2,
+ UCS2_LE=3
+ };
+ bool finishedDecoding;
+ jstreams::StreamBase<char>* input;
+ int32_t charsLeft;
+
+ jstreams::InputStreamBuffer<char> charbuf;
+ int32_t fillBuffer(TCHAR* start, int32_t space);
+public:
+ SimpleInputStreamReader(jstreams::StreamBase<char> *i, const char* encoding);
+ ~SimpleInputStreamReader();
+};
+
+/**
+* A helper class which constructs a FileReader with a specified
+* simple encodings, or a given inputstreamreader
+*/
+class FileReader: public Reader{
+ jstreams::FileInputStream* input;
+public:
+ FileReader ( const char* path, const char* enc,
+ const int32_t cachelen = 13,
+ const int32_t cachebuff = 14 ); //todo: optimise these cache values
+ ~FileReader ();
+
+ int32_t read(const TCHAR*& start, int32_t _min, int32_t _max);
+ int64_t mark(int32_t readlimit);
+ int64_t reset(int64_t);
+};
+
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/util/StringBuffer.cpp b/src/3rdparty/clucene/src/CLucene/util/StringBuffer.cpp
new file mode 100644
index 0000000..b5f1ca2
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/util/StringBuffer.cpp
@@ -0,0 +1,335 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "StringBuffer.h"
+#include "Misc.h"
+
+CL_NS_DEF(util)
+
+ StringBuffer::StringBuffer(TCHAR* buf,int32_t maxlen, const bool consumeBuffer){
+ buffer = buf;
+ bufferLength = maxlen;
+ bufferOwner = !consumeBuffer;
+ len = 0;
+ }
+ StringBuffer::StringBuffer(){
+ //Func - Constructor. Allocates a buffer with the default length.
+ //Pre - true
+ //Post - buffer of length bufferLength has been allocated
+
+ //Initialize
+ bufferLength = LUCENE_DEFAULT_TOKEN_BUFFER_SIZE;
+ len = 0;
+ //Allocate a buffer of length bufferLength
+ buffer = _CL_NEWARRAY(TCHAR,bufferLength);
+ bufferOwner = true;
+ }
+
+ StringBuffer::StringBuffer(const int32_t initSize){
+ //Func - Constructor. Allocates a buffer of length initSize + 1
+ //Pre - initSize > 0
+ //Post - A buffer has been allocated of length initSize + 1
+
+ //Initialize the bufferLength to initSize + 1 The +1 is for the terminator '\0'
+ bufferLength = initSize + 1;
+ len = 0;
+ //Allocate a buffer of length bufferLength
+ buffer = _CL_NEWARRAY(TCHAR,bufferLength);
+ bufferOwner = true;
+ }
+
+ StringBuffer::StringBuffer(const TCHAR* value){
+ //Func - Constructor.
+ // Creates an instance of Stringbuffer containing a copy of the string value
+ //Pre - value != NULL
+ //Post - An instance of StringBuffer has been created containing the copy of the string value
+
+ //Initialize the length of the string to be stored in buffer
+ len = (int32_t) _tcslen(value);
+
+ //Calculate the space occupied in buffer by a copy of value
+ const int32_t occupiedLength = len + 1;
+
+ // Minimum allocated buffer length is LUCENE_DEFAULT_TOKEN_BUFFER_SIZE.
+ bufferLength = (occupiedLength >= LUCENE_DEFAULT_TOKEN_BUFFER_SIZE
+ ? occupiedLength : LUCENE_DEFAULT_TOKEN_BUFFER_SIZE);
+
+ //Allocate a buffer of length bufferLength
+ buffer = _CL_NEWARRAY(TCHAR,bufferLength);
+ bufferOwner = true;
+ //Copy the string value into buffer
+ _tcsncpy(buffer, value, occupiedLength);
+ //Assert that the buffer has been terminated at the end of the string
+ CND_PRECONDITION (buffer[len] == '\0', "Buffer was not correctly terminated");
+ }
+
+ StringBuffer::~StringBuffer() {
+ // Func - Destructor
+ // Pre - true
+ // Post - Instanc has been destroyed
+
+ if( bufferOwner ){
+ _CLDELETE_CARRAY(buffer);
+ }else
+ buffer = NULL;
+ }
+ void StringBuffer::clear(){
+ //Func - Clears the Stringbuffer and resets it to it default empty state
+ //Pre - true
+ //Post - pre(buffer) has been destroyed and a new one has been allocated
+
+ //Destroy the current buffer if present
+ _CLDELETE_CARRAY(buffer);
+
+ //Initialize
+ len = 0;
+ bufferLength = LUCENE_DEFAULT_TOKEN_BUFFER_SIZE;
+ //Allocate a buffer of length bufferLength
+ buffer = _CL_NEWARRAY(TCHAR,bufferLength);
+ }
+
+ void StringBuffer::appendChar(const TCHAR character) {
+ //Func - Appends a single character
+ //Pre - true
+ //Post - The character has been appended to the string in the buffer
+
+ //Check if the current buffer length is sufficient to have the string value appended
+ if (len + 1 > bufferLength){
+ //Have the size of the current string buffer increased because it is too small
+ growBuffer(len + 1);
+ }
+ //Put character at position len which is the end of the string in the buffer
+ //Note that this action might overwrite the terminator of the string '\0', which
+ //is kind of tricky
+ buffer[len] = character;
+ //Increase the len by to represent the correct length of the string in the buffer
+ len++;
+ }
+
+ void StringBuffer::append(const TCHAR* value) {
+ //Func - Appends a copy of the string value
+ //Pre - value != NULL
+ //Post - value has been copied and appended to the string in buffer
+
+ append(value, _tcslen(value));
+ }
+ void StringBuffer::append(const TCHAR* value, size_t appendedLength) {
+ //Func - Appends a copy of the string value
+ //Pre - value != NULL
+ // appendedLength contains the length of the string value which is to be appended
+ //Post - value has been copied and appended to the string in buffer
+
+ //Check if the current buffer length is sufficient to have the string value appended
+ if (len + appendedLength + 1 > bufferLength){
+ //Have the size of the current string buffer increased because it is too small
+ growBuffer(len + appendedLength + 1);
+ }
+
+ //Copy the string value into the buffer at postion len
+ _tcsncpy(buffer + len, value, appendedLength);
+
+ //Add the length of the copied string to len to reflect the new length of the string in
+ //the buffer (Note: len is not the bufferlength!)
+ len += appendedLength;
+ }
+
+ void StringBuffer::appendInt(const int32_t value) {
+ //Func - Appends an integer (after conversion to a character string)
+ //Pre - true
+ //Post - The converted integer value has been appended to the string in buffer
+
+ //instantiate a buffer of 30 charactes for the conversion of the integer
+ TCHAR buf[30];
+ //Convert the integer value to a string buf using the radix 10 (duh)
+ _i64tot(value, buf, 10);
+ //Have the converted integer now stored in buf appended to the string in buffer
+ append(buf);
+ }
+
+ void StringBuffer::appendFloat(const qreal value, const int32_t digits){
+ //Func - Appends a qreal (after conversion to a character string)
+ //Pre - digits > 0. Indicates the minimum number of characters printed
+ //Post - The converted qreal value has been appended to the string in buffer
+
+ //using sprintf("%f" was not reliable on other plaforms... we use a custom float convertor
+ //bvk: also, using sprintf and %f seems excessivelly slow
+ if(digits>8)
+ _CLTHROWA(CL_ERR_IllegalArgument,"Too many digits...");
+
+ //the maximum number of characters that int64 will hold is 23. so we need 23*2+2
+ TCHAR buf[48]; //the buffer to hold
+ int64_t v = (int64_t)value; //the integer value of the float
+ _i64tot(v,buf,10); //add the whole number
+
+ size_t len = 99-_tcslen(buf); //how many digits we have to work with?
+ size_t dig = len< (size_t)digits ? len : digits;
+ if ( dig > 0 ){
+ _tcscat(buf,_T(".")); //add a decimal point
+
+ int64_t remi=(int64_t)((value-v)*pow((qreal)10,(qreal)(dig+1))); //take the remainder and make a whole number
+ if ( remi<0 ) remi*=-1;
+ int64_t remadj=remi/10;
+ if ( remi-(remadj*10) >=5 )
+ remadj++; //adjust remainder
+
+ // add as many zeros as necessary between the decimal point and the
+ // significant part of the number. Fixes a bug when trying to print
+ // numbers that have zeros right after the decimal point
+ if (remadj) {
+ int32_t numZeros = dig - (int32_t)log10((qreal)remadj) - 1;
+ while(numZeros-- > 0)
+ _tcscat(buf,_T("0")); //add a zero before the decimal point
+ }
+
+ _i64tot(remadj,buf+_tcslen(buf),10); //add the remainder
+ }
+
+ append(buf);
+ }
+
+ void StringBuffer::prepend(const TCHAR* value){
+ //Func - Puts a copy of the string value infront of the current string in the StringBuffer
+ //Pre - value != NULL
+ //Post - The string in pre(buffer) has been shifted n positions where n equals the length of value.
+ // The string value was then copied to the beginning of stringbuffer
+
+ prepend(value, _tcslen(value));
+ }
+
+ void StringBuffer::prepend(const TCHAR* value, const size_t prependedLength) {
+ //Func - Puts a copy of the string value in front of the string in the StringBuffer
+ //Pre - value != NULL
+ // prependedLength contains the length of the string value which is to be prepended
+ //Post - A copy of the string value is has been in front of the string in buffer
+ //todo: something is wrong with this code, i'm sure... it only grows (and therefore moves if the buffer is to small)
+ //Check if the current buffer length is sufficient to have the string value prepended
+ if (prependedLength + len + 1 > bufferLength){
+ //Have the size of the current string buffer increased because it is too small
+ //Because prependedLength is passed as the second argument to growBuffer,
+ //growBuffer will have left the first prependedLength characters empty
+ //when it recopied buffer during reallocation.
+ growBuffer(prependedLength + len + 1, prependedLength);
+ }
+
+ //Copy the string value into the buffer at postion 0
+ _tcsncpy(buffer, value, prependedLength);
+ //Add the length of the copied string to len to reflect the new length of the string in
+ //the buffer (Note: len is not the bufferlength!)
+ len += prependedLength;
+ }
+
+ int32_t StringBuffer::length() const{
+ //Func - Returns the length of the string in the StringBuffer
+ //Pre - true
+ //Post - The length len of the string in the buffer has been returned
+
+ return len;
+ }
+ TCHAR* StringBuffer::toString(){
+ //Func - Returns a copy of the current string in the StringBuffer sized equal to the length of the string
+ // in the StringBuffer.
+ //Pre - true
+ //Post - The copied string has been returned
+
+ //Instantiate a buffer equal to the length len + 1
+ TCHAR* ret = _CL_NEWARRAY(TCHAR,len + 1);
+ if (ret){
+ //Copy the string in buffer
+ _tcsncpy(ret, buffer, len);
+ //terminate the string
+ ret[len] = '\0';
+ }
+ //return the the copy
+ return ret;
+ }
+ TCHAR* StringBuffer::getBuffer() {
+ //Func - '\0' terminates the buffer and returns its pointer
+ //Pre - true
+ //Post - buffer has been '\0' terminated and returned
+
+ // Check if the current buffer is '\0' terminated
+ if (len == bufferLength){
+ //Make space for terminator, if necessary.
+ growBuffer(len + 1);
+ }
+ //'\0' buffer so it can be returned properly
+ buffer[len] = '\0';
+
+ return buffer;
+ }
+
+ void StringBuffer::reserve(const int32_t size){
+ if ( bufferLength >= size )
+ return;
+ bufferLength = size;
+
+ //Allocate a new buffer of length bufferLength
+ TCHAR* tmp = _CL_NEWARRAY(TCHAR,bufferLength);
+ _tcsncpy(tmp, buffer, len);
+ tmp[len] = '\0';
+
+ //destroy the old buffer
+ if (buffer){
+ _CLDELETE_CARRAY(buffer);
+ }
+ //Assign the new buffer tmp to buffer
+ buffer = tmp;
+ }
+
+ void StringBuffer::growBuffer(const int32_t minLength) {
+ //Func - Has the buffer grown to a minimum length of minLength or bigger
+ //Pre - minLength >= len + 1
+ //Post - The buffer has been grown to a minimum length of minLength or bigger
+
+ growBuffer(minLength, 0);
+ }
+ void StringBuffer::growBuffer(const int32_t minLength, const int32_t skippingNInitialChars) {
+ //Func - Has the buffer grown to a minimum length of minLength or bigger and shifts the
+ // current string in buffer by skippingNInitialChars forward
+ //Pre - After growth, must have at least enough room for contents + terminator so
+ // minLength >= skippingNInitialChars + len + 1
+ // skippingNInitialChars >= 0
+ //Post - The buffer has been grown to a minimum length of minLength or bigger and
+ // if skippingNInitialChars > 0, the contents of the buffer has beeen shifted
+ // forward by skippingNInitialChars positions as the buffer is reallocated,
+ // leaving the first skippingNInitialChars uninitialized (presumably to be
+ // filled immediately thereafter by the caller).
+
+ CND_PRECONDITION (skippingNInitialChars >= 0, "skippingNInitialChars is less than zero");
+ CND_PRECONDITION (minLength >= skippingNInitialChars + len + 1,"skippingNInitialChars is not large enough");
+
+ //More aggressive growth strategy to offset smaller default buffer size:
+ if ( !bufferOwner ){
+ if ( bufferLength<minLength )
+ _CLTHROWA(CL_ERR_IllegalArgument,"[StringBuffer::grow] un-owned buffer could not be grown");
+ return;
+ }
+
+ bufferLength *= 2;
+ //Check that bufferLength is bigger than minLength
+ if (bufferLength < minLength){
+ //Have bufferLength become minLength because it still was too small
+ bufferLength = minLength;
+ }
+
+ //Allocate a new buffer of length bufferLength
+ TCHAR* tmp = _CL_NEWARRAY(TCHAR,bufferLength);
+ //The old buffer might not have been null-terminated, so we _tcsncpy
+ //only len bytes, not len+1 bytes (the latter might read one char off the
+ //end of the old buffer), then apply the terminator to the new buffer.
+ _tcsncpy(tmp + skippingNInitialChars, buffer, len);
+ tmp[skippingNInitialChars + len] = '\0';
+
+ //destroy the old buffer
+ if (buffer){
+ _CLDELETE_CARRAY(buffer);
+ }
+ //Assign the new buffer tmp to buffer
+ buffer = tmp;
+ }
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/util/StringBuffer.h b/src/3rdparty/clucene/src/CLucene/util/StringBuffer.h
new file mode 100644
index 0000000..505b575
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/util/StringBuffer.h
@@ -0,0 +1,77 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_util_StringBuffer_
+#define _lucene_util_StringBuffer_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+
+CL_NS_DEF(util)
+ class StringBuffer:LUCENE_BASE{
+ public:
+ ///Constructor. Allocates a buffer with the default length.
+ StringBuffer();
+ ///Constructor. Allocates a buffer of length initSize + 1
+ StringBuffer(const int32_t initSize);
+ ///Constructor. Creates an instance of Stringbuffer containing a copy of
+ ///the string value
+ StringBuffer(const TCHAR* value);
+ ///Constructs a StringBuffer using another buffer. The StringBuffer can
+ ///the be used to easily manipulate the buffer.
+ StringBuffer(TCHAR* buf,int32_t maxlen, const bool consumeBuffer);
+ ///Destructor
+ ~StringBuffer();
+ ///Clears the Stringbuffer and resets it to it default empty state
+ void clear();
+
+ ///Appends a single character
+ void appendChar(const TCHAR chr);
+ ///Appends a copy of the string value
+ void append(const TCHAR* value);
+ ///Appends a copy of the string value
+ void append(const TCHAR* value, size_t appendedLength);
+ ///Appends an integer (after conversion to a character string)
+ void appendInt(const int32_t value);
+ ///Appends a qreal (after conversion to a character string)
+ void appendFloat(const qreal value, const int32_t digits);
+ ///Puts a copy of the string value in front of the current string in the StringBuffer
+ void prepend(const TCHAR* value);
+ ///Puts a copy of the string value in front of the current string in the StringBuffer
+ void prepend(const TCHAR* value, size_t prependedLength);
+
+ ///Contains the length of string in the StringBuffer
+ ///Public so that analyzers can edit the length directly
+ int32_t len;
+ ///Returns the length of the string in the StringBuffer
+ int32_t length() const;
+ ///Returns a copy of the current string in the StringBuffer
+ TCHAR* toString();
+ ///Returns a null terminated reference to the StringBuffer's text
+ TCHAR* getBuffer();
+
+
+ ///reserve a minimum amount of data for the buffer.
+ ///no change made if the buffer is already longer than length
+ void reserve(const int32_t length);
+ private:
+ ///A buffer that contains strings
+ TCHAR* buffer;
+ ///The length of the buffer
+ int32_t bufferLength;
+ bool bufferOwner;
+
+ ///Has the buffer grown to a minimum length of minLength or bigger
+ void growBuffer(const int32_t minLength);
+ ///Has the buffer grown to a minimum length of minLength or bigger and shifts the
+ ///current string in buffer by skippingNInitialChars forward
+ void growBuffer(const int32_t minLength, const int32_t skippingNInitialChars);
+
+ };
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/util/StringIntern.cpp b/src/3rdparty/clucene/src/CLucene/util/StringIntern.cpp
new file mode 100644
index 0000000..cb7a889
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/util/StringIntern.cpp
@@ -0,0 +1,158 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "StringIntern.h"
+CL_NS_DEF(util)
+
+ __wcsintrntype::iterator wblank;
+ bool blanksinitd=false;
+ __wcsintrntype CLStringIntern::stringPool(true);
+ __strintrntype CLStringIntern::stringaPool(true);
+ DEFINE_MUTEX(CLStringIntern::THIS_LOCK)
+
+ void CLStringIntern::shutdown(){
+ #ifdef _DEBUG
+ SCOPED_LOCK_MUTEX(THIS_LOCK)
+ if ( stringaPool.size() > 0 ){
+ printf("ERROR: stringaPool still contains intern'd strings (refcounts):\n");
+ __strintrntype::iterator itr = stringaPool.begin();
+ while ( itr != stringaPool.end() ){
+ printf(" %s (%d)\n",(itr->first), (itr->second));
+ ++itr;
+ }
+ }
+
+ if ( stringPool.size() > 0 ){
+ printf("ERROR: stringPool still contains intern'd strings (refcounts):\n");
+ __wcsintrntype::iterator itr = stringPool.begin();
+ while ( itr != stringPool.end() ){
+ _tprintf(_T(" %s (%d)\n"),(itr->first), (itr->second));
+ ++itr;
+ }
+ }
+ #endif
+ }
+
+ const TCHAR* CLStringIntern::intern(const TCHAR* str CL_FILELINEPARAM){
+ if ( str == NULL )
+ return NULL;
+ if ( str[0] == 0 )
+ return LUCENE_BLANK_STRING;
+
+ SCOPED_LOCK_MUTEX(THIS_LOCK)
+
+ __wcsintrntype::iterator itr = stringPool.find(str);
+ if ( itr==stringPool.end() ){
+#ifdef _UCS2
+ TCHAR* ret = lucenewcsdup(str CL_FILELINEREF);
+#else
+ TCHAR* ret = lucenestrdup(str CL_FILELINEREF);
+#endif
+ stringPool[ret]= 1;
+ return ret;
+ }else{
+ (itr->second)++;
+ return itr->first;
+ }
+ }
+
+ bool CLStringIntern::unintern(const TCHAR* str){
+ if ( str == NULL )
+ return false;
+ if ( str[0] == 0 )
+ return false;
+
+ SCOPED_LOCK_MUTEX(THIS_LOCK)
+
+ __wcsintrntype::iterator itr = stringPool.find(str);
+ if ( itr != stringPool.end() ){
+ if ( (itr->second) == 1 ){
+ stringPool.removeitr(itr);
+ return true;
+ }else
+ (itr->second)--;
+ }
+ return false;
+ }
+
+ const char* CLStringIntern::internA(const char* str CL_FILELINEPARAM){
+ if ( str == NULL )
+ return NULL;
+ if ( str[0] == 0 )
+ return _LUCENE_BLANK_ASTRING;
+
+ SCOPED_LOCK_MUTEX(THIS_LOCK)
+
+ __strintrntype::iterator itr = stringaPool.find(str);
+ if ( itr==stringaPool.end() ){
+ char* ret = lucenestrdup(str CL_FILELINE);
+ stringaPool[ret] = 1;
+ return ret;
+ }else{
+ (itr->second)++;
+ return itr->first;
+ }
+ }
+
+ bool CLStringIntern::uninternA(const char* str){
+ if ( str == NULL )
+ return false;
+ if ( str[0] == 0 )
+ return false;
+
+ SCOPED_LOCK_MUTEX(THIS_LOCK)
+
+ __strintrntype::iterator itr = stringaPool.find(str);
+ if ( itr!=stringaPool.end() ){
+ if ( (itr->second) == 1 ){
+ stringaPool.removeitr(itr);
+ return true;
+ }else
+ (itr->second)--;
+ }
+ return false;
+ }
+
+ /* removed because of multi-threading problems...
+ __wcsintrntype::iterator CLStringIntern::internitr(const TCHAR* str CL_FILELINEPARAM){
+ if ( str[0] == 0 ){
+ if ( !blanksinitd ){
+ CLStringIntern::stringPool.put(LUCENE_BLANK_STRING,1);
+ wblank=stringPool.find(str);
+ blanksinitd=true;
+ }
+ return wblank;
+ }
+ __wcsintrntype::iterator itr = stringPool.find(str);
+ if (itr==stringPool.end()){
+#ifdef _UCS2
+ TCHAR* ret = lucenewcsdup(str CL_FILELINEREF);
+#else
+ TCHAR* ret = lucenestrdup(str CL_FILELINEREF);
+#endif
+ stringPool.put(ret,1);
+ return stringPool.find(str);
+ }else{
+ (itr->second)++;
+ return itr;
+ }
+ }
+ bool CLStringIntern::uninternitr(__wcsintrntype::iterator itr){
+ if ( itr!=stringPool.end() ){
+ if ( itr==wblank )
+ return false;
+ if ( (itr->second) == 1 ){
+ stringPool.removeitr(itr);
+ return true;
+ }else
+ (itr->second)--;
+ }
+ return false;
+ }
+*/
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/util/StringIntern.h b/src/3rdparty/clucene/src/CLucene/util/StringIntern.h
new file mode 100644
index 0000000..ded060c
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/util/StringIntern.h
@@ -0,0 +1,61 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_util_StringIntern_H
+#define _lucene_util_StringIntern_H
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "VoidMap.h"
+CL_NS_DEF(util)
+typedef CL_NS(util)::CLHashMap<const TCHAR*,int,CL_NS(util)::Compare::TChar,CL_NS(util)::Equals::TChar,CL_NS(util)::Deletor::tcArray, CL_NS(util)::Deletor::DummyInt32 > __wcsintrntype;
+typedef CL_NS(util)::CLHashMap<const char*,int,CL_NS(util)::Compare::Char,CL_NS(util)::Equals::Char,CL_NS(util)::Deletor::acArray, CL_NS(util)::Deletor::DummyInt32 > __strintrntype;
+
+ /** Functions for intern'ing strings. This
+ * is a process of pooling strings thus using less memory,
+ * and furthermore allows intern'd strings to be directly
+ * compared:
+ * string1==string2, rather than _tcscmp(string1,string2)
+ */
+ class CLStringIntern{
+ static __wcsintrntype stringPool;
+ static __strintrntype stringaPool;
+ STATIC_DEFINE_MUTEX(THIS_LOCK)
+ public:
+ /**
+ * Internalise the specified string.
+ * \return Returns a pointer to the internalised string
+ */
+ static const char* internA(const char* str CL_FILELINEPARAM);
+ /**
+ * Uninternalise the specified string. Decreases
+ * the reference count and frees the string if
+ * reference count is zero
+ * \returns true if string was destroyed, otherwise false
+ */
+ static bool uninternA(const char* str);
+
+ /**
+ * Internalise the specified string.
+ * \return Returns a pointer to the internalised string
+ */
+ static const TCHAR* intern(const TCHAR* str CL_FILELINEPARAM);
+
+ /**
+ * Uninternalise the specified string. Decreases
+ * the reference count and frees the string if
+ * reference count is zero
+ * \returns true if string was destroyed, otherwise false
+ */
+ static bool unintern(const TCHAR* str);
+
+ static void shutdown();
+ };
+
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/util/ThreadLocal.cpp b/src/3rdparty/clucene/src/CLucene/util/ThreadLocal.cpp
new file mode 100644
index 0000000..a54c869
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/util/ThreadLocal.cpp
@@ -0,0 +1,55 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+#include "CLucene/LuceneThreads.h"
+#include "ThreadLocal.h"
+
+CL_NS_DEF(util)
+
+DEFINE_MUTEX(ThreadLocalBase::ThreadLocalBase_THIS_LOCK)
+
+ThreadLocalBase::ShutdownHooksType ThreadLocalBase::shutdownHooks(false);
+ThreadLocalBase::ThreadLocalsType ThreadLocalBase::threadLocals(false,false);
+
+ThreadLocalBase::ThreadLocalBase(){
+}
+ThreadLocalBase::~ThreadLocalBase(){
+}
+
+void ThreadLocalBase::UnregisterCurrentThread(){
+ _LUCENE_THREADID_TYPE id = _LUCENE_CURRTHREADID;
+ SCOPED_LOCK_MUTEX(ThreadLocalBase_THIS_LOCK)
+
+ ThreadLocalsType::iterator itr = threadLocals.lower_bound(id);
+ ThreadLocalsType::iterator end = threadLocals.upper_bound(id);
+ while ( itr != end ){
+ itr->second->setNull();
+ ++itr;
+ }
+}
+void ThreadLocalBase::shutdown(){
+ SCOPED_LOCK_MUTEX(ThreadLocalBase_THIS_LOCK)
+
+ ThreadLocalsType::iterator itr = threadLocals.begin();
+ while ( itr != threadLocals.end() ){
+ itr->second->setNull();
+ ++itr;
+ }
+
+ ShutdownHooksType::iterator itr2 = shutdownHooks.begin();
+ while ( itr2 != shutdownHooks.end() ){
+ ShutdownHook* hook = *itr2;
+ hook(false);
+ }
+}
+void ThreadLocalBase::registerShutdownHook(ShutdownHook* hook){
+ SCOPED_LOCK_MUTEX(ThreadLocalBase_THIS_LOCK)
+ shutdownHooks.insert(hook);
+}
+
+
+CL_NS_END
diff --git a/src/3rdparty/clucene/src/CLucene/util/ThreadLocal.h b/src/3rdparty/clucene/src/CLucene/util/ThreadLocal.h
new file mode 100644
index 0000000..f67c76c
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/util/ThreadLocal.h
@@ -0,0 +1,143 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+*
+* Changes are Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+------------------------------------------------------------------------------*/
+#ifndef _lucene_util_ThreadLocal_H
+#define _lucene_util_ThreadLocal_H
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "CLucene/util/VoidMap.h"
+
+CL_NS_DEF(util)
+
+class ThreadLocalBase: LUCENE_BASE{
+public:
+ /**
+ * A hook called when CLucene is starting or shutting down,
+ * this can be used for setting up and tearing down static
+ * variables
+ */
+ typedef void ShutdownHook(bool startup);
+
+protected:
+ STATIC_DEFINE_MUTEX(ThreadLocalBase_THIS_LOCK)
+ typedef CL_NS(util)::CLMultiMap<_LUCENE_THREADID_TYPE, ThreadLocalBase*,
+ CL_NS(util)::CLuceneThreadIdCompare,
+ CL_NS(util)::Deletor::ConstNullVal<_LUCENE_THREADID_TYPE>,
+ CL_NS(util)::Deletor::ConstNullVal<ThreadLocalBase*> > ThreadLocalsType;
+ static ThreadLocalsType threadLocals;
+ //todo: using http://en.wikipedia.org/wiki/Thread-local_storage#Pthreads_implementation
+ //would work better... but lots of testing would be needed first...
+ typedef CL_NS(util)::CLSetList<ShutdownHook*,
+ CL_NS(util)::Compare::Void<ShutdownHook>,
+ CL_NS(util)::Deletor::ConstNullVal<ShutdownHook*> > ShutdownHooksType;
+ static ShutdownHooksType shutdownHooks;
+
+ ThreadLocalBase();
+public:
+ virtual ~ThreadLocalBase();
+
+ /**
+ * Call this function to clear the local thread data for this
+ * ThreadLocal. Calling set(NULL) does the same thing, except
+ * this function is virtual and can be called without knowing
+ * the template.
+ */
+ virtual void setNull() = 0;
+
+ /**
+ * If you want to clean up thread specific memory, then you should
+ * make sure this thread is called when the thread is not going to be used
+ * again. This will clean up threadlocal data which can contain quite a lot
+ * of data, so if you are creating lots of new threads, then it is a good idea
+ * to use this function, otherwise there will be many memory leaks.
+ */
+ static void UnregisterCurrentThread();
+
+ /**
+ * Call this function to shutdown CLucene
+ */
+ static void shutdown();
+
+ /**
+ * Add this function to the shutdown hook list. This function will be called
+ * when CLucene is shutdown.
+ */
+ static void registerShutdownHook(ShutdownHook* hook);
+};
+
+template<typename T,typename _deletor>
+class ThreadLocal: public ThreadLocalBase{
+ typedef CL_NS(util)::CLSet<_LUCENE_THREADID_TYPE, T,
+ CL_NS(util)::CLuceneThreadIdCompare,
+ CL_NS(util)::Deletor::ConstNullVal<_LUCENE_THREADID_TYPE>,
+ _deletor > LocalsType;
+ LocalsType locals;
+ DEFINE_MUTEX(locals_LOCK)
+public:
+ ThreadLocal();
+ ~ThreadLocal();
+ T get();
+ void setNull();
+ void set(T t);
+};
+
+template<typename T,typename _deletor>
+ThreadLocal<T,_deletor>::ThreadLocal():
+ locals(false,true)
+{
+ //add this object to the base's list of threadlocals to be
+ //notified in case of UnregisterThread()
+ _LUCENE_THREADID_TYPE id = _LUCENE_CURRTHREADID;
+ SCOPED_LOCK_MUTEX(ThreadLocalBase_THIS_LOCK)
+ threadLocals.insert( CL_NS_STD(pair)<const _LUCENE_THREADID_TYPE, ThreadLocalBase*>(id, this) );
+}
+
+template<typename T,typename _deletor>
+ThreadLocal<T,_deletor>::~ThreadLocal(){
+ //remove this object to the base's list of threadlocals
+ _LUCENE_THREADID_TYPE id = _LUCENE_CURRTHREADID;
+ SCOPED_LOCK_MUTEX(ThreadLocalBase_THIS_LOCK)
+
+ //remove all the thread local data for this object
+ locals.clear();
+
+ //remove this object from the ThreadLocalBase threadLocal list
+ ThreadLocalsType::iterator itr = threadLocals.lower_bound(id);
+ ThreadLocalsType::iterator end = threadLocals.upper_bound(id);
+ while ( itr != end ){
+ if ( itr->second == this){
+ threadLocals.erase(itr);
+ break;
+ }
+ ++itr;
+ }
+}
+
+template<typename T,typename _deletor>
+T ThreadLocal<T,_deletor>::get(){
+ return locals.get(_LUCENE_CURRTHREADID);
+}
+
+template<typename T,typename _deletor>
+void ThreadLocal<T,_deletor>::setNull(){
+ set(NULL);
+}
+
+template<typename T,typename _deletor>
+void ThreadLocal<T,_deletor>::set(T t){
+ _LUCENE_THREADID_TYPE id = _LUCENE_CURRTHREADID;
+ locals.remove(id);
+ if ( t != NULL )
+ locals.insert( CL_NS_STD(pair)<const _LUCENE_THREADID_TYPE,T>(id, t) );
+}
+
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/util/VoidList.h b/src/3rdparty/clucene/src/CLucene/util/VoidList.h
new file mode 100644
index 0000000..cd69088
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/util/VoidList.h
@@ -0,0 +1,175 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_util_VoidList_
+#define _lucene_util_VoidList_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#include "Equators.h"
+
+CL_NS_DEF(util)
+
+/**
+* A template to encapsulate various list type classes
+* @internal
+*/
+template<typename _kt,typename _base,typename _valueDeletor>
+class __CLList:public _base,LUCENE_BASE {
+private:
+ bool dv;
+ typedef _base base;
+public:
+ DEFINE_MUTEX(THIS_LOCK)
+
+ typedef typename _base::const_iterator const_iterator;
+ typedef typename _base::iterator iterator;
+
+ virtual ~__CLList(){
+ clear();
+ }
+
+ __CLList ( const bool deleteValue ):
+ dv(deleteValue)
+ {
+ }
+
+ void setDoDelete(bool val){ dv=val; }
+
+ //sets array to the contents of this array.
+ //array must be size+1, otherwise memory may be overwritten
+ void toArray(_kt* into) const{
+ int i=0;
+ for ( const_iterator itr=base::begin();itr!=base::end();itr++ ){
+ into[i] = *itr;
+ i++;
+ }
+ into[i] = NULL;
+ }
+
+ void set(int32_t i, _kt val) {
+ if ( dv )
+ _valueDeletor::doDelete((*this)[i]);
+ (*this)[i] = val;
+ }
+
+ //todo: check this
+ void delete_back(){
+ if ( base::size() > 0 ){
+ iterator itr = base::end();
+ if ( itr != base::begin())
+ itr --;
+ _kt key = *itr;
+ base::erase(itr);
+ if ( dv )
+ _valueDeletor::doDelete(key);
+ }
+ }
+
+ void delete_front(){
+ if ( base::size() > 0 ){
+ iterator itr = base::begin();
+ _kt key = *itr;
+ base::erase(itr);
+ if ( dv )
+ _valueDeletor::doDelete(key);
+ }
+ }
+
+ void clear(){
+ if ( dv ){
+ iterator itr = base::begin();
+ while ( itr != base::end() ){
+ _valueDeletor::doDelete(*itr);
+ ++itr;
+ }
+ }
+ base::clear();
+ }
+
+ void remove(int32_t i, bool dontDelete=false){
+ iterator itr=base::begin();
+ itr+=i;
+ _kt key = *itr;
+ base::erase( itr );
+ if ( dv && !dontDelete )
+ _valueDeletor::doDelete(key);
+ }
+ void remove(iterator itr, bool dontDelete=false){
+ _kt key = *itr;
+ base::erase( itr );
+ if ( dv && !dontDelete )
+ _valueDeletor::doDelete(key);
+ }
+
+};
+
+//growable arrays of Objects (like a collection or list)
+//a list, so can contain duplicates
+//it grows in chunks... todo: check jlucene for initial size of array, and growfactors
+template<typename _kt, typename _valueDeletor=CL_NS(util)::Deletor::Dummy>
+class CLVector:public __CLList<_kt, CL_NS_STD(vector)<_kt> , _valueDeletor>
+{
+public:
+ CLVector ( const bool deleteValue=true ):
+ __CLList<_kt, CL_NS_STD(vector)<_kt> , _valueDeletor>(deleteValue)
+ {
+ }
+};
+
+//An array-backed implementation of the List interface
+//a list, so can contain duplicates
+//*** a very simple list - use <valarray>
+//(This class is roughly equivalent to Vector, except that it is unsynchronized.)
+#define CLArrayList CLVector
+#define CLHashSet CLHashList
+
+//implementation of the List interface, provides access to the first and last list elements in O(1)
+//no comparator is required... and so can contain duplicates
+//a simple list with no comparator
+//*** a very simple list - use <list>
+#ifdef LUCENE_DISABLE_HASHING
+ #define CLHashList CLSetList
+#else
+
+template<typename _kt,
+ typename _Comparator=CL_NS(util)::Compare::TChar,
+ typename _valueDeletor=CL_NS(util)::Deletor::Dummy>
+class CLHashList:public __CLList<_kt, CL_NS_HASHING(hash_set)<_kt,_Comparator> , _valueDeletor>
+{
+public:
+ CLHashList ( const bool deleteValue=true ):
+ __CLList<_kt, CL_NS_HASHING(hash_set)<_kt,_Comparator> , _valueDeletor>(deleteValue)
+ {
+ }
+};
+#endif
+
+template<typename _kt, typename _valueDeletor=CL_NS(util)::Deletor::Dummy>
+class CLLinkedList:public __CLList<_kt, CL_NS_STD(list)<_kt> , _valueDeletor>
+{
+public:
+ CLLinkedList ( const bool deleteValue=true ):
+ __CLList<_kt, CL_NS_STD(list)<_kt> , _valueDeletor>(deleteValue)
+ {
+ }
+};
+template<typename _kt,
+ typename _Comparator=CL_NS(util)::Compare::TChar,
+ typename _valueDeletor=CL_NS(util)::Deletor::Dummy>
+class CLSetList:public __CLList<_kt, CL_NS_STD(set)<_kt,_Comparator> , _valueDeletor>
+{
+public:
+ CLSetList ( const bool deleteValue=true ):
+ __CLList<_kt, CL_NS_STD(set)<_kt,_Comparator> , _valueDeletor>(deleteValue)
+ {
+ }
+};
+
+CL_NS_END
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/util/VoidMap.h b/src/3rdparty/clucene/src/CLucene/util/VoidMap.h
new file mode 100644
index 0000000..b22b507
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/util/VoidMap.h
@@ -0,0 +1,270 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef _lucene_util_VoidMap_
+#define _lucene_util_VoidMap_
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+
+CL_NS_DEF(util)
+
+/**
+* A template to encapsulate various map type classes
+* @internal
+*/
+template<typename _kt, typename _vt,
+ typename _base,
+ typename _KeyDeletor=CL_NS(util)::Deletor::Dummy,
+ typename _ValueDeletor=CL_NS(util)::Deletor::Dummy>
+class __CLMap:public _base,LUCENE_BASE {
+private:
+ bool dk;
+ bool dv;
+ typedef _base base;
+public:
+ DEFINE_MUTEX(THIS_LOCK)
+
+ typedef typename _base::iterator iterator;
+ typedef typename _base::const_iterator const_iterator;
+ typedef CL_NS_STD(pair)<_kt, _vt> _pair;
+
+ ///Default constructor for the __CLMap
+ __CLMap ():
+ dk(true),
+ dv(true)
+ {
+ }
+
+ ///Deconstructor for the __CLMap
+ ~__CLMap (){
+ clear();
+ }
+
+ void setDeleteKey(bool val){ dk = val; }
+ void setDeleteValue(bool val){ dv = val; }
+
+ ///Construct the VoidMap and set the deleteTypes to the specified values
+ ///\param deleteKey if true then the key variable is deleted when an object is deleted
+ ///\param keyDelType delete the key variable using the specified type
+ ///\param deleteValue if true then the value variable is deleted when an object is deleted
+ ///\param valueDelType delete the value variable using the specified type
+ /*__CLMap ( const bool deleteKey, const bool deleteValue ):
+ dk(deleteKey),
+ dv(deleteValue)
+ {
+ }*/
+
+ ///checks to see if the specified key exists
+ ///\param k the key to check for
+ ///\returns true if the key exists
+ bool exists(_kt k)const{
+ const_iterator itr = base::find(k);
+ bool ret = itr!=base::end();
+ return ret;
+ }
+
+ ///put the specified pair into the map. remove any old items first
+ ///\param k the key
+ ///\param v the value
+ void put(_kt k,_vt v){
+ //todo: check if this is always right!
+ //must should look through code, for
+ //cases where map is not unique!!!
+ if ( dk || dv )
+ remove(k);
+
+ //todo: replacing the old item might be quicker...
+
+ base::insert(_pair(k,v));
+ }
+
+
+ ///using a non-const key, get a non-const value
+ _vt get( _kt k) const {
+ const_iterator itr = base::find(k);
+ if ( itr==base::end() )
+ return _vt();
+ else
+ return itr->second;
+ }
+ ///using a non-const key, get the actual key
+ _kt getKey( _kt k) const {
+ const_iterator itr = base::find(k);
+ if ( itr==base::end() )
+ return _kt();
+ else
+ return itr->first;
+ }
+
+ void removeitr (iterator itr, const bool dontDeleteKey = false, const bool dontDeleteValue = false){
+ //delete key&val first. This prevents potential loops (deleting object removes itself)
+ _kt key = itr->first;
+ _vt val = itr->second;
+ base::erase(itr);
+
+ //keys & vals need to be deleted after erase, because the hashvalue is still needed
+ if ( dk && !dontDeleteKey )
+ _KeyDeletor::doDelete(key);
+ if ( dv && !dontDeleteValue )
+ _ValueDeletor::doDelete(val);
+ }
+ ///delete and optionally delete the specified key and associated value
+ void remove(_kt key, const bool dontDeleteKey = false, const bool dontDeleteValue = false){
+ iterator itr = base::find(key);
+ if ( itr!=base::end() )
+ removeitr(itr,dontDeleteKey,dontDeleteValue);
+ }
+
+ ///clear all keys and values in the map
+ void clear(){
+ if ( dk || dv ){
+ iterator itr = base::begin();
+ while ( itr!=base::end() ){
+ #ifdef _CL_HAVE_EXT_HASH_MAP
+ removeitr(itr);
+ itr = base::begin();
+
+ #else
+ if ( dk )
+ _KeyDeletor::doDelete(itr->first);
+ if ( dv )
+ _ValueDeletor::doDelete(itr->second);
+ ++itr;
+
+ #endif
+ }
+ }
+ base::clear();
+ }
+};
+
+// makes no guarantees as to the order of the map
+// cannot contain duplicate keys; each key can map to at most one value
+#define CLHashtable CLHashMap
+
+#if defined(_CL_HAVE_GOOGLE_DENSE_HASH_MAP)
+//do nothing
+#elif defined(LUCENE_DISABLE_HASHING)
+
+ //a CLSet with CLHashMap traits
+template<typename _kt, typename _vt,
+ typename _Compare,
+ typename _EqualDummy,
+ typename _KeyDeletor=CL_NS(util)::Deletor::Dummy,
+ typename _ValueDeletor=CL_NS(util)::Deletor::Dummy>
+class CLHashMap:public __CLMap<_kt,_vt,
+ CL_NS_STD(map)<_kt,_vt, _Compare>,
+ _KeyDeletor,_ValueDeletor>
+{
+ typedef typename CL_NS_STD(map)<_kt,_vt,_Compare> _base;
+ typedef __CLMap<_kt, _vt, CL_NS_STD(map)<_kt,_vt, _Compare>,
+ _KeyDeletor,_ValueDeletor> _this;
+public:
+ CLHashMap ( const bool deleteKey=false, const bool deleteValue=false )
+ {
+ _this::setDeleteKey(deleteKey);
+ _this::setDeleteValue(deleteValue);
+ }
+};
+#elif defined(_CL_HAVE_EXT_HASH_MAP)
+ //ext/hash_map syntax
+//HashMap class is roughly equivalent to Hashtable, except that it is unsynchronized
+template<typename _kt, typename _vt,
+ typename _Hasher,
+ typename _Equals,
+ typename _KeyDeletor=CL_NS(util)::Deletor::Dummy,
+ typename _ValueDeletor=CL_NS(util)::Deletor::Dummy>
+class CLHashMap:public __CLMap<_kt,_vt,
+ CL_NS_HASHING(hash_map)<_kt,_vt, _Hasher,_Equals>,
+ _KeyDeletor,_ValueDeletor>
+{
+ typedef __CLMap<_kt,_vt, CL_NS_HASHING(hash_map)<_kt,_vt, _Hasher,_Equals>,
+ _KeyDeletor,_ValueDeletor> _this;
+public:
+ CLHashMap ( const bool deleteKey=false, const bool deleteValue=false )
+ {
+ _this::setDeleteKey(deleteKey);
+ _this::setDeleteValue(deleteValue);
+ }
+};
+
+#else
+//HashMap class is roughly equivalent to Hashtable, except that it is unsynchronized
+template<typename _kt, typename _vt,
+ typename _Hasher,
+ typename _Equals,
+ typename _KeyDeletor=CL_NS(util)::Deletor::Dummy,
+ typename _ValueDeletor=CL_NS(util)::Deletor::Dummy>
+class CLHashMap:public __CLMap<_kt,_vt,
+ CL_NS_HASHING(hash_map)<_kt,_vt, _Hasher>,
+ _KeyDeletor,_ValueDeletor>
+{
+ typedef __CLMap<_kt,_vt, CL_NS_HASHING(hash_map)<_kt,_vt, _Hasher>,
+ _KeyDeletor,_ValueDeletor> _this;
+public:
+ CLHashMap ( const bool deleteKey=false, const bool deleteValue=false )
+ {
+ _this::setDeleteKey(deleteKey);
+ _this::setDeleteValue(deleteValue);
+ }
+};
+#endif
+
+//A collection that contains no duplicates
+//does not guarantee that the order will remain constant over time
+template<typename _kt, typename _vt,
+ typename _Compare,
+ typename _KeyDeletor=CL_NS(util)::Deletor::Dummy,
+ typename _ValueDeletor=CL_NS(util)::Deletor::Dummy>
+class CLSet:public __CLMap<_kt,_vt,
+ CL_NS_STD(map)<_kt,_vt, _Compare>,
+ _KeyDeletor,_ValueDeletor>
+{
+ typedef typename CL_NS_STD(map)<_kt,_vt,_Compare> _base;
+ typedef __CLMap<_kt, _vt, CL_NS_STD(map)<_kt,_vt, _Compare>,
+ _KeyDeletor,_ValueDeletor> _this;
+public:
+ CLSet ( const bool deleteKey=false, const bool deleteValue=false )
+ {
+ _this::setDeleteKey(deleteKey);
+ _this::setDeleteValue(deleteValue);
+ }
+};
+
+
+//A collection that can contains duplicates
+template<typename _kt, typename _vt,
+ typename _Compare,
+ typename _KeyDeletor=CL_NS(util)::Deletor::Dummy,
+ typename _ValueDeletor=CL_NS(util)::Deletor::Dummy>
+class CLMultiMap:public __CLMap<_kt,_vt,
+ CL_NS_STD(multimap)<_kt,_vt>,
+ _KeyDeletor,_ValueDeletor>
+{
+ typedef typename CL_NS_STD(multimap)<_kt,_vt> _base;
+ typedef __CLMap<_kt, _vt, CL_NS_STD(multimap)<_kt,_vt>,
+ _KeyDeletor,_ValueDeletor> _this;
+public:
+ CLMultiMap ( const bool deleteKey=false, const bool deleteValue=false )
+ {
+ _this::setDeleteKey(deleteKey);
+ _this::setDeleteValue(deleteValue);
+ }
+};
+
+
+//*** need to create a class that allows duplicates - use <set>
+//#define CLSet __CLMap
+CL_NS_END
+
+#ifdef _CL_HAVE_GOOGLE_DENSE_HASH_MAP
+#include "GoogleSparseMap.h"
+#endif
+
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/util/bufferedstream.h b/src/3rdparty/clucene/src/CLucene/util/bufferedstream.h
new file mode 100644
index 0000000..2455d5e
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/util/bufferedstream.h
@@ -0,0 +1,155 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Jos van den Oever
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+/* This file is part of Strigi Desktop Search
+ *
+ * Copyright (C) 2006 Jos van den Oever <jos@vandenoever.info>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+#ifndef BUFFEREDSTREAM_H
+#define BUFFEREDSTREAM_H
+
+#include "streambase.h"
+#include "inputstreambuffer.h"
+#include <cassert>
+
+namespace jstreams {
+
+template <class T>
+class BufferedInputStream : public StreamBase<T> {
+private:
+ bool finishedWritingToBuffer;
+ InputStreamBuffer<T> buffer;
+
+ void writeToBuffer(int32_t minsize);
+ int32_t read_(const T*& start, int32_t min, int32_t max);
+protected:
+ /**
+ * This function must be implemented by the subclasses.
+ * It should write a maximum of @p space characters at the buffer
+ * position pointed to by @p start. If no more data is avaiable due to
+ * end of file, -1 should be returned. If an error occurs, the status
+ * should be set to Error, an error message should be set and the function
+ * must return -1.
+ **/
+ virtual int32_t fillBuffer(T* start, int32_t space) = 0;
+ // this function might be useful if you want to reuse a bufferedstream
+ void resetBuffer() {printf("implement 'resetBuffer'\n");}
+ BufferedInputStream<T>();
+public:
+ int32_t read(const T*& start, int32_t min, int32_t max);
+ int64_t reset(int64_t);
+ virtual int64_t skip(int64_t ntoskip);
+};
+
+template <class T>
+BufferedInputStream<T>::BufferedInputStream() {
+ finishedWritingToBuffer = false;
+}
+
+template <class T>
+void
+BufferedInputStream<T>::writeToBuffer(int32_t ntoread) {
+ int32_t missing = ntoread - buffer.avail;
+ int32_t nwritten = 0;
+ while (missing > 0 && nwritten >= 0) {
+ int32_t space;
+ space = buffer.makeSpace(missing);
+ T* start = buffer.readPos + buffer.avail;
+ nwritten = fillBuffer(start, space);
+ assert(StreamBase<T>::status != Eof);
+ if (nwritten > 0) {
+ buffer.avail += nwritten;
+ missing = ntoread - buffer.avail;
+ }
+ }
+ if (nwritten < 0) {
+ finishedWritingToBuffer = true;
+ }
+}
+template <class T>
+int32_t
+BufferedInputStream<T>::read(const T*& start, int32_t min, int32_t max) {
+ if (StreamBase<T>::status == Error) return -2;
+ if (StreamBase<T>::status == Eof) return -1;
+
+ // do we need to read data into the buffer?
+ if (!finishedWritingToBuffer && min > buffer.avail) {
+ // do we have enough space in the buffer?
+ writeToBuffer(min);
+ if (StreamBase<T>::status == Error) return -2;
+ }
+
+ int32_t nread = buffer.read(start, max);
+
+ BufferedInputStream<T>::position += nread;
+ if (BufferedInputStream<T>::position > BufferedInputStream<T>::size
+ && BufferedInputStream<T>::size > 0) {
+ // error: we read more than was specified in size
+ // this is an error because all dependent code might have been labouring
+ // under a misapprehension
+ BufferedInputStream<T>::status = Error;
+ BufferedInputStream<T>::error = "Stream is longer than specified.";
+ nread = -2;
+ } else if (BufferedInputStream<T>::status == Ok && buffer.avail == 0
+ && finishedWritingToBuffer) {
+ BufferedInputStream<T>::status = Eof;
+ if (BufferedInputStream<T>::size == -1) {
+ BufferedInputStream<T>::size = BufferedInputStream<T>::position;
+ }
+ // save one call to read() by already returning -1 if no data is there
+ if (nread == 0) nread = -1;
+ }
+ return nread;
+}
+template <class T>
+int64_t
+BufferedInputStream<T>::reset(int64_t newpos) {
+ if (StreamBase<T>::status == Error) return -2;
+ // check to see if we have this position
+ int64_t d = BufferedInputStream<T>::position - newpos;
+ if (buffer.readPos - d >= buffer.start && -d < buffer.avail) {
+ BufferedInputStream<T>::position -= d;
+ buffer.avail += (int32_t)d;
+ buffer.readPos -= d;
+ StreamBase<T>::status = Ok;
+ }
+ return StreamBase<T>::position;
+}
+template <class T>
+int64_t
+BufferedInputStream<T>::skip(int64_t ntoskip) {
+ const T *begin;
+ int32_t nread;
+ int64_t skipped = 0;
+ while (ntoskip) {
+ int32_t step = (int32_t)((ntoskip > buffer.size) ?buffer.size :ntoskip);
+ nread = read(begin, 1, step);
+ if (nread <= 0) {
+ return skipped;
+ }
+ ntoskip -= nread;
+ skipped += nread;
+ }
+ return skipped;
+}
+}
+
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/util/dirent.cpp b/src/3rdparty/clucene/src/CLucene/util/dirent.cpp
new file mode 100644
index 0000000..3c5c542
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/util/dirent.cpp
@@ -0,0 +1,221 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Matt J. Weinstein
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#include "CLucene/StdHeader.h"
+
+#if !defined(_CL_HAVE_DIRENT_H) && !defined(_CL_HAVE_SYS_NDIR_H) && !defined(_CL_HAVE_SYS_DIR_H) && !defined(_CL_HAVE_NDIR_H)
+#include "dirent.h"
+
+DIR *
+opendir (const char *szPath)
+{
+ DIR *nd;
+ char szFullPath[CL_MAX_PATH];
+
+ errno = 0;
+
+ if (!szPath)
+ {
+ errno = EFAULT;
+ return NULL;
+ }
+
+ if (szPath[0] == '\0')
+ {
+ errno = ENOTDIR;
+ return NULL;
+ }
+
+ /* Attempt to determine if the given path really is a directory. */
+ struct _stat rcs;
+ if ( _stat(szPath,&rcs) == -1)
+ {
+ /* call GetLastError for more error info */
+ errno = ENOENT;
+ return NULL;
+ }
+ if (!(rcs.st_mode & _S_IFDIR))
+ {
+ /* Error, entry exists but not a directory. */
+ errno = ENOTDIR;
+ return NULL;
+ }
+
+ /* Make an absolute pathname. */
+ _realpath(szPath,szFullPath);
+
+ /* Allocate enough space to store DIR structure and the complete
+ * directory path given. */
+ //nd = (DIR *) malloc (sizeof (DIR) + _tcslen (szFullPath) + _tcslen (DIRENT_SLASH) +
+ // _tcslen (DIRENT_SEARCH_SUFFIX)+1);
+ nd = new DIR;
+
+ if (!nd)
+ {
+ /* Error, out of memory. */
+ errno = ENOMEM;
+ return NULL;
+ }
+
+ /* Create the search expression. */
+ strcpy (nd->dd_name, szFullPath);
+
+ /* Add on a slash if the path does not end with one. */
+ if (nd->dd_name[0] != '\0' &&
+ nd->dd_name[strlen (nd->dd_name) - 1] != '/' &&
+ nd->dd_name[strlen (nd->dd_name) - 1] != '\\')
+ {
+ strcat (nd->dd_name, DIRENT_SLASH);
+ }
+
+ /* Add on the search pattern */
+ strcat (nd->dd_name, DIRENT_SEARCH_SUFFIX);
+
+ /* Initialize handle to -1 so that a premature closedir doesn't try
+ * to call _findclose on it. */
+ nd->dd_handle = -1;
+
+ /* Initialize the status. */
+ nd->dd_stat = 0;
+
+ /* Initialize the dirent structure. ino and reclen are invalid under
+ * Win32, and name simply points at the appropriate part of the
+ * findfirst_t structure. */
+ //nd->dd_dir.d_ino = 0;
+ //nd->dd_dir.d_reclen = 0;
+ nd->dd_dir.d_namlen = 0;
+ nd->dd_dir.d_name = nd->dd_dta.name;
+
+ return nd;
+}
+
+
+struct dirent * readdir (DIR * dirp)
+{
+ errno = 0;
+
+ /* Check for valid DIR struct. */
+ if (!dirp)
+ {
+ errno = EFAULT;
+ return NULL;
+ }
+
+ if (dirp->dd_dir.d_name != dirp->dd_dta.name)
+ {
+ /* The structure does not seem to be set up correctly. */
+ errno = EINVAL;
+ return NULL;
+ }
+
+ bool bCallFindNext = true;
+
+ if (dirp->dd_stat < 0)
+ {
+ /* We have already returned all files in the directory
+ * (or the structure has an invalid dd_stat). */
+ return NULL;
+ }
+ else if (dirp->dd_stat == 0)
+ {
+ /* We haven't started the search yet. */
+ /* Start the search */
+ dirp->dd_handle = _findfirst (dirp->dd_name, &(dirp->dd_dta));
+
+ if (dirp->dd_handle == -1)
+ {
+ /* Whoops! Seems there are no files in that
+ * directory. */
+ dirp->dd_stat = -1;
+ }
+ else
+ {
+ dirp->dd_stat = 1;
+ }
+
+ /* Dont call _findnext first time. */
+ bCallFindNext = false;
+ }
+
+ while (dirp->dd_stat > 0)
+ {
+ if (bCallFindNext)
+ {
+ /* Get the next search entry. */
+ if (_findnext (dirp->dd_handle, &(dirp->dd_dta)))
+ {
+ /* We are off the end or otherwise error. */
+ _findclose (dirp->dd_handle);
+ dirp->dd_handle = -1;
+ dirp->dd_stat = -1;
+ return NULL;
+ }
+ else
+ {
+ /* Update the status to indicate the correct
+ * number. */
+ dirp->dd_stat++;
+ }
+ }
+
+ /* Successfully got an entry. Everything about the file is
+ * already appropriately filled in except the length of the
+ * file name. */
+ dirp->dd_dir.d_namlen = strlen (dirp->dd_dir.d_name);
+
+ bool bThisFolderOrUpFolder = dirp->dd_dir.d_name[0] == '.' &&
+ (dirp->dd_dir.d_name[1] == 0 || (dirp->dd_dir.d_name[1] == '.' && dirp->dd_dir.d_name[2] == 0));
+
+ if (!bThisFolderOrUpFolder)
+ {
+ struct _stat buf;
+ char buffer[CL_MAX_DIR];
+ size_t bl = strlen(dirp->dd_name)-strlen(DIRENT_SEARCH_SUFFIX);
+ strncpy(buffer,dirp->dd_name,bl);
+ buffer[bl]=0;
+ strcat(buffer, dirp->dd_dir.d_name);
+ if ( _stat(buffer,&buf) == 0 )
+ {
+ /* Finally we have a valid entry. */
+ return &dirp->dd_dir;
+ }
+ }
+
+ /* Allow to find next file. */
+ bCallFindNext = true;
+ }
+
+ return NULL;
+}
+
+
+
+int32_t
+closedir (DIR * dirp)
+{
+ int32_t rc;
+
+ errno = 0;
+ rc = 0;
+
+ if (!dirp)
+ {
+ errno = EFAULT;
+ return -1;
+ }
+
+ if (dirp->dd_handle != -1)
+ {
+ rc = _findclose (dirp->dd_handle);
+ }
+
+ /* Delete the dir structure. */
+ _CLVDELETE(dirp);
+
+ return rc;
+}
+#endif //HAVE_DIRENT_H
+
diff --git a/src/3rdparty/clucene/src/CLucene/util/dirent.h b/src/3rdparty/clucene/src/CLucene/util/dirent.h
new file mode 100644
index 0000000..71cd34c
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/util/dirent.h
@@ -0,0 +1,105 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Matt J. Weinstein
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+#ifndef lucene_util_dirent_H
+#define lucene_util_dirent_H
+
+#if defined(_LUCENE_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#if !defined(_CL_HAVE_DIRENT_H) && !defined(_CL_HAVE_SYS_NDIR_H) && !defined(_CL_HAVE_SYS_DIR_H) && !defined(_CL_HAVE_NDIR_H)
+
+/**
+\unit
+ * dirent.c
+ *
+ * Derived from DIRLIB.C by Matt J. Weinstein
+ * This note appears in the DIRLIB.H
+ * DIRLIB.H by M. J. Weinstein Released to public domain 1-Jan-89
+ *
+ * Updated by Jeremy Bettis <jeremy@hksys.com>
+ * Significantly revised and rewinddir, seekdir and telldir added by Colin
+ * Cut down again & changed by Ben van Klinken
+ * Peters <colin@fu.is.saga-u.ac.jp>
+ *
+ */
+
+/** dirent structure - used by the dirent.h directory iteration functions */
+struct dirent
+{
+ unsigned short d_namlen; /* Length of name in d_name. */
+ char *d_name; /* File name. */
+};
+
+/** DIR structure - used by the dirent.h directory iteration functions*/
+struct DIR
+{
+ /** disk transfer area for this dir */
+ struct _finddata_t dd_dta;
+
+ /* dirent struct to return from dir (NOTE: this makes this thread
+ * safe as long as only one thread uses a particular DIR struct at
+ * a time) */
+ struct dirent dd_dir;
+
+ /** _findnext handle */
+ intptr_t dd_handle;
+
+ /**
+ * Status of search:
+ * 0 = not started yet (next entry to read is first entry)
+ * -1 = off the end
+ * positive = 0 based index of next entry
+ */
+ int32_t dd_stat;
+
+ /** given path for dir with search pattern (struct is extended) */
+ char dd_name[CL_MAX_DIR];
+
+};
+
+#define DIRENT_SEARCH_SUFFIX "*"
+#define DIRENT_SLASH PATH_DELIMITERA
+
+
+/**
+* Returns a pointer to a DIR structure appropriately filled in to begin
+* searching a directory.
+*/
+DIR* opendir (const char* filespec);
+
+/**
+* Return a pointer to a dirent structure filled with the information on the
+* next entry in the directory.
+*/
+struct dirent* readdir (DIR* dir);
+
+/**
+* Frees up resources allocated by opendir.
+*/
+int32_t closedir (DIR* dir);
+
+
+#elif defined (_CL_HAVE_DIRENT_H)
+# include <dirent.h>
+# define NAMLEN(dirent) strlen((dirent)->d_name)
+
+#else
+# define dirent direct
+# define NAMLEN(dirent) (dirent)->d_namlen
+# if defined(_CL_HAVE_SYS_NDIR_H)
+# include <sys/ndir.h>
+# endif
+# if defined(_CL_HHAVE_SYS_DIR_H)
+# include <sys/dir.h>
+# endif
+# if defined(_CL_HHAVE_NDIR_H)
+# include <ndir.h>
+# endif
+
+#endif //HAVE_DIRENT_H
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/util/fileinputstream.cpp b/src/3rdparty/clucene/src/CLucene/util/fileinputstream.cpp
new file mode 100644
index 0000000..3803dfd
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/util/fileinputstream.cpp
@@ -0,0 +1,98 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Jos van den Oever
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+/* This file is part of Strigi Desktop Search
+ *
+ * Copyright (C) 2006 Jos van den Oever <jos@vandenoever.info>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+#include "jstreamsconfig.h"
+#include "fileinputstream.h"
+#include <cerrno>
+#include <cstring>
+namespace jstreams {
+
+const int32_t FileInputStream::defaultBufferSize = 1048576;
+FileInputStream::FileInputStream(const char *filepath, int32_t buffersize) {
+ // try to open the file for reading
+ file = fopen(filepath, "rb");
+ this->filepath = filepath;
+ if (file == 0) {
+ // handle error
+ error = "Could not read file '";
+ error += filepath;
+ error += "': ";
+ error += strerror(errno);
+ status = Error;
+ return;
+ }
+ // determine file size. if the stream is not seekable, the size will be -1
+ fseek(file, 0, SEEK_END);
+ size = ftell(file);
+ fseek(file, 0, SEEK_SET);
+
+ // if the file has size 0, make sure that it's really empty
+ // this is useful for filesystems like /proc that report files as size 0
+ // for files that do contain content
+ if (size == 0) {
+ char dummy[1];
+ size_t n = fread(dummy, 1, 1, file);
+ if (n == 1) {
+ size = -1;
+ fseek(file, 0, SEEK_SET);
+ } else {
+ fclose(file);
+ file = 0;
+ return;
+ }
+ }
+
+ // allocate memory in the buffer
+ int32_t bufsize = (size <= buffersize) ?size+1 :buffersize;
+ mark(bufsize);
+}
+FileInputStream::~FileInputStream() {
+ if (file) {
+ if (fclose(file)) {
+ // handle error
+ error = "Could not close file '" + filepath + "'.";
+ }
+ }
+}
+int32_t
+FileInputStream::fillBuffer(char* start, int32_t space) {
+ if (file == 0) return -1;
+ // read into the buffer
+ int32_t nwritten = fread(start, 1, space, file);
+ // check the file stream status
+ if (ferror(file)) {
+ error = "Could not read from file '" + filepath + "'.";
+ fclose(file);
+ file = 0;
+ status = Error;
+ return -1;
+ }
+ if (feof(file)) {
+ fclose(file);
+ file = 0;
+ }
+ return nwritten;
+}
+}
diff --git a/src/3rdparty/clucene/src/CLucene/util/fileinputstream.h b/src/3rdparty/clucene/src/CLucene/util/fileinputstream.h
new file mode 100644
index 0000000..144423d
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/util/fileinputstream.h
@@ -0,0 +1,38 @@
+/**
+ * Copyright 2003-2006 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef FILEINPUTSTREAM_H
+#define FILEINPUTSTREAM_H
+
+#include "bufferedstream.h"
+
+namespace jstreams {
+
+class FileInputStream : public BufferedInputStream<char> {
+private:
+ FILE *file;
+ std::string filepath;
+
+public:
+ static const int32_t defaultBufferSize;
+ FileInputStream(const char *filepath, int32_t buffersize=defaultBufferSize);
+ ~FileInputStream();
+ int32_t fillBuffer(char* start, int32_t space);
+};
+
+} // end namespace jstreams
+
+#endif
+
diff --git a/src/3rdparty/clucene/src/CLucene/util/inputstreambuffer.h b/src/3rdparty/clucene/src/CLucene/util/inputstreambuffer.h
new file mode 100644
index 0000000..873e811
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/util/inputstreambuffer.h
@@ -0,0 +1,126 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Jos van den Oever
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+/* This file is part of Strigi Desktop Search
+ *
+ * Copyright (C) 2006 Jos van den Oever <jos@vandenoever.info>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+#ifndef INPUTSTREAMBUFFER_H
+#define INPUTSTREAMBUFFER_H
+
+#include <cstdlib>
+
+namespace jstreams {
+
+template <class T>
+class InputStreamBuffer {
+private:
+public:
+ T* start;
+ int32_t size;
+ T* readPos;
+ int32_t avail;
+
+ InputStreamBuffer();
+ ~InputStreamBuffer();
+ void setSize(int32_t size);
+ int32_t read(const T*& start, int32_t max=0);
+
+ /**
+ * This function prepares the buffer for a new write.
+ * returns the number of available places.
+ **/
+ int32_t makeSpace(int32_t needed);
+};
+
+template <class T>
+InputStreamBuffer<T>::InputStreamBuffer() {
+ readPos = start = 0;
+ size = avail = 0;
+}
+template <class T>
+InputStreamBuffer<T>::~InputStreamBuffer() {
+ free(start);
+}
+template <class T>
+void
+InputStreamBuffer<T>::setSize(int32_t size) {
+ // store pointer information
+ int32_t offset = (int32_t)(readPos - start);
+
+ // allocate memory in the buffer
+ if ( start == 0 )
+ start = (T*)malloc(size*sizeof(T));
+ else
+ start = (T*)realloc(start, size*sizeof(T));
+ this->size = size;
+
+ // restore pointer information
+ readPos = start + offset;
+}
+template <class T>
+int32_t
+InputStreamBuffer<T>::makeSpace(int32_t needed) {
+ // determine how much space is available for writing
+ int32_t space = size - ((int32_t)(readPos - start)) - avail;
+ if (space >= needed) {
+ // there's enough space
+ return space;
+ }
+
+ if (avail) {
+ if (readPos != start) {
+// printf("moving\n");
+ // move data to the start of the buffer
+ memmove(start, readPos, avail*sizeof(T));
+ space += (int32_t)(readPos - start);
+ readPos = start;
+ }
+ } else {
+ // we may start writing at the start of the buffer
+ readPos = start;
+ space = size;
+ }
+ if (space >= needed) {
+ // there's enough space now
+ return space;
+ }
+
+ // still not enough space, we have to allocate more
+// printf("resize %i %i %i %i %i\n", avail, needed, space, size + needed - space, size);
+ setSize(size + needed - space);
+ return needed;
+}
+template <class T>
+int32_t
+InputStreamBuffer<T>::read(const T*& start, int32_t max) {
+ start = readPos;
+ if (max <= 0 || max > avail) {
+ max = avail;
+ }
+ readPos += max;
+ avail -= max;
+ return max;
+}
+
+} // end namespace jstreams
+
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/util/jstreamsconfig.h b/src/3rdparty/clucene/src/CLucene/util/jstreamsconfig.h
new file mode 100644
index 0000000..2a6ce9f
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/util/jstreamsconfig.h
@@ -0,0 +1,9 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+
+//this is just a compatibility header for jstreams
+#include "CLucene/StdHeader.h"
diff --git a/src/3rdparty/clucene/src/CLucene/util/streambase.h b/src/3rdparty/clucene/src/CLucene/util/streambase.h
new file mode 100644
index 0000000..b0d9dc1
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/util/streambase.h
@@ -0,0 +1,148 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Jos van den Oever
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+*
+* Changes are Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+------------------------------------------------------------------------------*/
+/* This file is part of Strigi Desktop Search
+ *
+ * Copyright (C) 2006 Jos van den Oever <jos@vandenoever.info>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+#ifndef STREAMBASE_H
+#define STREAMBASE_H
+
+#include <string>
+
+#if defined(_BUILD_FOR_QT_)
+ #include "StdHeader.h"
+#endif
+
+#define INT32MAX 0x7FFFFFFFL
+
+namespace jstreams {
+
+enum StreamStatus { Ok, Eof, Error };
+
+/**
+ * @short Base class for stream read access to many different file types.
+ *
+ * This class is based on the interface java.io.InputStream. It allows
+ * for uniform access to streamed resources.
+ * The main difference with the java equivalent is a performance improvement.
+ * When reading data, data is not copied into a buffer provided by the caller,
+ * but a pointer to the read data is provided. This makes this interface
+ * especially useful for deriving from it and implementing filterers or
+ * transformers.
+ */
+// java mapping: long=int64, int=int32, byte=uint8_t
+template <class T>
+class StreamBase {
+protected:
+ int64_t size;
+ int64_t position;
+ std::string error;
+ StreamStatus status;
+public:
+ StreamBase() :size(-1), position(0), status(Ok){ }
+ virtual ~StreamBase(){}
+ /**
+ * @brief Return a string representation of the last error.
+ * If no error has occurred, an empty string is returned.
+ **/
+ const char* getError() const { return error.c_str(); }
+ StreamStatus getStatus() const { return status; }
+ /**
+ * @brief Get the current position in the stream.
+ * The value obtained from this function can be used to reset the stream.
+ **/
+ int64_t getPosition() const { return position; }
+ /**
+ * @brief Return the size of the stream.
+ * If the size of the stream is unknown, -1
+ * is returned. If the end of the stream has been reached the size is
+ * always known.
+ **/
+ int64_t getSize() const { return size; }
+ /**
+ * @brief Reads characters from the stream and sets \a start to
+ * the first character that was read.
+ *
+ * If @p ntoread is @c 0, then at least one character will be read.
+ *
+ * @param start Pointer passed by reference that will be set to point to
+ * the retrieved array of characters. If the end of the stream
+ * is encountered or an error occurs, the value of @p start
+ * is undefined.
+ * @param min The number of characters to read from the stream.
+ * @param max The maximum number of characters to read from the stream.
+ * @return the number of characters that were read. If -1 is returned, the
+ * end of the stream has been reached. If -2 is returned, an error
+ * has occurred.
+ **/
+ virtual int32_t read(const T*& start, int32_t min, int32_t max) = 0;
+ /**
+ * Skip @param ntoskip bytes. Unless an error occurs or the end of file is
+ * encountered, this amount of bytes is skipped.
+ * This function returns new position in the stream.
+ **/
+ virtual int64_t skip(int64_t ntoskip);
+ /**
+ * @brief Repositions this stream to given requested position.
+ * Reset is guaranteed to work after a successful call to read(),
+ * when the new position is in the range of the data returned by read().
+ * This means that @p pos must lie between than the position
+ * corresponding to the start parameter (x) of the read function
+ * and the position corresponding to the last position in the returned
+ * buffer (x + nread).
+ **/
+ virtual int64_t reset(int64_t pos) = 0;
+ int64_t mark(int32_t readlimit) {
+ int64_t p = getPosition();
+ const T* ptr;
+ read(ptr, readlimit, -1);
+ return reset(p);
+ }
+};
+#define SKIPSTEP 1024
+template <class T>
+int64_t
+StreamBase<T>::skip(int64_t ntoskip) {
+ const T *begin;
+ int32_t nread;
+ int64_t skipped = 0;
+ while (ntoskip) {
+ int32_t step = (int32_t)((ntoskip > SKIPSTEP) ?SKIPSTEP :ntoskip);
+ nread = read(begin, 1, step);
+ if (nread < -1 ) {
+ // an error occurred
+ return nread;
+ } else if (nread < 1) {
+ ntoskip = 0;
+ } else {
+ skipped += nread;
+ ntoskip -= nread;
+ }
+ }
+ return skipped;
+}
+
+} // end namespace jstreams
+
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/util/stringreader.h b/src/3rdparty/clucene/src/CLucene/util/stringreader.h
new file mode 100644
index 0000000..698d07e
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/util/stringreader.h
@@ -0,0 +1,124 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Jos van den Oever
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+/* This file is part of Strigi Desktop Search
+ *
+ * Copyright (C) 2006 Jos van den Oever <jos@vandenoever.info>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+#ifndef STRINGREADER_H
+#define STRINGREADER_H
+
+/**
+ * Author: Jos van den Oever
+ * Ben van Klinken
+ **/
+
+
+#include "streambase.h"
+
+namespace jstreams {
+
+template <class T>
+class StringReader : public StreamBase<T> {
+private:
+ int64_t markpt;
+ T* data;
+ bool dataowner;
+ StringReader(const StringReader<T>&);
+ void operator=(const StringReader<T>&);
+public:
+ StringReader(const T* value, int32_t length = -1, bool copy = true);
+ ~StringReader();
+ int32_t read(const T*& start, int32_t min, int32_t max);
+ int64_t skip(int64_t ntoskip);
+ int64_t reset(int64_t pos);
+};
+
+typedef StringReader<char> StringInputStream;
+
+template <class T>
+StringReader<T>::StringReader(const T* value, int32_t length, bool copy)
+ : markpt(0), dataowner(copy) {
+ if (length < 0) {
+ length = 0;
+ while (value[length] != '\0') {
+ length++;
+ }
+ }
+ StreamBase<T>::size = length;
+ if (copy) {
+ data = new T[length+1];
+ size_t s = (size_t)(length*sizeof(T));
+ memcpy(data, value, s);
+ data[length] = 0;
+ } else {
+ // casting away const is ok, because we don't write anyway
+ data = (T*)value;
+ }
+}
+template <class T>
+StringReader<T>::~StringReader() {
+ if (dataowner) {
+ delete [] data;
+ }
+}
+template <class T>
+int32_t
+StringReader<T>::read(const T*& start, int32_t min, int32_t max) {
+ int64_t left = StreamBase<T>::size - StreamBase<T>::position;
+ if (left == 0) {
+ StreamBase<T>::status = Eof;
+ return -1;
+ }
+ if (min < 0) min = 0;
+ int32_t nread = (int32_t)((max > left || max < 1) ?left :max);
+ start = data + StreamBase<T>::position;
+ StreamBase<T>::position += nread;
+ if (StreamBase<T>::position == StreamBase<T>::size) {
+ StreamBase<T>::status = Eof;
+ }
+ return nread;
+}
+template <class T>
+int64_t
+StringReader<T>::skip(int64_t ntoskip) {
+ const T* start;
+ return read(start, ntoskip, ntoskip);
+}
+template <class T>
+int64_t
+StringReader<T>::reset(int64_t newpos) {
+ if (newpos < 0) {
+ StreamBase<T>::status = Ok;
+ StreamBase<T>::position = 0;
+ } else if (newpos < StreamBase<T>::size) {
+ StreamBase<T>::status = Ok;
+ StreamBase<T>::position = newpos;
+ } else {
+ StreamBase<T>::position = StreamBase<T>::size;
+ StreamBase<T>::status = Eof;
+ }
+ return StreamBase<T>::position;
+}
+
+} // end namespace jstreams
+
+#endif
diff --git a/src/3rdparty/clucene/src/CLucene/util/subinputstream.h b/src/3rdparty/clucene/src/CLucene/util/subinputstream.h
new file mode 100644
index 0000000..8ae3e33
--- /dev/null
+++ b/src/3rdparty/clucene/src/CLucene/util/subinputstream.h
@@ -0,0 +1,141 @@
+/*------------------------------------------------------------------------------
+* Copyright (C) 2003-2006 Jos van den Oever
+*
+* Distributable under the terms of either the Apache License (Version 2.0) or
+* the GNU Lesser General Public License, as specified in the COPYING file.
+------------------------------------------------------------------------------*/
+/* This file is part of Strigi Desktop Search
+ *
+ * Copyright (C) 2006 Jos van den Oever <jos@vandenoever.info>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+#ifndef SUBINPUTSTREAM_H
+#define SUBINPUTSTREAM_H
+
+#include "streambase.h"
+
+namespace jstreams {
+
+template<class T>
+class SubInputStream : public StreamBase<T> {
+private:
+ const int64_t offset;
+ StreamBase<T> *input;
+public:
+ SubInputStream(StreamBase<T> *input, int64_t size=-1);
+ int32_t read(const T*& start, int32_t min, int32_t max);
+ int64_t reset(int64_t newpos);
+ int64_t skip(int64_t ntoskip);
+};
+template<class T>
+SubInputStream<T>::SubInputStream(StreamBase<T> *i, int64_t length)
+ : offset(i->getPosition()), input(i) {
+ assert(length >= -1);
+// printf("substream offset: %lli\n", offset);
+ StreamBase<T>::size = length;
+}
+
+template<class T>
+int32_t SubInputStream<T>::read(const T*& start, int32_t min, int32_t max) {
+ if (StreamBase<T>::size != -1) {
+ const int64_t left = StreamBase<T>::size - StreamBase<T>::position;
+ if (left == 0) {
+ return -1;
+ }
+ // restrict the amount of data that can be read
+ if (max <= 0 || max > left) {
+ max = (int32_t)left;
+ }
+ if (min > max) min = max;
+ if (left < min) min = (int32_t)left;
+ }
+ int32_t nread = input->read(start, min, max);
+ if (nread < -1) {
+ fprintf(stderr, "substream too short.\n");
+ StreamBase<T>::status = Error;
+ StreamBase<T>::error = input->getError();
+ } else if (nread < min) {
+ if (StreamBase<T>::size == -1) {
+ StreamBase<T>::status = Eof;
+ if (nread > 0) {
+ StreamBase<T>::position += nread;
+ StreamBase<T>::size = StreamBase<T>::position;
+ }
+ } else {
+// fprintf(stderr, "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! nread %i min %i max %i size %lli\n", nread, min, max, size);
+// fprintf(stderr, "pos %lli parentpos %lli\n", position, input->getPosition());
+// fprintf(stderr, "status: %i error: %s\n", input->getStatus(), input->getError());
+ // we expected data but didn't get enough so that's an error
+ StreamBase<T>::status = Error;
+ StreamBase<T>::error = "Premature end of stream\n";
+ nread = -2;
+ }
+ } else {
+ StreamBase<T>::position += nread;
+ if (StreamBase<T>::position == StreamBase<T>::size) {
+ StreamBase<T>::status = Eof;
+ }
+ }
+ return nread;
+}
+
+template<class T>
+int64_t SubInputStream<T>::reset(int64_t newpos) {
+// fprintf(stderr, "subreset pos: %lli newpos: %lli offset: %lli\n", position,
+// newpos, offset);
+ StreamBase<T>::position = input->reset(newpos + offset);
+ if (StreamBase<T>::position < offset) {
+ printf("###########\n");
+ StreamBase<T>::status = Error;
+ StreamBase<T>::error = input->getError();
+ } else {
+ StreamBase<T>::position -= offset;
+ StreamBase<T>::status = input->getStatus();
+ }
+ return StreamBase<T>::position;
+}
+
+template<class T>
+int64_t SubInputStream<T>::skip(int64_t ntoskip) {
+// printf("subskip pos: %lli ntoskip: %lli offset: %lli\n", position, ntoskip, offset);
+ if (StreamBase<T>::size == StreamBase<T>::position) {
+ StreamBase<T>::status = Eof;
+ return -1;
+ }
+ if (StreamBase<T>::size != -1) {
+ const int64_t left = StreamBase<T>::size - StreamBase<T>::position;
+ // restrict the amount of data that can be skipped
+ if (ntoskip > left) {
+ ntoskip = left;
+ }
+ }
+ int64_t skipped = input->skip(ntoskip);
+ if (input->getStatus() == Error) {
+ StreamBase<T>::status = Error;
+ StreamBase<T>::error = input->getError();
+ } else {
+ StreamBase<T>::position += skipped;
+ if (StreamBase<T>::position == StreamBase<T>::size) {
+ StreamBase<T>::status = Eof;
+ }
+ }
+ return skipped;
+}
+
+} //end namespace jstreams
+
+#endif
diff --git a/src/3rdparty/des/des.cpp b/src/3rdparty/des/des.cpp
new file mode 100644
index 0000000..c1a260b
--- /dev/null
+++ b/src/3rdparty/des/des.cpp
@@ -0,0 +1,602 @@
+/*
+ * Implementation of DES encryption for NTLM
+ *
+ * Copyright 1997-2005 Simon Tatham.
+ *
+ * This software is released under the MIT license.
+ */
+
+/*
+ * Description of DES
+ * ------------------
+ *
+ * Unlike the description in FIPS 46, I'm going to use _sensible_ indices:
+ * bits in an n-bit word are numbered from 0 at the LSB to n-1 at the MSB.
+ * And S-boxes are indexed by six consecutive bits, not by the outer two
+ * followed by the middle four.
+ *
+ * The DES encryption routine requires a 64-bit input, and a key schedule K
+ * containing 16 48-bit elements.
+ *
+ * First the input is permuted by the initial permutation IP.
+ * Then the input is split into 32-bit words L and R. (L is the MSW.)
+ * Next, 16 rounds. In each round:
+ * (L, R) <- (R, L xor f(R, K[i]))
+ * Then the pre-output words L and R are swapped.
+ * Then L and R are glued back together into a 64-bit word. (L is the MSW,
+ * again, but since we just swapped them, the MSW is the R that came out
+ * of the last round.)
+ * The 64-bit output block is permuted by the inverse of IP and returned.
+ *
+ * Decryption is identical except that the elements of K are used in the
+ * opposite order. (This wouldn't work if that word swap didn't happen.)
+ *
+ * The function f, used in each round, accepts a 32-bit word R and a
+ * 48-bit key block K. It produces a 32-bit output.
+ *
+ * First R is expanded to 48 bits using the bit-selection function E.
+ * The resulting 48-bit block is XORed with the key block K to produce
+ * a 48-bit block X.
+ * This block X is split into eight groups of 6 bits. Each group of 6
+ * bits is then looked up in one of the eight S-boxes to convert
+ * it to 4 bits. These eight groups of 4 bits are glued back
+ * together to produce a 32-bit preoutput block.
+ * The preoutput block is permuted using the permutation P and returned.
+ *
+ * Key setup maps a 64-bit key word into a 16x48-bit key schedule. Although
+ * the approved input format for the key is a 64-bit word, eight of the
+ * bits are discarded, so the actual quantity of key used is 56 bits.
+ *
+ * First the input key is converted to two 28-bit words C and D using
+ * the bit-selection function PC1.
+ * Then 16 rounds of key setup occur. In each round, C and D are each
+ * rotated left by either 1 or 2 bits (depending on which round), and
+ * then converted into a key schedule element using the bit-selection
+ * function PC2.
+ *
+ * That's the actual algorithm. Now for the tedious details: all those
+ * painful permutations and lookup tables.
+ *
+ * IP is a 64-to-64 bit permutation. Its output contains the following
+ * bits of its input (listed in order MSB to LSB of output).
+ *
+ * 6 14 22 30 38 46 54 62 4 12 20 28 36 44 52 60
+ * 2 10 18 26 34 42 50 58 0 8 16 24 32 40 48 56
+ * 7 15 23 31 39 47 55 63 5 13 21 29 37 45 53 61
+ * 3 11 19 27 35 43 51 59 1 9 17 25 33 41 49 57
+ *
+ * E is a 32-to-48 bit selection function. Its output contains the following
+ * bits of its input (listed in order MSB to LSB of output).
+ *
+ * 0 31 30 29 28 27 28 27 26 25 24 23 24 23 22 21 20 19 20 19 18 17 16 15
+ * 16 15 14 13 12 11 12 11 10 9 8 7 8 7 6 5 4 3 4 3 2 1 0 31
+ *
+ * The S-boxes are arbitrary table-lookups each mapping a 6-bit input to a
+ * 4-bit output. In other words, each S-box is an array[64] of 4-bit numbers.
+ * The S-boxes are listed below. The first S-box listed is applied to the
+ * most significant six bits of the block X; the last one is applied to the
+ * least significant.
+ *
+ * 14 0 4 15 13 7 1 4 2 14 15 2 11 13 8 1
+ * 3 10 10 6 6 12 12 11 5 9 9 5 0 3 7 8
+ * 4 15 1 12 14 8 8 2 13 4 6 9 2 1 11 7
+ * 15 5 12 11 9 3 7 14 3 10 10 0 5 6 0 13
+ *
+ * 15 3 1 13 8 4 14 7 6 15 11 2 3 8 4 14
+ * 9 12 7 0 2 1 13 10 12 6 0 9 5 11 10 5
+ * 0 13 14 8 7 10 11 1 10 3 4 15 13 4 1 2
+ * 5 11 8 6 12 7 6 12 9 0 3 5 2 14 15 9
+ *
+ * 10 13 0 7 9 0 14 9 6 3 3 4 15 6 5 10
+ * 1 2 13 8 12 5 7 14 11 12 4 11 2 15 8 1
+ * 13 1 6 10 4 13 9 0 8 6 15 9 3 8 0 7
+ * 11 4 1 15 2 14 12 3 5 11 10 5 14 2 7 12
+ *
+ * 7 13 13 8 14 11 3 5 0 6 6 15 9 0 10 3
+ * 1 4 2 7 8 2 5 12 11 1 12 10 4 14 15 9
+ * 10 3 6 15 9 0 0 6 12 10 11 1 7 13 13 8
+ * 15 9 1 4 3 5 14 11 5 12 2 7 8 2 4 14
+ *
+ * 2 14 12 11 4 2 1 12 7 4 10 7 11 13 6 1
+ * 8 5 5 0 3 15 15 10 13 3 0 9 14 8 9 6
+ * 4 11 2 8 1 12 11 7 10 1 13 14 7 2 8 13
+ * 15 6 9 15 12 0 5 9 6 10 3 4 0 5 14 3
+ *
+ * 12 10 1 15 10 4 15 2 9 7 2 12 6 9 8 5
+ * 0 6 13 1 3 13 4 14 14 0 7 11 5 3 11 8
+ * 9 4 14 3 15 2 5 12 2 9 8 5 12 15 3 10
+ * 7 11 0 14 4 1 10 7 1 6 13 0 11 8 6 13
+ *
+ * 4 13 11 0 2 11 14 7 15 4 0 9 8 1 13 10
+ * 3 14 12 3 9 5 7 12 5 2 10 15 6 8 1 6
+ * 1 6 4 11 11 13 13 8 12 1 3 4 7 10 14 7
+ * 10 9 15 5 6 0 8 15 0 14 5 2 9 3 2 12
+ *
+ * 13 1 2 15 8 13 4 8 6 10 15 3 11 7 1 4
+ * 10 12 9 5 3 6 14 11 5 0 0 14 12 9 7 2
+ * 7 2 11 1 4 14 1 7 9 4 12 10 14 8 2 13
+ * 0 15 6 12 10 9 13 0 15 3 3 5 5 6 8 11
+ *
+ * P is a 32-to-32 bit permutation. Its output contains the following
+ * bits of its input (listed in order MSB to LSB of output).
+ *
+ * 16 25 12 11 3 20 4 15 31 17 9 6 27 14 1 22
+ * 30 24 8 18 0 5 29 23 13 19 2 26 10 21 28 7
+ *
+ * PC1 is a 64-to-56 bit selection function. Its output is in two words,
+ * C and D. The word C contains the following bits of its input (listed
+ * in order MSB to LSB of output).
+ *
+ * 7 15 23 31 39 47 55 63 6 14 22 30 38 46
+ * 54 62 5 13 21 29 37 45 53 61 4 12 20 28
+ *
+ * And the word D contains these bits.
+ *
+ * 1 9 17 25 33 41 49 57 2 10 18 26 34 42
+ * 50 58 3 11 19 27 35 43 51 59 36 44 52 60
+ *
+ * PC2 is a 56-to-48 bit selection function. Its input is in two words,
+ * C and D. These are treated as one 56-bit word (with C more significant,
+ * so that bits 55 to 28 of the word are bits 27 to 0 of C, and bits 27 to
+ * 0 of the word are bits 27 to 0 of D). The output contains the following
+ * bits of this 56-bit input word (listed in order MSB to LSB of output).
+ *
+ * 42 39 45 32 55 51 53 28 41 50 35 46 33 37 44 52 30 48 40 49 29 36 43 54
+ * 15 4 25 19 9 1 26 16 5 11 23 8 12 7 17 0 22 3 10 14 6 20 27 24
+ */
+
+/*
+ * Implementation details
+ * ----------------------
+ *
+ * If you look at the code in this module, you'll find it looks
+ * nothing _like_ the above algorithm. Here I explain the
+ * differences...
+ *
+ * Key setup has not been heavily optimised here. We are not
+ * concerned with key agility: we aren't codebreakers. We don't
+ * mind a little delay (and it really is a little one; it may be a
+ * factor of five or so slower than it could be but it's still not
+ * an appreciable length of time) while setting up. The only tweaks
+ * in the key setup are ones which change the format of the key
+ * schedule to speed up the actual encryption. I'll describe those
+ * below.
+ *
+ * The first and most obvious optimisation is the S-boxes. Since
+ * each S-box always targets the same four bits in the final 32-bit
+ * word, so the output from (for example) S-box 0 must always be
+ * shifted left 28 bits, we can store the already-shifted outputs
+ * in the lookup tables. This reduces lookup-and-shift to lookup,
+ * so the S-box step is now just a question of ORing together eight
+ * table lookups.
+ *
+ * The permutation P is just a bit order change; it's invariant
+ * with respect to OR, in that P(x)|P(y) = P(x|y). Therefore, we
+ * can apply P to every entry of the S-box tables and then we don't
+ * have to do it in the code of f(). This yields a set of tables
+ * which might be called SP-boxes.
+ *
+ * The bit-selection function E is our next target. Note that E is
+ * immediately followed by the operation of splitting into 6-bit
+ * chunks. Examining the 6-bit chunks coming out of E we notice
+ * they're all contiguous within the word (speaking cyclically -
+ * the end two wrap round); so we can extract those bit strings
+ * individually rather than explicitly running E. This would yield
+ * code such as
+ *
+ * y |= SPboxes[0][ (rotl(R, 5) ^ top6bitsofK) & 0x3F ];
+ * t |= SPboxes[1][ (rotl(R,11) ^ next6bitsofK) & 0x3F ];
+ *
+ * and so on; and the key schedule preparation would have to
+ * provide each 6-bit chunk separately.
+ *
+ * Really we'd like to XOR in the key schedule element before
+ * looking up bit strings in R. This we can't do, naively, because
+ * the 6-bit strings we want overlap. But look at the strings:
+ *
+ * 3322222222221111111111
+ * bit 10987654321098765432109876543210
+ *
+ * box0 XXXXX X
+ * box1 XXXXXX
+ * box2 XXXXXX
+ * box3 XXXXXX
+ * box4 XXXXXX
+ * box5 XXXXXX
+ * box6 XXXXXX
+ * box7 X XXXXX
+ *
+ * The bit strings we need to XOR in for boxes 0, 2, 4 and 6 don't
+ * overlap with each other. Neither do the ones for boxes 1, 3, 5
+ * and 7. So we could provide the key schedule in the form of two
+ * words that we can separately XOR into R, and then every S-box
+ * index is available as a (cyclically) contiguous 6-bit substring
+ * of one or the other of the results.
+ *
+ * The comments in Eric Young's libdes implementation point out
+ * that two of these bit strings require a rotation (rather than a
+ * simple shift) to extract. It's unavoidable that at least _one_
+ * must do; but we can actually run the whole inner algorithm (all
+ * 16 rounds) rotated one bit to the left, so that what the `real'
+ * DES description sees as L=0x80000001 we see as L=0x00000003.
+ * This requires rotating all our SP-box entries one bit to the
+ * left, and rotating each word of the key schedule elements one to
+ * the left, and rotating L and R one bit left just after IP and
+ * one bit right again just before FP. And in each round we convert
+ * a rotate into a shift, so we've saved a few per cent.
+ *
+ * That's about it for the inner loop; the SP-box tables as listed
+ * below are what I've described here (the original S value,
+ * shifted to its final place in the input to P, run through P, and
+ * then rotated one bit left). All that remains is to optimise the
+ * initial permutation IP.
+ *
+ * IP is not an arbitrary permutation. It has the nice property
+ * that if you take any bit number, write it in binary (6 bits),
+ * permute those 6 bits and invert some of them, you get the final
+ * position of that bit. Specifically, the bit whose initial
+ * position is given (in binary) as fedcba ends up in position
+ * AcbFED (where a capital letter denotes the inverse of a bit).
+ *
+ * We have the 64-bit data in two 32-bit words L and R, where bits
+ * in L are those with f=1 and bits in R are those with f=0. We
+ * note that we can do a simple transformation: suppose we exchange
+ * the bits with f=1,c=0 and the bits with f=0,c=1. This will cause
+ * the bit fedcba to be in position cedfba - we've `swapped' bits c
+ * and f in the position of each bit!
+ *
+ * Better still, this transformation is easy. In the example above,
+ * bits in L with c=0 are bits 0x0F0F0F0F, and those in R with c=1
+ * are 0xF0F0F0F0. So we can do
+ *
+ * difference = ((R >> 4) ^ L) & 0x0F0F0F0F
+ * R ^= (difference << 4)
+ * L ^= difference
+ *
+ * to perform the swap. Let's denote this by bitswap(4,0x0F0F0F0F).
+ * Also, we can invert the bit at the top just by exchanging L and
+ * R. So in a few swaps and a few of these bit operations we can
+ * do:
+ *
+ * Initially the position of bit fedcba is fedcba
+ * Swap L with R to make it Fedcba
+ * Perform bitswap( 4,0x0F0F0F0F) to make it cedFba
+ * Perform bitswap(16,0x0000FFFF) to make it ecdFba
+ * Swap L with R to make it EcdFba
+ * Perform bitswap( 2,0x33333333) to make it bcdFEa
+ * Perform bitswap( 8,0x00FF00FF) to make it dcbFEa
+ * Swap L with R to make it DcbFEa
+ * Perform bitswap( 1,0x55555555) to make it acbFED
+ * Swap L with R to make it AcbFED
+ *
+ * (In the actual code the four swaps are implicit: R and L are
+ * simply used the other way round in the first, second and last
+ * bitswap operations.)
+ *
+ * The final permutation is just the inverse of IP, so it can be
+ * performed by a similar set of operations.
+ */
+
+struct des_context {
+ quint32 k0246[16], k1357[16];
+};
+
+#define rotl(x, c) ( (x << c) | (x >> (32-c)) )
+#define rotl28(x, c) ( ( (x << c) | (x >> (28-c)) ) & 0x0FFFFFFF)
+
+static quint32 bitsel(quint32 * input, const int *bitnums, int size)
+{
+ quint32 ret = 0;
+ while (size--) {
+ int bitpos = *bitnums++;
+ ret <<= 1;
+ if (bitpos >= 0)
+ ret |= 1 & (input[bitpos / 32] >> (bitpos % 32));
+ }
+ return ret;
+}
+
+static inline void des_key_setup(quint32 key_msw, quint32 key_lsw,
+ struct des_context *sched)
+{
+ /* Tables are modified to work with 56-bit key */
+ static const int PC1_Cbits[] = {
+ 6, 13, 20, 27, 34, 41, 48, 55, 5, 12, 19, 26, 33, 40,
+ 47, 54, 4, 11, 18, 25, 32, 39, 46, 53, 3, 10, 17, 24
+ };
+ static const int PC1_Dbits[] = {
+ 0, 7, 14, 21, 28, 35, 42, 49, 1, 8, 15, 22, 29, 36,
+ 43, 50, 2, 9, 16, 23, 30, 37, 44, 51, 31, 38, 45, 52
+ };
+ /*
+ * The bit numbers in the two lists below don't correspond to
+ * the ones in the above description of PC2, because in the
+ * above description C and D are concatenated so `bit 28' means
+ * bit 0 of C. In this implementation we're using the standard
+ * `bitsel' function above and C is in the second word, so bit
+ * 0 of C is addressed by writing `32' here.
+ */
+ static const int PC2_0246[] = {
+ 49, 36, 59, 55, -1, -1, 37, 41, 48, 56, 34, 52, -1, -1, 15, 4,
+ 25, 19, 9, 1, -1, -1, 12, 7, 17, 0, 22, 3, -1, -1, 46, 43
+ };
+ static const int PC2_1357[] = {
+ -1, -1, 57, 32, 45, 54, 39, 50, -1, -1, 44, 53, 33, 40, 47, 58,
+ -1, -1, 26, 16, 5, 11, 23, 8, -1, -1, 10, 14, 6, 20, 27, 24
+ };
+ static const int leftshifts[] = {
+ 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1
+ };
+
+ quint32 C, D;
+ quint32 buf[2];
+ int i;
+
+ buf[0] = key_lsw;
+ buf[1] = key_msw;
+
+ C = bitsel(buf, PC1_Cbits, 28);
+ D = bitsel(buf, PC1_Dbits, 28);
+
+ for (i = 0; i < 16; i++) {
+ C = rotl28(C, leftshifts[i]);
+ D = rotl28(D, leftshifts[i]);
+ buf[0] = D;
+ buf[1] = C;
+ sched->k0246[i] = bitsel(buf, PC2_0246, 32);
+ sched->k1357[i] = bitsel(buf, PC2_1357, 32);
+ }
+}
+
+static const quint32 SPboxes[8][64] = {
+ {0x01010400, 0x00000000, 0x00010000, 0x01010404,
+ 0x01010004, 0x00010404, 0x00000004, 0x00010000,
+ 0x00000400, 0x01010400, 0x01010404, 0x00000400,
+ 0x01000404, 0x01010004, 0x01000000, 0x00000004,
+ 0x00000404, 0x01000400, 0x01000400, 0x00010400,
+ 0x00010400, 0x01010000, 0x01010000, 0x01000404,
+ 0x00010004, 0x01000004, 0x01000004, 0x00010004,
+ 0x00000000, 0x00000404, 0x00010404, 0x01000000,
+ 0x00010000, 0x01010404, 0x00000004, 0x01010000,
+ 0x01010400, 0x01000000, 0x01000000, 0x00000400,
+ 0x01010004, 0x00010000, 0x00010400, 0x01000004,
+ 0x00000400, 0x00000004, 0x01000404, 0x00010404,
+ 0x01010404, 0x00010004, 0x01010000, 0x01000404,
+ 0x01000004, 0x00000404, 0x00010404, 0x01010400,
+ 0x00000404, 0x01000400, 0x01000400, 0x00000000,
+ 0x00010004, 0x00010400, 0x00000000, 0x01010004},
+
+ {0x80108020, 0x80008000, 0x00008000, 0x00108020,
+ 0x00100000, 0x00000020, 0x80100020, 0x80008020,
+ 0x80000020, 0x80108020, 0x80108000, 0x80000000,
+ 0x80008000, 0x00100000, 0x00000020, 0x80100020,
+ 0x00108000, 0x00100020, 0x80008020, 0x00000000,
+ 0x80000000, 0x00008000, 0x00108020, 0x80100000,
+ 0x00100020, 0x80000020, 0x00000000, 0x00108000,
+ 0x00008020, 0x80108000, 0x80100000, 0x00008020,
+ 0x00000000, 0x00108020, 0x80100020, 0x00100000,
+ 0x80008020, 0x80100000, 0x80108000, 0x00008000,
+ 0x80100000, 0x80008000, 0x00000020, 0x80108020,
+ 0x00108020, 0x00000020, 0x00008000, 0x80000000,
+ 0x00008020, 0x80108000, 0x00100000, 0x80000020,
+ 0x00100020, 0x80008020, 0x80000020, 0x00100020,
+ 0x00108000, 0x00000000, 0x80008000, 0x00008020,
+ 0x80000000, 0x80100020, 0x80108020, 0x00108000},
+
+ {0x00000208, 0x08020200, 0x00000000, 0x08020008,
+ 0x08000200, 0x00000000, 0x00020208, 0x08000200,
+ 0x00020008, 0x08000008, 0x08000008, 0x00020000,
+ 0x08020208, 0x00020008, 0x08020000, 0x00000208,
+ 0x08000000, 0x00000008, 0x08020200, 0x00000200,
+ 0x00020200, 0x08020000, 0x08020008, 0x00020208,
+ 0x08000208, 0x00020200, 0x00020000, 0x08000208,
+ 0x00000008, 0x08020208, 0x00000200, 0x08000000,
+ 0x08020200, 0x08000000, 0x00020008, 0x00000208,
+ 0x00020000, 0x08020200, 0x08000200, 0x00000000,
+ 0x00000200, 0x00020008, 0x08020208, 0x08000200,
+ 0x08000008, 0x00000200, 0x00000000, 0x08020008,
+ 0x08000208, 0x00020000, 0x08000000, 0x08020208,
+ 0x00000008, 0x00020208, 0x00020200, 0x08000008,
+ 0x08020000, 0x08000208, 0x00000208, 0x08020000,
+ 0x00020208, 0x00000008, 0x08020008, 0x00020200},
+
+ {0x00802001, 0x00002081, 0x00002081, 0x00000080,
+ 0x00802080, 0x00800081, 0x00800001, 0x00002001,
+ 0x00000000, 0x00802000, 0x00802000, 0x00802081,
+ 0x00000081, 0x00000000, 0x00800080, 0x00800001,
+ 0x00000001, 0x00002000, 0x00800000, 0x00802001,
+ 0x00000080, 0x00800000, 0x00002001, 0x00002080,
+ 0x00800081, 0x00000001, 0x00002080, 0x00800080,
+ 0x00002000, 0x00802080, 0x00802081, 0x00000081,
+ 0x00800080, 0x00800001, 0x00802000, 0x00802081,
+ 0x00000081, 0x00000000, 0x00000000, 0x00802000,
+ 0x00002080, 0x00800080, 0x00800081, 0x00000001,
+ 0x00802001, 0x00002081, 0x00002081, 0x00000080,
+ 0x00802081, 0x00000081, 0x00000001, 0x00002000,
+ 0x00800001, 0x00002001, 0x00802080, 0x00800081,
+ 0x00002001, 0x00002080, 0x00800000, 0x00802001,
+ 0x00000080, 0x00800000, 0x00002000, 0x00802080},
+
+ {0x00000100, 0x02080100, 0x02080000, 0x42000100,
+ 0x00080000, 0x00000100, 0x40000000, 0x02080000,
+ 0x40080100, 0x00080000, 0x02000100, 0x40080100,
+ 0x42000100, 0x42080000, 0x00080100, 0x40000000,
+ 0x02000000, 0x40080000, 0x40080000, 0x00000000,
+ 0x40000100, 0x42080100, 0x42080100, 0x02000100,
+ 0x42080000, 0x40000100, 0x00000000, 0x42000000,
+ 0x02080100, 0x02000000, 0x42000000, 0x00080100,
+ 0x00080000, 0x42000100, 0x00000100, 0x02000000,
+ 0x40000000, 0x02080000, 0x42000100, 0x40080100,
+ 0x02000100, 0x40000000, 0x42080000, 0x02080100,
+ 0x40080100, 0x00000100, 0x02000000, 0x42080000,
+ 0x42080100, 0x00080100, 0x42000000, 0x42080100,
+ 0x02080000, 0x00000000, 0x40080000, 0x42000000,
+ 0x00080100, 0x02000100, 0x40000100, 0x00080000,
+ 0x00000000, 0x40080000, 0x02080100, 0x40000100},
+
+ {0x20000010, 0x20400000, 0x00004000, 0x20404010,
+ 0x20400000, 0x00000010, 0x20404010, 0x00400000,
+ 0x20004000, 0x00404010, 0x00400000, 0x20000010,
+ 0x00400010, 0x20004000, 0x20000000, 0x00004010,
+ 0x00000000, 0x00400010, 0x20004010, 0x00004000,
+ 0x00404000, 0x20004010, 0x00000010, 0x20400010,
+ 0x20400010, 0x00000000, 0x00404010, 0x20404000,
+ 0x00004010, 0x00404000, 0x20404000, 0x20000000,
+ 0x20004000, 0x00000010, 0x20400010, 0x00404000,
+ 0x20404010, 0x00400000, 0x00004010, 0x20000010,
+ 0x00400000, 0x20004000, 0x20000000, 0x00004010,
+ 0x20000010, 0x20404010, 0x00404000, 0x20400000,
+ 0x00404010, 0x20404000, 0x00000000, 0x20400010,
+ 0x00000010, 0x00004000, 0x20400000, 0x00404010,
+ 0x00004000, 0x00400010, 0x20004010, 0x00000000,
+ 0x20404000, 0x20000000, 0x00400010, 0x20004010},
+
+ {0x00200000, 0x04200002, 0x04000802, 0x00000000,
+ 0x00000800, 0x04000802, 0x00200802, 0x04200800,
+ 0x04200802, 0x00200000, 0x00000000, 0x04000002,
+ 0x00000002, 0x04000000, 0x04200002, 0x00000802,
+ 0x04000800, 0x00200802, 0x00200002, 0x04000800,
+ 0x04000002, 0x04200000, 0x04200800, 0x00200002,
+ 0x04200000, 0x00000800, 0x00000802, 0x04200802,
+ 0x00200800, 0x00000002, 0x04000000, 0x00200800,
+ 0x04000000, 0x00200800, 0x00200000, 0x04000802,
+ 0x04000802, 0x04200002, 0x04200002, 0x00000002,
+ 0x00200002, 0x04000000, 0x04000800, 0x00200000,
+ 0x04200800, 0x00000802, 0x00200802, 0x04200800,
+ 0x00000802, 0x04000002, 0x04200802, 0x04200000,
+ 0x00200800, 0x00000000, 0x00000002, 0x04200802,
+ 0x00000000, 0x00200802, 0x04200000, 0x00000800,
+ 0x04000002, 0x04000800, 0x00000800, 0x00200002},
+
+ {0x10001040, 0x00001000, 0x00040000, 0x10041040,
+ 0x10000000, 0x10001040, 0x00000040, 0x10000000,
+ 0x00040040, 0x10040000, 0x10041040, 0x00041000,
+ 0x10041000, 0x00041040, 0x00001000, 0x00000040,
+ 0x10040000, 0x10000040, 0x10001000, 0x00001040,
+ 0x00041000, 0x00040040, 0x10040040, 0x10041000,
+ 0x00001040, 0x00000000, 0x00000000, 0x10040040,
+ 0x10000040, 0x10001000, 0x00041040, 0x00040000,
+ 0x00041040, 0x00040000, 0x10041000, 0x00001000,
+ 0x00000040, 0x10040040, 0x00001000, 0x00041040,
+ 0x10001000, 0x00000040, 0x10000040, 0x10040000,
+ 0x10040040, 0x10000000, 0x00040000, 0x10001040,
+ 0x00000000, 0x10041040, 0x00040040, 0x10000040,
+ 0x10040000, 0x10001000, 0x10001040, 0x00000000,
+ 0x10041040, 0x00041000, 0x00041000, 0x00001040,
+ 0x00001040, 0x00040040, 0x10000000, 0x10041000}
+};
+
+#define f(R, K0246, K1357) (\
+ s0246 = R ^ K0246, \
+ s1357 = R ^ K1357, \
+ s0246 = rotl(s0246, 28), \
+ SPboxes[0] [(s0246 >> 24) & 0x3F] | \
+ SPboxes[1] [(s1357 >> 24) & 0x3F] | \
+ SPboxes[2] [(s0246 >> 16) & 0x3F] | \
+ SPboxes[3] [(s1357 >> 16) & 0x3F] | \
+ SPboxes[4] [(s0246 >> 8) & 0x3F] | \
+ SPboxes[5] [(s1357 >> 8) & 0x3F] | \
+ SPboxes[6] [(s0246 ) & 0x3F] | \
+ SPboxes[7] [(s1357 ) & 0x3F])
+
+#define bitswap(L, R, n, mask) (\
+ swap = mask & ( (R >> n) ^ L ), \
+ R ^= swap << n, \
+ L ^= swap)
+
+/* Initial permutation */
+#define IP(L, R) (\
+ bitswap(R, L, 4, 0x0F0F0F0F), \
+ bitswap(R, L, 16, 0x0000FFFF), \
+ bitswap(L, R, 2, 0x33333333), \
+ bitswap(L, R, 8, 0x00FF00FF), \
+ bitswap(R, L, 1, 0x55555555))
+
+/* Final permutation */
+#define FP(L, R) (\
+ bitswap(R, L, 1, 0x55555555), \
+ bitswap(L, R, 8, 0x00FF00FF), \
+ bitswap(L, R, 2, 0x33333333), \
+ bitswap(R, L, 16, 0x0000FFFF), \
+ bitswap(R, L, 4, 0x0F0F0F0F))
+
+static void
+des_encipher(quint32 *output, quint32 L, quint32 R,
+ struct des_context *sched)
+{
+ quint32 swap, s0246, s1357;
+
+ IP(L, R);
+
+ L = rotl(L, 1);
+ R = rotl(R, 1);
+
+ L ^= f(R, sched->k0246[0], sched->k1357[0]);
+ R ^= f(L, sched->k0246[1], sched->k1357[1]);
+ L ^= f(R, sched->k0246[2], sched->k1357[2]);
+ R ^= f(L, sched->k0246[3], sched->k1357[3]);
+ L ^= f(R, sched->k0246[4], sched->k1357[4]);
+ R ^= f(L, sched->k0246[5], sched->k1357[5]);
+ L ^= f(R, sched->k0246[6], sched->k1357[6]);
+ R ^= f(L, sched->k0246[7], sched->k1357[7]);
+ L ^= f(R, sched->k0246[8], sched->k1357[8]);
+ R ^= f(L, sched->k0246[9], sched->k1357[9]);
+ L ^= f(R, sched->k0246[10], sched->k1357[10]);
+ R ^= f(L, sched->k0246[11], sched->k1357[11]);
+ L ^= f(R, sched->k0246[12], sched->k1357[12]);
+ R ^= f(L, sched->k0246[13], sched->k1357[13]);
+ L ^= f(R, sched->k0246[14], sched->k1357[14]);
+ R ^= f(L, sched->k0246[15], sched->k1357[15]);
+
+ L = rotl(L, 31);
+ R = rotl(R, 31);
+
+ swap = L;
+ L = R;
+ R = swap;
+
+ FP(L, R);
+
+ output[0] = L;
+ output[1] = R;
+}
+
+#define GET_32BIT_MSB_FIRST(cp) \
+ (((unsigned long)(unsigned char)(cp)[3]) | \
+ ((unsigned long)(unsigned char)(cp)[2] << 8) | \
+ ((unsigned long)(unsigned char)(cp)[1] << 16) | \
+ ((unsigned long)(unsigned char)(cp)[0] << 24))
+
+#define PUT_32BIT_MSB_FIRST(cp, value) do { \
+ (cp)[3] = (value); \
+ (cp)[2] = (value) >> 8; \
+ (cp)[1] = (value) >> 16; \
+ (cp)[0] = (value) >> 24; } while (0)
+
+static inline void
+des_cbc_encrypt(unsigned char *dest, const unsigned char *src,
+ struct des_context *sched)
+{
+ quint32 out[2], L, R;
+
+ L = GET_32BIT_MSB_FIRST(src);
+ R = GET_32BIT_MSB_FIRST(src + 4);
+ des_encipher(out, L, R, sched);
+ PUT_32BIT_MSB_FIRST(dest, out[0]);
+ PUT_32BIT_MSB_FIRST(dest + 4, out[1]);
+}
+
+
+static unsigned char *
+deshash(unsigned char *dst, const unsigned char *key,
+ const unsigned char *src)
+{
+ struct des_context ctx;
+
+ des_key_setup(GET_32BIT_MSB_FIRST(key) >> 8,
+ GET_32BIT_MSB_FIRST(key + 3), &ctx);
+
+ des_cbc_encrypt(dst, src, &ctx);
+
+ return dst;
+}
diff --git a/src/3rdparty/freetype/ChangeLog b/src/3rdparty/freetype/ChangeLog
new file mode 100644
index 0000000..8096136
--- /dev/null
+++ b/src/3rdparty/freetype/ChangeLog
@@ -0,0 +1,3368 @@
+2008-06-10 Werner Lemberg <wl@gnu.org>
+
+ * Version 2.3.6 released.
+ =========================
+
+
+ Tag sources with `VER-2-3-6'.
+
+ * docs/CHANGES, docs/VERSION.DLL: Update documentation and bump
+ version number to 2.3.6.
+
+ * README, Jamfile (RefDoc), builds/win32/visualc/index.html,
+ builds/win32/visualc/freetype.dsp,
+ builds/win32/visualc/freetype.vcproj,
+ builds/win32/visualce/index.html,
+ builds/win32/visualce/freetype.dsp,
+ builds/win32/visualce/freetype.vcproj: s/2.3.5/2.3.6/, s/235/236/.
+
+ * include/freetype/freetype.h (FREETYPE_PATCH): Set to 6.
+
+ * builds/unix/configure.raw (version_info): Set to 9:17:3.
+
+
+ * include/freetype/internal/psaux.h (T1_BuilderRec): Remove `scale_x'
+ and `scale_y'.
+ * src/cff/cffgload.h (CFF_Builder): Remove `scale_x' and `scale_y'.
+
+
+ * src/cff/cffparse.c: Include FT_INTERNAL_DEBUG_H.
+ * src/cff/cffobjs.h: Include FT_INTERNAL_POSTSCRIPT_HINTS_H.
+
+2008-06-10 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftobjs.c (open_face): Check `clazz->init_face' and
+ `clazz->done_face'.
+
+2008-06-09 VaDiM <s_sliva@rambler.ru>
+
+ Support debugging on WinCE. From Savannah patch #6536; this fixes
+ bug #23497.
+
+ * builds/win32/ftdebug.c (OutputDebugStringEx): New function/macro
+ as a replacement for OutputDebugStringA (which WinCE doesn't have).
+ Update all callers.
+ (ft_debug_init) [_WIN32_CE]: WinCE apparently doesn't have
+ environment variables.
+
+2008-06-09 Werner Lemberg <wl@gnu.org>
+
+ * README.CVS: Updated.
+
+ * builds/unix/configure.raw, builds/unix/freetype-config.in: Updated
+ for newer versions of autoconf and friends.
+
+2008-06-08 Werner Lemberg <wl@gnu.org>
+
+ * src/type1/t1parse.h (T1_ParserRec): Make `base_len' and
+ `private_len' unsigned.
+
+ * src/type1/t1parse.c (read_pfb_tag): Make `asize' unsigned and read
+ it as such.
+ (T1_New_Parser, T1_Get_Private_Dict): Make `size' unsigned.
+
+
+ * src/base/ftstream.c (FT_Stream_Skip): Reject negative values.
+
+
+ * src/type1/t1load.c (parse_blend_design_positions): Check `n_axis'
+ for sane value.
+ Fix typo.
+
+
+ * src/psaux/psobjs.c (ps_table_add): Check `idx' correctly.
+
+
+ * src/truetype/ttinterp (Ins_SHC): Use BOUNDS() to check
+ `last_point'.
+
+
+ * src/sfnt/ttload.c (tt_face_load_max_profile): Limit
+ `maxTwilightPoints'.
+
+2008-06-06 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttinterp.c (Ins_IP): Handle case `org_dist == 0'
+ correctly. This fixes glyphs `t' and `h' of Arial Narrow at 12ppem.
+
+2008-06-03 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/ftcache.h (FTC_FaceID): Change type back to
+ FT_Pointer. Reported by Ian Britten <britten@caris.com>.
+
+2008-06-02 Werner Lemberg <wl@gnu.org>
+
+ Emit header info for defined FreeType objects in reference.
+
+ * src/tools/docmaker/content.py (re_header_macro): New regexp.
+ (ContentProcessor::__init__): Initialize new dictionary `headers'.
+ (DocBlock::__init__): Collect macro header definitions.
+
+ * src/tools/docmaker/tohtml.py (header_location_header,
+ header_location_footer): New strings.
+ (HtmlFormatter::__init__): Pass `headers' dictionary.
+ (HtmlFormatter::print_html_field): Don't emit paragraph tags.
+ (HtmlFormatter::print_html_field_list): Emit empty paragraph.
+ (HtmlFormatter::block_enter): Emit header info.
+
+2008-06-01 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/config/ftheader.h (FT_UNPATENTED_HINTING_H,
+ FT_INCREMENTAL_H): Added.
+
+2008-05-28 Werner Lemberg <wl@gnu.org>
+
+ * src/tools/docmaker/sources.py (SourceBlock::__init__): While
+ looking for markup tags, return immediately as soon a single one is
+ found.
+
+2008-05-28 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttinterp.c (Ins_MD): The MD instruction also uses
+ original, unscaled input values. Confirmed by Greg Hitchcock from
+ Microsoft.
+
+2008-05-27 Werner Lemberg <wl@gnu.org>
+
+ * src/tools/docmaker/tohtml.py (block_footer_start,
+ block_footer_middle): Beautify output.
+
+2008-05-25 Werner Lemberg <wl@gnu.org>
+
+ * src/raster/ftraster.c (fc_black_render): Return 0 when we are
+ trying to render into a zero-width/height bitmap, not an error code.
+
+ * src/truetype/ttgload.c (load_truetype_glyph): Move initialization
+ of the graphics state for subglyphs to...
+ (TT_Hint_Glyph): This function.
+ Hinting instructions for a composite glyph apparently refer to the
+ just hinted subglyphs, not the unhinted, unscaled outline. This
+ seems to fix Savannah bugs #20973 and (at least partially) #23310.
+
+2008-05-20 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * src/base/ftmac.c (FT_New_Face_From_Suitcase): Check if valid
+ `aface' is returned by FT_New_Face_From_FOND(). The patch was
+ proposed by an anonymous reporter of Savannah bug #23204.
+
+2008-05-18 Werner Lemberg <wl@gnu.org>
+
+ * src/pshinter/pshalgo.c (ps_hints_apply): Reset scale values after
+ correction for pixel boundary. Without this patch, the effect can
+ be cumulative under certain circumstances, making glyphs taller and
+ taller after each call. This fixes Savannah bug #19976.
+
+2008-05-18 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftdebug.c (FT_Message, FT_Panic): Send output to stderr.
+ This fixes Savannah bug #23280.
+
+ * docs/CHANGES: Updated.
+
+2008-05-18 David Turner <david@freetype.org>
+
+ * src/psnames/psmodule.c (ft_wgl_extra_unicodes,
+ ft_wgl_extra_glyph_names, ft_wgl_extra_glyph_name_offsets,
+ ps_check_wgl_name, ps_check_wgl_unicode): Use `static' to make
+ declarations non-global.
+
+ * src/type1/t1load.c: Add missing comment.
+
+2008-05-17 Sam Hocevar <samh>
+
+ * src/truetype/ttgload.c (TT_Load_Simple_Glyph): Handle zero-contour
+ glyphs correctly. Patch from Savannah bug #23277.
+
+2008-05-16 Werner Lemberg <wl@gnu.org>
+
+ * docs/CHANGES: Updated.
+
+2008-05-16 Sergey Tolstov <stolstov@esri.com>
+
+ Improve support for WGL4 encoded fonts.
+
+ * src/psnames/psmodule.c (WGL_EXTRA_LIST_SIZE): New macro.
+ (ft_wgl_extra_unicodes, ft_wgl_extra_glyph_names,
+ ft_wgl_extra_glyph_name_offsets): New arrays.
+ (ps_check_wgl_name, ps_check_wgl_unicode): New functions.
+ (ps_unicodes_init): Use them to add additional Unicode mappings.
+
+2008-05-15 Werner Lemberg <wl@gnu.org>
+
+ * src/psaux/t1decode.c (t1_decoder_parse_charstrings)
+ <op_closepath>: `closepath' without a path is a no-op, not an error
+ (cf. the PS reference manual).
+
+ Reported by Martin McBride.
+
+2008-05-15 Werner Lemberg <wl@gnu.org>
+
+ * builds/toplevel.mk (CONFIG_GUESS, CONFIG_SUB): Updated.
+
+2008-05-15 Werner Lemberg <wl@gnu.org>
+
+ * src/type1/t1load.c (parse_subrs): Accept fonts with a subrs array
+ which contains a single but empty entry. This is technically
+ invalid (since it must end with `return'), but...
+
+ Reported by Martin McBride.
+
+2008-05-14 Werner Lemberg <wl@gnu.org>
+
+ Finish fix of scaling bug of CID-keyed CFF subfonts.
+
+ * include/freetype/internal/ftcalc.h, src/base/ftcalc.c
+ (FT_Matrix_Multiply_Scaled, FT_Vector_Transform_Scaled): New
+ functions.
+
+ * src/cff/cffobjs.h (CFF_Internal): New struct. It is used to
+ provide global hinting data for both the top-font and all subfonts
+ (with proper scaling).
+
+ * src/cff/cffobjs.c (cff_make_private_dict): New function, using
+ code from `cff_size_init'.
+ (cff_size_init, cff_size_done, cff_size_select, cff_size_request):
+ Use CFF_Internal and handle subfonts.
+ (cff_face_init): Handle top-dict and subfont matrices correctly;
+ apply some heuristic in case of unlikely matrix concatenation
+ results. This has been discussed with people from Adobe (thanks
+ goes mainly to David Lemon) who confirm that the CFF specs are fuzzy
+ and not correct.
+
+ * src/cff/cffgload.h (cff_decoder_prepare): Add `size' argument.
+
+ * src/cff/cffgload.c (cff_builder_init): Updated.
+ (cff_decoder_prepare): Handle hints globals for subfonts.
+ Update all callers.
+ (cff_slot_load): Handling scaling of subfonts properly.
+
+ * src/cff/cffparse.c (cff_parse_fixed_dynamic): New function.
+ (cff_parse_font_matrix): Use it.
+
+ * src/cff/cfftypes.h (CFF_FontDictRec): Make `units_per_em'
+ FT_ULong.
+
+ * docs/CHANGES: Document it.
+
+2008-05-13 Werner Lemberg <wl@gnu.org>
+
+ * src/winfonts/winfnt.c (fnt_face_get_dll_font, FNT_Face_Init):
+ Handle case `face_index < 0'.
+ * docs/CHANGES: Document it.
+
+2008-05-04 Werner Lemberg <wl@gnu.org>
+
+ First steps to fix the scaling bug of CID-keyed CFF subfonts,
+ reported by Ding Li on 2008/03/28 on freetype-devel.
+
+ * src/base/cff/cffparse.c (power_tens): New array.
+ (cff_parse_real): Rewritten to introduce a fourth parameter which
+ returns the `scaling' of the real number so that we have no
+ precision loss. This is not used yet.
+ Update all callers.
+ (cff_parse_fixed_thousand): Replace with...
+ (cff_parse_fixed_scaled): This function. Update all callers.
+
+2008-05-03 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftobjs.c (FT_Load_Glyph): Call the auto-hinter without
+ transformation since it recursively calls FT_Load_Glyph. This fixes
+ Savannah bug #23143.
+
+2008-04-26 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/internal/psaux.h (T1_BuilderRec): Mark `scale_x'
+ and `scale_y' as obsolete since they aren't used.
+ * src/psaux/psobjs.c (t1_builder_init): Updated.
+
+ * src/cff/cffgload.h (CFF_Builder): Mark `scale_x' and `scale_y' as
+ obsolete since they aren't used.
+ * src/cff/cffgload.c (cff_builder_init): Updated.
+
+2008-04-14 Werner Lemberg <wl@gnu.org>
+
+ * src/pcf/pcfdrivr.c (PCF_Face_Init): Protect call to
+ `FT_Stream_OpenLZW' with `FT_CONFIG_OPTION_USE_LZ'. From Savannah
+ bug #22909.
+
+2008-04-13 Werner Lemberg <wl@gnu.org>
+
+ * src/psaux/psconv.c (PS_Conv_ToFixed): Increase precision if
+ integer part is zero.
+
+2008-04-01 Werner Lemberg <wl@gnu.org>
+
+ Fix compilation with g++ 4.1 (with both `single' and `multi'
+ targets).
+
+ * src/base/ftobjs.c (FT_Open_Face): Don't define a variable in block
+ which is crossed by a `goto'.
+
+ * src/otvalid/otvalid.h (otv_MATH_validate): Add prototype.
+
+2008-03-31 Werner Lemberg <wl@gnu.org>
+
+ Fix support for subsetted CID-keyed CFFs.
+
+ * include/freetype/freetype.h (FT_FACE_FLAG_CID_KEYED,
+ FT_IS_CID_KEYED): New macros.
+
+ * src/cff/cffobjs.c (cff_face_init): Set number of glyphs to the
+ maximum CID value in CID-keyed CFFs.
+ Handle FT_FACE_FLAG_CID_KEYED flag.
+
+ * docs/CHANGES: Document it.
+
+
+ Fix CFF font matrix calculation and improve precision.
+
+ * src/cff/cffparse.c (cff_parse_real): Increase precision if integer
+ part is zero.
+ (cff_parse_font_matrix): Simplify computation of `units_per_em';
+ this prevents overflow also.
+
+
+ Support FT_Get_CID_Registry_Ordering_Supplement for PS CID fonts.
+
+ * src/cid/cidriver.c: Include FT_SERVICE_CID_H.
+ (cid_get_ros): New function.
+ (cid_service_cid_info): New service structure.
+ (cid_services): Register it.
+
+2008-03-23 Werner Lemberg <wl@gnu.org>
+
+ Adjustments for Visual C++ 8.0, as reported by Rainer Deyke.
+
+ * builds/compiler/visualc.mk (CFLAGS): Remove /W5.
+ (ANSIFLAGS): Add _CRT_SECURE_NO_DEPRECATE.
+
+2008-03-21 Laurence Darby <ldarby>
+
+ * src/type1/t1objs.c (T1_Face_Init): Use `/Weight'. Patch from
+ Savannah bug #22675.
+
+2008-03-13 Derek Clegg <dclegg@apple.com>
+
+ * src/truetype/ttgxvar.c (TT_Get_MM_Var): Fix named style loop.
+ Patch from Savannah bug #22541.
+
+2008-03-03 Masatoshi Kimura <VYV03354@nifty.ne.jp>
+
+ * src/sfnt/ttcmap.c (tt_cmap14_char_map_nondef_binary,
+ tt_cmap14_find_variant): Return correct value.
+ (tt_cmap14_variant_chars): Fix check for `di'.
+
+2008-02-29 Wermer Lemberg <wl@gnu.org>
+
+ * docs/CHANGES: Updated.
+
+2008-02-29 Wolf
+
+ Add build support for symbian platform. From Savannah bug #22440.
+
+ * builds/symbian/*: New files.
+
+2008-02-21 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * src/base/ftmac.c (parse_fond): Fix a bug of PostScript font name
+ synthesis. For any face of a specified FOND, always the name for
+ the first face was used. Except of a FOND that refers multiple
+ Type1 font files, wrong synthesized font names are not used at all,
+ so this is an invisible bug. A few limit checks are added too.
+
+ * builds/mac/ftmac.c: Ditto.
+
+2008-02-21 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * builds/unix/configure.raw: Split compiler option to link Carbon
+ frameworks to one option for CoreServices framework and another
+ option for ApplicationServices framework. The split options can be
+ managed by GNU libtool to avoid unrequired duplication when FreeType
+ is linked with other applications. Suggested by Daniel Macks,
+ Savannah bug #22366.
+
+2008-02-18 Victor Stinner <victor.stinner@haypocalc.com>
+
+ * src/truetype/ttinterp.c (Ins_IUP): Check number of points. Fix
+ from Savannah bug #22356.
+
+2008-02-17 Jonathan Blow <jon@number-none.com>
+
+ * src/autofit/afloader.c (af_loader_load_g, af_loader_load_glyph):
+ Check for valid callback pointers.
+
+2008-02-15 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * src/base/ftmac.c (FT_New_Face_From_SFNT): Check the sfnt resource
+ handle by its value instead of ResError(), fix provided by Deron
+ Kazmaier. According to the Resource Manager Reference,
+ GetResource(), Get1Resource(), GetNamedResource(),
+ Get1NamedResource() and RGetResource() set noErr but return NULL
+ handle when they can not find the requested resource. These
+ functions never return undefined values, so it is sufficient to
+ check if the handle is not NULL.
+
+ * builds/mac/ftmac.c (FT_New_Face_From_SFNT): Ditto.
+
+2008-02-14 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * src/base/ftbase.c: <ftmac.c> is replaced by "ftmac.c" as other
+ inclusion styles. Now it always includes src/base/ftmac.c;
+ builds/mac/ftmac.c is never included in any configuration.
+
+ * builds/unix/configure.raw: Print warning if configure is executed
+ with options to specify Carbon functionalities explicitly.
+
+ * docs/INSTALL.MAC: Note that legacy builds/mac/ftmac.c is not
+ included automatically and manual replacement is required.
+
+2008-02-11 Werner Lemberg <wl@gnu.org>
+
+ * builds/modules.mk (CLOSE_MODULE, REMOVE_MODULE), builds/detect.mk
+ (dos_setup), builds/freetype.mk (clean_project_dos,
+ distclean_project_dos): Don't use \ but $(SEP). Reported by Duncan
+ Murdoch.
+
+2008-01-18 Sylvain Pasche <sylvain.pasche@gmail.com>
+
+ * src/base/ftlcdfil.c (_ft_lcd_filter_legacy): Updated comment to
+ mention intra-pixel algorithm.
+
+ * include/freetype/freetype.h (FT_Render_Mode): Mention that
+ FT_Library_SetLcdFilter can be used to reduce fringes.
+
+2008-01-16 Werner Lemberg <wl@gnu.org>
+
+ * src/raster/ftraster.c (ft_black_render): Check `outline' before
+ using it. Reported by Allan Yang.
+
+2008-01-12 Werner Lemberg <wl@gnu.org>
+
+ * src/raster/ftraster.c (FT_CONFIG_OPTION_5_GRAY_LEVELS): Remove.
+
+2008-01-12 Allan Yang, Jian Hua - SH <Allan.Yang@fmc.fujitsu.com>
+
+ * src/raster/ftraster.c (ft_black_init)
+ [FT_RASTER_OPTION_ANTI_ALIASING]: Fix compilation.
+
+2008-01-10 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttgload.c (load_truetype_glyph): Handle the case
+ where the number of contours in a simple glyph is zero (and which
+ does contain an entry in the `glyf' table). This fixes Savannah bug
+ #21990.
+
+2008-01-04 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ Formatting suggested by Sean McBride.
+
+ * builds/mac/ftmac.c: Formatting (tab expanded).
+ * src/autofit/afindic.c: Ditto.
+ * src/base/ftcid.c: Ditto.
+ * src/base/ftmac.c: Ditto.
+
+2007-12-30 Werner Lemberg <wl@gnu.org>
+
+ * src/smooth/ftgrays.c (gray_raster_render): Check `outline'
+ correctly.
+
+2007-12-21 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ Improvement of POSIX resource-fork accessor to load unsorted
+ references in a resource. In HelveLTMM (resource-fork PostScript
+ Type1 font bundled with Mac OS X since 10.3.x), the appearance order
+ of PFB chunks is not sorted; sorting the chunks by reference IDs is
+ required.
+
+ * include/freetype/internal/ftrfork.h (FT_RFork_Ref): New structure
+ type to store a pair of reference ID and offset to the chunk.
+
+ * src/base/ftrfork.c (ft_raccess_sort_ref_by_id): New function to
+ sort FT_RFork_Ref by their reference IDs.
+
+ (FT_Raccess_Get_DataOffsets): Returns an array of offsets that is
+ sorted by reference ID.
+
+2007-12-14 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cffparse.c (cff_parse_real): Don't apply `power_ten'
+ division too early; otherwise the most significant digit(s) of the
+ final result are lost as the value is truncated to an integer. This
+ fixes Savannah bug #21794 (where the patch has been posted too).
+
+2007-12-06 Fix <4d876b82@gmail.com>
+
+ Pass options from one configure script to another as-is (not
+ expanded). This is needed for options like
+ --includedir='${prefix}/include'.
+
+ * builds/unix/detect.mk, configure: Prevent argument expansion in
+ call to the (real) `configure' script.
+
+2007-12-06 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttgload.c (load_truetype_glyph): Fix compilation if
+ TT_USE_BYTECODE_INTERPRETER isn't defined.
+
+2007-12-06 Werner Lemberg <wl@gnu.org>
+
+ There exist CFFs which contain opcodes for the Type 1 operators
+ `hsbw' and `closepath' which are both invalid in Type 2 charstrings.
+ However, it doesn't harm to support them.
+
+ * src/cff/cffgload.c (CFF_Operator): Add `cff_op_hsbw' and
+ `cff_op_closepath.'
+ (cff_argument_counts): Ditto.
+
+ (cff_decoder_parse_charstrings): Handle Type 1 opcodes 9 (closepath)
+ and 13 (hsbw) which are invalid in Type 2 charstrings.
+
+2007-12-06 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * src/base/ftrfork.c (raccess_guess_darwin_newvfs): New function to
+ support new pathname syntax `..namedfork/rsrc' to access a resource
+ fork on Mac OS X. The legacy syntax `/rsrc' does not work on
+ case-sensitive HFS+.
+ (raccess_guess_darwin_hfsplus): Fix a bug in the calculation of
+ buffer size to store a pathname.
+ * include/freetype/internal/ftrfork.h: Increment the number of
+ resource fork guessing rule.
+
+2007-12-06 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * builds/unix/configure.raw: Improve the compile tests to search
+ Carbon functions.
+ * builds/mac/ftmac.c: Import fixes for Carbon incompatibilities
+ proposed by Sean McBride from src/base/ftmac.c (see 2007-11-16).
+
+2007-12-06 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ The documents and comments for Mac OS X are improved by Sean
+ McBride.
+
+ * src/base/ftmac.c: Fix a comment.
+ * include/freetype/ftmac.h: Ditto.
+ * docs/INSTALL.MAC: Improve English and add comment on lowest
+ system version specified by MACOSX_DEPLOYMENT_TARGET.
+
+2007-12-04 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cffload.c (cff_subfont_load): Don't use logical OR to
+ concatenate error codes.
+ * src/sfnt/ttsbit.c (Load_SBit_Range): Ditto.
+
+2007-12-04 Graham Asher <graham.asher@btinternet.com>
+
+ * src/truetype/ttobjs.c (tt_face_init): Don't use logical OR to
+ concatenate error codes.
+
+2007-12-04 Sean McBride <sean@rogue-research.com>
+
+ * src/pfr/pfrgload.c (pfr_glyph_load_compound): Remove compiler
+ warning.
+
+2007-11-20 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ Fix MacOS legacy font support by Masatake Yamato on Mac OS X. It is
+ not working since 2.3.5. In FT_Open_New(), if FT_New_Stream()
+ cannot mmap() the specified file and cannot seek to head of the
+ specified file, it returns NULL stream and FT_Open_New() returns the
+ error immediately. On MacOS, most legacy MacOS fonts fall into such
+ a scenario because their data forks are zero-sized and cannot be
+ sought. To proceed to guessing of resource fork fonts, the
+ functions for legacy MacOS font must properly handle the NULL stream
+ returned by FT_New_Stream().
+
+ * src/base/ftobjs.c (IsMacBinary): Return error
+ FT_Err_Invalid_Stream_Operation immediately when NULL stream is
+ passed.
+ (FT_Open_Face): Even when FT_New_Stream() returns an error, proceed
+ to fallback. Originally, legacy MacOS font is tested in the cases
+ of FT_Err_Invalid_Stream_Operation (occurs when data fork is empty)
+ or FT_Err_Unknown_File_Format (occurs when AppleSingle header or
+ .dfont header is combined). Now the case of
+ FT_Err_Cannot_Open_Stream is included.
+
+ * src/base/ftrfork.c (FT_Raccess_Guess): When passed stream is NULL,
+ skip FT_Stream_Seek(), which seeks to the head of stream, and
+ proceed to unit testing of raccess_guess_XXX(). FT_Stream_Seek()
+ for a NULL stream causes a Bus error on Mac OS X.
+ (raccess_guess_apple_double): Return FT_Err_Cannot_Open_Stream
+ immediately if passed stream is NULL.
+ (raccess_guess_apple_single): Ditto.
+
+2007-11-16 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ Fix for Carbon incompatibilities since Mac OS X 10.5,
+ proposed by Sean McBride.
+
+ * doc/INSTALL.MAC: Comment on MACOSX_DEPLOYMENT_TARGET.
+
+ * include/freetype/ftmac.h: Deprecate FT_New_Face_From_FOND and
+ FT_GetFilePath_From_Mac_ATS_Name. Since Mac OS X 10.5, calling
+ Carbon functions from a forked process is classified as unsafe
+ by Apple. All Carbon-dependent functions should be deprecated.
+
+ * src/base/ftmac.c: Use essential header files <Carbon/Carbon.h>
+ and <ApplicationServices/ApplicationServices.h> instead of
+ all-in-one header file <CoreServices/CoreServices.h>.
+
+ Include <sys/syslimits.h> and replace HFS_MAXPATHLEN by Apple
+ genuine macro PATH_MAX.
+
+ Add fallback macro for kATSOptionFlagsUnRestrictedScope which
+ is not found in Mac OS X 10.0.
+
+ Multi-character constants ('POST', 'sfnt' etc) are replaced by
+ 64bit constants calculated by FT_MAKE_TAG() macro.
+
+ For the index in the segment of resource fork, new portable
+ type ResourceIndex is introduced for better compatibility.
+ This type is since Mac OS X 10.5, so it is defined as short
+ when built on older platforms.
+
+ (FT_ATSFontGetFileReference): If build target is only the systems
+ 10.5 and newer, it calls Apple genuine ATSFontGetFileReference().
+
+ (FT_GetFile_From_Mac_ATS_Name): Return an error if system is 10.5
+ and newer or 64bit platform, because legacy type FSSpec type is
+ removed completely.
+
+ (FT_New_Face_From_FSSpec): Ditto.
+
+2007-11-01 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/sfobjs.c (sfnt_done_face): Check `sfnt' everywhere. This
+ fixes Savannah bug #21485.
+
+2007-10-29 Daniel Svoboda <dasvo@planeta@cz>
+
+ * src/winfonts/winfnt.c (FNT_Face_Init): Check first that the driver
+ can handle the font at all, then check `face_index'. Otherwise, the
+ driver might return the wrong error code. This fixes Savannah bug
+ #21468.
+
+2007-10-21 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/sfobjs.c (sfnt_load_face): Support bit 9 and prepare
+ support for bit 8 of the `fsSelection' field in the `OS/2' table.
+ MS is already using this; hopefully, this becomes part of OpenType
+ 1.5.
+ Prepare also support for `name' IDs 21 (WWS_FAMILY) and 22
+ (WWS_SUBFAMILY).
+
+2007-10-20 Werner Lemberg <wl@gnu.org>
+
+ * src/tools/docmaker/tohtml.py (html_header_2): Fix typo.
+ Add `td.left' element to CSS.
+ (toc_section_enter): Use it.
+
+2007-10-18 David Turner <david@freetype.org>
+
+ * include/freetype/freetype.h, src/base/ftobjs.c: Rename API
+ functions related to cmap type 14 support to the
+ `FT_Object_ActionName' scheme:
+
+ FT_Get_Char_Variant_index -> FT_Face_GetCharVariantIndex
+ FT_Get_Char_Variant_IsDefault -> FT_Face_GetCharVariantIsDefault
+ FT_Get_Variant_Selectors -> FT_Face_GetVariantSelectors
+ FT_Get_Variants_Of_Char -> FT_Face_GetVariantsOfChar
+ FT_Get_Chars_Of_Variant -> FT_Face_GetCharsOfVariant
+
+ Update documentation accordingly.
+
+ * src/sfnt/ttcmap.c: Stronger cmap 14 validation.
+ Make the code a little more consistent with FreeType coding
+ conventions and modify the cmap14 functions that returned a newly
+ allocated array to use a persistent vector from the TT_CMap14 object
+ instead.
+
+ (TT_CMap14Rec): Provide array and auxiliary data for result.
+ (tt_cmap14_done, tt_cmap14_ensure): New functions.
+
+ (tt_cmap14_init, tt_cmap14_validate, tt_cmap14_char_map_def_binary,
+ tt_cmap14_char_map_nondef_binary, tt_cmap14_find_variant,
+ tt_cmap14_char_var_index, tt_cmap14_variants,
+ tt_cmap14_char_variants, tt_cmap14_def_char_count,
+ tt_cmap14_get_def_chars, tt_cmap14_get_nondef_chars,
+ tt_cmap14_variant_chars, tt_cmap14_class_rec): Updated and improved.
+
+2007-10-15 George Williams <gww@silcom.com>
+
+ Add support for cmap type 14.
+
+ * devel/ftoption.h, include/freetype/config/ftoption.h
+ (TT_CONFIG_CMAP_FORMAT_14): New macro.
+
+ * include/freetype/internal/ftobjs.h (FT_CMap_CharVarIndexFunc,
+ FT_CMap_CharVarIsDefaultFunc, FT_CMap_VariantListFunc,
+ FT_CMap_CharVariantListFunc, FT_CMap_VariantCharListFunc): New
+ support function prototypes.
+ (FT_CMap_ClassRec): Add them.
+ Update all users.
+
+ * include/freetype/ttnameid.h (TT_APPLE_ID_VARIANT_SELECTOR): New
+ macro.
+
+ * include/freetype/freetype.h (FT_Get_Char_Variant_Index,
+ FT_Get_Char_Variant_IsDefault, FT_Get_Variant_Selectors,
+ FT_Get_Variants_Of_Char, FT_Get_Chars_Of_Variant): New API
+ functions.
+
+ * src/base/ftobjs.c (find_variant_selector_charmap): New auxiliary
+ function.
+ (FT_Set_Charmap): Disallow cmaps of type 14.
+ (FT_Get_Char_Variant_Index, FT_Get_Char_Variant_IsDefault,
+ FT_Get_Variant_Selectors, FT_Get_Variants_Of_Char,
+ FT_Get_Chars_Of_Variant): New API functions.
+
+ * src/sfnt/ttcmap.c (TT_PEEK_UINT24, TT_NEXT_UINT24): New macros.
+
+ (TT_CMap14Rec, tt_cmap14_init, tt_cmap14_validate,
+ tt_cmap14_char_index, tt_cmap14_char_next, tt_cmap14_get_info,
+ tt_cmap14_char_map_def_binary, tt_cmap14_char_map_nondef_binary,
+ tt_cmap14_find_variant, tt_cmap14_char_var_index,
+ tt_cmap14_char_var_isdefault, tt_cmap14_variants,
+ tt_cmap14_char_variants, tt_cmap14_def_char_count,
+ tt_cmap14_get_def_chars, tt_cmap14_get_nondef_chars,
+ tt_cmap14_variant_chars, tt_cmap14_class_rec): New functions and
+ structures for cmap 14 support.
+ (tt_cmap_classes): Register tt_cmap14_class_rec.
+ (tt_face_build_cmaps): One more error message.
+
+ * docs/CHANGES: Mention cmap 14 support.
+
+2007-10-01 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftobjs.c (find_unicode_charmap): If search for a UCS-4
+ charmap fails, do the loop again while searching a UCS-2 charmap.
+ This favours MS charmaps over Apple ones.
+
+2007-08-29 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * src/base/ftmac.c: Introduction of abstract `short' data types,
+ ResFileRefNum and ResID. These types were introduced for Copland,
+ then backported to MPW. The variables exchanged with FileManager
+ QuickDraw frameworks are redefined by these data types. Patch was
+ proposed by Sean McBride.
+ * builds/mac/ftmac.c: Ditto.
+
+2007-08-18 Werner Lemberg <wl@gnu.org>
+
+ * src/otvalid/otvcmmn.c (otv_x_y_ux_sy): Skip context glyphs. Found
+ by Imran Yousaf. Fixes Savannah bug #20773.
+
+ (otv_Lookup_validate): Correct handling of LookupType. Found by
+ Imran Yousaf. Fixes Savannah bug #20782.
+
+2007-08-17 George Williams <gww@silcom.com>
+
+ * src/otvalid/otvgsub.c (otv_SingleSubst_validate): Fix handling of
+ SingleSubstFormat1.
+
+2007-08-11 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * builds/unix/configure.raw: Fix a bug which sets CC_BUILD by
+ ${build-gcc} (unchecked) instead of by ${build}-gcc (checked).
+ Found by Ryan Hill.
+
+2007-08-11 George Williams <gww@silcom.com>
+
+ * src/otvalid/otvcommn.c, src/otvalid/otvcommn.h
+ (otv_Coverage_validate): Add fourth argument to pass an expected
+ count value. Update all users.
+ Check glyph IDs.
+ (otv_ClassDef_validate): Check `StartGlyph'.
+
+ * src/otvalid/otvgsub.c (otv_SingleSubst_validate): More glyph ID
+ checks.
+
+ * src/otvalid/otvmath.c (otv_MathConstants_validate): There are only
+ 56 constants.
+ (otv_GlyphAssembly_validate, otv_MathGlyphConstruction_validate):
+ Check glyph IDs.
+
+2007-08-08 Werner Lemberg <wl@gnu.org>
+
+ * src/otvalid/otvbase.c, src/otvalid/otvcommn.c,
+ src/otvalid/otvgdef.c, src/otvalid/otvgpos.c, src/otvalid/otvgsub.c,
+ src/otvalid/otvjstf.c: s/FT_INVALID_DATA/FT_INVALID_FORMAT/ where
+ appropriate. Reported by George.
+
+ * include/freetype/internal/fttrace.h: Define `trace_otvmath'.
+
+ * src/otvalid/rules.mk (OTV_DRV_SRC): Add otvmath.c.
+
+ * docs/CHANGES: Updated.
+
+2007-08-08 George Williams <gww@silcom.com>
+
+ Add `MATH' validating support to otvalid module.
+
+ * include/freetype/tttags.h (TTAG_MATH): New macro.
+ * include/freetype/ftotval.h (FT_VALIDATE_MATH): New macro.
+ (FT_VALIDATE_OT): Updated.
+
+ * src/otvalid/otmath.c: New file.
+
+ * src/otvalid/otvalid.c: Include otvmath.c.
+ * src/otvalid/otvmod.c (otv_validate): Handle `MATH' table.
+
+2007-08-04 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/configure.raw: Add call to AC_LIBTOOL_WIN32_DLL.
+ Fixes Savannah bug #20686.
+
+2007-08-03 Werner Lemberg <wl@gnu.org>
+
+ * src/psnames/psmodule.c: Fix usage of
+ FT_CONFIG_OPTION_POSTSCRIPT_NAMES macro. Reported by Graham Asher.
+
+2007-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * src/base/ftmac.c (open_face_from_buffer): The argument
+ `driver_name' is typed as `const char*' to match with the
+ callers in FT_New_Face_From_LWFN and FT_New_Face_From_SFNT.
+ This is same with open_face_from_buffer in src/base/ftobjs.c.
+ Found and fixed by Sean McBride.
+
+2007-07-28 Werner Lemberg <wl@gnu.org>
+
+ * src/raster/ftraster.c (count_table): Make it conditional.
+ * src/base/ftobjs.c (FT_New_Library): Check FT_RENDER_POOL_SIZE with
+ a preprocessor statement.
+
+2007-07-27 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftoutln.c (FT_Outline_Translate): Check `outline' before
+ first usage. From Savannah patch #6115.
+
+2007-07-16 Werner Lemberg <wl@gnu.org>
+
+ * docs/CHANGES: Updated.
+
+2007-07-16 Derek Clegg <dclegg@apple.com>
+
+ Add new service for getting the ROS from a CID font.
+
+ * include/freetype/config/ftheader.h (FT_CID_H): New macro.
+ * include/freetype/ftcid.h: New file.
+
+ * include/freetype/internal/ftserv.h (FT_SERVIVE_CID_H): New macro.
+ * include/freetype/internal/services/svcid.h: New file.
+
+ * src/base/ftcid.c: New file.
+
+ * src/cff/cffdrivr.c: Include FT_SERVICE_CID_H.
+ (cff_get_ros): New function.
+ (cff_service_cid_info): New service structure.
+ (cff_services): Register it.
+
+ * src/cff/cffload.c (cff_font_done): Free registry and ordering.
+
+ * src/cff/cfftypes.h (CFF_FontRec): Add `registry' and `ordering'.
+
+ * modules.cfg (BASE_EXTENSIONS): Add ftcid.c.
+
+2007-07-11 Derek Clegg <dclegg@apple.com>
+
+ Add support for postscript name service to CFF driver.
+
+ * src/cff/cffdrivr.c: Include FT_SERVICE_POSTSCRIPT_NAME_H.
+ (cff_get_ps_name): New function.
+ (cff_service_ps_name): New service structure.
+ (cff_services): Register it.
+
+2007-07-07 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftglyph.c (FT_Glyph_Copy): Fix initialization of
+ `target'. Reported by Sean McBride.
+
+2007-07-06 Werner Lemberg <wl@gnu.org>
+
+ * src/pfr/pfrcmap.c: Include pfrerror.h.
+
+ * src/autofit/afindic.c: Add some external declarations to pacify
+ `make multi' compilation.
+
+ * src/cid/cidgload.c (cid_load_glyph): Pacify compiler.
+
+ * src/cff/cffdrivr.c (cff_ps_get_font_info), src/cff/cffobjs.c
+ (cff_strcpy), include/freetype/internal/ftmemory.h (FT_MEM_STRDUP),
+ src/autofit/aflatin.c (af_latin_hints_compute_edges),
+ src/autofit/afcjk.c (af_cjk_hints_compute_edges), src/sfnt/ttmtx.c
+ (tt_face_get_metrics), src/base/ftobjs.c (open_face)
+ [FT_CONFIG_OPTION_INCREMENTAL]: Fix compilation with C++ compiler.
+
+ * docs/release: Mention test compilation targets.
+
+2007-07-04 Werner Lemberg <wl@gnu.org>
+
+ * docs/PROBLEMS: Mention that some PS based fonts can't be
+ handled correctly by FreeType.
+
+ * src/truetype/ttgload.c (load_truetype_glyph): Always allow a
+ recursion depth of 1. This was the maximum value in TrueType 1.0,
+ and some older fonts don't set this field correctly.
+
+ * src/gxvalid/gxvmort1.c
+ (gxv_mort_subtable_type1_substTable_validate): Fix tracing message.
+
+2007-07-03 Werner Lemberg <wl@gnu.org>
+
+ * src/autofit/aflatin.c (af_latin_metrics_init_blues): Initialize
+ `round' to pacify compiler.
+
+2007-07-02 Werner Lemberg <wl@gnu.org>
+
+
+ * Version 2.3.5 released.
+ =========================
+
+
+ Tag sources with `VER-2-3-5'.
+
+ * docs/CHANGES, docs/VERSION.DLL: Update documentation and bump
+ version number to 2.3.5.
+
+ * README, Jamfile (RefDoc), builds/win32/visualc/index.html,
+ builds/win32/visualc/freetype.dsp,
+ builds/win32/visualc/freetype.vcproj,
+ builds/win32/visualce/index.html,
+ builds/win32/visualce/freetype.dsp,
+ builds/win32/visualce/freetype.vcproj: s/2.3.4/2.3.5/, s/234/235/.
+
+ * include/freetype/freetype.h (FREETYPE_PATCH): Set to 5.
+
+ * builds/unix/configure.raw (version_info): Set to 9:16:3.
+
+2007-07-01 David Turner <david@freetype.org>
+
+ * include/freetype/freetype.h, src/base/ftpatent.c
+ (FT_Face_SetUnpatentedHinting): New function to dynamically change
+ the setting after a face is created.
+
+ * src/truetype/ttgload.c (TT_Load_Simple_Glyph): Fix a small bug
+ that created distortions in the bytecode interpreter results.
+
+2007-06-30 David Turner <david@freetype.org>
+
+ * src/truetype/ttinterp.c (Ins_IUP): Add missing variable
+ initialization.
+
+ * src/autofit/aflatin.c (af_latin_metric_init_blues): Get rid of an
+ infinite loop in the case of degenerate fonts.
+
+2007-06-26 Rahul Bhalerao <b.rahul.pm@gmail.com>
+
+ Add autofit module for Indic scripts. This currently just reuses
+ the CJK-specific functions.
+
+ * include/freetype/config/ftoption.h (AF_CONFIG_OPTION_INDIC): New
+ macro.
+ * devel/ftoption.h: Synchronize with
+ include/freetype/config/ftoption.h.
+
+ * src/autofit/afindic.c, src/autofit/afindic.h: New files.
+
+ * src/autofit/afglobal.c, src/autofit/aftypes.h,
+ src/autofit/autofit.c: Updated.
+
+ * src/autofit/Jamfile (_sources), * src/autofit/rules.mk
+ (AUTOF_DRV_SRC): Updated.
+
+2007-06-23 David Turner <david@freetype.org>
+
+ * src/truetype/ttgload.c (TT_Load_Simple): Fix change from
+ 2007-06-16 that prevented the TrueType module from loading most
+ glyphs.
+
+2007-06-20 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cffgload.c (cff_slot_load): Fix logic of 2007-05-28
+ change.
+
+2007-06-19 Werner Lemberg <wl@gnu.org>
+
+ * src/type1/t1load.c (parse_encoding): Handle one more error.
+
+2007-06-19 Dmitry Timoshkov <dmitry@codeweavers.com>
+
+ * src/winfonts/winfnt.c (fnt_face_get_dll_font): Return error
+ FNT_Err_Invalid_File_Format if file format was recognized but
+ the file doesn't contain any FNT(NE) or RT_FONT(PE) resources.
+ Add verbose debug logs to make it easier to debug failing load
+ attempts.
+ (FNT_Face_Init): A single FNT font can't contain more than 1 face,
+ so return an error if requested face index is > 0.
+ Do not do further attempt to load fonts if a previous attempt has
+ failed but returned error FNT_Err_Invalid_File_Format, i.e., the
+ file format has been recognized but no fonts found in the file.
+
+2007-07-19 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * src/base/ftmac.c: Apply patches proposed by Sean McBride.
+ (FT_GetFile_From_Mac_Name): Insert FT_UNUSED macros to fix
+ the compiler warnings against unused arguments.
+ (FT_ATSFontGetFileReference): Ditto.
+ (FT_GetFile_From_Mac_ATS_Name): Ditto.
+ (FT_New_Face_From_FSSpec): Ditto.
+ (lookup_lwfn_by_fond): Fix wrong comment.
+ Replace `const StringPtr' by more appropriate type
+ `ConstStr255Param'.
+ FSRefMakePathPath always returns UTF8 POSIX pathname in
+ Mach-O, thus HFS pathname support is dropped.
+ (count_faces): Remove HLock and HUnlock which is not
+ required on Mac OS X anymore.
+ (FT_New_Face_From_SFNT): Ditto.
+ (FT_New_Face_From_FOND): Ditto.
+ * builds/mac/ftmac.c: Synchronize to src/base/ftmac.c,
+ except of HFS pathname support and HLock/HUnlock.
+ They are required on classic CFM environment.
+
+2007-06-18 Werner Lemberg <wl@gnu.org>
+
+ * src/psaux/psobjs.c (ps_parser_skip_PS_token): Remove incorrect
+ assertion.
+ (ps_parser_to_bytes): Fix error message.
+
+ * src/type42/t42objs.c (T42_Open_Face): Handle one more error.
+ * src/type42/t42parse.c (t42_parse_sfnts): s/alloc/allocated/.
+ Don't allow mixed binary and hex strings.
+ Handle string_size == 0 and string_buf == 0.
+ (t42_parse_encoding): Handle one more error.
+
+2007-06-18 Werner Lemberg <wl@gnu.org>
+
+ * src/psaux/psobjs.c (ps_tofixedarray, ps_tocoordarray): Fix exit
+ logic.
+ (ps_parser_load_field) <T1_FIELD_TYPE_BBOX>: Skip delimiters
+ correctly.
+ (ps_parser_load_field_table): Use `fields->array_max' instead of
+ T1_MAX_TABLE_ELEMENTS to limit the number of arguments.
+
+ * src/cff/cffgload.c (cff_decoder_prepare): Fix change from
+ 2007-06-06.
+
+2007-06-17 Werner Lemberg <wl@gnu.org>
+
+ * src/tools/ftrandom.c (font_size): New global variable.
+ (TestFace): Use it.
+ (main): Handle new option `--size' to set `font_size'.
+ (Usage): Updated.
+
+ * src/winfonts/winfnt.c (fnt_face_get_dll_font): Exit in case of
+ invalid font.
+ (FNT_Load_Glyph): Protect against invalid bitmap width.
+
+2007-06-16 David Turner <david@freetype.org>
+
+ * src/smooth/ftgrays.c (gray_find_cell, gray_set_cell, gray_hline):
+ Prevent integer overflows when rendering very large outlines.
+
+ * src/truetype/ttgload.c (TT_Load_Simple_Glyph): Check the
+ well-formedness of the contours array when loading a glyph.
+
+ * src/truetype/ttinterp.c (TT_Load_Context): Initialize `zp0', `zp1',
+ and `zp2'.
+ (Ins_IP): Check argument ranges to reject bogus operations properly.
+ (IUP_WorkerRec): Add `max_points' member.
+ (_iup_worker_interpolate): Check argument ranges.
+ (Ins_IUP): Ignore empty outlines.
+
+2007-06-16 Dmitry Timoshkov <dmitry@codeweavers.com>
+
+ * src/winfonts/winfnt.h: Add necessary structures for PE resource
+ parsing.
+ (WinPE32_HeaderRec): New structure.
+ (WinPE32_SectionRec): New structure.
+ (WinPE_RsrcDirRec): New structure.
+ (WinPE_RsrcDirEntryRec): New structure.
+ (WinPE_RsrcDataEntryRec): New structure.
+ (FNT_FontRec): Remove unused `size_shift' field.
+
+ * src/winfonts/winfnt.c (fnt_face_get_dll_font): Add support for
+ loading bitmap .fon files in PE format.
+
+2007-06-15 Dmitry Timoshkov <dmitry@codeweavers.com>
+
+ * builds/win32/ftdebug.c: Unify debug level handling with other
+ platforms.
+
+2007-06-14 Dmitry Timoshkov <dmitry@codeweavers.com>
+
+ * builds/win32/ftdebug.c (FT_Message): Send debug output to the
+ console as well as to the debugger.
+
+2007-06-14 Werner Lemberg <wl@gnu.org>
+
+ * src/autofit/aflatin.c (af_latin_uniranges): Expand structure to
+ cover all ranges which could possibly be handled by the aflatin
+ module (since the default fallback for unknown ranges is now the
+ afcjk module). It might be necessary to fine-tune this further by
+ splitting off modules for Greek, Cyrillic, or other blocks.
+
+2007-06-11 David Turner <david@freetype.org>
+
+ * src/autofit/aflatin.c (af_latin_hints_link_segments): Fix
+ incorrect segment linking computation. This was the root cause of
+ Savannah bug #19565.
+
+
+ * src/autofit/* [FT_OPTION_AUTOFIT2]: Some very experimental changes
+ to improve the Latin auto-hinter. Note that the new code is
+ disabled by default since it is not stabilized yet.
+
+ * src/autofit/aflatin2.c, src/autofit/aflatin2.h: New files
+ (disabled currently).
+
+ * src/autofit/afhints.c: Remove dead code.
+ (af_axis_hints_new_edge): Add argument to handle segment directions.
+ (af_edge_flags_to_string): New function.
+ (af_glyph_hints_dump_segments, af_glyph_hints_dump_edges): Handle
+ option flags.
+ (af_glyph_hints_reload): Add argument to handle inflections.
+ Simplify.
+ (af_direction_compute): Fine tuning.
+ (af_glyph_hints_align_edge_points): Fix logic.
+ (af_glyph_hints_align_strong_points): Do linear search for small
+ edge counts.
+ (af_glyph_hints_align_weak_points): Skip any touched neighbors.
+ (af_iup_shift): Handle zero `delta'.
+
+ * src/autofit/afhints.h: Updated.
+ (AF_SORT_SEGMENTS): New macro (disabled).
+ (AF_AxisHintsRec) [AF_SORT_SEGMENTS]: New member `mid_segments'.
+
+ * src/autofit/afglobal.c (af_face_globals_get_metrics): Add
+ argument to pass option flags for handling scripts.
+ * src/autofit/afglobal.h: Updated.
+
+ * src/autofit/afcjk.c: Updated.
+ * src/autofit/aflatin.c: Updated.
+ (af_latin_metrics_scale_dim): Don't reduce scale by 2%.
+
+ (af_latin_hints_compute_segments) [AF_HINT_METRICS]: Remove dead code.
+ (af_latin_hints_compute_edges) [AF_HINT_METRICS]: Remove dead code.
+ Don't set `edge->dir'
+ (af_latin_hint_edges): Add more logging.
+
+ * src/autofit/afloader.c: Updated.
+
+2007-06-11 Werner Lemberg <wl@gnu.org>
+
+ * docs/CHANGES: Document FT_Face_CheckTrueTypePatents.
+
+2007-06-10 David Turner <david@freetype.org>
+
+ * src/truetype/ttgload.c (TT_Load_Simple_Glyph): Slight speed-up to
+ the TrueType glyph loader.
+
+ * include/freetype/config/ftoption.h: Clarify documentation
+ regarding unpatented hinting.
+
+
+ Add new `FT_Face_CheckTrueTypePatents' API.
+
+ * include/freetype/freetype.h (FT_Face_CheckTrueTypePatents): New
+ declaration.
+
+ * include/freetype/internal/services/svttglyf.h,
+ src/base/ftpatent.c: New files.
+
+ * include/freetype/internal/ftserv.h (FT_SERVICE_TRUETYPE_GLYF_H):
+ New macro.
+
+ * src/truetype/ttdriver.c: Include FT_SERVICE_TRUETYPE_GLYF_H and
+ `ttpload.h'.
+ (tt_service_truetype_glyf): New service structure.
+ (tt_services): Register it.
+
+ * modules.cfg (BASE_EXTENSIONS), src/base/Jamfile (_sources): Add
+ `ftpatent.c'.
+
+2007-06-08 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/sfobjs.c (sfnt_load_face): Undo change from 2007-04-28.
+ Fonts without a cmap must be handled correctly by FreeType (anything
+ else would be a bug).
+
+
+ * src/psaux/t1decode.c (t1_decoder_parse_charstrings)
+ [FT_DEBUG_LEVEL_TRACE]: Improve tracing message.
+
+2007-06-07 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/ttsbit0.c (tt_sbit_decoder_init,
+ tt_sbit_decoder_load_image): Protect against integer overflows.
+
+
+ * src/pfr/pfrgload.c (pfr_glyph_load_simple): More bounding checks
+ for `x_control' and `y_control'.
+
+2007-06-06 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftoutln.c (FT_Outline_Decompose): Check `last'.
+
+
+ * src/pfr/pfrcmap.c (pfr_cmap_init): Convert assertion into normal
+ FreeType error.
+
+
+ * src/winfonts/winfnt.c (fnt_face_get_dll_font): Do a rough check of
+ `font_count'.
+
+
+ * src/type1/t1load.c (parse_font_matrix): Check `temp_scale'.
+
+
+ * src/cff/cffgload.c (cff_decoder_prepare): Change return type to
+ `FT_Error'.
+ Check `fd_index'.
+ (cff_slot_load): Updated.
+ * src/cff/cffgload.h: Updated.
+
+2007-06-05 Werner Lemberg <wl@gnu.org>
+
+ * src/pfr/pfrgload.c (pfr_glyph_done): Comment out unused code.
+ (pfr_glyph_load_simple): Convert assertion into normal FreeType
+ error.
+ Check `idx'.
+ (pfr_glyph_load_compound, pfr_glyph_curve_to, pfr_glyph_line_to):
+ Convert assertion into normal FreeType error.
+
+ * src/pfr/pfrtypes.h (PFR_GlyphRec): Comment out unused code.
+
+
+ * src/winfonts/winfnt.c (FNT_Face_Init): Check `family_size'.
+
+
+ * src/psaux/psobjs.c (ps_tocoordarray, ps_tofixedarray): Return -1
+ in case of parsing error.
+ (ps_parser_load_field): Updated.
+
+ * src/type1/t1load.c (parse_font_matrix): Updated.
+
+2007-06-04 Werner Lemberg <wl@gnu.org>
+
+ * src/cid/cidgload.c (cid_load_glyph): Check `fd_select'.
+
+ * src/tools/ftrandom/Makefile: Depend on `libfreetype.a'.
+
+2007-06-03 Werner Lemberg <wl@gnu.org>
+
+ * src/tools/ftrandom/*: Add the `ftrandom' test program written by
+ George Williams (with some modifications).
+
+2007-06-03 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftobjs.c (destroy_charmaps), src/type1/t1objs.c
+ (T1_Face_Done), src/winfonts/winfnt.c (FNT_Face_Done): Check for
+ face == NULL. Suggested by Graham Asher.
+
+2007-06-03 Ismail Dönmez <ismail@pardus.org.tr>
+
+ * src/base/ftobjs.c (FT_Request_Metrics): Fix compiler warning.
+
+2007-06-02 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/fterrdef.h (FT_Err_Corrupted_Font_Header,
+ FT_Err_Corrupted_Font_Glyphs): New error codes for BDF files.
+
+ * src/bdf/bdflib.c (bdf_load_font): Use them.
+
+ * src/bdf/bdflib.c (_bdf_parse_start): Check `FONT' better.
+
+2007-06-01 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftobjs.c (FT_Request_Metrics), src/cache/ftccmap.c
+ (FTC_CMapCache_Lookup): Remove unused code.
+
+2007-06-01 Sean McBride <sean@rogue-research.com>
+
+ * src/truetype/ttinterp.c (Null_Vector, NULL_Vector): Removed,
+ unused.
+
+2007-06-01 Werner Lemberg <wl@gnu.org>
+
+ * src/cid/cidparse.c (cid_parser_new): Don't continue second search
+ pass for `StartData' if an error has occurred.
+ Exit properly if no `StartData' has been seen at all.
+
+ * builds/unix/ftsystem.c (FT_Stream_Open): Don't use ULONG_MAX but
+ LONG_MAX to avoid compiler warning. Suggested by Sean McBride.
+
+2007-05-30 Werner Lemberg <wl@gnu.org>
+
+ * src/type1/t1load.c (parse_subrs, parse_charstrings): Protect
+ against too small binary data strings.
+
+ * src/bdf/bdflib.c (_bdf_parse_glyphs): Check `STARTCHAR' better.
+
+2007-05-28 David Turner <david@freetype.org>
+
+ * src/cff/cffgload.c (cff_slot_load): Do not apply the identity
+ transformation. This significantly reduces the loading time of CFF
+ glyphs.
+
+ * docs/CHANGES: Updated.
+
+ * src/autofit/afglobal.c (AF_SCRIPT_LIST_DEFAULT): Change default
+ hinting script to CJK, since it works well with more scripts than
+ latin. Thanks to Rahul Bhalerao <b.rahul.pm@gmail.com> for pointing
+ this out!
+
+2007-05-25 Werner Lemberg <wl@gnu.org>
+
+ * docs/CHANGES: Updated.
+
+2007-05-24 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttobjs.h (tt_size_ready_bytecode): Move declaration
+ into TT_USE_BYTECODE_INTERPRETER preprocessor block.
+
+2007-05-24 Graham Asher <graham.asher@btinternet.com>
+
+ * src/truetype/ttobjs.c (tt_size_ready_bytecode)
+ [!TT_USE_BYTECODE_INTERPRETER]: Removed. Unused.
+
+2007-05-22 David Turner <david@freetype.org>
+
+ * src/truetype/ttgload.c (load_truetype_glyph): Fix last change to
+ avoid crashes in case the bytecode interpreter is not used.
+
+
+ Avoid heap blowup with very large .Z font files. This fixes
+ Savannah bug #19910.
+
+ * src/lzw/ftzopen.h (FT_LzwStateRec): Remove `in_cursor',
+ `in_limit', `pad', `pad_bits', and `in_buff' members.
+ Add `buf_tab', `buf_offset', `buf_size', `buf_clear', and
+ `buf_total' members.
+
+ * src/lzw/ftzopen.c (ft_lzwstate_get_code): Rewritten. It now takes
+ only one argument.
+ (ft_lzwstate_refill, ft_lzwstate_reset, ft_lzwstate_io): Updated.
+
+2007-05-20 Ismail Dönmez <ismail@pardus.org.tr>
+
+ * src/pshinter/pshrec.c (ps_mask_table_set_bits): Add `const'.
+ (ps_dimension_set_mask_bits): Remove `const'.
+
+2007-05-19 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/ttmtx.c (tt_face_get_metrics)
+ [!FT_CONFIG_OPTION_OLD_INTERNALS]: Another type-punning fix.
+
+2007-05-19 Derek Clegg <dclegg@apple.com>
+
+ Savannah patch #5929.
+
+ * include/freetype/tttables.h, src/base/ftobjcs.c
+ (FT_Get_CMap_Format): New function.
+
+ * include/freetype/internal/services/svttcmap.c (TT_CMapInfo): Add
+ `format' member.
+ * src/sfnt/ttcmap.c (tt_cmap{0,2,4,6,8,10,12}_get_info): Set
+ cmap_info->format.
+
+2007-05-19 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttgload.c (load_truetype_glyph): Save graphics state
+ before handling subglyphs so that it can be reinitialized each time.
+ This fixes Savannah bug #19859.
+
+2007-05-16 Werner Lemberg <wl@gnu.org>
+
+ * src/cache/ftccache.c (ftc_node_mru_link, ftc_node_mru_unlink),
+ src/cache/ftccache.h (FTC_CACHE_LOOKUP_CMP), src/cache/ftcglyph.h
+ (FTC_GCACHE_LOOKUP_CMP), src/pshinter/pshmod.c (ps_hinter_init),
+ src/sfnt/ttmtx.c (tt_face_load_hmtx, tt_face_load_hhea,
+ tt_face_get_metrics): Fix type-punning issues.
+
+2007-05-15 David Turner <david@freetype.org>
+
+ * include/freetype/config/ftstdlib.h,
+ include/freetype/internal/ftobjs.h: As suggested by Graham Asher,
+ ensure that ft_isalnum, ft_isdigit, etc., use hard-coded values
+ instead on relying on the locale-dependent functions provided by
+ <ctypes.h>.
+
+2007-05-15 Graham Asher <graham.asher@btinternet.com>
+
+ * src/autofit/afcjk.c (af_cjk_hints_compute_edges): Remove unused
+ variable.
+ * src/autofit/afloader.c (af_loader_load_g): Ditto.
+
+ * src/base/ftobjs.c (ft_validator_error): Use `ft_jmp_buf'.
+ (open_face_from_buffer): Initialize `stream'.
+ (FT_Request_Metrics): Remove unused variable.
+ Remove redundant `break' statements.
+ (FT_Get_Track_Kerning): Remove unused variable.
+
+ * src/psaux/afmparse.c (afm_parse_track_kern, afm_parse_kern_pairs,
+ afm_parse_kern_data): Remove redundant
+ `break' statements.
+ (afm_parser_parse): Ditto.
+ Don't use uninitialized variables.
+
+ * src/psnames/psmodule.c (VARIANT_BIT): Define as unsigned long.
+ Use `|' operator instead of `^' to set it.
+ Update all users.
+
+ * src/sfnt/ttcmap.c (tt_face_build_cmaps): Use `ft_jmp_buf'.
+ * src/sfnt/ttkern.c (tt_face_load_kern): Remove unused variable.
+
+ * src/truetype/ttgload.c (TT_Load_Simple_Glyph): Remove redundant
+ comparison.
+ (TT_Process_Simple_Glyph): Use FT_UInt for `n_points' and `i'.
+ (TT_Load_Glyph): Remove unused variable.
+
+2007-05-13 Derek Clegg <dclegg@apple.com>
+
+ * src/base/ftobjs.c (FT_New_Library): Only allocate rendering pool
+ if FT_RENDER_POOL_SIZE is > 0. From Savannah patch #5928.
+
+2007-05-11 David Turner <david@freetype.org>
+
+ * src/cache/ftbasic.c, include/freetype/ftcache.h
+ (FTC_ImageCache_LookupScaler, FTC_SBit_Cache_LookupScaler): Two new
+ functions that allow us to look up glyphs using an FTC_Scaler object
+ to specify the size, making it possible to use fractional pixel
+ sizes.
+
+ * src/truetype/ttobjs.c (tt_size_ready_bytecode): Set
+ `size->cvt_ready'. Reported by Boris Letocha.
+
+2007-05-09 Graham Asher <graham.asher@btinternet.com>
+
+ * src/truetype/ttinterp.c (Ins_IP), src/autofit/aflatin.c
+ (af_latin_metrics_scale_dim): Fix compiler warnings.
+
+2007-05-06 Werner Lemberg <wl@gnu.org>
+
+ * builds/win32/visualce/freetype.sln: Removed, as requested by
+ Vincent.
+
+2007-05-04 Vincent RICHOMME <richom.v@free.fr>
+
+ * builds/win32/visualce/*: Add Visual C++ project files for Pocket
+ PC targets.
+
+ * docs/CHANGES: Document them.
+
+2007-05-04 <harry@kdevelop.org>
+
+ * builds/unix/ftsystem.c (FT_Stream_Open): Handle return value 0 of
+ mmap (which might happen on some RTOS). From Savannah patch #5909.
+
+2007-05-03 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftobjs.c (FT_Set_Char_Size): Simplify code.
+ * include/freetype/freetype.h (FT_Set_Char_Size): Update
+ documentation.
+
+2007-04-28 Victor Stinner <victor.stinner@inl.fr>
+
+ * src/sfnt/sfobjs.c (sfnt_load_face): Check error code after loading
+ `cmap'.
+
+2007-04-27 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttgload.c (TT_Load_Simple_Glyph): Check for negative
+ number of points in contours. Problem reported by Victor Stinner
+ <victor.stinner@haypocalc.com>.
+ (TT_Process_Simple_Glyph): Synchronize variable types.
+
+2007-04-26 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftglyph.c (FT_Glyph_Copy): Always set second argument to
+ zero in case of error. This fixes Savannah bug #19689.
+
+2007-04-25 Boris Letocha <b.letocha@cz.gmc.net>
+
+ * src/truetype/ttobjs.c: Fix a typo that created a speed regression
+ in the TrueType bytecode loader.
+
+2007-04-10 Martin Horak <horakm@centrum.cz>
+
+ * src/sfnt/sfobjs.c (sfnt_load_face) [FT_CONFIG_OPTION_INCREMENTAL]:
+ Ignore `hhea' table. This fixes Savannah bug #19261.
+
+2007-04-09 Werner Lemberg <wl@gnu.org>
+
+
+ * Version 2.3.4 released.
+ =========================
+
+
+ Tag sources with `VER-2-3-4'.
+
+ * docs/CHANGES, docs/VERSION.DLL: Update documentation and bump
+ version number to 2.3.4.
+
+ * README, Jamfile (RefDoc), builds/win32/visualc/index.html,
+ builds/win32/visualc/freetype.dsp,
+ builds/win32/visualc/freetype.vcproj: s/2.3.3/2.3.4/, s/233/234/.
+
+ * include/freetype/freetype.h (FREETYPE_PATCH): Set to 4.
+
+ * builds/unix/configure.raw (version_info): Set to 9:15:3.
+
+2007-04-09 Martin Horak <horakm@centrum.cz>
+
+ * src/truetype/ttgload.c (load_truetype_glyph): Save and restore
+ memory stream to avoid a crash with the incremental memory
+ interface (Savannah bug #19260).
+
+2007-04-06 David Turner <david@freetype.org>
+
+ * src/base/ftbimap.c (ft_bitmap_assure_buffer): Fix buffer-overwrite bug
+ (Savannah bug #19536).
+
+2007-04-04 Werner Lemberg <wl@gnu.org>
+
+
+ * Version 2.3.3 released.
+ =========================
+
+
+ Tag sources with `VER-2-3-3'.
+
+ * docs/CHANGES: Mention CVE-2007-1351.
+
+2007-04-03 David Turner <david@freetype.org>
+
+ * src/base/ftobjs.c (FT_Set_Char_Size): As suggested by James Cloos,
+ if one of the resolution values is 0, treat it as if it were the
+ same as the other value.
+
+2007-04-02 David Turner <david@freetype.org>
+
+ Add special code to detect `extra-light' fonts and do not snap their
+ stem widths too much to avoid bizarre hinting effects.
+
+ * src/autofit/aflatin.h (AF_LatinAxisRec): Add `standard_width' and
+ `extra_light' members.
+
+ * src/autofit/aflatin.c (af_latin_metrics_init_widths): Initialize
+ them.
+ (af_latin_metrics_scale_dim): Set `extra_light'.
+ (af_latin_compute_stem_width): Use `extra_light'.
+
+2007-03-28 David Turner <david@freetype.org>
+
+ * src/base/ftbitmap.c (ft_bitmap_assure_buffer): Fix zero-ing of the
+ padding.
+
+2007-03-28 Werner Lemberg <wl@gnu.org>
+
+ * src/bdf/bdflib.c (setsbit, sbitset): Handle values >= 128
+ gracefully.
+ (_bdf_set_default_spacing): Increase `name' buffer size to 256 and
+ issue an error for longer names. This fixes CVE-2007-1351.
+ (_bdf_parse_glyphs): Limit allowed number of glyphs in font to the
+ number of code points in Unicode.
+
+ * builds/win32/visualc/index.html,
+ builds/win32/visualc/freetype.dsp,
+ builds/win32/visualc/freetype.vcproj, README: s/2.3.2/2.3.3/,
+ s/232/233/.
+
+ * docs/CHANGES: Mention ftdiff.
+
+2007-03-26 David Turner <david@freetype.org>
+
+ * src/truetype/ttinterp.c [FIX_BYTECODE]: Remove it and
+ corresponding code.
+ (Ins_MD): Last regression fix.
+
+ * src/autofit/aflatin.c (af_latin_metrics_init_blues): Fix blues
+ computations in order to ignore single-point contours. These are
+ never rasterized and correspond in certain fonts to mark-attach
+ points that are very far from the glyph's real outline, ruining the
+ computation.
+
+ * src/autofit/afloader.c (af_loader_load_g): In the case of
+ monospaced fonts, always set `rsb_delta' and `lsb_delta' to 0.
+ Otherwise code that uses them will most certainly ruin the fixed
+ advance property.
+
+ * docs/CHANGES, docs/VERSION.DLL, README, Jamfile (RefDoc): Update
+ documentation and bump version number to 2.3.3.
+
+ * include/freetype/freetype.h (FREETYPE_PATCH): Set to 3.
+
+ * builds/unix/configure.raw (version_info): Set to 9:14:3.
+
+2007-03-26 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * builds/unix/ftconfig.in: Disable Carbon framework dependency on
+ 64bit ABI on Mac OS X 10.4.x (ppc & i386). Found by Sean McBride.
+ * builds/vms/ftconfig.h: Ditto.
+ * include/freetype/config/ftconfig.h: Ditto.
+
+2007-03-22 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * builds/unix/ftsystem.c (FT_Stream_Open): Temporary fix to prevent
+ 32bit unsigned long overflow by 64bit filesize on LP64 platform, as
+ proposed by Sean McBride:
+ http://lists.gnu.org/archive/html/freetype-devel/2007-03/msg00032.html
+
+2007-03-22 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * builds/unix/ftconfig.in: Suppress SGI compiler's warning against
+ setjmp, proposed by Sean McBride:
+ http://lists.gnu.org/archive/html/freetype-devel/2007-03/msg00032.html
+
+2007-03-19 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * builds/unix/configure.raw: Dequote `OS_INLINE' in comment of
+ conftest.c, to avoid unexpected shell evaluation. Possibly it is a
+ bug or undocumented behaviour of autoconf.
+
+2007-03-18 David Turner <david@freetype.org>
+
+ * src/truetype/ttinterp.c (Ins_MDRP): Another bytecode regression
+ fix; testing still needed.
+
+ * src/truetype/ttinterp.c (Ins_MD): Another bytecode regression fix.
+
+2007-03-17 David Turner <david@freetype.org>
+
+ * src/truetype/ttinterp.c (Ins_IP): Fix wrong handling of the
+ (undocumented) twilight zone special case.
+
+2007-03-09 Werner Lemberg <wl@gnu.org>
+
+
+ * Version 2.3.2 released.
+ =========================
+
+
+ Tag sources with `VER-2-3-2'.
+
+ * builds/win32/visualc/index.html,
+ builds/win32/visualc/freetype.dsp,
+ builds/win32/visualc/freetype.vcproj, README: s/2.3.1/2.3.2/,
+ s/231/232/.
+
+2007-03-08 David Turner <david@freetype.org>
+
+ * docs/CHANGES, docs/VERSION.DLL: Updated for upcoming release.
+
+ * builds/unix/configure.raw (version_info): Set to 9:13:3.
+
+ * include/freetype/freetype.h (FREETYPE_PATCH): Set to 2.
+
+ * README, Jamfile (RefDoc): s/2.3.1/2.3.2/.
+
+ * src/base/ftutil.c (ft_mem_strcpyn): Fix a bug that prevented the
+ function to work properly, over-writing user-provided buffers in
+ some cases. Reported by James Cloos <cloos@jhcloos.com>.
+
+
+2007-03-05 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/config/ftstdlib.h (ft_strstr): New wrapper
+ macro for `strstr'.
+
+ * src/truetype/ttobjs.c (tt_face_init): Use ft_strstr for scanning
+ `trick_names', as suggested by Ivan Nincic.
+
+2007-03-05 David Turner <david@freetype.org>
+
+ * src/base/ftinit.c (FT_Init_FreeType): Fix a small memory leak in
+ case FT_Init_FreeType fails for some reason. Problem reported by
+ Maximilian Schwerin <maximilian.schwerin@buelowssiege.de>.
+
+ * src/truetype/ttobs.c (tt_size_init_bytecode): Clear the `x_ppem'
+ and `y_ppem' fields of the `TT_Size.metrics' structure, not those of
+ `TT_Size.root.metrics'. Problem reported by Daniel Glöckner
+ <daniel-gl@gmx.net>.
+
+ * src/type1/t1afm.c (T1_Read_PFM): Read kerning values as 16-bit
+ signed values, not unsigned ones. Problem reported by Johannes
+ Walther <joh_walt@yahoo.de>.
+
+2007-02-21 David Turner <david@freetype.org>
+
+ * src/pshinter/pshalgo.c (psh_hint_align): Fix a bug in the hinting
+ of small and ghost stems in the Postscript interpreter.
+
+2007-02-20 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * src/base/ftmac.c (FT_GetFileRef_From_Mac_ATS_Name): Fix memory
+ leak, patch by "Jjgod Jiang" <gzjjgod@gmail.com>.
+ * builds/mac/ftmac.c (FT_GetFileRef_From_Mac_ATS_Name): Ditto.
+
+2007-02-16 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttinterp.c (Ins_MD): Remove unused variable.
+ * src/autofit/aflatin.c (af_latin_hints_link_segments): Ditto.
+
+2007-02-14 David Turner <david@freetype.org>
+
+ It seems that the following changes fix most of the known
+ interpreter problems with my fonts, but more testing is needed,
+ though.
+
+ * src/truetype/ttinterp.c (FIX_BYTECODE): Activate.
+ (TT_MulFix14): Rewrite.
+ (Ins_MD, Ins_MDRP, Ins_IP) [FIX_BYTECODE]: Improved and updated.
+ (Ins_MIRP): Ditto.
+
+2007-02-12 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttinterp.c (Project_x, Project_y): Remove compiler
+ warnings.
+
+ * src/pcf/pcfread.c (pcf_interpret_style), src/bdf/bdfdrivr.c
+ (bdf_interpret_style): Ditto.
+
+2007-02-12 David Turner <david@freetype.org>
+
+ Simplify projection and dual-projection code interface.
+
+ * src/truetype/ttinterp.h (TT_Project_Func): Use `FT_Pos', not
+ FT_Vector' as argument type.
+ * src/truetype/ttinterp.c (CUR_Func_project, CUR_Func_dualproj):
+ Updated.
+ (CUR_fast_project, CUR_fast_dualproj): New macros.
+ (Project, Dual_Project, Project_x, Project_y): Updated.
+ (Ins_GC, Ins_SCFS, Ins_MDAP, Ins_MIAP, Ins_IP): Use new `fast'
+ macros.
+
+
+ * src/autofit/afloader.c (af_loader_load_g): Improve spacing
+ adjustments for the non-light auto-hinted modes. Gets rid of
+ `inter-letter spacing is too wide' problems.
+
+ * src/autofit/aflatin.c (af_latin_hints_link_segments,
+ af_latin_hints_compute_edges): Slight optimization of the segment
+ linker and better handling of serif segments to get rid of broken
+ `9' in Arial at 9pt (96dpi).
+
+
+ Introduce new string functions and the corresponding macros to get
+ rid of various uses of strcpy and other `evil' functions, as well as
+ to simplify a few things.
+
+ * include/freetype/internal/ftmemory.h (ft_mem_strdup, ft_mem_dup,
+ ft_mem_strcpyn): New declarations.
+ (FT_MEM_STRDUP, FT_STRDUP, FT_MEM_DUP, FT_DUP, FT_STRCPYN): New
+ macros.
+ * src/base/ftutil.c (ft_mem_dup, ft_mem_strdup, ft_mem_strcpyn): New
+ functions.
+
+ * src/bfd/bfddrivr.c (bdf_interpret_style, BDF_Face_Init),
+ src/bdf/bdflib.c (_bdf_add_property), src/pcf/pcfread.c
+ (pcf_get_properties, pcf_interpret_style, pcf_load_font),
+ src/cff/cffdrivr.c (cff_get_glyph_name), src/cff/cffload.c
+ (cff_index_get_sid_string), src/cff/cffobjs.c (cff_strcpy),
+ src/sfnt/sfdriver.c (sfnt_get_glyph_name), src/type1/t1driver.c
+ (t1_get_glyph_name), src/type42/t42drivr.c (t42_get_glyph_name,
+ t42_get_name_index): Use new functions and simplify code.
+
+ * builds/mac/ftmac.c (FT_FSPathMakeSpec): Don't use FT_MIN.
+
+2007-02-11 Werner Lemberg <wl@gnu.org>
+
+ * src/autofit/afloader.c (af_loader_load_g): Don't change width for
+ non-spacing glyphs.
+
+2007-02-07 Tom Parker <palfrey@tevp.net>
+
+ * src/cff/cffdrivr.c (cff_get_name_index): Protect against NULL
+ pointer.
+
+2007-02-05 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * include/freetype/ftmac.h (FT_DEPRECATED_ATTRIBUTE):
+ Introduce __attribute((deprecated))__ to warn functions
+ which use non-ANSI data types in its interfaces.
+ (FT_GetFile_From_Mac_Name): Deprecated, using FSSpec.
+ (FT_GetFile_From_Mac_ATS_Name): Deprecated, using FSSpec.
+ (FT_New_Face_From_FSSpec): Deprecated, using FSSpec.
+ (FT_New_Face_From_FSRef): Deprecated, using FSRef.
+
+ * src/base/ftmac.c: Predefine FT_DEPRECATED_ATTRIBUTE as void
+ to avoid warning in building FreeType.
+ * builds/mac/ftmac.c: Ditto.
+
+2007-02-05 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * src/base/ftbase.c: Fix to use builds/mac/ftmac.c, if configured
+ `--with-fsspec' etc. Replace #include "ftmac.c" with
+ #include <ftmac.c>.
+
+2007-02-05 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * include/freetype/ftmac.h (FT_GetFilePath_From_Mac_ATS_Name):
+ Introduced as replacement of FT_GetFile_From_Mac_ATS_Name.
+ * src/base/ftmac.c (FT_GetFilePath_From_Mac_ATS_Name): Ditto.
+ (FT_GetFile_From_Mac_ATS_Name): Rewritten as wrapper of
+ FT_GetFilePath_From_Mac_ATS_Name.
+ * builds/mac/ftmac.c: Ditto.
+
+2007-02-05 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * include/freetype/ftmac.h: Fixed wrong comment: FSSpec of
+ FT_GetFile_From_Mac_Name, FT_GetFile_From_Mac_ATS_Name are
+ for passing to FT_New_Face_From_FSSpec.
+
+2007-02-05 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * builds/unix/configure.raw: Check whether Mac OS X system headers
+ can be built under ANSI C mode.
+
+ * src/base/ftmac.c (OS_INLINE): Redefine OS_INLINE by a version
+ compatible to ANSI C in case system headers are ANSI C incompatible.
+ * builds/mac/ftmac.c (OS_INLINE): Ditto.
+
+2007-02-01 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/ttnameid.h (TT_MS_LANGID_DZONGHKA_BHUTAN):
+ Explain why applications shouldn't use it. Found by Alexei.
+
+2007-02-01 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * builds/unix/freetype2.m4 (AC_CHECK_FT2): Fix spelling of warning
+ message.
+
+ * src/gxvalid/gxvmort1.c
+ (gxv_mort_subtable_type1_substTable_validate): Fix debugging
+ message.
+
+2007-01-31 Werner Lemberg <wl@gnu.org>
+
+
+ * Version 2.3.1 released.
+ =========================
+
+
+ Tag sources with `VER-2-3-1-FINAL'.
+
+ * builds/win32/visualc/freetype.dsp,
+ builds/win32/visualc/freetype.vcproj: s/230/231/.
+ * builds/win32/visualc/index.html: s/221/231/.
+
+ * vms_make.com: Add `ftgasp'.
+
+2007-01-30 David Turner <david@freetype.org>
+
+ Tag sources with VER-2-3-1 to prepare release.
+
+ * include/freetype/freetype.h (FREETYPE_PATCH): Set to 1.
+
+ * docs/VERSION.DLL, docs/release, README, Jamfile (RefDoc):
+ s/2.3.0/2.3.1/.
+
+ * builds/unix/configure.raw (version_info): Set to 9:12:3.
+
+
+ * src/autofit/aftypes.h (AF_USE_WARPER), src/autofit/afloader.c
+ (af_loader_load_g): Disable the warper (i.e., the light hinting
+ improvements) to make a 2.3.1 bugfix release before introducing a
+ new feature. This should give us more time to tune and improve the
+ warper for the next release.
+
+ * docs/CHANGES: Update accordingly.
+
+2007-01-25 David Turner <david@freetype.org>
+
+ For light auto-hinting, improve glyph advance widths and resurrect
+ normal/full hinting to its normal quality.
+
+ * src/autofit/afhints.h (AF_GlyphHintsRec): New members `xmin_delta'
+ and `xmax_delta'.
+ * src/autofit/afhints.c (af_glyph_hints_reload): Reset `xmin_delta'
+ and `xmax_delta'.
+
+ * src/autofit/afloader.c (af_loader_load_g) <AF_USE_WARPER>: Replace
+ preprocessor conditional with if-clause, handling both light and
+ normal mode.
+
+ * src/autofit/afwarp.c (AF_WarpScore): Fine-tune again.
+ (af_warper_compute): Handle `xmin_delta' and `xmax_delta'.
+
+2007-01-25 Werner Lemberg <wl@gnu.org>
+
+ * docs/release: Updated -- Savannah uses a new uploading scheme.
+
+2007-01-25 David Turner <david@freetype.org>
+
+ * src/cff/cffload.c (cff_index_get_pointers): Improve previous fix.
+
+ * src/cff/cffgload.c (cff_decoder_parse_charstrings)
+ <cff_op_callsubr, cff_op_callgsubr>: Fix sanity check for empty
+ functions.
+
+ * docs/CHANGES: Document light auto-hinting improvement.
+
+2007-01-25 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cffload.c (cff_index_get_pointers): Handle last entry
+ correctly in a sanity check. Since this function is only used to
+ load local and global functions, any charstring that called the last
+ local/global function would fail otherwise. This fixes Savannah bug
+ #18867.
+
+ * docs/CHANGES: Document it.
+
+2007-01-23 David Turner <david@freetype.org>
+
+ * src/truetype/ttobjs.c (tt_size_ready_bytecode): Fix typo that
+ prevented compilation when disabling both the unpatented and the
+ bytecode interpreter in the TrueType font driver.
+
+
+ Fix and enable the warper to improve `light' hinting mode. This is
+ not necessarily a final version, but it seems to work well.
+
+ * src/autofit/aflatin.c (af_latin_hints_init) [AF_USE_WARPER]:
+ Disable code.
+ (af_latin_hints_apply) [AF_USE_WARPER]: Handle FT_RENDER_MODE_LIGHT.
+ * src/autofit/aftypes.h: Activate AF_USE_WARPER.
+
+ * src/autofit/afwarp.c (AF_WarpScore): Tune table.
+ (af_warper_compute_line_best): Fix array size of `scores'.
+ (af_warper_compute): Better handling of border cases.
+ * src/autofit/afwarp.h (AF_WarperRec): Remove unused members `X1'
+ and `X2'.
+
+2007-01-21 Werner Lemberg <wl@gnu.org>
+
+ * ChangeLog: Split off older entries into...
+ * ChangeLog.22: This new file.
+
+2007-01-21 Werner Lemberg <wl@gnu.org>
+
+ * docs/CHANGES: Document SHZ fix.
+
+2007-01-21 George Williams <gww@silcom.com>
+
+ * src/truetype/ttinterp.c (Ins_SHZ): SHZ doesn't move phantom
+ points.
+
+2007-01-21 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/ttmtx.c (tt_face_get_metrics)
+ [!FT_CONFIG_OPTION_OLD_INTERNALS]: Fix limit check.
+
+2007-01-17 Werner Lemberg <wl@gnu.org>
+
+
+ * Version 2.3.0 released.
+ =========================
+
+
+ Tag sources with `VER-2-3-0-FINAL'.
+
+2007-01-17 Werner Lemberg <wl@gnu.org>
+
+ * docs/release: Updated.
+
+2007-01-16 David Turner <david@freetype.org>
+
+ * src/autofit/aflatin.c (af_latin_hints_compute_segments),
+ src/cff/cffdriver.c (cff_ps_get_font_info), src/truetype/ttobjs.c
+ (tt_face_init), src/truetype/ttinterp.c (Ins_SHC): Fix compiler
+ warnings.
+
+2007-01-15 Detlef Würkner <TetiSoft@apg.lahn.de>
+
+ * builds/amiga/makefile, builds/amiga/makefile.os4,
+ builds/amiga/smakefile: Add `ftgasp.c' and `ftlcdfil.c'.
+
+ * builds/amiga/include/freetype/config/ftconfig.h: Synchronize.
+
+2007-01-14 Detlef Würkner <TetiSoft@apg.lahn.de>
+
+ Fix various compiler warnings.
+
+ * src/truetype/ttdriver.c (tt_size_select), src/cff/cffobjs.h,
+ src/cff/cffobjs.c (cff_size_request), src/type42/t42objs.h:
+ s/index/strike_index/.
+ * src/base/ftobjs.c (FT_Match_Size): s/index/size_index/.
+
+ * src/gxvalid/gxvmorx5.c
+ (gxv_morx_subtable_type5_InsertList_validate): s/index/table_index/.
+
+ * src/truetype/ttinterp.c (Compute_Point_Displacement),
+ src/pcf/pcfread.c (pcf_seek_to_table_type): Avoid possibly
+ uninitialized variables.
+
+2007-01-13 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * docs/CHANGES, docs/INSTALL.MAC: Improvements.
+
+2007-01-13 Werner Lemberg <wl@gnu.org>
+
+ * src/type1/t1afm.c (T1_Read_Metrics): MS Windows allows PFM
+ versions up to 0x3FF without complaining.
+
+2007-01-13 Derek Clegg <dclegg@apple.com>
+
+ Add FT_Get_PS_Font_Info interface to CFF driver.
+
+ * src/cff/cfftypes.h: Include FT_TYPE1_TABLES_H.
+ (CFF_FontRec): Add `font_info' field.
+
+ * src/cff/cffload.c: Include FT_TYPE1_TABLES_H.
+ (cff_font_done): Free font->font_info if necessary.
+
+ * src/cff/cffdrvr.c (cff_ps_get_font_info): New function.
+ (cff_service_ps_info): Register cff_ps_get_font_info.
+
+2007-01-13 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftoutln.c (FT_Outline_Get_Orientation): Fix compilation
+ with C++ compiler.
+
+ * src/autofit/afhints.c (af_glyph_hints_dump_segments,
+ af_glyph_hints_dump_edges): Ditto.
+
+ * src/base/rules.mk (BASE_SRC): Remove ftgasp.c (it's already in
+ `modules.cfg').
+
+ * src/sfnt/ttsbit0.h: Remove.
+
+ * src/sfnt/rules.mk (SFNT_DRV_SRC): Don't include ttsbit0.c.
+
+2007-01-12 David Turner <david@freetype.org>
+
+ * src/base/ftbitmap.c (ft_bitmap_assure_buffer): Fix memory stomping
+ bug in the bitmap emboldener if the pitch of the source bitmap is
+ much larger than its width.
+
+ * src/truetype/ttinterp.c (Update_Max): Fix aliasing-related
+ compilation warning.
+
+2007-01-12 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/install-sh, builds/unix/mkinstalldirs: Updated from
+ `automake' CVS module from sources.redhat.com.
+
+2007-01-11 Werner Lemberg <wl@gnu.org>
+
+ * src/type1/t1load.c (is_space): Removed.
+ (parse_encoding, parse_charstrings): Use IS_PS_DELIM.
+ (parse_charstrings): Use IS_PS_TOKEN.
+
+
+ * autogen.sh: Avoid bash specific syntax.
+
+2007-01-11 David Turner <david@freetype.org>
+
+ * docs/CHANGES: Small update.
+
+ * builds/unix/configure.raw (version_info): Set to 9:11:3.
+
+ * src/base/ftobjs.c (IsMacResource): Fix a small bug that caused a
+ crash with some Mac OS X .dfont files. Submitted by Masatake
+ Yamato.
+
+ * autogen.sh: Small fix to get it working on Mac OS X properly:
+ The issue is that GNU libtool is called `glibtool' on this platform,
+ and we must call `glibtoolize', since `libtoolize' doesn't exist.
+
+2007-01-10 David Turner <david@freetype.org>
+
+ * all-sources: Tag all sources with VER-2-3-0-RC1 and
+ VER-2-3-0.
+
+ * Jamfile (RefDoc), README, builds/win32/visualc/freetype.dsp,
+ builds/win32/visualc/freetype.vcproj, docs/VERSION.DLL: Update
+ version number to 2.3.0.
+
+ * include/freetype/freetype.h (FREETYPE_MINOR): Set to 3.
+ (FREETYPE_PATCH): Set to 0.
+
+ * include/freetype/ftchapters.h, include/freetype/ftgasp.h,
+ include/freetype/ftlcdfil.h: Update reference documentation with
+ GASP support and LCD filtering sections.
+
+ * src/pshinter/pshalgo.c (psh_glyph_compute_inflections): Fix a typo
+ which created an endless loop with some malformed font files.
+
+2007-01-10 Derek Clegg <dclegg@apple.com>
+
+ * src/type1/t1load.c (T1_Get_MM_Var): Always return fixed point
+ values.
+
+2007-01-08 David Turner <david@freetype.org>
+
+ * docs/CHANGES: Updated.
+
+ * include/freetype/ftgasp.h, src/base/ftgasp.c: New files which add
+ a new API `FT_Get_Gasp' to return entries of the `gasp' table
+ corresponding to a given character pixel size.
+
+ * src/sfnt/ttload.c (tt_face_load_gasp): Add version check for the
+ `gasp' table, in order to avoid potential problems with later
+ versions.
+
+ * include/freetype/config/ftheader.h (FT_GASP_H): New macro for
+ <freetype/ftgasp.h>.
+
+ * src/base/rules.mk (BASE_SRC), src/base/Jamfile (_sources),
+ modules.cfg (BASE_EXTENSIONS), builds/win32/visualc/freetype.dsp,
+ builds/win32/visualc/freetype.vcproj: Add src/base/ftgasp.c to the
+ default build.
+
+2007-01-07 Werner Lemberg <wl@gnu.org>
+
+ * src/cid/cidparse.c (cid_parser_new): Improve error message for
+ Type 11 fonts.
+ Scan for `/sfnts' token.
+
+2007-01-07 Werner Lemberg <wl@gnu.org>
+
+ * src/cid/cidparse.c (cid_parser_new): Reject Type 11 fonts.
+
+2007-01-06 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cffload.c (cff_index_init): Remove unused variable.
+ (cff_index_read_offset): s/perror/errorp/ to avoid global shadowing.
+
+2007-01-04 David Turner <david@freetype.org>
+
+ * src/pfr/pfrobjs.c (pfr_face_init): Detect non-scalable fonts
+ correctly. This fixes Savannah bug #17876.
+
+
+ Do not allocate interpreter-specific tables in memory if we are not
+ going to load glyphs with the bytecode interpreter anyway.
+
+ * src/truetype/ttgload.c (tt_loader_init): Load execution context
+ only if glyph is hinted.
+ Updated.
+ * src/truetype/ttobjs.h (TT_SizeRec): Add members `bytecode_ready'
+ and `cvs_ready'.
+ Add `tt_size_ready_bytecode' declaration.
+ * src/truetype/ttobjs.c (tt_size_done_bytecode,
+ tt_size_init_bytecode, tt_size_ready_bytecode): New functions.
+ (tt_size_init): Move most code into `tt_size_init_bytecode'.
+ (tt_size_done): Move most code into `tt_size_done_bytecode'.
+ (tt_size_reset): Move some code to `tt_size_ready_bytecode'.
+
+
+ Don't extract the metrics table from the SFNT font file. Instead,
+ reparse it on each glyph load. The runtime difference is not
+ noticeable, and it can save a lot of heap memory when memory-mapped
+ files are not used.
+
+ * include/freetype/internal/tttypes.h (TT_FaceRec): Add members
+ `horz_metrics_offset' and `vert_metrics_ofset'.
+ * src/sfnt/ttmtx.c (tt_face_load_hmtx, tt_face_get_metrics):
+ Updated.
+
+
+ * src/sfnt/ttcmap.c (tt_cmap4_validate): Slight optimization.
+
+
+ Do not load the CFF index offsets into memory, since this wastes a
+ *lot* of heap memory with large Asian CFF fonts. There is no
+ significant performance loss.
+
+ * src/cff/cffload.h: Add `cff_charset_cid_to_gindex' declaration.
+ * src/cff/cfftypes.h (CFF_IndexRec): Add fields `start' and
+ `data_size'.
+ (CFF_CharsetRec): Add field `num_glyphs'.
+
+ * src/cff/cffload.c (cff_index_read_offset, cff_index_load_offsets,
+ cff_charset_cid_to_gindex): New functions.
+ (cff_new_index): Renamed to...
+ (cff_index_init): This. Update all callers.
+ Updated -- some code has been moved to `cff_index_load_offsets'.
+ (cff_done_index): Renamed to...
+ (cff_index_done): This. Update all callers.
+ (cff_index_get_pointers, cff_index_access_element): Updated to use
+ stream offsets.
+ (cff_charset_compute_cids): Set `num_glyphs' field.
+ (cff_encoding_load): Updated.
+
+ * src/cff/cffgload.c (cff_slot_load): Updated.
+
+2007-01-04 David Turner <david@freetype.org>
+
+ * docs/INSTALL.UNIX: Simplify some parts, add reference to
+ autogen.sh and pointer to README.CVS.
+
+ * README.CVS: Add common problem description and solution
+ when running autogen.sh.
+
+ * docs/INSTALL: Add reference to MacOS X.
+
+ * docs/MAKEPP, docs/INSTALL.MAC: New documentation files.
+
+ * docs/TODO: Remove obsolete items.
+
+ * src/raster/ftraster.c: (TRaster_Instance): Replace it with...
+ (TWorker): This.
+ Remove `count_table' and `memory'.
+ Make `grays' a pointer.
+ (TRaster): New structure.
+ (count_table): New static array.
+ (RAS_ARGS, RAS_ARG, RAS_VARS, RAS_VAR, FT_UNUSED_RASTER, cur_ras,
+ Vertical_Gray_Sweep_Step, ft_black_new, ft_black_done,
+ ft_black_set_mode, ft_black_render): Updated.
+ (ft_black_init): Don't initialize `count_table'.
+ (ft_black_reset): Use the render pool. This saves about 6KB of
+ heap space for each FT_Library instance.
+
+ * src/smooth/ftgrays.c (TRaster): Replaced with...
+ (TWorker): This.
+ Remove `memory'.
+ (TRaster): New structure.
+
+ (RAS_ARG_, RAS_ARG, RAS_VAR_, RAS_VAR, ras, gray_render_line,
+ gray_move_to, gray_line_to, gray_conic_to, gray_cubic_to,
+ gray_render_span, gray_raster_render): Updated.
+ (gray_raster_reset): Use the render pool. This saves about 6KB of
+ heap space for each FT_Library instance.
+
+ * src/sfnt/sfobjs.c, src/sfnt/ttkern.c, src/sfnt/ttkern.h,
+ src/sfnt/ttmtx.c, src/sfnt/ttsbit.c, src/sfnt/ttsbit.h,
+ src/truetype/ttpload.c, include/freetype/config/ftoption.h: Remove
+ FT_OPTIMIZE_MEMORY macro (and code for !FT_OPTIMIZE_MEMORY) since
+ the optimization is no longer experimental.
+
+ * src/pshinter/pshalgo.c (psh_glyph_interpolate_normal_points):
+ Remove a typo that results in no hinting and a memory leak with some
+ large Asian CFF fonts.
+
+ * src/base/ftobjs.c (FT_Done_Library): Remove a subtle memory leak
+ which happens when FT_Done_Library is called with still opened
+ CFF_Faces in it. We need to close all faces before destroying the
+ modules, or else some bad things (memory leaks) may happen.
+
+2007-01-02 Werner Lemberg <wl@gnu.org>
+
+ * src/gxvalid/gxvkern.c (gxv_kern_subtable_fmt0_pairs_validate):
+ Remove compiler warning.
+
+2007-01-02 David Turner <david@freetype.org>
+
+ * src/sfnt/sfobjs.c: Add documentation comment.
+
+2006-12-31 Masatake YAMATO <jet@gyve.org>
+
+ * src/gxvalid/gxvkern.c (gxv_kern_subtable_fmt0_pairs_validate): New
+ function.
+ Check uniqueness of the gid pairs.
+ (gxv_kern_subtable_fmt0_validate): Move some code to
+ `gxv_kern_subtable_fmt0_pairs_validate'.
+
+2006-12-22 David Turner <david@freetype.org>
+
+ * src/autofit/aflatin.c, src/truetype/ttgload.c: Remove compiler
+ warnings.
+
+ * builds/win32/visualc/freetype.vcproj: Add _CRT_SECURE_NO_DEPRECATE
+ to avoid deprecation warnings with Visual C++ 8.
+
+2006-12-16 Anders Kaseorg <anders@kaseorg.com>
+
+ * src/base/ftlcdfil.c (FT_Library_SetLcdFilter)
+ [FT_FORCE_LIGHT_LCD_FILTER]: Fix typo.
+
+2006-12-15 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * include/freetype/internal/services/svotval.h: Add `volatile' to
+ sync with the modification by Jens Claudius on 2006-08-22; cf.
+ http://cvs.savannah.gnu.org/viewcvs/freetype/freetype2/src/otvalid/otvmod.c?r1=1.4&r2=1.5
+
+2006-12-15 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * src/base/ftmac.c: Specialized for Mac OS X only.
+ * builds/unix/ftconfig.in: Fixed for ppc64 missing Carbon framework.
+ * builds/unix/configure.raw: Ditto. When explicit switches for
+ FSSpec/FSRef/QuickDraw/ATS availability are given to configure,
+ builds/mac/ftmac.c is used instead of default src/base/ftmac.c.
+
+2006-12-15 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * builds/mac/ftmac.c: Copied src/base/ftmac.c for legacy system.
+ * builds/mac/FreeType.m68k_cfm.make.txt: Fix to use builds/mac/ftmac.c
+ instead of src/base/ftmac.c
+ * builds/mac/FreeType.ppc_carbon.make.txt: Ditto.
+ * builds/mac/FreeType.ppc_classic.make.txt: Ditto.
+ * builds/mac/FreeType.m68k_far.make.txt: Ditto, and exclude gxvalid.c
+ that cannot be built at present.
+
+2006-12-15 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * src/base/ftobjs.c: Improvement of resource fork handler for
+ POSIX, cf.
+ http://lists.gnu.org/archive/html/freetype-devel/2006-10/msg00025.html
+ (Mac_Read_sfnt_Resource): Count only `sfnt' resource of suitcase font
+ format or .dfont, to simulate the face index number counted by ftmac.c.
+ (IsMacResource): Return the number of scalable faces correctly.
+
+2006-12-10 Werner Lemberg <wl@gnu.org>
+
+ * builds/toplevel.mk (version): Protect against `distclean' target.
+
+2006-12-09 Werner Lemberg <wl@gnu.org>
+
+ * builds/*/*def.mk, builds/*/detect.mk (CAT): Define to either `cat'
+ or `type'.
+
+ * builds/freetype.mk (version): Extracted from freetype.h, using
+ GNU make's built-in string functions.
+ (refdoc): Use $(version) instead of static version number.
+
+2006-12-08 Werner Lemberg <wl@gnu.org>
+
+ * builds/toplevel.mk (dist): Extract version number from freetype.h.
+
+2006-12-08 Vladimir Volovich <vvv@vsu.ru>
+
+ * src/tools/apinames (State): Remove final comma in structure -- xlc
+ v5 under AIX 4.3 doesn't like this.
+
+2006-12-07 David Turner <david@freetype.org>
+
+ * src/autofit/afloader.c (af_loader_load_g): Small adjustment
+ to the spacing of auto-fitted glyphs. This only impacts rare
+ cases (e.g., Arial Bold at rather small character sizes).
+
+2006-12-03 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/rules.mk (SFNT_DRV_SRC): Add ttsbit0.c.
+
+2006-12-01 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/sfobjs.c (tt_face_get_name): All Unicode strings are
+ encoded in UTF-16BE. Patch from Rajeev Pahuja <rpahuja@esri.com>.
+ (tt_name_entry_ascii_from_ucs4): Removed.
+
+
+ * include/freetype/ftxf86.h: Fix and extend comment so that it
+ appears in the documentation.
+
+ * include/freetype/ftchapters.h: Add `font_format' section.
+
+
+ * src/tools/docmaker/tohtml.py (HtmlFormatter::index_exit): Add link
+ to TOC in index page.
+
+2006-11-28 David Turner <david@freetype.org>
+
+ * src/smooth/ftgrays.c (gray_raster_render): Return 0 when we are
+ trying to render into a zero-width/height bitmap, not an error code.
+
+ * src/truetype/ttobjs.c (tt_face_init): Fix typo in previous patch.
+
+ * src/smooth/ftgrays.c: Remove hard-coded error values; use FreeType
+ ones instead.
+
+ * src/autofit/afhints.c (af_glyph_hints_dump_segments): Remove unused
+ variable.
+
+2006-11-26 Pierre Hanser <hanser@club-internet.fr>
+
+ * src/truetype/ttobjs.c (tt_face_init): Protect against NULL pointer.
+
+2006-11-25 David Turner <david@freetype.org>
+
+ * src/autofit/afhints.c (af_glyph_hints_dump_points,
+ af_glyph_hints_dump_segments, af_glyph_hints_dumpedges) [!AF_DEBUG]:
+ Add stubs to link the `ftgrid' test program when debugging is
+ disabled in the auto-hinter.
+
+2006-11-23 David Turner <david@freetype.org>
+
+ * src/autofit/afhints.c, src/autofit/afhints.h, src/autofit/aflatin.c,
+ src/autofit/aftypes.h: Miscellaneous auto-hinter improvements.
+
+ * src/autofit/afhints.c (af_glyph_hints_dump_segments) [AF_DEBUG]:
+ Emit more sensible information.
+
+ * src/autofit/afhints.h (AF_SegmentRec): Add `height' member.
+
+ * src/autofit/aflatin.c (af_latin_metrics_scale_dim): Improve
+ rounding of blue values.
+ (af_latin_hints_compute_segments): Hint segment heights.
+ (af_latin_hints_link_segments): Reduce `len_score' value.
+ (af_latin_hints_compute_edges): Increase `segment_length_threshold'
+ value and use `height' member for comparisons.
+ (af_latin_hint_edges): Extend logging message.
+ Improve handling of remaining edges.
+
+2006-11-22 Werner Lemberg <wl@gnu.org>
+
+ Fix Savannah bug #15553.
+
+ * src/truetype/ttgload.c (tt_loader_init): Re-execute the CVT
+ program after a change from mono to grayscaling (and vice versa).
+ Use correct constant for comparison to get `exec->grayscale'.
+
+2006-11-18 Werner Lemberg <wl@gnu.org>
+
+ Because FT_Load_Glyph expects CID values for CID-keyed fonts, the
+ test for a valid glyph index must be deferred to the font drivers.
+ This patch fixes Savannah bug #18301.
+
+ * src/base/ftobjs.c (FT_Load_Glyph): Don't check `glyph_index'.
+ * src/bdf/bdfdrivr.c (BDF_Glyph_Load), src/cff/cffgload.c
+ (cff_slot_load), src/cid/cidgload.c (cid_slot_load_glyph),
+ src/pcf/pcfdrivr.c (PCF_Glyph_Load), src/pfr/pfrobjs.c
+ (pfr_slot_load), src/truetype/ttdriver.c (Load_Glyph),
+ src/type1/t1gload.c (T1_Load_Glyph), src/winfonts/winfnt.c
+ (FNT_Load_Glyph): Check validity of `glyph_index'.
+
+2006-11-13 David Turner <david@freetype.org>
+
+ * src/truetype/ttinterp.c (FIX_BYTECODE): Undefine. The interpreter
+ `enhancements' are still too buggy for general use.
+
+ * src/base/ftlcdfil.c: Add support for FT_FORCE_LIGHT_LCD_FILTER and
+ FT_FORCE_LEGACY_LCD_FILTER at compile time. Define these macros
+ when building the library to change the default LCD filter to be
+ used. This is only useful for experimentation.
+
+ * include/freetype/ftlcdfil.h: Update documentation.
+
+2006-11-10 David Turner <david@freetype.org>
+
+ * src/smooth/ftsmooth.c: API change for the LCD
+ filter. The FT_LcdFilter value is an enumeration describing which
+ filter to apply, with new values FT_LCD_FILTER_LIGHT and
+ FT_LCD_FILTER_LEGACY (the latter implements the LibXft original
+ algorithm which produces strong color fringes for everything
+ except very-well hinted text).
+
+ * include/freetype/ftlcdfil.h (FT_Library_SetLcdFilter): Change
+ second parameter to an enum type.
+
+ * src/base/ftlcdfil.c (USE_LEGACY): Define.
+ (_ft_lcd_filter): Rename to...
+ (_ft_lcd_filter_fir): This.
+ Update parameters.
+ (_ft_lcd_filter_legacy) [USE_LEGACY]: New filter function.
+ (FT_Library_Set_LcdFilter): Update parameters.
+ Handle new filter modes.
+
+ * include/internal/ftobjs.h: Include FT_LCD_FILTER_H.
+ (FT_Bitmap_LcdFilterFunc): Change third argument to `FT_Library'.
+ (FT_LibraryRec) [FT_CONFIG_OPTION_SUBPIXEL_RENDERING]: Add filtering
+ callback and update other fields.
+
+ * src/smooth/ftsmooth.c (ft_smooth_render_generic)
+ [FT_CONFIG_OPTION_SUBPIXEL_RENDERING]: Update.
+ Other minor improvements.
+
+ * src/autofit/aflatin.c: Various tiny improvements that drastically
+ improve the handling of serif fonts and of LCD/LCD_V hinting modes.
+ (af_latin_hints_compute_edges): Fix typo.
+ (af_latin_compute_stem_width): Take better care of diagonal stems.
+
+2006-11-09 David Turner <david@freetype.org>
+
+ * src/pshinter/pshalgo.c (psh_glyph_compute_inflections): Fix
+ typo which created a variable-used-before-initialized bug.
+
+2006-11-07 Zhe Su <james.su@gmail.com>
+
+ * src/base/ftsynth.c (FT_GlyphSlot_Embolden): Handle vertical layout
+ also.
+
+2006-11-03 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftcalc.c: Don't use `long long' but `FT_Int64'.
+
+2006-11-02 David Turner <david@freetype.org>
+
+ Add a few tweaks to better handle serif fonts.
+ Add more debugging messages.
+
+ * src/autofit/aflatin.c (af_latin_hints_compute_edges): Ignore
+ segments that are less than 1.5 pixels high. This gets rid of
+ *many* corner cases with serifs.
+ (af_latin_align_linked_edge): Add logging message.
+ (af_latin_hint_edges): Use AF_HINTS_DO_BLUES.
+ Add logging messages.
+ Handle AF_EDGE_FLAG flag specially.
+
+ * src/autofit/afmodule.c [AF_DEBUG]: Add _af_debug,
+ _af_debug_disable_blue_hints, and _af_debug_hints variables.
+
+ * src/autofit/aftypes.h (AF_LOG) [AF_DEBUG]: Use _af_debug.
+ Update external declarations.
+ (af_corner_orientation, af_corner_is_flat): Replaced by...
+
+ * include/freetype/internal/ftcalc.h (ft_corner_orientation,
+ ft_corner_is_flat): These declarations.
+
+ * src/autofit/afangles.c (af_corner_orientation, af_corner_is_flat):
+ Comment out. Replaced by...
+
+ * src/base/ftcalc.h (ft_corner_orientation, ft_corner_is_flat):
+ These functions. Update all callers.
+ (FT_Add64) [!FT_LONG64]: Simplify.
+
+ * src/autofit/afhints.c: Include FT_INTERNAL_CALC_H.
+ (af_direction_compute): Add a missing FT_ABS call. This bug caused
+ production of garbage by missing lots of segments.
+
+ * src/autofit/afhints.h (AF_HINTS_DO_BLUES): New macro.
+
+ * src/autofit/afloader.c (af_loader_init, af_loader_done)
+ [AF_DEBUG]: Set _af_debug_hints.
+
+
+ * src/pshinter/pshalgo.c: Include FT_INTERNAL_CALC_H.
+ (psh_corner_is_flat, psh_corner_orientation): Use ft_corner_is_flat
+ and ft_corner_orientation.
+
+
+ * src/gzip/inftrees.c (huft_build): Remove compiler warning.
+
+2006-10-24 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cffload.c (cff_encoding_load): Remove unused variable.
+
+ * src/base/ftobjs.c (FT_Select_Charmap): Disallow FT_ENCODING_NONE
+ as argument.
+
+2006-10-23 Zhe Su <zsu@novell.com>
+
+ * src/base/ftoutln.c (FT_Outline_Get_Orientation): Re-implement to
+ better deal with broken Asian fonts with strange glyphs, having
+ self-intersections and other peculiarities. The used algorithm is
+ based on the nonzero winding rule.
+
+2006-10-23 David Turner <david@freetype.org>
+
+ Speed up the CFF font loader. With some large CFF fonts,
+ FT_Open_Face is now more than three times faster.
+
+ * src/cff/cffload.c (cff_get_offset): Removed.
+ (cff_new_index): Inline functionality of `cff_get_offset'.
+ (cff_charset_compute_cids, cff_charset_free_cids): New functions.
+ (cff_charset_done): Call `cff_charset_free_cids'.
+ (cff_charset_load): Call `cff_charset_compute_cids'.
+ (cff_encoding_load) <Populate>: Ditto, to replace inefficient loop.
+
+ * src/sfnt/ttmtx.c (tt_face_load_hmtx): Replace calls to FT_GET_XXX
+ with FT_NEXT_XXX.
+
+
+ Speed up the Postscript hinter, with more than 100% speed increase
+ on my machine.
+
+ * src/pshinter/pshalgo.c (psh_corner_is_flat,
+ psh_corner_orientation): New functions.
+ (psh_glyph_compute_inflections): Merge loops for efficiency.
+ Use `psh_corner_orientation'.
+ (psh_glyph_init): Use `psh_corner_is_flat'.
+ (psh_hint_table_find_strong_point): Renamed to...
+ (psh_hint_table_find_strong_points): This.
+ Rewrite, adding argument to handle all points at once.
+ Update all callers.
+ (PSH_MAX_STRONG_INTERNAL): New macro.
+ (psh_glyph_interpolate_normal_points): Rewrite for efficiency.
+
+2006-10-15 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * src/base/ftmac.c (FT_New_Face_From_FOND): Initialize variable
+ `error' with FT_Err_Ok.
+
+2006-10-14 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * docs/INSTALL.CROSS: New document file for cross-building.
+
+ * builds/unix/configure.raw: Preliminary cross-building support.
+ Find native C compiler and pass it by CC_BUILD, and
+ find suffix for native executable and pass it by EXEEXT_BUILD.
+ Also suffix for target executable is passed by EXEEXT.
+
+ * builds/unix/unix-cc.in (CCraw_build, E_BUILD): New variables to
+ build `apinames' which runs on building system. They are set by
+ CC_BUILD and EXEEXT_BUILD.
+
+ * builds/exports.mk (APINAMES_EXE): Change the extension for
+ apinames from the suffix for target (E) to that for building host
+ (E_BUILD).
+
+2006-10-12 Werner Lemberg <wl@gnu.org>
+
+ * docs/INSTALL.UNX, docs/UPGRADE.UNX: Renamed to...
+ * docs/INSTALL.UNIX, docs/UPGRADE.UNIX: This. Update all documents
+ which reference those files.
+
+2006-10-12 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * builds/unix/configure.raw (FT2_EXTRA_LIBS): New variable. It is
+ embedded in freetype2.pc and freetype-config. Use it to record
+ Carbon dependency of MacOSX.
+
+ * builds/unix/freetype2.in: Embed FT2_EXTRA_LIBS.
+
+ * builds/unix/freetype-config.in: Ditto.
+
+2006-10-11 Werner Lemberg <wl@gnu.org>
+
+ * devel/ftoption.h (FT_CONFIG_OPTION_SUBPIXEL_RENDERING): Define for
+ development.
+
+2006-10-03 Jens Claudius <jens.claudius@yahoo.com>
+
+ * include/freetype/config/ftstdlib.h: Cast away volatileness from
+ argument to ft_setjmp.
+
+ * include/freetype/internal/ftvalid.h: Add comment that
+ ft_validator_run must not be used.
+
+2006-10-01 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftbase.c: Undo change from 2006-09-30.
+
+ * src/base/rules.mk (BASE_SRC): Remove `ftlcdfil.c'.
+
+2006-09-30 David Turner <david@freetype.org>
+
+ * include/freetype/internal/ftobjs.h (FT_Face_InternalRec):
+ s/unpatented_hinting/ignore_unpatented_hinter/.
+ Update all callers.
+
+ * src/base/ftobjs.c (FT_Load_Glyph): Refine the algorithm whether
+ auto-hinting shall be used or not.
+
+ * src/truetype/ttobjs.c (tt_face_init): Ditto.
+
+2006-09-30 Werner Lemberg <wl@gnu.org>
+
+ * src/base/rules.mk (BASE_SRC): Remove `ftapi.c' (which is no longer
+ in use).
+
+ * src/base/ftbase.c: Include `ftlcdfil.c'.
+
+2006-09-29 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/ttcmap.c (tt_cmap4_char_map_binary): Fix algorithm for
+ overlapping segments. Bug reported by Stefan Koch.
+
+2006-09-28 David Turner <david@freetype.org>
+
+ Fix a bug in the automatic unpatented hinting support which prevents
+ normal bytecode hinting to work properly.
+
+ * include/freetype/internal/ftobjs.h (FT_Face_InternalRec):
+ s/force_autohint/unpatented_hinting/. Update all callers.
+
+ * src/base/ftobjs.c (FT_Load_Glyph): Updated code.
+
+ * src/autofit/aftypes.h (AF_DEBUG): Undefine to get rid of traces.
+
+2006-09-27 David Turner <david@freetype.org>
+
+ * include/freetype/freetype.h (FT_FREETYPE_PATCH): Set to 2.
+
+
+ Add a new API to support color filtering of subpixel glyph bitmaps.
+ In a default build, the function `FT_Library_SetLcdFilter' returns
+ `FT_Err_Unimplemented_Feature'; you need to #define
+ FT_CONFIG_OPTION_SUBPIXEL_RENDERING in ftoption.h to compile the
+ real implementation.
+
+ * include/freetype/ftlcdfil.h, src/base/ftlcdfil.c: New files.
+
+ * include/freetype/internal/ftobjs.h (FT_Bitmap_LcdFilterFunc): New
+ typedef.
+ (FT_LibraryRec) [FT_CONFIG_OPTION_SUBPIXEL_RENDERING]: New members
+ `lcd_filter_weights' and `lcd_filter'.
+
+ * src/smooth/ftsmooth.c (ft_smooth_render_generic): Remove arguments
+ `hmul' and `vmul'.
+
+ Handle subpixel rendering.
+ Simplify function.
+ (ft_smooth_render_lcd): Use `FT_RENDER_MODE_LCD'.
+ (ft_smooth_render_lcd_v): Use `FT_RENDER_MODE_LCD_V'.
+
+ * include/freetype/config/ftheader.h (FT_LCD_FILTER_H): New macro,
+ pointing to <freetype/ftlcdfil.h>.
+
+ * src/base/Jamfile (_sources), src/base/rules.mk (BASE_SRC),
+ vms_make.com: Add `ftlcdfil.c' to the list of compiled source files.
+
+ * modules.cfg (BASE_EXTENSIONS): Add ftlcdfil.c.
+
+2006-09-26 David Bustin
+
+ * src/pfr/pfrobjs.c (pfr_face_get_kerning): Skip adjustment bytes
+ correctly. Reported as Savannah bug #17843.
+
+2006-09-26 David Turner <david@freetype.org>
+
+ * src/autofit/afhints.h (AF_HINTS_DO_HORIZONTAL,
+ AF_HINTS_DO_VERTICAL, AF_HINTS_DO_ADVANCE): New macros to disable
+ horizontal and vertical hinting for the purpose of debugging the
+ auto-fitter.
+
+ * src/autofit/afmodule.c (_af_debug_disable_horz_hints,
+ _af_debug_disable_vert_hints) [AF_DEBUG]: New global variables.
+
+ * src/autofit/aftypes.h [AF_DEBUG]: Declare above variables.
+
+ * include/freetype/config/ftoption.h, devel/ftoption.h
+ (FT_CONFIG_OPTION_SUBPIXEL_RENDERING): New macro to control whether
+ we want to compile LCD-optimized rendering code (à la ClearType) or
+ not. The macro *must* be disabled in default builds of the library
+ for patent reasons.
+
+ * src/smooth/ftsmooth.c (ft_smooth_render_generic): Disable
+ LCD-specific rendering when FT_CONFIG_OPTION_SUBPIXEL_RENDERING
+ isn't defined at compile time. This only changes the content of the
+ rendered glyph to match the one of normal gray-level rendering,
+ hence clients should not need to be modified.
+
+ * docs/CHANGES: Updated.
+
+2006-09-18 Garrick Meeker <garrick@digitalanarchy.com>
+
+ * src/base/ftmac.c (FT_New_Face_From_FOND): Fall back to SFNT if
+ LWFN fails and both are available.
+
+2006-09-11 David Turner <david@freetype.org>
+
+ * src/sfnt/sfobjs.c (tt_face_get_name): Support some fonts which
+ report their English names through an Apple Roman
+ (platform,encoding) pair, with language_id != English.
+
+ If the font uses another name entry with language_id == English, it
+ will be selected correctly, though.
+
+ * src/truetype/ttobjs.c (tt_face_init): Add unpatented hinting
+ selection for `mingli.ttf'.
+
+2006-09-05 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttpload.c (tt_face_load_hdmx): Handle `record_size'
+ values which have the upper two bytes set to 0xFF instead of 0x00
+ (as it happens in at least two CJKV fonts, `HAN NOM A.ttf' and
+ `HAN NOM B.ttf').
+
+ * src/smooth/ftgrays.c [GRAYS_USE_GAMMA]: Really remove all code.
+
+2006-09-05 David Turner <david@freetype.org>
+
+ Minor source cleanups and optimizations.
+
+ * src/smooth/ftgrays.c (GRAYS_COMPACT): Removed.
+ (TRaster): Remove `count_ex' and `count_ey'.
+ (gray_find_cell): Remove 2nd and 3rd argument.
+ (gray_alloc_cell): Merged with `gray_find_cell'.
+ (gray_record_cell): Simplify.
+ (gray_set_cell): Rewrite.
+ (gray_start_cell): Apply offsets to `ras.ex' and `ras.ey'.
+ (gray_render_span): Don't use FT_MEM_SET for small values.
+ (gray_dump_cells) [DEBUG_GRAYS]: New function.
+ (gray_sweep): Avoid buffer overwrites when to drawing the end of a
+ bitmap scanline.
+ (gray_convert_glyph): Fix speed-up.
+
+2006-09-04 David Turner <david@freetype.org>
+
+ * src/smooth/ftgrays.c (gray_convert_glyphs): Make it work with
+ 64bit processors.
+
+2006-09-03 Werner Lemberg <wl@gnu.org>
+
+ * devel/ftoption.h: Synchronize with
+ include/freetype/config/ftoption.h.
+
+ * src/smooth/ftgrays.c (gray_record_cell): Remove shadowing
+ variable declaration.
+ (gray_convert_glyph): Fix compiler warnings.
+
+2006-09-01 David Turner <david@freetype.org>
+
+ * src/truetype/ttobjs.c (tt_face_init): Update the TrueType loader
+ to recognize a few fonts that require the automatic unpatented
+ loader.
+
+ * src/smooth/ftgrays.c: Optmize the performance of the anti-aliased
+ rasterizer. The speed improvement is between 15% and 25%, depending
+ on the font data.
+
+ (GRAYS_USE_GAMMA, GRAYS_COMPACT): Removed, and all associated code.
+ (TCell): Redefine.
+ (TRaster): New members `buffer', `buffer_size', `ycells', `ycount'.
+ (gray_init_cells): Updated.
+ (gray_find_cell, gray_alloc_cell): New functions.
+ (gray_record_cell): Rewritten to use `gray_find_cell' and
+ `gray_alloc_cell'.
+ (PACK, LESS_THAN, SWAP_CELLS, DEBUG_SORT, QUICK_SORT, SHELL_SORT,
+ QSORT_THRESHOLD):
+ Removed.
+ (gray_shell_sort, gray_quick_sort, gray_check_sort,
+ gray_dump_cells): Removed.
+ (gray_sweep): Rewritten.
+ (gray_convert_glyph): Rewrite code which used one of the sorting
+ functions.
+ (gray_raster_render): Updated.
+
+2006-08-29 Dr. Werner Fink <werner@suse.de>
+
+ * configure: Make it possible to handle configure options which
+ have strings containing spaces.
+
+2006-08-27 David Turner <david@freetype.org>
+
+ * include/freetype/config/ftoption.h (TT_USE_BYTECODE_INTERPRETER):
+ New macro, defined if either TT_CONFIG_OPTION_BYTECODE_INTERPRETER
+ or TT_CONFIG_OPTION_UNPATENTED_HINTING is defined.
+
+ * include/freetype/internal/ftcalc.h, src/base/ftcalc.c,
+ src/truetype/truetype.c, src/truetype/ttdriver.c,
+ src/truetype/ttgload.c, src/truetype/ttgload.h,
+ src/truetype/ttinterp.c, src/truetype/ttobjs.c,
+ src/truetype/ttobjs.h, src/truetype/ttpload.c, src/type42/t42drivr.c:
+ s/TT_CONFIG_OPTION_BYTECODE_INTERPRETER/TT_USE_BYTECODE_INTERPRETER/.
+
+ * include/freetype/internal/ftobjs.h (FT_Face_InternalRec): New
+ member `force_autohint'.
+
+ * src/base/ftobjs.c (FT_Load_Glyph): Use `force_autohint'.
+
+ * src/truetype/ttobjs.c (tt_face_init): Prepare code for testing
+ against a list of font names which need the bytecode interpreter.
+
+2006-08-27 Jens Claudius <jens.claudius@yahoo.com>
+
+ Fix miscellaneous compiler warnings.
+
+ * include/freetype/internal/ftobjs.h: Close comment with `*/' to
+ avoid `/* in comment' compiler warning.
+
+ * src/base/ftdbgmem.c (ft_mem_table_get_source): Turn cast
+ `(FT_UInt32)(void*)' into `(FT_UInt32)(FT_PtrDist)(void*)' since on
+ 64-bit platforms void* is larger than FT_UInt32.
+
+ * src/base/ftobjs.c (t_validator_error): Cast away
+ volatileness of argument to ft_longjmp. Spotted by Werner
+ `Putzfrau' Lemberg.
+
+ * src/bdf/bdflib.c (bdf_load_font): Initialize local
+ variable `lineno'.
+
+ * src/gxvalid/gxvmod.c (classic_kern_validate): Mark local variable
+ `error' as volatile.
+
+2006-08-27 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/ftconfig.in: Synchronize with main ftconfig.h.
+ Reported by Jens.
+
+2006-08-22 Jens Claudius <jens.claudius@yahoo.com>
+
+ Fix for previous commit, which caused many compiler warnings/errors
+ about addresses of volatile objects passed as function arguments as
+ non-volatile pointers.
+
+ * include/freetype/internal/ftvalid.h: Make FT_Validator typedef a
+ pointer to a volatile object.
+
+ * src/gxvalid/gxvmod.c (gxv_load_table): Make function argument
+ `table' a pointer to a volatile object.
+
+ * src/otvalid/otvmod.c (otv_load_table): Make function argument
+ `table' a pointer to a volatile object.
+
+2006-08-18 Jens Claudius <jens.claudius@yahoo.com>
+
+ * src/gxvalid/gxvmod.c (GXV_TABLE_DECL): Mark local variable `_sfnt'
+ as volatile since it must keep its value across a call to ft_setjmp.
+ (gxv_validate): Same for local variables `memory' and `valid'.
+ (classic_kern_validate): Same for local variables `memory',
+ `ckern', and `valid'.
+
+ * src/otvalid/otvmod.c (otv_validate): Same for function parameter
+ `face' and local variables `base', `gdef', `gpos', `gsub', `jstf',
+ and 'valid'.
+
+ * src/sfnt/ttcmap.c (tt_face_build_cmaps): Same for local variable
+ `cmap'.
+
+2006-08-16 David Turner <david@freetype.org>
+
+ * src/cid/cidgload.c (cid_slot_load_glyph): Remove compiler
+ warnings.
+
+ * src/base/ftobjs.c (ft_validator_run): Disable function; it is
+ buggy by design. Always return -1.
+
+
+ Improvements to native TrueType hinting. This is a first try,
+ controlled by the FIX_BYTECODE macro in src/truetype/ttinterp.c.
+
+ * include/freetype/internal/ftgloadr.h (FT_GlyphLoadRec): Add member
+ `extra_points2'.
+
+ * include/freetype/internal/tttypes.h (TT_GlyphZoneRec): Add member
+ `orus'.
+
+ * src/base/ftgloadr.c (FT_GlyphLoader_Reset,
+ FT_GlyphLoader_Adjust_Points, FT_GlyphLoader_CreateExtra,
+ FT_GlyphLoader_CheckPoints, FT_GlyphLoader_CopyPoints): Updated to
+ handle `extra_points2'.
+
+ * src/truetype/ttgload.c (tt_prepare_zone): Handle `orus'.
+ Remove compiler warning.
+ (cur_to_arg): Remove macro.
+ (TT_Hint_Glyph): Updated.
+ (TT_Process_Simple_Glyph): Handle `orus'.
+
+ * src/truetype/ttinterp.c (FIX_BYTECODE): New macro.
+ (Ins_MD, Ins_MDRP, Ins_IP) [FIX_BYTECODE]: Handle `orus'.
+ (LOC_Ins_IUP): Renamed to...
+ (IUP_WorkerRec): This.
+ Add `orus' member.
+ (Shift): Renamed to...
+ (_iup_worker_shift): This.
+ Updated.
+ (Interp): Renamed to...
+ (_iup_worker_interpolate): This.
+ Updated to handle `orus'.
+ (Ins_IUP): Updated.
+
+ * src/truetype/ttobjs.c (tt_glyphzone_done, tt_glyphzone_new):
+ Handle `orus'.
+
+2006-08-15 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * modules.cfg (BASE_EXTENSIONS): Compile in ftgxval.c by default to
+ build ftvalid in ft2demos. This has been inadvertedly changed
+ 2006-08-13.
+
+2006-08-15 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ `ft_validator_run' wrapping `setjmp' can cause a crash, as found by
+ Jens:
+ http://lists.nongnu.org/archive/html/freetype-devel/2006-08/msg00004.htm.
+
+ * src/otvalid/otvmod.c: Replace `ft_validator_run' by `ft_setjmp'.
+ It reverts the change introduced on 2005-08-20.
+
+ * src/gxvalid/gxvmod.c: Ditto.
+
+2006-08-13 Jens Claudius <jens.claudius@yahoo.com>
+
+ * finclude/freetype/internal/psaux.h: (T1_TokenType): Add
+ T1_TOKEN_TYPE_KEY.
+ (T1_FieldRec): Add `dict'.
+ (T1_FIELD_DICT_FONTDICT, T1_FIELD_DICT_PRIVATE): New macros.
+ (T1_NEW_XXX, T1_FIELD_XXX): Update to take the dictionary where a PS
+ keyword is expected as an additional argument.
+
+ * src/cid/cidload.c: (cid_field_records): Adjust invocations of
+ T1_FIELD_XXX.
+
+ * src/cid/cidtoken.h: Adjust invocations of T1_FIELD_XXX.
+
+ * src/psaux/psobjs.c: Add macro FT_COMPONENT for tracing.
+ (ps_parser_to_token): Report a PostScript key as T1_TOKEN_TYPE_KEY,
+ not T1_TOKEN_TYPE_ANY.
+ (ps_parser_load_field): Make sure a token that should be a string or
+ name is really a string or name.
+ Avoid memory leak if a keyword has been already encountered and its
+ value is overwritten.
+ * src/type1/t1load.c: (t1_keywords): Adjust invocations of
+ T1_FIELD_XXX.
+ (parse_dict): Ignore keywords that occur in the wrong dictionary
+ (e.g., in `Private' instead of `FontDict').
+
+ * src/type1/t1tokens.h: Adjust invocations of T1_FIELD_XXX.
+
+ * src/type42/t42parse.c: (t42_keywords): Adjust invocations of
+ T1_FIELD_XXX.
+
+2006-07-18 Jens Claudius <jens.claudius@yahoo.com>
+
+ Move creation of field `buildchar' of T1_DecoderRec out of
+ `t1_decoder_init' and let the caller of `t1_decoder_init' take care
+ of it.
+
+ Call the finisher for T1_Decoder in `cid_face_compute_max_advance'
+ and `T1_Compute_Max_Advance'.
+
+ * include/freetype/internal/psaux.h (T1_DecoderRec): Remove field
+ `face', add `len_buildchar'.
+
+ * include/freetype/internal/t1types.h (T1_FaceRec): Add field
+ `buildchar'.
+
+ * src/cid/cidgload.c (cid_face_compute_max_advance): Call finisher
+ for T1_Decoder.
+ (cid_slot_load_glyph): Do not ignore failure when initializing the
+ T1_Decoder.
+
+ * src/psaux/t1decode.c (t1_decoder_parse_charstrings): Updated.
+ (t1_decoder_init): Remove initialization of fields `buildchar' and
+ `len_buildchar'.
+ (t1_decoder_done): Remove deallocation of field `buildchar'.
+
+ * freetype/src/type1/t1gload.c (T1_Compute_Max_Advance): Initialize
+ T1_Decoder's `buildchar' and `len_buildchar'; call finisher for
+ T1_Decoder.
+ (T1_Load_Glyph): Initialize T1_Decoder's `buildchar' and
+ `len_buildchar'; make sure to call finisher for T1_Decoder even in
+ case of error.
+
+ * src/type1/t1load.c (T1_Open_Face): Allocate new field `buildchar'
+ of T1_FaceRec.
+
+ * src/type1/t1objs.c (T1_Face_Done): Free new field `buildchar' of
+ T1_FaceRec.
+
+2006-07-14 Jens Claudius <jens.claudius@yahoo.com>
+
+ * include/freetype/internal/psaux.h: New macros IS_PS_NEWLINE,
+ IS_PS_SPACE, IS_PS_SPECIAL, IS_PS_DELIM, IS_PS_DIGIT, IS_PS_XDIGIT,
+ and IS_PS_BASE85 (from src/psaux/psconv.h).
+ (T1_FieldLocation): Add T1_FIELD_LOCATION_LOADER,
+ T1_FIELD_LOCATION_FACE, and T1_FIELD_LOCATION_BLEND.
+ (T1_DecoderRec): New fields `buildchar' and `face'.
+ (IS_PS_TOKEN): New macro.
+
+ * include/freetype/internal/t1types.h (T1_FaceRec): New fields
+ `ndv_idx', `cdv_idx', and `len_buildchar'.
+
+ * include/freetype/t1tables.h (PS_BlendRec): New fields
+ `default_design_vector' and `num_default_design_vector'.
+
+ * src/psaux/psconv.h: Move macros IS_PS_NEWLINE, IS_PS_SPACE,
+ IS_PS_SPECIAL, IS_PS_DELIM, IS_PS_DIGIT, IS_PS_XDIGIT, and
+ IS_PS_BASE85 to include/freetype/internal/psaux.h.
+
+ * src/psaux/psobjs.c (ps_parser_to_token_array): Allow `token'
+ argument to be NULL if we want only to count the number of tokens.
+ (ps_tocoordarray): Allow `coords' argument to be NULL if we just
+ want to skip the array.
+ (ps_tofixedarray): Allow `values' argument to be NULL if we just
+ want to skip the array.
+
+ * src/psaux/t1decode.c (t1_decoder_parse_charstrings): Add support
+ for (partially commented out) othersubrs 19-25, 27, and 28.
+ (t1_decoder_init): Initialize new fields `face' and `buildchar'.
+ (t1_decoder_done): Release new field `buildchar'.
+
+ * src/type1/t1load.c (parse_buildchar, parse_private): New
+ functions.
+ (t1_keywords): Register them.
+ (t1_allocate_blend): Updated.
+ (t1_load_keyword): Handle field types T1_FIELD_LOCATION_LOADER,
+ T1_FIELD_LOCATION_FACE and T1_FIELD_LOCATION_BLEND.
+ (parse_dict): Remove `keyword_flags' argument.
+ Use new macro IS_PS_TOKEN.
+ Changed function so that later PostScript definitions override
+ earlier ones.
+ (t1_init_loader): Initialize new field `keywords_encountered'.
+ (T1_Open_Face): Initialize new fields `ndv_idx', `cdv_idx', and
+ `len_buildchar'.
+ Remove `keywords_flags'.
+
+ * src/type1/t1load.h (T1_LoaderRect): New field
+ `keywords_encountered'.
+ (T1_PRIVATE, T1_FONTDIR_AFTER_PRIVATE): New macros.
+
+ * src/type1/t1tokens.h [!T1_CONFIG_OPTION_NO_MM_SUPPORT]: New
+ entries for parsing /NDV, /CDV, and /DesignVector.
+
+2006-07-07 Werner Lemberg <wl@gnu.org>
+
+ Add many checks to protect against malformed PCF files.
+
+ * src/pcf/pcfdrivr.c (PCF_Face_Done): Protect against NULL pointers.
+ (PCF_Face_Init): Add calls to PCF_Face_Done in case of errors.
+
+ * src/pcf/pcfread.c (pcf_read_TOC): Protect against malformed table
+ data and check that tables don't overlap (using a simple
+ bubblesort).
+ (PCF_METRIC_SIZE, PCF_COMPRESSED_METRIC_SIZE, PCF_PROPERTY_SIZE):
+ New macros which give the size of data structures in the data
+ stream.
+ (pcf_get_properties): Use rough estimates to get array size limits.
+ Assign `face->nprops' and `face->properties' earlier so that a call
+ to PCF_Face_Done can do the clean-up in case of error.
+ Protect against invalid string offsets.
+ (pcf_get_metrics): Clean up code.
+ Adjust tracing message levels.
+ Use rough estimate to get array size limit.
+ (pcf_get_bitmaps): Clean up code.
+ Adjust tracing message levels.
+ Use rough estimates to get offset limits.
+ (pcf_get_encodings): Adjust tracing message level.
+ (pcf_get_accel): Clean up code.
+
+2006-06-26 Werner Lemberg <wl@gnu.org>
+
+ * src/bdf/bdfdrivr.c (BDF_Face_Init): Handle fonts correctly which
+ don't have a POINT_SIZE property. This fixes Savannah bug #16914.
+
+2006-06-26 Jens Claudius <jens.claudius@yahoo.com>
+
+ * src/psaux/t1decode.c (T1_Operator, t1_args_count): Add opcode 15.
+ (t1_decoder_parse_charstrings): Operator with
+ opcode 15 pops its two arguments.
+ Handle the case where the pops of an othersubr may be part of a
+ subroutine.
+ Handle unknown othersubrs gracefully: count their operands and let
+ the following pop operators push the operands as the results onto
+ the Type1 stack.
+ Improve handling of setcurrentpoint opcode.
+
+2006-06-25 Jens Claudius <jens.claudius@yahoo.com>
+
+ The Type 1 parser now skips over top-level procedures as required
+ for a `Simplified Parser'. This makes the parser more robust as it
+ doesn't poke around in PostScript code. Additionally, it makes the
+ FontDirectory hackery in src/type1/t1load.c unnecessary.
+
+ * src/psaux/psobjs.c (IS_OCTAL_DIGIT): New macro.
+ (skip_literal_string): Add FT_Error as return value.
+ Handle escapes better.
+ (skip_string): Add FT_Error as return value.
+ Don't set `parser->error' but return error code directly.
+ (skip_procedure): New function.
+ (ps_parser_skip_PS_token): Handle procedures.
+ Update code.
+ (ps_parser_to_token): Update code.
+ (ps_parser_load_field_table): Handle bbox entries also.
+
+ * src/type1/t1load.c (parse_dict): Remove FontDirectory hackery.
+ Add commented-out code for synthetic fonts.
+
+2006-06-24 Eugeniy Meshcheryakov <eugen@univ.kiev.ua>
+
+ Fix two hinting bugs as reported in
+ http://lists.nongnu.org/archive/html/freetype-devel/2006-06/msg00057.html.
+
+ * include/freetype/internal/tttypes.h (TT_GlyphZoneRec): Add
+ `first_point' member.
+
+ * src/truetype/ttgload.c (tt_prepare_zone): Initialize
+ `first_point'.
+ (TT_Process_Composite_Glyph): Always untouch points.
+
+ * src/truetype/ttinterp.c (Ins_SHC): Fix computation of
+ `first_point' and `last_point' in case of composite glyphs.
+ (Ins_IUP): Fix computation of `end_point'.
+
+2006-06-22 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ Insert EndianS16_BtoN and EndianS32_BtoN as workaround for Intel
+ Mac. The original patch was written by David Sachitano and Lawrence
+ Coopet, and modified by Sean McBride for MPW compatibility. Only
+ required data are converted; unused data are left in big endian.
+
+ * src/base/ftmac.c: Include <Endian.h> for byteorder macros for non
+ Mac OS X platforms.
+ (OS_INLINE): Undefine before definition.
+ (count_faces_sfnt): Insert EndianS16_BtoN to parse the header of
+ FontAssociation table in FOND resource.
+ (count_faces_scalable): Insert EndianS16_BtoN to parse the header
+ and fontSize at each entry of FontAssociation table in FOND
+ resource.
+ (parse_fond): Insert EndianS16_BtoN and EndianS32_BtoN to parse
+ ffStylOff of FamilyRecord header of FOND resource, the header,
+ fontSize, fontID at each entry of FontAssociation table, and
+ StyleMapping table.
+ (count_faces): Call `HUnlock' after all FOND utilization.
+
+2006-06-08 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ Public API of TrueTypeGX, OpenType, and classic kern table validator
+ should return `FT_Err_Unimplemented_Feature' if validation service
+ is unavailable (disabled in `modules.cfg'). It is originally
+ suggested by David Turner, cf.
+ http://lists.gnu.org/archive/html/freetype-devel/2005-11/msg00078.html
+
+ * src/base/ftgxval.c (FT_TrueTypeGX_Validate): Return
+ FT_Err_Unimplemented_Feature if TrueTypeGX validation service is
+ unavailable.
+ (FT_ClassicKern_Validate): Return FT_Err_Unimplemented_Feature if
+ classic kern table validation service is unavailable.
+
+ * src/base/ftotval.c (FT_OpenType_Validate): Return
+ FT_Err_Unimplemented_Feature if OpenType validation service is
+ unavailable.
+
+2006-06-08 Werner Lemberg <wl@gnu.org>
+
+ * src/bdf/bdflib.c (bdf_load_font): Fix memory leaks in case of
+ errors.
+
+2006-06-07 David Turner <david@freetype.org>
+
+ * src/type1/t1afm.c (KERN_INDEX): Make it more robust.
+ (T1_Read_Metrics): Fix memory leak which happened when the metrics
+ file doesn't have kerning pairs. This fixes Savannah bug #16768.
+
+2006-06-06 David Turner <david@freetype.org>
+
+ Fix memory leak described in Savannah bug #16759.
+
+ We change `ps_unicodes_init' so that it also takes a
+ `free_glyph_name' callback to release the glyph names returned by
+ `get_glyph_name'
+
+ * include/freetype/internal/services/svpscmap.h (PS_Glyph_NameFunc):
+ Renamed to ...
+ (PS_GetGlyphNameFunc): This.
+ (PS_FreeGlyphNameFunc): New typedef.
+ (PS_Unicodes_InitFunc): Add variable for PS_FreeGlyphNameFunc.
+
+ * src/cff/cffcmap.c (cff_sid_to_glyph_name): Use `TT_Face' for first
+ argument.
+ (cff_sid_free_glyph_name): New function.
+ (cff_cmap_unicode_init): Updated.
+
+ * src/psaux/t1cmap.c (t1_cmap_unicode_init): Updated.
+
+ * src/psnames/psmodule.c (ps_unicodes_init): Add variable for
+ PS_FreeGlyphNameFunc and use it.
+
+
+2006-06-04 David Turner <david@freetype.org>
+
+ * src/base/ftutil.c (ft_mem_qrealloc): Fix the function to accept
+ `item_size == 0' as well -- though this sounds weird, it can
+ theoretically happen. This fixes Savannah bug #16669.
+
+ * src/pfr/pfrobjs.c (pfr_face_init): Fix the computation
+ of `face->num_glyphs' which missed the last glyph, due to
+ the offset-by-1 computation, since the PFR format doesn't
+ guarantee that glyph index 0 corresponds to the `missing
+ glyph. This fixes Savannah bug #16668.
+
+2006-05-25 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/unix-cc.in (LINK_LIBRARY): Don't comment out
+ `-no-undefined'. Reported by Christian Biesinger.
+
+2006-05-19 Brian Weed <bw@imaginengine.com>
+
+ * builds/win32/visualc/freetype.dsp: Release libraries no longer
+ have debug information, and debug libraries use `C7 compatible'
+ debug info.
+
+2006-05-19 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ Apply patch by Derek Clegg to fix two memory leaks in the MacOS
+ resource fork handler. This fixes Savannah bug #16631.
+
+ * src/base/ftobjs.c (load_face_in_embedded_rfork): Replace
+ `FT_Stream_Close' by `FT_Stream_Free' to fix memory leak.
+
+ * src/base/ftrfrk.c (raccess_guess_linux_double_from_file_name):
+ Replace `FT_Stream_Close' by `FT_Stream_Free' to fix memory leak.
+
+2006-05-19 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * build/unix/configure.raw: Add a fallback to disable Carbon
+ dependency, if configured with no options on Mac OS X.
+
+2006-05-19 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * src/base/ftmac.c (open_face_from_buffer): Deallocate stream when
+ its content cannot be parsed as supported font. This fixes
+ the second part of Savannah bug #16590.
+
+2006-05-18 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttgload.c (TT_Load_Composite_Glyph)
+ [FT_CONFIG_OPTION_BYTECODE_INTERPRETER]: Make it compilable again.
+
+2006-05-17 David Turner <david@freetype.org>
+
+ This is a major patch used to drastically improve the performance of
+ loading glyphs. This both speeds up loading the glyph vectors
+ themselves and the auto-fitter module.
+
+ We now use inline assembler code with GCC to implement `FT_MulFix',
+ which is probably the most important function related to the
+ engine's performance.
+
+ The resulting speed-up is about 25%.
+
+
+ * include/freetype/internal/tttypes.h (TT_LoaderRec): Add fields
+ `cursor' and `limit'.
+
+ * src/autofit/afangles.c (af_corner_is_flat, af_corner_orientation):
+ New functions.
+ (AF_ATAN_BITS, af_arctan, af_angle_atan): Comment out.
+ [TEST]: Remove.
+
+ * src/autofit/afcjk.c (AF_Script_UniRangeRec): Comment out test
+ code.
+
+ * src/autofit/afhints.c (af_axis_hints_new_segment): Don't call
+ `FT_ZERO'
+ (af_direction_compute, af_glyph_hints_compute_inflections): Rewritten.
+ (af_glyph_hints_reload: Rewrite recognition of weak points.
+
+ * src/autofit/aflatin.c (af_latin_hints_compute_segments): Move
+ constant values out of the loops.
+
+ * src/autofit/aftypes.h: Updated.
+
+ * src/base/ftcalc.c (FT_MulFix): Use inline assembler code.
+
+ * src/base/ftoutln.c (FT_Outline_Get_Orientation): Use vector
+ product to get orientation.
+
+ * src/gzip/ftgzip.c (ft_get_uncompressed_size): New function.
+ (FT_Stream_OpenGzip): Use it to handle small files directly in
+ memory.
+
+ * src/psaux/psconv.c (PS_Conv_ASCIIHexDecode, PS_ConvEexecDecode):
+ Improve performance.
+
+ * src/truetype/ttgload.c (TT_Access_Glyph_Frame): Set `cursor' and
+ `limit'.
+
+ (TT_Load_Glyph_Header, TT_Load_Simple_Glyph,
+ TT_Load_Composite_Glyph): Updated. Add threshold to protect against
+ exceedingly large values of number of contours. Speed up by
+ reducing the number of loops.
+
+ * src/type1/t1gload.c (T1_Load_Glyph): Don't apply unit matrix.
+
+
+ * src/cache/ftccmap.c (FTC_CMapCache_Lookup): Change the threshold
+ used to detect rogue clients from 4 to 16. This is to prevent some
+ segmentation faults with fonts like `KozMinProVI-Regular.otf' which
+ comes from the Japanese Adobe Reader Asian Font pack.
+
+2007-05-17 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cffload.c (cff_font_done): Deallocate subfont array. This
+ fixes the first part of Savannah bug #16590.
+
+2006-05-16 Werner Lemberg <wl@gnu.org>
+
+ * docs/PROBLEMS: Updated icl issues.
+
+----------------------------------------------------------------------------
+
+Copyright 2006, 2007, 2008 by
+David Turner, Robert Wilhelm, and Werner Lemberg.
+
+This file is part of the FreeType project, and may only be used, modified,
+and distributed under the terms of the FreeType project license,
+LICENSE.TXT. By continuing to use, modify, or distribute this file you
+indicate that you have read the license and understand and accept it
+fully.
+
+
+Local Variables:
+version-control: never
+coding: utf-8
+End:
diff --git a/src/3rdparty/freetype/ChangeLog.20 b/src/3rdparty/freetype/ChangeLog.20
new file mode 100644
index 0000000..8fcc5e7
--- /dev/null
+++ b/src/3rdparty/freetype/ChangeLog.20
@@ -0,0 +1,2613 @@
+2002-02-09 Werner Lemberg <wl@gnu.org>
+
+ * README: Fix typo.
+ * docs/CHANGES: Minor fixes.
+
+
+ * Version 2.0.8 released.
+ =========================
+
+
+2002-02-08 David Turner <david@freetype.org>
+
+ * docs/CHANGES: Updating for 2.0.8.
+
+ * include/freetype/freetype.h: Setting `PATCH_LEVEL' to 8 and
+ removing `FT_Get_Next_Char' from the API (temporarily).
+
+ * include/freetype/freetype.h: Adding comments to FT_Get_Next_Char;
+ note that this function might temporarily be removed for the 2.0.8
+ release.
+
+2002-02-07 David Turner <david@freetype.org>
+
+ * src/pcf/pcfread.c (pcf_load_font): Removed immature support of
+ the AVERAGE_WIDTH property.
+
+2002-02-06 David Turner <david@freetype.org>
+
+ * src/sfnt/sfobjs.c (SFNT_Load_Face): Since many fonts embedded in
+ PDF documents do not include 'cmap', 'post' and 'name' tables, the
+ SFNT face loader has been changed to not immediately report an
+ error if these are not present.
+
+ Note that the specification _requires_ these tables, but Adobe
+ seems to ignore it completely.
+
+ * src/sfnt/ttcmap.c: Removing compiler warnings.
+
+ * src/pcf/pcfread.c (pcf_read_TOC): Use FT_UInt.
+ (pcf_parse_metric, pcf_parse_compressed_metric): Removed. Code
+ is now in ...
+ (pcf_get_metric): Here.
+ (pcfSeekToType): Renamed to ...
+ (pcf_seek_to_table_type): This.
+ Use FT_Int.
+ (pcfHasType): Renamed to ...
+ (pcf_has_table_type): This.
+ Use FT_Int.
+ (find_property): Renamed to ...
+ (pcf_find_property): This.
+ Use FT_Int.
+ (pcf_get_bitmaps, pcf_get_encodings): Handle invalid PCF fonts
+ better (delaying format checks out of FT_Access_Frame ..
+ FT_Forget_Frame blocks to avoid leaving the stream in an incorrect
+ state when encountering an invalid PCF font).
+
+ * src/pcf/pcfdriver.c (PCF_Done_Face): Renamed to ...
+ (PCF_Face_Done): This.
+ (PCF_Init_Face): Renamed to ...
+ (PCF_Face_Init): This.
+ (PCF_Get_Char_Index): Renamed to ...
+ (PCF_Char_Get_Index): This.
+ (PCF_Get_Next_Char): Renamed to ...
+ (PCF_Char_Get_Next): This.
+ (pcf_driver_class): Updated.
+
+ * src/pcf/pcf.h (PCF_Done_Face): Removed.
+
+2002-02-06 Detlef Würkner <TetiSoft@apg.lahn.de>
+
+ * src/pcf/pcfdriver.c (FT_Done_Face): Fixed small memory leak.
+
+ * src/pcf/pcfread.c (pcf_load_font): Now handles the `AVERAGE_WIDTH'
+ property to return correct character pixel (width/height) pairs for
+ embedded bitmaps.
+
+2002-02-04 Keith Packard <keithp@keithp.com>
+
+ Adding the function `FT_Get_Next_Char', doing the obvious thing
+ w.r.t. the selected charmap.
+
+ * include/freetype/freetype.h: Add prototype.
+ * include/freetype/internal/ftdriver.h: Add `FTDriver_getNextChar'
+ typedef.
+ (FT_Driver_Class): Use it.
+ * include/freetype/internal/psnames.h: Add `PS_Next_Unicode_Func'
+ typedef.
+ (PSNames_Interface): Use it.
+ * include/freetype/internal/tttypes.h: Add `TT_CharNext_Func'
+ typedef.
+ (TT_CMapTable): Use it.
+
+ * src/base/ftobjs.c (FT_Get_Next_Char): New function, implementing
+ high-level API.
+ * src/cff/cffdrivr.c (cff_get_next_char): New function.
+ (cff_driver_class): Add it.
+ * src/cid/cidriver.c (Cid_Get_Next_Char): New function.
+ (t1cid_driver_class): Add it.
+ * src/pcf/pcfdriver.c (PCF_Get_Next_Char): New function.
+ (pcf_driver_class): Add it.
+ * src/psnames/psmodule.c (PS_Next_Unicode): New function.
+ (psnames_interface): Add it.
+ * src/sfnt/ttcmap.c (code_to_next0, code_to_next2, code_to_next4,
+ code_to_next6, code_to_next_8_12, code_to_next_10): New auxiliary
+ functions.
+ (TT_CharMap_Load): Use them.
+ * src/truetype/ttdriver.c (Get_Next_Char): New function.
+ (tt_driver_class): Add it.
+ * src/type1/t1driver.c (Get_Next_Char): New function.
+ (t1_driver_class): Add it.
+ * src/winfonts/winfnt.c (FNT_Get_Next_Char): New function.
+ (winfnt_driver_class): Add it.
+
+ * src/pcf/pcfread.c (pcf_load_font): For now, report Unicode for
+ Unicode and Latin 1 encodings.
+
+2002-02-02 Keith Packard <keithp@keithp.com>
+
+ * builds/unix/freetype-config.in: Add missing `fi'.
+
+
+ * Version 2.0.7 released.
+ =========================
+
+
+2002-02-01 David Turner <david@freetype.org>
+
+ * include/freetype/freetype.h: Increasing FREETYPE_PATCH to 7
+ for the new release.
+
+2002-01-31 David Turner <david@freetype.org>
+
+ * README, README.UNX, docs/CHANGES: Updating documentation for the
+ 2.0.7 release.
+
+2002-01-30 David Turner <david@freetype.org>
+
+ * INSTALL: Moved to ...
+ * docs/INSTALL: Here to avoid conflicts with the `install' script on
+ Windows, where the filesystem doesn't preserve case.
+
+2002-01-29 David Turner <david@freetype.org>
+
+ * configure: Fixed the script. It previously didn't accept more
+ than one argument correctly. For example, when typing:
+
+ ./configure --disable-shared --disable-nls
+
+ the `--disable-nls' was incorrectly sent to the `make' program.
+
+2002-01-29 Werner Lemberg <wl@gnu.org>
+
+ * README.UNX: Fix typo.
+ * builds/unix/install.mk (uninstall): Fix library name for libtool.
+
+2002-01-28 Francesco Zappa Nardelli <Francesco.Zappa.Nardelli@ens.fr>
+
+ * src/pcf/pcfdriver.c (PCF_Done_Face): Fix incorrect destruction of
+ the face object (face->toc.tables, face->root.family_name,
+ face->root.available_size, face->charset_encoding,
+ face->charset_registry are now freed). Thanks to Niels Moseley.
+
+2002-01-28 Roberto Alameda <ojancano@geekmail.de>
+
+ * src/type1/t1load.c (parse_encoding): Set `loader->num_chars'.
+
+2002-01-28 Werner Lemberg <wl@gnu.org>
+
+ * src/type1/t1load.c (parse_subrs, parse_charstrings): Use copy
+ of `base' string for decrypting to not modify the original data.
+ Based on a patch by Jakub Bogusz <qboosh@pld.org.pl>.
+
+2002-01-27 Giuliano Pochini <pochini@shiny.it>
+
+ * src/smooth/ftgrays.c (gray_render_scanline): Fix bug which caused
+ bad rendering of thin lines (less than one pixel thick).
+
+2002-01-25 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cffdrivr.c (cff_get_name_index): Make last patch work
+ actually.
+
+2002-01-25 Martin Zinser <zinser@decus.de>
+
+ * src/cache/ftccache.c (ftc_node_done, ftc_node_destroy): Fix
+ compilation warnings.
+ * src/base/descrip.mms (OBJS): Add `ftmm.obj'.
+ * src/cache/descrip.mms (ftcache.obj): Dependencies added.
+
+2002-01-25 WANG Yi <wangyi@founder.com.cn>
+
+ * src/cff/cffdrivr.c (cff_get_name_index): Fix deallocation bug.
+
+2002-01-21 Antoine Leca <Antoine-Freetype@Leca-Marti.org>
+
+ * docs/PATENTS: Typo fixed (thanks to Detlef `Hawkeye' Würkner) in
+ the URL for the online resource.
+
+2002-01-18 Ian Brown <ian.brown@printsoft.de>
+
+ * builds/win32/ftdebug.c: New file.
+ * builds/win32/visualc/freetype.dsp: Updated.
+
+2002-01-18 Detlef Würkner <TetiSoft@apg.lahn.de>
+
+ * builds/amiga/src/base/ftsystem.c: Updated for AmigaOS 3.9.
+ * builds/amiga/README: Updated.
+
+2002-01-18 Ian Brown <ian.brown@printsoft.de>
+
+ * builds/win32/visualc/freetype.dsp: Updated.
+
+2002-01-13 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/freetype2.a4: The script was still buggy.
+ * builds/unix/freetype-config.in: Make it really work for any install
+ prefix.
+
+2002-01-10 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/freetype2.a4: Fix some serious bugs.
+
+2002-01-09 David Turner <david@freetype.org>
+
+ * builds/unix/configure.ac: Build top-level Jamfile.
+
+2002-01-09 Maxim Shemanarev <mcseemagg@yahoo.com>
+
+ * src/smooth/ftgrays.c (gray_render_line): Small optimization to
+ the smooth anti-aliased renderer that deals with vertical segments.
+ This results in a 5-7% speedup in rendering speed.
+
+2002-01-08 David Turner <david@freetype.org>
+
+ Added some wrapper scripts to make the installation more
+ Unix-friendly.
+
+ * configure, install: New files.
+
+ * INSTALL, README.UNX: Updated installation documentation to use the
+ new 'configure' and 'install' scripts.
+
+2002-01-07 David Turner <david@freetype.org>
+
+
+ * Version 2.0.6 released.
+ =========================
+
+
+ * docs/BUGS, docs/CHANGES: Updating documentation for 2.0.6 release.
+
+ * src/tools/docmaker.py: Fixed HTML quoting in sources.
+ (html_format): Replaced with ...
+ (html_quote): New function.
+ (html_quote0): New function.
+ (DocCode::dump_html): Small improvement.
+ (DocParagraph::dump, DocBlock::html): Use html_quote0 and html_quote.
+
+ * include/freetype/config/ftoption.h: Setting default options for
+ a release build (debugging off, bytecode interpreter off).
+
+ * src/base/ftobjs.c, src/base/ftoutln.c, src/cache/ftccmap.c,
+ src/cff/cffload.c, src/cff/cffobjs.c, src/pshinter/pshalgo2.c,
+ src/sfnt/ttload.c, src/sfnt/ttsbit.c: Removing small compiler
+ warnings (in pedantic compilation modes).
+
+2002-01-05 David Turner <david@freetype.org>
+
+ * src/autohint/ahhint.c (ah_align_linked_edge): Modified computation
+ of auto-hinted stem widths; this avoids color fringes in
+ `ClearType-like' rendering.
+
+ * src/truetype/ttgload.c (TT_Load_Glyph_Header,
+ TT_Load_Simple_Glyph, TT_Load_Composite_Glyph, load_truetype_glyph):
+ Modified the TrueType loader to make it more paranoid; this avoids
+ nasty buffer overflows in the case of invalid glyph data (as
+ encountered in the output of some buggy font converters).
+
+2002-01-04 David Turner <david@freetype.org>
+
+ * README.UNX: Added special README file for Unix users.
+
+ * builds/unix/ftsystem.c (FT_New_Stream): Fixed typo.
+
+ * src/base/ftobjs.c: Added #include FT_OUTLINE_H to get rid
+ of compiler warnings.
+
+ * src/base/ftoutln.c (FT_Outline_Check): Remove compiler warning.
+
+2002-01-03 Werner Lemberg <wl@gnu.org>
+
+ * src/type1/t1objs.c (T1_Face_Init): Add cast to avoid compiler
+ warning.
+
+2002-01-03 Keith Packard <keithp@keithp.com>
+
+ * builds/unix/ftsystem.c (FT_New_Stream): Added a fix to ensure that
+ all FreeType input streams are closed in child processes of a `fork'
+ on Unix systems. This is important to avoid (potential) access
+ control issues.
+
+2002-01-03 David Turner <david@freetype.org>
+
+ * src/type1/t1objs.c (T1_Face_Init): Fixed a bug that crashed the
+ library when dealing with certain weird fonts like `Stalingrad', in
+ `sadn.pfb' (this font has no full font name entry).
+
+ * src/base/ftoutln.c, include/freetype/ftoutln.h (FT_Outline_Check):
+ New function to check the consistency of outline data.
+
+ * src/base/ftobjs.c (FT_Load_Glyph): Use `FT_Outline_Check' to
+ ensure that loaded glyphs are valid. This allows certain fonts like
+ `tt1095m_.ttf' to be loaded even though it appears they contain
+ really funky glyphs.
+
+ There still is a bug there, though.
+
+ * src/truetype/ttgload.c (load_truetype_glyph): Fix error condition.
+
+2001-12-30 David Turner <david@freetype.org>
+
+ * src/autohint/ahhint.c (ah_hinter_load): Fix advance width
+ computation of auto-hinted glyphs. This noticeably improves the
+ spacing of letters in KDE and Gnome.
+
+2001-12-25 Antoine Leca <Antoine-Freetype@Leca-Marti.org>
+
+ * builds/dos/detect.mk: Correcting the order for Borland compilers:
+ 16-bit bcc was never selected, always overridden by 32-bit bcc32.
+
+2001-12-22 Francesco Zappa Nardelli <Francesco.Zappa.Nardelli@ens.fr>
+
+ * src/pfc/pcfread.c (pcf_load_font): Handle property `POINT_SIZE'
+ and fix incorrect computation of `available_sizes'.
+
+2001-12-22 David Turner <david@freetype.org>
+
+ * src/autohint/ahhint.c (ah_hinter_load): Auto-hinted glyphs had an
+ incorrect glyph advance in the case of mono-width fonts (like
+ Courier, Andale Mono, and others).
+
+2001-12-22 Detlef Würkner <TetiSoft@apg.lahn.de>
+
+ * builds/amiga/*: Adaptations to latest changes.
+ Support added for MorphOS.
+
+2001-12-22 Werner Lemberg <wl@gnu.org>
+
+ * src/pshinter/pshrec.c (FT_COMPONENT): Redefine to `trace_pshrec'.
+ (ps_mask_table_merge, ps_hints_open, ps_hints_stem,
+ ps_hints_t1stem3, ps_hints_t2mask, ps_hints_t2counter): Fix
+ FT_ERROR messages.
+ * src/pshinter/pshalgo1.c (FT_COMPONENT): Define as
+ `trace_pshalgo1'.
+ * src/pshinter/pshalgo2.c (FT_COMPONENT): Define as
+ `trace_pshalgo2'.
+ * include/freetype/internal/ftdebug.h (FT_Trace): Updated.
+
+ * docs/modules.txt: New file.
+
+2001-12-21 David Turner <david@freetype.org>
+
+ * src/pshinter/pshrec.c (ps_hints_t2mask, ps_hints_t2counter):
+ Ignore invalid `hintmask' and `cntrmask' operators (instead of
+ returning an error). Glyph 2028 of the CFF font `MSung-Light-Acro'
+ couldn't be rendered otherwise (it seems its charstring is buggy,
+ though this requires more analysis).
+ (FT_COMPONENT): Define.
+
+ * src/cff/cffgload.c (CFF_Parse_CharStrings), src/psaux/t1decode.c
+ (T1_Decoder_Parse_Charstrings), src/pshinter/pshalgo2.c (*), Fixed a
+ bug where the X and Y axis where inverted in the postscript hinter.
+ This caused problem when displaying on non-square surfaces.
+
+ * src/pshinter/pshalgo2.c: s/vertical/dimension/.
+
+ * src/pshinter/pshglob.c (psh_globals_new): Replaced a floating
+ point constant with a fixed-float equivalent. For some reasons not
+ all compilers are capable of directly computing a floating pointer
+ constant casted to FT_Fixed, and will link a math library instead.
+
+2001-12-20 Werner Lemberg <wl@gnu.org>
+
+ * src/cache/ftccache.c (ftc_node_destroy, ftc_cache_lookup): Fix
+ tracing strings.
+ * src/cache/ftccmap.c (ftc_cmap_family_init): Ditto.
+ * src/cache/ftcmanag.c (ftc_family_table_alloc,
+ ftc_family_table_free, FTC_Manager_Check): Ditto.
+ * src/cache/ftcsbits.c (ftc_sbit_node_load): Ditto.
+
+ * src/base/ftobjs.c (FT_Done_Library): Remove compiler warning.
+
+2001-12-20 David Turner <david@freetype.org>
+
+ Added PostScript hinter support to the CFF and CID drivers.
+
+ * include/freetype/internal/cfftypes.h (CFF_Font): New member
+ `pshinter'.
+ * src/cff/cffload.c (CFF_Get_Standard_Encoding): New function.
+ * src/cff/cffload.h: Updated.
+ * src/cff/cffgload.c (CFF_Init_Builder): Renamed to ...
+ (CFF_Builder_Init): This.
+ Added new argument `hinting'.
+ (CFF_Done_Builder): Renamed to ...
+ (CFF_Builder_Done): This.
+ (CFF_Init_Decoder): Added new argument `hinting'.
+ (CFF_Parse_CharStrings): Implement vstem support.
+ (CFF_Load_Glyph): Updated.
+ Add hinting support.
+ (cff_lookup_glyph_by_stdcharcode): Use CFF_Get_Standard_Encoding().
+ (cff_argument_counts): Updated.
+ * src/cff/cffgload.h: Updated.
+ * src/cff/cffobjs.c: Include FT_INTERNAL_POSTSCRIPT_HINTS_H.
+ (CFF_Size_Get_Globals_Funcs, CFF_Size_Done, CFF_Size_Init,
+ CFF_Size_Reset, CFF_GlyphSlot_Done, CFF_GLyphSlot_Init): New
+ functions.
+ (CFF_Init_Face): Renamed to ...
+ (CFF_Face_Init): This.
+ Add hinter support.
+ (CFF_Done_Face): Renamed to ...
+ (CFF_Face_Done): This.
+ (CFF_Init_Driver): Renamed to ...
+ (CFF_Driver_Init): This.
+ (CFF_Done_Driver): Renamed to ...
+ (CFF_Driver_Done): This.
+ * src/cff/cffobjs.h: Updated.
+ * src/cff/cffdrivr.c (cff_driver_class): Updated.
+
+ * include/freetype/internal/t1types.h (CID_FaceRec): New member
+ `pshinter'.
+ * src/cid/cidgload.c (CID_Load_Glyph): Add hinter support.
+ * src/cid/cidobjs.c: Include FT_INTERNAL_POSTSCRIPT_HINTS_H.
+ (CID_GlyphSlot_Done, CID_GlyphSlot_Init, CID_Size_Get_Globals_Funcs,
+ CID_Size_Done, CID_Size_Init, CID_Size_Reset): New functions.
+ (CID_Done_Face): Renamed to ...
+ (CID_Face_Done): This.
+ (CID_Init_Face): Renamed to ...
+ (CID_Face_Init): This.
+ Add hinting support.
+ (CID_Init_Driver): Renamed to ...
+ (CID_Driver_Init): This.
+ (CID_Done_Driver): Renamed to ...
+ (CID_Driver_Done): This.
+ * src/cid/cidobjs.h: Updated.
+ * src/cidriver.c: Updated.
+
+ * src/pshinter/pshrec.c (t2_hint_stems): Fixed.
+
+ * src/base/ftobjs.c (FT_Done_Library): Fixed a stupid bug that
+ crashed the library on exit.
+
+ * src/type1/t1gload.c (T1_Load_Glyph): Enable font matrix
+ transformation of hinted glyphs.
+
+ * src/cid/cidload.c (cid_read_subrs): Fix error condition.
+
+ * src/cid/cidobjs.c (CID_Face_Done): Fixed a memory leak; the subrs
+ routines were never released when CID faces were destroyed.
+
+ * src/cff/cffload.h, src/cff/cffload.c, src/cff/cffgload.c: Updated
+ to move the definition of encoding tables back within `cffload.c'
+ instead of making them part of a shared header (causing problems in
+ `multi' builds). This reverts change 2001-08-08.
+
+ * docs/CHANGES: Updated for 2.0.6 release.
+ * docs/TODO: Added `stem3 and counter hints support' to the TODO
+ list for the Postscript hinter.
+ * docs/BUGS: Closed the AUTOHINT-NO-SBITS bug.
+
+2001-12-19 David Turner <david@freetype.org>
+
+ * include/freetype/cache/ftcache.h: Added comments to indicate that
+ some of the exported functions should only be used by applications
+ that need to implement custom cache types.
+
+ * src/truetype/ttgload.c (cur_to_org, org_to_cur): Fixed a nasty bug
+ that prevented composites from loading correctly, due to missing
+ parentheses around macro parameters.
+
+ * src/sfnt/sfobjs.c (SFNT_Load_Face): Make the `post' and `name'
+ tables optional to load PCL fonts properly.
+
+ * src/truetype/ttgload.c (TT_Load_Glyph), src/base/ftobjs.c
+ (FT_Load_Glyph), include/freetype/freetype.h (FT_LOAD_SBITS_ONLY):
+ `Fixed' the bug that prevented embedded bitmaps to be loaded when
+ the auto-hinter is used. This actually is a hack but will be enough
+ until the internal re-design scheduled for FreeType 2.1.
+
+ * src/raster/ftrend1.c (ft_raster1_render): Fixed a nasty outline
+ shifting bug in the monochrome renderer.
+
+ * README: Updated version numbers to 2.0.6.
+
+2001-12-17 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttgload.c (load_truetype_glyph): Fix test for invalid
+ glyph header.
+
+2001-12-15 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftglyph.c (FT_Glyph_To_Bitmap): Remove compiler warning.
+ * include/freetype/ftcache.h (FTC_Node_Unref): Removed. It is
+ already in ftcmanag.h.
+ * src/cache/ftcsbits.c (ftc_sbit_node_load): Remove unused variable
+ `gfam'.
+ * src/cache/ftcmanag.c (ftc_family_table_alloc,
+ * ftc_family_table_free): Use FT_EXPORT_DEF.
+ * include/freetype/cache/ftcmanag.h: Updated.
+ * src/cache/ftccache.c (ftc_node_destroy): Use FT_EXPORT_DEF.
+ * src/cache/ftccmap.c (ftc_cmap_node_init): Remove unused variable
+ `cfam'.
+ Remove compiler warning.
+ (FTC_CMapCache_Lookup): Remove compiler warnings.
+ (ftc_cmap_family_init): Ditto.
+ (FTC_CMapCache_Lookup): Ditto.
+
+ * builds/unix/configure.ac: Increase `version_info' to 8:0:2.
+ * builds/unix/configure: Regenerated.
+
+2001-12-14 Werner Lemberg <wl@gnu.org>
+
+ * builds/mac/README: Updated.
+
+2001-12-14 Scott Long <scott@swiftview.com>
+
+ * src/truetype/ttgload.c (load_truetype_glyph): Fixing crash when
+ dealing with invalid fonts (i.e. glyph size < 10 bytes).
+
+2001-12-14 Sam Latinga <slouken@devolution.com>
+
+ * builds/mac/freetype.make: A new Makefile to build with MPW on
+ MacOS classic.
+
+2001-12-14 David Turner <david@freetype.org>
+
+ * src/truetype/ttgload.c (TT_Load_Glyph), src/type1/t1gload.c
+ (T1_Load_Glyph), src/cid/cidgload.c (CID_Load_Glyph),
+ src/cff/cffgload.c (CFF_Load_Glyph): Fixed a serious bug common to
+ all font drivers (the advance width was never hinted when it
+ should).
+
+ * include/freetype/freetype.h (FREETYPE_PATCH): New macro.
+ * src/base/ftdbgmem.c (debug_mem_dummy) [!FT_DEBUG_MEMORY]: Don't
+ use `extern' keyword.
+
+2001-12-12 David Turner <david@freetype.org>
+
+ * src/pshinter/pshglob.c (psh_blues_scale_zones, psh_blues_snap_stem
+ psh_globals_new): Adding correct BlueScale/BlueShift support, plus
+ family blues processing.
+ * src/pshinter/pshglob.h (PSH_BluesRec): Updated.
+
+ Started adding support for the Postscript hinter in the CFF module.
+
+ * src/cff/cffgload.c: Include FT_INTERNAL_POSTSCRIPT_HINTS_H.
+ (CFF_Parse_CharStrings): Implement it.
+ * src/cff/cffgload.h: Updated.
+
+2001-12-12 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/freetype2.m4: Some portability fixes.
+
+2001-12-11 Jouk Jansen <joukj@hrem.stm.tudelft.nl>
+
+ * src/base/descrip.mms (OBJS): Add ftdebug.obj.
+
+2001-12-11 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/ttload.c (TT_Load_Generic_Header): Typos.
+
+2001-12-11 David Turner <david@freetype.org>
+
+ * builds/unix/freetype-config.in: Modified the script to prevent
+ passing `-L/usr/lib' to gcc.
+
+ * docs/FTL.TXT: Simple fix (change `LICENSE.TXT' to `FTL.TXT').
+
+ * builds/unix/freetype2.m4: New file for checking configure paths.
+ We need to install it in $(prefix)/share/aclocal/freetype2.m4 but I
+ didn't modify builds/unix/install.mk yet.
+
+ * INSTALL: Updated the instructions to build shared libraries with
+ Jam. They were simply wrong.
+
+ * src/base/fttrigon.c (FT_Cos): Fixed a small bug that caused
+ slightly improper results for `FT_Cos' and `FT_Sin' (example:
+ FT_Sin(0) == -1!).
+
+2001-12-11 Detlef Würkner <TetiSoft@apg.lahn.de>
+
+ * include/freetype/internal/ftstream.h (GET_LongLE, GET_ULongLE):
+ Fixed incorrect argument types.
+
+2001-12-10 Francesco Zappa Nardelli <Francesco.Zappa.Nardelli@ens.fr>
+
+ * src/pcf/pcfdriver.c (PCF_Init_Face): Allow Xft to use PCF fonts
+ by setting the `face->metrics.max_advance' correctly.
+
+2001-12-07 David Turner <david@freetype.org>
+
+ * include/freetype/cache/ftccmap.h, src/cache/ftccmap.c: Added new
+ charmap cache.
+ * src/cache/ftcache.c: Updated.
+
+ * src/autohint/ahhint.c (ah_hinter_hint_edges): s/UNUSED/FT_UNUSED/.
+
+2001-12-06 Leonard Rosenthol <leonardr@lazerware.com>
+
+ Added support for reading .dfont files on Mac OS X. Also added a
+ new routine which looks up a given font by name in the Mac OS and
+ returns the disk file where it resides.
+
+ * src/base/ftmac.c: Include <Files.h> and <TextUtils.h>.
+ (is_dfont): New auxiliary function.
+ (FT_New_Face_From_dfont): New function.
+ (FT_GetFile_From_Mac_Name): New exported function.
+ (FT_New_Face): Updated.
+ * include/freetype/ftmac.h: Updated.
+
+2001-12-06 David Turner <david@freetype.org>
+
+ * src/cache/Jamfile, src/cache/rules.mk: Updated.
+
+2001-12-06 Werner Lemberg <wl@gnu.org>
+
+ * INSTALL: Small update.
+
+2001-12-05 David Turner <david@freetype.org>
+
+ * src/base/ftglyph.c (FT_Glyph_To_Bitmap): Re-ordered code for
+ debugging purposes.
+ Comment out use of `origin'.
+
+ * src/smooth/ftsmooth.c (ft_smooth_render): Fixed a nasty hidden bug
+ where outline shifting wasn't correctly undone after bitmap
+ rasterization. This created problems with certain glyphs (like '"'
+ of certain fonts) and the cache system.
+
+ * src/pshinter/pshalgo1.c (psh1_hint_table_init): Fix typo.
+ * src/pshinter/pshalgo2.c (psh2_hint_table_init): Fix typo.
+ (ps2_hints_apply): Small fix.
+
+2001-12-05 David Turner <david@freetype.org>
+
+ * src/pshinter/pshalgo2.c (psh2_hint_table_init),
+ src/pshinter/pshalgo1.c (psh1_hint_table_init): Removed compiler
+ warnings.
+
+ * include/freetype/ftcache.h, include/freetype/cache/*, src/cache/*:
+ Yet another massive rewrite of the caching sub-system in order to
+ both increase performance and allow simpler cache sub-classing. As
+ an example, the code for the image and sbit caches is now much
+ simpler.
+
+ I still need to update the documentation in
+ www/freetype2/docs/cache.html to reflect the new design though.
+
+ * include/freetype/config/ftheader.h (FT_CACHE_CHARMAP_H): New
+ macro.
+ (FT_CACHE_INTERNAL_CACHE_H): Updated.
+
+2001-12-05 David Krause <freetype@davidkrause.com>
+
+ * docs/license.txt: s/X Windows/X Window System/.
+
+2001-12-04 Werner Lemberg <wl@gnu.org>
+
+ * src/raster/ftraster.c: Fix definition condition of MEM_Set().
+ * src/smooth/ftgrays.c (M_Y): Change value to 192.
+ * src/base/ftdbgmem.c (ft_mem_table_destroy): Fix printf() parameter.
+ Remove unused variable.
+ * src/cache/ftcimage.c (ftc_image_node_init,
+ ftc_image_node_compare): Remove unused variables.
+ * src/cache/ftcsbits.c (ftc_sbit_node_weight): Remove unused
+ variable.
+ * src/raster/ftraster.c (MEM_Set): Move definition down to avoid
+ compiler warning.
+ * src/autohint/ahhint.c (ah_hinter_hint_edges): Use UNUSED() to
+ avoid compiler warnings.
+ * src/pcf/pcfread.c (tableNames): Use `const'.
+ (pcf_read_TOC): Change counter name to avoid compiler warning.
+ Use `const'.
+ * src/pshinter/pshrec.c (ps_hints_close): Remove redundant
+ declaration.
+ * src/pshinter/pshalgo1.c (psh1_hint_table_init): Rename variables
+ to avoid shadowing.
+ * src/pshinter/pshalgo2.c (psh2_hint_table_activate_mask): Ditto.
+ * src/type1/t1objs.h: Remove double declarations of `T1_Size_Init()'
+ and `T1_Size_Done()'.
+
+2001-11-20 Antoine Leca <antoineleca@multimania.com>
+
+ * include/freetype/ttnameid.h: Added some new Microsoft language
+ codes and LCIDs as found in MSDN (Passport SDK). Also added
+ comments about the meaning of bit 57 of the `OS/2' table
+ (TT_UCR_SURROGATES) which (with OpenType v.1.3) now means `there is
+ a character beyond 0xFFFF in this font'. Thanks to Detlef Würkner
+ <TetiSoft@apg.lahn.de> for noticing this.
+
+2001-11-20 David Turner <david@freetype.org>
+
+ * src/pshinter/{pshalgo2.c, pshalgo1.c}: Fixed stupid bug in sorting
+ routine that created nasty alignment artefacts.
+
+ * src/pshinter/pshrec.c, tests/gview.c: Debugging updates.
+
+ * src/smooth/ftgrays.c: De-activated experimental gamma support.
+ Apparently, `optimal' gamma tables depend on the monitor type,
+ resolution and general karma, so it's better to compute them outside
+ of the rasterizer itself.
+ (gray_convert_glyph): Use `volatile' keyword.
+
+2001-10-29 David Turner <david@freetype.org>
+
+ Adding experimental `gamma' support. This produces smoother glyphs
+ at small sizes for very little cost.
+
+ * src/smooth/ftgrays.c (grays_init_gamma): New function.
+ (gray_raster_new): Use it.
+
+ Various fixes to the auto-hinter. They merely improve the output of
+ sans-serif fonts. Note that there are still problems with serifed
+ fonts and composites (accented characters).
+
+ * src/autohint/ahglyph.c (ah_outline_load,
+ ah_outline_link_segments): Implement it.
+ Fix typos.
+ (ah_outline_save, ah_outline_compute_segments): Fix typos.
+ * src/autohint/ahhint.c (ah_align_serif_edge): New argument
+ `vertical'. Implement improvement.
+ (ah_hint_edges_3, ah_hinter_hint_edges): Implement it.
+ Fix typos.
+ (ah_hinter_align_strong_points, ah_hinter_align_weak_points): Fix
+ typos.
+ (ah_hinter_load): Set `ah_debug_hinter' if DEBUG_HINTER is defined.
+ * src/autohint/ahmodule.c: Implement support for DEBUG_HINTER macro.
+ * src/autohint/ahtypes.h: Ditto.
+ (AH_Hinter): Remove `disable_horz_edges' and `disable_vert_edges'
+ (making them global as `ah_debug_disable_horz' and
+ `ah_debug_disable_vert').
+ Fix typos.
+
+ * tests/gview.c: Updated the debugging glyph viewer to show the
+ hints generated by the `autohint' module.
+
+2001-10-27 David Turner <david@freetype.org>
+
+ * src/cache/ftcchunk.c (ftc_chunk_cache_lookup): Fixed a bug that
+ considerably lowered the performance of the abstract chunk cache.
+
+2001-10-26 David Turner <david@freetype.org>
+
+ * include/freetype/ftcache.h, include/freetype/cache/*.h,
+ src/cache/*.c: Major re-design of the cache sub-system to provide
+ better performance as well as an `Acquire'/`Release' API. Seems to
+ work well here, but probably needs a bit more testing.
+
+2001-10-26 Leonard Rosenthol <leonardr@lazerware.com>
+
+ * builds/mac/README: Updated to reflect my taking over the project
+ and that is now being actively maintained.
+
+ * src/base/ftmac.c (parse_fond): Applied patches from Paul Miller
+ <paulm@profoundeffects.com> to support loading a face other than the
+ first from a FOND resource.
+ (FT_New_Face_From_FOND): Updated.
+
+2001-10-25 Leonard Rosenthol <leonardr@lazerware.com>
+
+ * builds/mac/ftlib.prj: Update of CodeWarrior project file for Mac
+ OS for latest version (7) of CWPro and for recent changes to the FT
+ source tree.
+
+2001-10-25 David Turner <david@freetype.org>
+
+ * include/freetype/config/ftoption.h: Updated comments to explain
+ precisely how to use project-specific macro definitions without
+ modifying this file manually.
+
+ (FT_CONFIG_FORCE_INT64): Define.
+
+ (FT_DEBUG_MEMORY): New macro.
+
+2001-10-24 Tom Kacvinsky <tkacvins@freetype.org>
+
+ * builds/unix/ftsystem.c (FT_New_Memory): Added a missing `{'.
+
+2001-10-23 David Turner <david@freetype.org>
+
+ * include/freetype/internal/ftmemory.h, src/base/ftdbgmem.c:
+ Improvements to the memory debugger to report more information in
+ case of errors. Also, some allocations that occurred through REALLOC
+ couldn't be previously caught correctly.
+
+ * src/autohint/ahglyph.c (ah_outline_compute_segments,
+ ah_outline_compute_edges), src/raster/ftraster.c (ft_black_new),
+ src/smooth/ftgrays.c (gray_render_span, gray_raster_new): Replaced
+ liberal uses of memset() by the MEM_Set() macro.
+
+2001-10-23 David Turner <david@freetype.org>
+
+ * src/raster/ftraster.c (Update): Removed to be inlined in ...
+ (Sort): Updated.
+
+2001-10-22 David Turner <david@freetype.org>
+
+ * builds/unix/ftsystem.c (FT_New_Memory, FT_Done_Memory),
+ builds/vms/ftsystem.c (FT_New_Memory, FT_Done_Memory),
+ builds/amiga/ftsystem.c (FT_New_Memory, FT_Done_Memory),
+ src/base/ftdbgmem.c: Updated the memory debugger and
+ platform-specific implementations of `ftsystem' in order to be able
+ to debug memory allocations on Unix, VMS and Amiga too!
+
+ * src/pshinter/pshalgo2.c (psh2_hint_table_record_mask): Removed
+ some bogus warnings.
+
+ * include/freetype/internal/ftmemory.h, src/base/ftdbgmem.c:
+ Modified the debugging memory manager to report the location (source
+ file name + line number) where leaked memory blocks are allocated in
+ the source file.
+
+ * src/base/ftdbgmem.c: New debugging memory manager. You must
+ define the FT_DEBUG_MEMORY macro in `ftoption.h' to enable it. It
+ will record every memory block allocated and report simple errors
+ like memory leaks and double deletes.
+
+ * src/base/Jamfile: Include ftdbgmem.
+ * src/base/rules.mk: Ditto.
+ * src/base/ftbase.c: Include ftdbgmem.c.
+
+ * include/freetype/config/ftoption.h: Added the FT_DEBUG_MEMORY
+ macro definition.
+
+ * src/base/ftsystem.c (FT_New_Memory, FT_Done_Memory): Modified the
+ base component to use the debugging memory manager when the macro
+ FT_DEBUG_MEMORY is defined.
+
+2001-10-21 Tom Kacvinsky <tkacvins@freetype.org>
+
+ * src/cff/cffload.c (CFF_Done_Font): Free subfonts array only if
+ we are working with a CID keyed CFF font. Otherwise, a variable
+ that was never allocated memory might freed. This is a correction
+ to the previous patch for freeing subfonts.
+
+2001-10-21 Tom Kacvinsky <tkacvins@freetype.org>
+
+ * src/cff/cffload.c (CFF_Done_Font): Free the subfonts array to
+ avoid a memory leak.
+
+2001-10-21 David Turner <david@freetype.org>
+
+ * src/pshinter/pshalgo2.c, src/pshinter/pshalgo1.c,
+ src/pshinter/pshglob.c: Removing compiler warnings in pedantic modes
+ (in multi-object compilation mode, mainly).
+
+2001-10-20 Tom Kacvinsky <tkacvins@freetype.org>
+
+ * src/type1/t1load.c (parse_encoding): Add a test to make sure
+ that custom encodings (i.e., neither StandardEncoding nor
+ ExpertEncoding) are not loaded twice when the Type 1 font is
+ synthetic.
+
+ * src/type1/t1load.c (parse_font_name, parse_subrs): Added a test
+ for when loading synthetic fonts to make sure that the font name
+ and subroutines are not loaded twice. This is to remove a memory
+ leak that occurred because the original memory blocks for these
+ objects were not deallocated when the objects were parsed the
+ second time.
+
+2001-10-19 David Turner <david@freetype.org>
+
+ * src/smooth/ftgrays.c, src/pshinter/pshglob.h,
+ src/pshinter/pshrec.c, src/pshinter/pshalgo2.c: Getting rid of
+ compiler warnings.
+
+ * src/pshinter/module.mk, src/pshinter/rules.mk: Adding control
+ files to build the PostScript hinter with the `old' build system.
+
+2001-10-19 Jacob Jansen <joukj@hrem.stm.tudelft.nl>
+
+ * descrip.mms, src/pshinter/descrip.mms: Updates to the VMS build
+ files.
+
+2001-10-18 David Turner <david@freetype.org>
+
+ * src/psnames/pstables.h, src/tools/glnames.py: Rewrote the
+ `glnames.py' script used to generate the `pstables.h' header file.
+ The old one contained a serious bug that made FreeType return
+ incorrect glyph names for certain glyphs.
+
+ * src/truetype/ttdriver.c (Set_Char_Sizes): Changing computation of
+ pixel size from character size to use rounding. This is an
+ experiment to see whether this gives values similar to Windows for
+ scaled ascent/descent/etc.
+
+ * src/base/ftcalc.c (FT_Div64by32): Changed the implementation
+ slightly since the original code was mis-compiled on Mac machines
+ using the MPW C compiler.
+
+ * src/base/ftobjs.c (FT_Realloc): When a memory block was grown
+ through FT_Realloc(), the new bytes were not set to 0, which created
+ some strange bugs in the PostScript hinter.
+ (destroy_face): Don't deallocate unconditionally.
+
+ * src/cid/cidgload.c (CID_Compute_Max_Advance, CID_Load_Glyph):
+ Adding support to new PostScript hinter.
+
+ * include/freetype/internal/psglobal.h,
+ include/freetype/internal/pshints.h,
+ include/freetype/config/ftmodule.h, src/pshinter/Jamfile,
+ src/pshinter/pshalgo.h, src/pshinter/pshalgo1.h,
+ src/pshinter/pshalgo1.c, src/pshinter/pshalgo2.h,
+ src/pshinter/pshalgo2.c, src/pshinter/pshglob.h,
+ src/pshinter/pshglob.c, src/pshinter/pshinter.c,
+ src/pshinter/pshmod.c, src/pshinter/pshmod.h, src/pshinter/pshrec.c,
+ src/pshinter/pshrec.h: Adding new PostScript hinter module.
+
+ * include/freetype/internal/ftobjs.h,
+ include/freetype/internal/internal.h,
+ include/freetype/internal/psaux.h,
+ include/freetype/internal/t1types.h, src/psaux/psobjs.c,
+ src/psaux/psobjs.h, src/psaux/t1decode.h, src/psaux/t1decode.c,
+ src/type1/t1driver.c, src/type1/t1gload.c, src/type1/t1objs.c,
+ src/type1/t1objs.h: Updates to use the new PostScript hinter.
+
+ * tests/Jamfile, tests/gview.c: Adding a new glyph hinting
+ viewer/debugger to the source tree. Note that you will _not_ be
+ able to compile it since it depends on an unavailable graphics
+ library named `Nirvana' to render vector images.
+
+2001-10-17 David Turner <david@freetype.org>
+
+
+ * Version 2.0.5 released.
+ =========================
+
+
+ * include/freetype/freetype.h, include/internal/ftobjs.h,
+ src/base/ftobjs.c, src/type1/t1driver.c: Adding a new function named
+ 'FT_Get_Postscript_Name' to retrieve the PostScript name of a given
+ font. Should work with all formats except pure CFF/CEF fonts (this
+ will be added soon).
+
+ * src/cid/cidriver (cid_get_postscript_name): New function.
+ (CID_Get_Interface): Handle `postscript_name' interface.
+
+ * src/sfnt/sfdriver.c (get_sfnt_postscript_name): New function.
+ (SFNT_Get_Interface): Handle `postscript_name' interface.
+
+ * src/type1/t1driver.c (t1_get_ps_name): New function.
+ (Get_Interface): Handle `postscript_name' interface.
+
+ * README, docs/CHANGES: Updated for 2.0.5 release.
+
+2001-10-08 David Turner <david@freetype.org>
+
+ Fixed a bug in `glnames.py' that prevented it from generating
+ correct glyph names tables. This resulted in the unavailability of
+ certain glyphs like `Cacute', `cacute' and `lslash' in Unicode
+ charmaps, even if these were present in the font (causing problems
+ for Polish users).
+
+ * src/tools/glnames.py (mac_standard_names): Fixed.
+ (t1_standard_strings): Some fixes and renamed to ...
+ (sid_standard_names): This.
+ (t1_expert_encoding): Fixed.
+ (the_adobe_glyph_list): Renamed to ...
+ (adobe_glyph_names): This.
+ (the_adobe_glyphs): Renamed to ...
+ (adobe_glyph_values): This.
+ (dump_mac_indices, dump_glyph_list, dump_unicode_values, main):
+ Updated.
+ * src/psnames/pstables.h: Regenerated.
+ * src/psnames/psmodule.c (PS_Unicode_Value): Fix offset.
+ Fix return value.
+ Use `sid_standard_table' and `ps_names_to_unicode' instead of
+ `t1_standard_glyphs' and `names_to_unicode'.
+ (PS_Macintosh_Name): Use `ps_glyph_names' instead of
+ `standard_glyph_names'.
+ (PS_Standard_Strings): Use `sid_standard_names' instead of
+ `t1_standard_glyphs'.
+
+ * doc/BUGS, doc/TODO: New documents.
+
+2001-10-07 Richard Barber <rich@solutionuk.com>
+
+ * src/cache/ftlru.c (FT_Lru_Lookup_Node): Fixed a bug that prevented
+ correct LRU behaviour.
+
+2001-10-07 David Turner <david@freetype.org>
+
+ setjmp() and longjmp() are now used for rollback (i.e. when memory
+ pool overflow occurs).
+
+ Function names are now all uniformly prefixed with `gray_'.
+
+ * src/smooth/ftgrays.c: Include <setjmp.h>.
+ (ErrRaster_MemoryOverflow): New macro.
+ (TArea): New type to store area values in each cell (using `int' was
+ too small on 16-bit systems). <limits.h> is included to properly
+ get the needed data type.
+ (TCell, TRaster): Use it.
+ (TRaster): New element `jump_buffer'.
+ (gray_compute_cbox): Use `RAS_ARG' as the only parameter and get
+ `outline' from it.
+ (gray_record_cell): Use longjmp().
+ (gray_set_cell): Use gray_record_cell() for error handling.
+ (gray_render_line, gray_render_conic, gray_render_cubic): Simplify.
+ (gray_convert_glyph_inner): New function, using setjmp().
+ (gray_convert_glyph): Use it.
+
+2001-10-07 David Turner <david@freetype.org>
+
+ Provide a public API to manage multiple size objects for a given
+ FT_Face in the new header file `ftsizes.h'.
+
+ * include/freetype/ftsizes.h: New header file,
+ * include/freetype/internal/ftobjs.h: Use it.
+ Remove declarations of FT_New_Size and FT_Done_Size (moved to
+ ftsizes.h).
+ * include/freetype/config/ftheader.h (FT_SIZES_H): New macro.
+ * src/base/ftobjs.c (FT_Activate_Size): New function.
+ * src/cache/ftcmanag.c: Include ftsizes.h.
+ (ftc_manager_init_size, ftc_manager_flush_size): Use
+ FT_Activate_Size.
+
+2001-09-20 Detlef Würkner <TetiSoft@apg.lahn.de>
+
+ * builds/amiga/*: Added port to Amiga with the SAS/C compiler.
+
+2001-09-15 Detlef Würkner <TetiSoft@apg.lahn.de>
+
+ * src/type1/t1afm.c (T1_Done_AFM): Free `afm'.
+
+2001-09-10 Yao Zhang <yzhang@sharemedia.com>
+
+ * src/sfnt/ttcmap.c (code_to_index2): Handle code values with
+ hi-byte == 0 correctly.
+
+2001-09-10 Werner Lemberg <wl@gnu.org>
+
+ * builds/link-std.mk ($(PROJECT_LIBRARY)): Fix typo.
+
+2001-08-30 Martin Muskens <mmuskens@aurelon.com>
+
+ * src/type1/t1load.c (parse_font_matrix): A new way to compute the
+ units per EM with greater accuracy (important for embedded T1 fonts
+ in PDF documents that were automatically generated from TrueType
+ ones).
+
+ * src/type1/t1load.c (is_alpha): Now supports `+' in font names;
+ this is used in embedded fonts.
+
+ * src/psaux/psobjs.c (PS_Table_Add): Fixed a reallocation bug that
+ generated a dangling pointer reference.
+
+2001-08-30 Anthony Feik <afeick@hotmail.com>
+
+ * src/type1/t1afm.c (T1_Read_Afm): Now correctly sets the flag
+ FT_FACE_FLAG_KERNING when appropriate for Type1 + AFM files.
+
+2001-08-25 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/ttload.c (TT_Load_CMap): Fix frame length of
+ `cmap_rec_fields'.
+
+ * include/freetype/fterrors.h [!FT_CONFIG_OPTION_USE_MODULE_ERRORS]:
+ Undefine FT_ERR_BASE before defining again.
+
+2001-08-22 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttinterp.h: Fix prototype of TT_Move_Func.
+
+2001-08-21 Werner Lemberg <wl@gnu.org>
+
+ * builds/dos/dos-def.mk (NO_OUTPUT): Don't use `&>' but `>'.
+
+2001-08-21 David Turner <david@freetype.org>
+
+ * include/freetype/config/ftoption.h: Changed the default setting
+ for FT_CONFIG_OPTION_USE_MODULE_ERRORS to undefined, since it breaks
+ source compatibility in a few cases. Updated the comment to explain
+ that too.
+
+2001-08-17 Martin Muskens <mmuskens@aurelon.com>
+
+ * src/base/ftcalc.c (FT_MulDiv): Fixed serious typo.
+
+2001-08-12 Werner Lemberg <wl@gnu.org>
+
+ Updating to OpenType 1.3.
+
+ * include/freetype/internal/tttypes.h (TT_CMap0, TT_CMap2, TT_CMap4,
+ TT_CMap6): Adding field `language'.
+ (TT_CMapTable): Removing field `language'.
+ Type of `length' field changed to FT_ULong.
+ Adding fields for cmaps format 8, 10, and 12.
+ (TT_CMapGroup): New auxiliary structure.
+ (TT_CMap8_12, TT_CMap10): New structures.
+ * include/freetype/tttables.h (TT_HoriHeader, TT_VertHeader):
+ Removed last element of `Reserved' array.
+ * include/freetype/ttnameid.h (TT_PLATFORM_CUSTOM, TT_MS_ID_UCS_4,
+ TT_NAME_ID_CID_FINDFONT_NAME): New macros.
+
+ * src/sfnt/ttcmap.c (TT_CharMap_Load): Updated loading of `language'
+ field to the new structures.
+ Fixed freeing of arrays in case of unsuccessful loads.
+ Added support for loading format 8, 10, and 12 cmaps.
+ (TT_CharMap_Free): Added support for freeing format 8, 10, and 12
+ cmaps.
+ (code_to_index4): Small improvement.
+ (code_to_index6): Ditto.
+ (code_to_index8_12, code_to_index10): New functions.
+ * src/sfnt/ttload.c (TT_Load_Metrics_Header): Updated to new
+ structure.
+ (TT_Load_CMap): Ditto.
+
+ * src/sfnt/sfobjs.c (tt_encodings): Add MS UCS4 table (before MS
+ Unicode).
+
+2001-08-11 Werner Lemberg <wl@gnu.org>
+
+ * src/type1/t1driver.c (t1_get_name_index): Fix compiler warning.
+
+2001-08-09 Tom Kacvinsky <tkacvins@freetype.org>
+
+ * src/cff/cffdrivr.c (get_cff_glyph_name): Renamed to
+ cff_get_glyph_name for consistency.
+
+ (cff_get_glyph_index): Minor documentation change.
+
+ * src/type1/t1driver.c (t1_get_name_index): New function used in
+ Get_Interface as the function returned when the `name_index'
+ function is requested.
+
+ (get_t1_glyph_name): Renamed to t1_get_glyph_name for consistency.
+
+2001-08-08 Tom Kacvinsky <tkacvins@freetype.org>
+
+ * src/cff/cffload.c: Removed definitions of cff_isoadobe_charset,
+ cff_expert_charset, cff_expertsubset_charset, cff_standard_encoding,
+ and cff_expert_encoding arrays to cffload.h.
+
+ * src/cff/cffload.h: Added definitions of cff_isoadobe_charset,
+ cff_expert_charset, cff_expertsubset_charset, cff_standard_encoding,
+ and cff_expert_encoding arrays.
+
+ * src/cff/cffdrivr.c (cff_get_name_index): New function, returned
+ when `cff_get_interface' is called with a request for the
+ `name_index' function.
+
+ (cff_get_interface): Modified so that it returns the function
+ `cff_get_name_index' when the `name_index' function is requested.
+
+ * src/base/ftobjs.c (FT_Get_Name_Index): New function, used to
+ return a glyph index for a given glyph name only if the driver
+ supports glyph names.
+
+ * include/freetype/internal/ftobjs.h (FT_Name_Index_Requester):
+ New function pointer type definition used in the function
+ FT_Get_Name_Index.
+
+ * include/freetype/freetype.h (FT_Get_Name_Index): Added
+ documentation and prototype.
+
+2001-07-26 Werner Lemberg <wl@gnu.org>
+
+ * builds/cygwin/*: Removed. Use the unix stuff instead.
+
+2001-07-26 Jouk Jansen <joukj@hrem.stm.tudelft.nl>
+
+ * builds/vms/ftconfig.h (FT_CALLBACK_DEF): Updated to change dated
+ 2001-06-27.
+
+2001-07-17 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/internal/psaux.h (PS_Table): Use FT_Offset for
+ `cursor' and `capacity'.
+ * src/psaux/psobjc.c (reallocate_t1_table): Use FT_Long for second
+ parameter.
+ (PS_Table_Add): Use FT_Offset for `new_size'.
+
+ Add support for version 0.5 maxp tables.
+
+ * src/sfnt/ttload.c (TT_Load_MaxProfile): Implement it.
+ (TT_Load_OS2): Initialize some values.
+
+2001-07-13 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftsynth.c: Include ftcalc.h unconditionally.
+
+2001-07-07 David Turner <david@freetype.org>
+
+ * src/truetype/ttgload.c, src/truetype/ttinterp.c, src/pcf/pcfread:
+ Removed pedantic compiler warnings when the bytecode interpreter is
+ compiled in.
+
+2001-07-03 Werner Lemberg <wl@gnu.org>
+
+ * src/autohint/ahhint.c (ah_hinter_align_weak_points): Remove
+ unused variable `edges'.
+ (ah_hinter_load): Remove unused variables `old_width' and
+ `new_width'.
+ * src/cid/cidload.c (cid_decrypt): Use `U' for constant (again).
+ * src/psaux/psobjs.c (T1_Decrypt): Ditto.
+ * src/type1/t1parse.c (T1_Get_Private_Dict): Ditto.
+
+2001-06-28 David Turner <david@freetype.org>
+
+ * include/internal/ftstream.h: Modified the definitions
+ of the FT_GET_XXXX and NEXT_XXXX macros for 16-bit correctness.
+
+2001-06-26 Werner Lemberg <wl@gnu.org>
+
+ * src/cid/cidload.c, src/cid/cidload.h (cid_decrypt): Use FT_Offset
+ instead of FT_Int as type for `length' parameter.
+ * include/freetype/internal/psaux.h (PSAux_Interface): Updated.
+
+2001-06-27 Wolfgang Domröse <porthos.domroese@harz.de>
+
+ * src/psaux/psobjs.c, src/psaux/psobjs.h (T1_Decrypt): Use FT_Offset
+ instead of FT_Int as type for `length' parameter.
+
+
+ * Version 2.0.4 released.
+ =========================
+
+
+2001-06-27 David Turner <david@freetype.org>
+
+ * builds/unix/ftconfig.in: Changed the definition of the
+ FT_CALLBACK_DEF macro.
+
+ * include/freetype/ftconfig.h, src/*/*.c: Changed the definition and
+ use of the FT_CALLBACK_DEF macro in order to support 16-bit
+ compilers.
+
+ * builds/unix/ftconfig.in: Changed the definition of the
+ FT_CALLBACK_DEF macro.
+
+ * src/sfnt/ttload.c (TT_Load_Kern): The kern table loader now ensures
+ that the kerning table is correctly sorted (some problem fonts don't
+ have a correct kern table).
+
+2001-06-26 Wolfgang Domröse <porthos.domroese@harz.de>
+
+ * include/freetype/internal/ftstream.h (FT_GET_OFF3_LE): Fix typo.
+
+2001-06-24 David Turner <david@freetype.org>
+
+ * src/base/ftcalc.c (ft_div64by32): Fixed the source to work
+ correctly on 16-bit systems.
+
+2001-06-23 Anthony Fok <fok@debian.org>
+
+ * debian/*: Added Debian package build directory for 2.0.4.
+
+2001-06-22 David Turner <david@freetype.org>
+
+ * docs/PATENTS: Added patents disclaimer. This one was missing!
+
+ * docs/CHANGES, docs/todo: Updated for the upcoming 2.0.4 release.
+
+2001-06-20 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/config/ftconfig.h: Add two more `L's to
+ constants.
+ Add missing semicolons.
+
+ * builds/toplevel.mk: Do similar change as for
+ builds/unix/detect.mk.
+
+ * include/freetype/freetype.h (FT_ENC_TAG): New version to make it
+ easier to redefine.
+ * include/freetype/ftimage.h (FT_IMAGE_TAG): Ditto.
+
+ * src/pcf/pcfread.c (pcf_get_encodings): Add cast.
+
+2001-06-19 David Turner <david@freetype.org>
+
+ * builds/win32/visualc/freetype.dsp, builds/win32/visualc/index.html:
+ Updated the Visual C++ project (for the 2.0.4 release).
+
+ * builds/unix/detect.mk: Added rule for AIX detection (which uses
+ /usr/sbin/init instead of /sbin/init).
+
+ * include/freetype/fterrors.h, src/*/*err*.h: Updated some of the
+ error macros to simplify handling of new error scheme.
+
+2001-06-19 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/fttypes.h (FT_ERROR_MODULE): New macro.
+
+2001-06-19 David Turner <david@freetype.org>
+
+ Removing _lots_ of compiler warnings when the most pedantic warning
+ levels of Visual C++ and Borland C++ are used. Too many files to be
+ listed here, but FT2 now compiles without warnings with VC++ and the
+ `/W4' warning level (lint-style).
+
+ * include/freetype/freetype.h (FT_New_Memory_Face): Updated
+ documentation.
+ * include/freetype/fttypes.h (FT_BOOL): New macro.
+ * include/freetype/internal/ftdebug.h: Add #pragma for Visual C++
+ to suppress warning.
+ * include/freetype/internal/ftstream.h (FT_GET_SHORT_{BE,LE},
+ FT_GET_OFF3_{BE,LE}, FT_GET_LONG_{BE,LE}): New macros.
+ (NEXT_*): Use them.
+ * src/autohint/ahglobal.c: Include FT_INTERNAL_DEBUG_H.
+ (FT_New_Memory_Face): Add `const' to function declaration.
+
+2001-06-18 Werner Lemberg <wl@gnu.org>
+
+ Minor cleanups to remove compiler warnings.
+
+ * include/freetype/cache/ftcmanag.h (FTC_MAX_BYTES_DEFAULT): Use
+ `L' for constant.
+ * include/freetype/config/ftoption.h (FT_RENDER_POOL_SIZE): Ditto.
+ * src/base/ftcalc.c (FT_MulDiv): Use `L' for constant.
+ * src/base/ftglyph.c (FT_Glyph_Get_CBox): Remove `error' variable.
+ * src/base/fttrigon.c (ft_trig_arctan_table): Use `L' for constants.
+ * src/base/ftobjs.c (FT_Done_Size): Fix return value.
+ (FT_Set_Char_Size, FT_Set_Pixel_Sizes, FT_Get_Kerning): Remove
+ unused `memory' variable.
+ * src/autohint/ahglyph.c (ah_get_orientation): Use `L' for constant.
+ * src/autohint/ahhint.c (ah_hint_edges_3,
+ ah_hinter_align_edge_points): Remove unused `before' and `after'
+ variables.
+ (ah_hinter_align_weak_points): Remove unused `edge_limit' variable.
+ (ah_hinter_load): Remove unused `new_advance', `start_contour',
+ and `metrics' variables.
+ * src/cff/cffload.c (CFF_Load_Encoding): Remove dead code to avoid
+ compiler warning.
+ * src/cff/cffobjs.c (CFF_Init_Face): Remove unused `base_offset'
+ variable.
+ * src/cff/cffgload.c (CFF_Parse_CharStrings): Remove unused
+ `outline' variable.
+ (cff_compute_bias): Use `U' for constant.
+ * src/cid/cidload.c (cid_decrypt): Ditto.
+ * src/psaux/psobjs.c (T1_Decrypt): Ditto.
+ * src/psaux/t1decode.c (T1_Decoder_Parse_CharStrings): Ditto.
+ * src/sfnt/ttload.c (TT_Load_Kern): Remove unused `version'
+ variable.
+ * src/sfnt/ttsbit.c (TT_Load_SBit_Image): Remove unused `top'
+ variable.
+ * src/truetype/ttgload.c (load_truetype_glyph): Remove unused
+ `num_contours' and `ins_offset' variables.
+ (compute_glyph_metrics): Remove unused `Top' and `x_scale'
+ variables.
+ (TT_Load_Glyph): Remove unused `memory' variable.
+ * src/smooth/ftgrays.c (grays_raster_render): Use `L' for constants.
+
+2001-06-18 Werner Lemberg <wl@gnu.org>
+
+ Make the new error scheme source compatible with older FT versions
+ by introducing another layer.
+
+ * include/freetype/fterrors.h (FT_ERRORDEF_, FT_NOERRORDEF_): New
+ macros.
+ (FT_NOERRORDEF): Removed.
+ * include/*/*err*.h: Use FT_ERRORDEF_ and FT_NOERRORDEF_.
+
+2001-06-16 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/freetype.h (FT_ENC_TAG): New macro.
+ (FT_Encoding_): Use it.
+ * include/freetype/ftimage.h (FT_IMAGE_TAG): Define it
+ conditionally.
+
+2001-06-14 David Turner <david@freetype.org>
+
+ Modified the TrueType interpreter to let it use the new
+ trigonometric functions provided in `fttrigon.h'. This gets rid of
+ some old 64-bit computation routines, as well as many warnings when
+ compiling the library with the `long long' 64-bit integer type.
+
+ * include/freetype/config/ftoption.h: Undefine
+ FT_CONFIG_OPTION_OLD_CALCS.
+ * include/freetype/internal/ftcalc.h: Rearrange use of
+ FT_CONFIG_OPTION_OLD_CALCS.
+ * src/base/ftcalc.c: Add declaration of FT_Int64 if
+ FT_CONFIG_OPTION_OLD_CALCS isn't defined.
+ * src/truetype/ttinterp.c: Use FT_TRIGONOMETRY_H.
+ (Norm): Add a special version if FT_CONFIG_OPTION_OLD_CALCS isn't
+ defined.
+ (Current_Ratio, Normalize): Simplify code.
+
+2001-06-11 Mike Owens <MOwens@amtdatasouth.com>
+
+ * src/base/ftcalc.c (FT_MulDiv, FT_DivFix, FT_Sqrt64): Remove
+ compiler warnings.
+
+2001-06-08 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/configure.in: Renamed to ...
+ * builds/unix/configure.ac: This to make sure that autoconf 2.50 is
+ needed.
+ Run `autoupdate' on it.
+ Increase `version_info' to 7:0:1.
+ * builds/unix/configure: Regenerated.
+
+2001-06-08 David Turner <david@freetype.org>
+
+ * src/autohint/ahhint.c (ah_hinter_load_glyph): Fixed a bug that
+ corrupted transformed glyphs that were auto-hinted (the transform
+ was applied twice).
+
+ Fixed a bug that returned an invalid linear width for composite
+ TrueType glyphs.
+
+ * include/internal/tttypes.h (TT_Loader_): Two new elements `linear'
+ and `linear_def'.
+ * src/truetype/ttgload.c (load_truetype_glyph,
+ compute_glyph_metrics): Use it.
+
+ * include/fttypes.h (FT_ERROR_BASE): New macro.
+ * src/base/ftobjs.c (FT_Open_Face, FT_Render_Glyph_Internal): Use it
+ to make source code work with the new error scheme implemented by
+ Werner.
+ * src/base/ftoutln.c (FT_Outline_Render): Ditto.
+
+2001-06-07 Werner Lemberg <wl@gnu.org>
+
+ Updating to libtool 1.4.0 and autoconf 2.50.
+
+ * builds/unix/ltconfig: Removed.
+ * builds/unix/ltmain.sh, builds/unix/configure.in,
+ builds/unix/aclocal.m4: Updated.
+ * builds/unix/configure: Regenerated.
+
+2001-06-06 Werner Lemberg <wl@gnu.org>
+
+ Complete redesign of error codes. Please check ftmoderr.h for more
+ details.
+
+ * include/freetype/internal/cfferrs.h,
+ include/freetype/internal/tterrors.h,
+ include/freetype/internal/t1errors.h: Removed. Replaced with files
+ local to the module. All extra error codes have been moved to
+ `fterrors.h'.
+
+ * src/sfnt/ttpost.h: Move error codes to `fterrors.h'.
+
+ * src/autohint/aherrors.h, src/cache/ftcerror.h, src/cff/cfferrs.h,
+ src/cid/ciderrs.h, src/pcf/pcferror.h, src/psaux/psauxerr.h,
+ src/psnames/psnamerr.h, src/raster/rasterrs.h, src/sfnt/sferrors.h,
+ src/smooth/ftsmerrs.h, src/truetype/tterrors.h,
+ src/type1/t1errors.h, src/winfonts/fnterrs.h: New files defining the
+ error names for the module it belongs to.
+
+ * include/freetype/ftmoderr.h: New file, defining the module error
+ offsets. Its structure is similar to `fterrors.h'.
+
+ * include/freetype/fterrors.h (FT_NOERRORDEF): New macro.
+ (FT_ERRORDEF): Redefined to use module error offsets.
+ All internal error codes are now public; unused error codes have
+ been removed, some are new.
+
+ * include/freetype/config/ftheader.h (FT_MODULE_ERRORS_H): New
+ macro.
+ * include/freetype/config/ftoption.h
+ (FT_CONFIG_OPTION_USE_MODULE_ERRORS): New macro.
+
+ All other source files have been updated to use the new error codes;
+ some already existing (internal) error codes local to a module have
+ been renamed to give them the same name as in the base module.
+
+ All make files have been updated to include the local error files.
+
+2001-06-06 Werner Lemberg <wl@gnu.org>
+
+ * src/cid/cidtokens.h: Replaced with...
+ * src/cid/cidtoken.h: This file for 8+3 consistency.
+
+ * src/raster/ftraster.c: Use macros for header file names.
+
+ * src/include/freetype/tttables.h (TT_HoriHeader_, TT_VertHeader_):
+ Fix length of `Reserved' array. Note that this isn't the real fix
+ since recent OpenType specs have introduced a `CaretOffset' field
+ instead of the first reserved byte.
+
+2001-05-29 Werner Lemberg <wl@gnu.org>
+
+ * INSTALL: Minor fixes.
+
+
+ * Version 2.0.3 released.
+ =========================
+
+
+2001-05-29 David Turner <david@freetype.org>
+
+ * INSTALL, docs/CHANGES: Updated.
+
+2001-05-25 David Turner <david@freetype.org>
+
+ Moved several documents from the top-level to the `docs' directory.
+
+ * src/base/ftcalc.c (FT_DivFix): Small fix to return value.
+
+2001-05-16 David Turner <david@freetype.org>
+
+ * src/truetype/ttgload.c (load_truetype_glyph): Fixed a bug in the
+ composite loader. Spotted by Keith Packard.
+ * src/base/ftobjs.c (FT_GlyphLoader_Check_Points,
+ FT_GlyphLoader_Check_Subglyphs): Ditto.
+
+2001-05-14 David Turner <david@freetype.org>
+
+ Fixed the incorrect blue zone computations, and improved the
+ composite support. Note that these changes result in improved
+ rendering, while sometimes introducing their own artefacts. This is
+ probably the last big change to the autohinter before the
+ introduction of a complete replacement.
+
+ * src/autohint/ahglobal.c (sort_values): Fix loop.
+ * src/autohint/ahglyph.c: Removed some obsolete code.
+ (ah_outline_compute_edges): Modify code to set the ah_edge_round
+ flag.
+ (ah_outline_compute_blue_edges): Add code to compute active blue
+ zones.
+ * src/autohint/ahhint.c (ah_hinter_glyph_load): Change load_flags
+ value.
+
+ * src/base/ftcalc.c (FT_DivFix): Fixed a bug in the 64-bit code that
+ created incorrect scale factors!
+ (FT_Round_Fix, FT_CeilFix, FT_FloorFix): Minor improvements.
+
+2001-05-12 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/ftbbox.h: FTBBOX_H -> __FTBBOX_H__.
+ * include/freetype/fttrigon.h: __FT_TRIGONOMETRY_H__ ->
+ __FTTRIGON_H__.
+ Include FT_FREETYPE_H.
+ Beautified; added copyright.
+ * src/base/fttrigon.c: Beautified; added copyright.
+
+2001-05-11 David Turner <david@freetype.org>
+
+ * src/cff/cffparse.c (cff_parse_font_matrix), src/cid/cidload.c
+ (parse_font_matrix), src/type1/t1load.c (parse_font_matrix): Fixed
+ the incorrect EM size computation.
+
+ * include/freetype/fttrigon.h, src/base/fttrigon.c: New files,
+ adding trigonometric functions to the core API (using Cordic
+ algorithms).
+ * src/base/ftbase.c, src/base/Jamfile, src/base/rules.mk: Use them.
+
+ * builds/newline: New file.
+ * builds/top_level.mk, builds/detect.mk: Use it. This fixes
+ problems with Make on Windows 2000, as well as problems when `make
+ distclean' is invoked on a non-Unix platform when there is no
+ `config.mk' in the current directory.
+
+ * builds/freetype.mk: Fixed a problem with object deletions under
+ Dos/Windows/OS/2 systems.
+
+ Added new directory to hold tools and test programs.
+
+ * docs/docmaker.py, docs/glnames.py: Moved to...
+ * src/tools/docmaker.py, src/tools/glnames.py: This place.
+ * src/tools/cordic.py: New file used to compute arctangent table
+ needed by fttrigon.c.
+ * src/tools/test_bbox.c, src/tools/test_trig.c: New test files.
+
+ * src/tools/docmaker.py: Improved the script to add the current date
+ at the footer of each web page (useful to distinguish between
+ versions).
+
+ * Jamfile: Fixed incorrect HDRMACRO argument.
+
+ * TODO: Removed the cubic arc bbox computation note, since it has been
+ fixed recently.
+ * src/base/ftbbox.c (test_cubic_zero): Renamed to...
+ (test_cubic_extrema): This function. Use `UL' for unsigned long
+ constants.
+
+ * include/freetype/t1tables.h, include/freetype/config/ftoption.h:
+ Formatting.
+
+2001-05-10 David Turner <david@freetype.org>
+
+ * src/base/ftobjs.c (FT_Open_Face): Fixed a small memory leak
+ which happened when trying to open 0-size font files!
+
+2001-05-09 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/internal/ftcalc.h: Move declaration of
+ FT_SqrtFixed() out of `#ifdef FT_LONG64'.
+
+2001-05-08 Francesco Zappa Nardelli <Francesco.Zappa.Nardelli@ens.fr>
+
+ * src/pcfdriver.c (PCF_Load_Glyph): Fixed incorrect bitmap width
+ computation.
+
+2001-05-08 David Turner <david@freetype.org>
+
+ * docs/docmaker.py: Updated the DocMaker script in order to add
+ command line options (--output,--prefix,--title), fix the erroneous
+ line numbers reported during errors and warnings, and other
+ formatting issues.
+
+ * src/base/ftcalc.c (FT_MulDiv, FT_MulFix, FT_DivFix): Various tiny
+ fixes related to rounding in 64-bits routines and
+ pseudo-`optimizations'.
+
+2001-04-27 David Turner <david@freetype.org>
+
+ * src/base/ftbbox.c (BBox_Cubic_Check): Fixed the coefficient
+ normalization algorithm (invalid final bit position, and invalid
+ shift computation).
+
+2001-04-26 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/config.guess, builds/unix/config.sub: Updated to
+ latest versions from gnu.org.
+
+ * builds/compiler/gcc-dev.mk: Add `-Wno-long-long' flag.
+
+ * include/freetype/internal/ftcalc.h: Define FT_SqrtFixed()
+ unconditionally.
+ * src/base/ftbbox.c: Include FT_INTERNAL_CALC_H.
+ Fix compiler warnings.
+ * src/base/ftcalc.c: Fix (potential) compiler warnings.
+
+2001-04-26 David Turner <david@freetype.org>
+
+ * src/base/ftcalc.c (FT_SqrtFixed): Corrected/optimized the 32-bit
+ fixed-point square root computation. It is now used even with
+ 64-bits integers, as it is _much_ faster than calling FT_Sqrt64 :-)
+
+ * src/base/ftbbox.c: Removed invalid `#include FT_BEZIER_H' line.
+
+2001-04-25 David Turner <david@freetype.org>
+
+ * src/base/ftbbox.c (BBox_Cubic_Check): Rewrote function to use
+ direct computations with 16.16 values instead of sub-divisions. It
+ is now slower, but proves a point :-)
+
+ * src/raster/ftraster.c, src/smooth/ftgrays.c, src/base/ftbbox.c:
+ Fixed the Bézier stack depths.
+
+ * src/base/ftcalc.c (FT_MulFix): Minor rounding fix.
+
+ * builds/beos: Added BeOS-specific files to the old build system
+ (no changes were necessary to support BeOS in the Jamfile though).
+
+2001-04-20 David Turner <david@freetype.org>
+
+ * ftconfig.h, ftoption.h: Updated `ftconfig.h' to detect 64-bit int
+ types on platforms where Autoconf is not available). Also removed
+ FTCALC_USE_LONG_LONG and replaced it with
+ FT_CONFIG_OPTION_FORCE_INT64.
+
+ * builds/win32/freetype.dsp: Updated the Visual C++ project file.
+ Doesn't create a DLL yet.
+
+ * cffgload.c: Removed a compilation warning.
+
+2001-04-10 Tom Kacvinsky <tkacvins@freetype.org>
+
+ * t1load.c (parse_charstrings): Changed code for placing .notdef
+ glyph into slot 0 so that we no longer have a memory access
+ violation.
+
+ * t1load.h: In structure T1_Loader, added swap_table (of type
+ PS_Table) to facilitate placing the .notdef glyph into slot 0.
+
+2001-04-10 Francesco Zappa Nardelli <francesco.zappa.nardelli@ens.fr>
+
+ * src/pcf/pcfdriver.c (PCF_Get_Char_Index): Fix return value.
+
+2001-04-09 Laurence Withers <lwithers@lwithers.demon.co.uk>
+
+ * builds/dos/detect.mk: Add support for bash.
+
+2001-04-05 Werner Lemberg <wl@gnu.org>
+
+ * builds/os2/*.mk: These files have been forgotten to update to
+ the structure of similar makefiles.
+ * builds/dos/*.mk: Ditto.
+ * builds/ansi/*.mk: Ditto.
+
+ * builds/win32/win32-def.mk (BUILD): Fix typo.
+
+ * builds/compiler/*.mk (CLEAN_LIBRARY): Don't use NO_OUTPUT.
+ This is already used in the link_*.mk files.
+
+2001-04-03 Werner Lemberg <wl@gnu.org>
+
+ * src/*/Jamfile: Slight changes to make files more cryptic.
+
+2001-04-03 Werner Lemberg <wl@gnu.org>
+
+ * Jamfile, src/Jamfile, src/*/Jamfile: Formatted. Slight changes
+ to give files identical structure.
+
+2001-04-02 Werner Lemberg <wl@gnu.org>
+
+ * CHANGES: Reformatted, minor fixes.
+ * TODO: Updated.
+ * README: Formatting.
+ * include/freetype/freetype.h: Formatting.
+
+ * Jamfile: Fix typo.
+
+ * src/cff/cffparse.c: Move error code #defines to...
+ * include/freetype/internal/cfferrs.h: This file.
+ * src/cff/cffdrivr.c, src/cff/cffobjs.c, src/cff/cffload.c: Replaced
+ `FT_Err_*' with `CFF_Err_*'.
+ * src/cid/cidparse.c: Replaced `FT_Err_*' with `T1_Err_*'.
+ * src/psaux/psobjs.c, src/psaux/t1decode.c: Ditto.
+ * src/sfnt/sfobcs.c, src/sfnt/ttload.c: Replaced `FT_Err_*' with
+ `TT_Err_*'.
+ * src/truetype/ttgload.c, src/truetype/ttobjs.c: Ditto.
+ * src/type1/t1gload.c, src/type1/t1load.c, src/type1/t1objs.c,
+ src/type1/t1parse.c: Replaced `FT_Err_*' with `T1_Err_*'.
+
+ * include/freetype/internal/cfferrs.h: Add
+ `CFF_Err_Unknown_File_Format'.
+ * include/freetype/internal/t1errors.h: Add
+ `T1_Err_Unknown_File_Format'.
+ * include/freetype/internal/tterrors.h: Add
+ `TT_Err_Unknown_File_Format'.
+
+ * src/cff/cffload.h: Add `cff_*_encoding' and `cff_*_charset'
+ references.
+ * src/psaux/psobjs.c: Include `FT_INTERNAL_TYPE1_ERRORS_H'.
+
+ * src/cff/cffobjs.c (CFF_Init_Face, CFF_Done_Face): Use
+ FT_LOCAL_DEF.
+ * src/cid/cidobjs.c (CID_Done_Driver): Ditto.
+ * src/trutype/ttobjs.c (TT_Init_Face, TT_Done_Face, TT_Init_Size):
+ Ditto.
+ * src/type1/t1objs.c (T1_Done_Driver): Ditto.
+ * src/pcf/pcfdriver.c (PCF_Done_Face): Ditto.
+ * src/pcf/pcf.h: Use FT_LOCAL for `PCF_Done_Face'.
+
+2001-04-02 Tom Kacvinsky <tkacvins@freetype.org>
+
+ * src/sfnt/ttload.c (TT_Load_Metrics): Fix an improper pointer
+ dereference. Submitted by Herbert Duerr <duerr@sun.com>.
+
+2001-03-26 Tom Kacvinsky <tkacvins@freetype.org>
+
+ * include/freetype/config/ftconfig.h: Changed hexadecimal
+ constants to use suffix U to avoid problems with HP-UX's c89
+ compiler. Submitted by G.W. Lucas <glucas@sonalysts.com>.
+
+2001-03-24 David Turner <david.turner@freetype.org>
+
+ * Jamrules, Jamfile, src/Jamfile, src/*/Jamfile: Adding jamfiles to
+ the source tree. See www.freetype.org/jam/index.html for details.
+
+
+ * Version 2.0.2 released.
+ =========================
+
+
+2001-03-20 Werner Lemberg <wl@gnu.org>
+
+ * builds/win32/detekt.mk: Fix .PHONY target for Intel compiler.
+
+2001-03-20 David Turner <david.turner@freetype.org>
+
+ * include/freetype/config/ftheader.h, include/freetype/ftsnames.h:
+ Renamed `ftnames.h' to `ftsnames.h', and FT_NAMES_H to
+ FT_SFNT_NAMES_H.
+
+ * docs/docmaker.py: Added generation of INDEX link in table of
+ contents.
+
+ * INSTALL, docs/BUILD: Updated documentation to indicate that the
+ compilation process has changed slightly (no more `src' required in
+ the include path).
+
+ * builds/*/*-def.mk: Changed the objects directory from `obj' to
+ `objs'.
+
+ * include/freetype/config/ftheader.h: Removed obsolete macros like
+ FT_SOURCE_FILE, etc. and added cache-specific macro definitions that
+ were previously defined in <freetype/ftcache.h>. Added comments to
+ be included in a new API Reference section.
+
+ * src/*/*: Removed the use of FT_SOURCE_FILE, etc. Now, each
+ component needs to add its own directory to the include path at
+ compile time. Modified all `rules.mk' and `descrip.mms'
+ accordingly.
+
+2001-03-20 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/configure.in: Add $ft_version.
+ * builds/unix/freetype-config.in: Use it.
+ * builds/unix/configure: Updated.
+
+2001-03-19 Tom Kacvinsky <tkacvins@freetype.org>
+
+ * src/type1/t1load.c (parse_font_matrix): Assign the units per em
+ value an unsigned short value, first by shifting right 16 bits,
+ then by casting the results to FT_UShort.
+
+ * src/cff/cffparse.c (cff_parse_font_bbox): Assign the units per em
+ value an unsigned short value, first by shifting right 16 bits,
+ then by casting the results to FT_UShort.
+
+2001-03-17 David Turner <david.turner@freetype.org>
+
+ * src/cid/cidobjs.c, src/cid/cidload.c, src/pcf/pcfread.c,
+ src/type1/t1load.c, src/type1/t1objs.c: Added a few casts to remove
+ compiler warnings in pedantic modes.
+
+ * include/config/ft2build.h, include/config/ftheader.h: The file
+ `ft2build.h' was renamed to `ftheader.h' to avoid conflicts with the
+ top-level <ft2build.h>.
+
+ * include/config/ftheader.h: Added new section describing the #include
+ macros.
+
+2001-03-17 Tom Kacvinsky <tkacvins@freetype.org>
+
+ * src/cff/cffparse.c (cff_parse_font_bbox): Obtain rounded FT_Fixed
+ values for the bounding box numbers.
+
+ * src/cff/cffobjs.c (CFF_Init_Face): When processing a CFF/CEF font,
+ set `root->ascender' (`root->descender') to the integer part of
+ `root->bbox.yMax' (`root->bbox.yMin', respectively).
+
+2001-03-16 Tom Kacvinsky <tkacvins@freetype.org>
+
+ * src/cff/cffdrivr.c (get_cff_glyph_name): New function. Used in
+ cff_get_interface to facilitate getting a glyph name for glyph index
+ via FT_Get_Glyph_Name().
+
+ (cff_get_interface): Added support for getting a glyph name via the
+ `glyph_name' module interface. Uses the new function
+ get_cff_glyph_name().
+ Submitted by Sander van der Wal <svdwal@xs4all.nl>.
+
+ * src/cff/cffobjs.c (CFF_Init_Face): Logical or the face flags with
+ FT_FACE_FLAG_GLYPH_NAMES only if FT_CONFIG_OPTION_NO_GLYPH_NAMES is
+ not defined. This is to add support for getting a glyph name from a
+ glyph index via FT_Get_Glyph_Name().
+ Submitted by Sander van der Wal <svdwal@xs4all.nl>.
+
+ * src/cff/cffgload.c (CFF_Parse_CharStrings): Added support for
+ deprecated operator `dotsection'.
+ Submitted by Sander van der Wal <svdwal@xs4all.nl>.
+
+2001-03-12 Werner Lemberg <wl@gnu.org>
+
+ * src/psaux/t1decode.c (T1_Decoder_Parse_Charstrings): Fix error
+ messages.
+
+ * INSTALL, docs/BUILD: We need GNU make 3.78.1 or newer.
+
+2001-03-12 Tom Kacvinsky <tkacvins@freetype.org>
+
+ * include/freetype/internal/psaux.h: Changed the lenIV member of
+ the T1_Decoder_ struct to be an FT_Int instead of an FT_UInt.
+
+ * src/psaux/t1decode.c (T1_Decoder_Parse_Charstrings): Adjust
+ for lenIV seed bytes at the start of a decrypted subroutine.
+
+ * src/cid/cidload.c (cid_read_subrs): Decrypt subroutines only
+ if lenIV >= 0.
+
+ * src/cid/cidgload.c (cid_load_glyph): Decrypt charstrings only
+ if lenIV >= 0.
+
+2001-03-11 Werner Lemberg <wl@gnu.org>
+
+ * TODO: Updated.
+
+ * src/pcf/pcfread.c: Put READ_Fields() always in a conditional to
+ avoid compiler warnings.
+
+2001-03-10 Tom Kacvinsky <tkacvins@freetype.org>
+
+ * TODO: New file.
+
+ * include/freetype/freetype.h: Added prototypes and notes for
+ three new functions: FT_RoundFix, FT_CeilFix, and FT_FloorFix.
+ * src/base/ftcalc.c (FT_RoundFix, FT_CeilFix, FT_FloorFix): Added
+ implementation code.
+
+ * src/cid/cidobjs.c (CID_Init_Face): Use calculated units_per_EM,
+ and if that is not available, default to 1000 units per EM. Changed
+ assignment code for ascender and descender values.
+ * src/cid/cidload.c (parse_font_matrix): Added units_per_EM
+ processing.
+ (parse_font_bbox): Changed to use FT_Fixed number handling.
+
+ * src/type1/t1objs.c (T1_Init_Face): Changed the assignment code
+ for ascender, descender, and max_advance_width.
+ * src/type1/t1load.c (parse_font_bbox): Changed to use FT_Fixed
+ number handling.
+
+2001-03-10 Henrik Grubbström <grubba@roxen.com>
+
+ * src/*/*.c: Added many casts to make code more 64bit-safe.
+
+2001-03-07 Werner Lemberg <wl@gnu.org>
+
+ * INSTALL, docs/BUILD: We need GNU make 3.78 or newer.
+
+2001-03-07 Tom Kacvinsky <tkacvins@freetype.org>
+
+ * src/type1/t1objs.c (T1_Init_Face): Minor correction: We must wait
+ until parse_font_bbox is changed before we use logical shift rights
+ in the assignments of `root->ascender', `root->descender', and
+ `root->max_advance_width'.
+
+ (T1_Done_Face): Free `char_name' table to avoid a memory leak.
+ Submitted by Sander van der Wal <svdwal@xs4all.nl>.
+
+2001-03-05 Tom Kacvinsky <tkacvins@freetype.org>
+
+ * src/cff/cffgload.c (CFF_Load_Glyph): Set glyph control data to the
+ the Type 2 glyph charstring (used by conversion programs).
+ Submitted by Ha Shao <hashao@chinese.com>.
+
+2001-03-04 Antoine Leca <Antoine.Leca@renault.fr>
+
+ * include/freetype/ttnameid.h: Correct a stupid typo which prevented
+ correct compilation (TT_MS_LANGID_TIGRIGNA_ETHIOPIA appeared twice).
+
+2001-03-04 Werner Lemberg <wl@gnu.org>
+
+ * src/autohint/ahtypes.h (AH_Hinter): Add elements
+ `disable_horz_edges', `disable_vert_edges'.
+ * src/autohint/ahhint.c (ah_hint_edges_3, ah_hinter_hint_edges): Use
+ them (and remove static variables with the same names).
+ * src/pcf/pcfutil.c (BitOrderInvert): Add `const'.
+ * docs/glnames.py: Updated to latest pstables.h changes.
+
+ * builds/unix/detect.mk: Add test for Hurd.
+ * builds/hurd/detect.mk: Removed.
+
+2001-03-04 Sander van der Wal <svdwal@xs4all.nl>
+
+ * src/psnames/pstables.h: Add more `const'.
+ * src/pcf/pcfutil.c: Ditto.
+
+2001-03-04 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftglyph.c (FT_Glyph_To_Bitmap): Fixing typo
+ (FT_Glyph_Done -> FT_Done_Glyph).
+
+2001-03-01 Antoine Leca <Antoine.Leca@renault.fr>
+
+ * include/freetype/ttnameid.h: Added some new Microsoft language
+ codes and LCIDs as found in Office Xp.
+
+2001-02-28 David Turner <david.turner@freetype.org>
+
+ * builds/hurd/detect.mk: New file. Added support to detect the GNU
+ Hurd operating system as Unix-like. Fix submitted by Anthony Fok
+ <foka@debian.org>.
+
+ * src/type1/t1gload.c (T1_Load_Glyph): Set glyph control data to the
+ the Type 1 glyph charstring (used by conversion programs).
+ Submitted by Ha Shao <hashao@chinese.com>.
+
+2001-02-22 David Turner <david.turner@freetype.org>
+
+ * src/base/ftgrays.c (grays_sweep): The function didn't exit
+ immediately if `num_cells' was 0 as it should. Thanks to Boris for
+ finding this out.
+
+ * src/base/ftglyph.c (FT_Glyph_To_Bitmap): Fixed memory leak when
+ bitmap rendering fails (thanks to Graham Asher).
+
+2001-02-13 Werner Lemberg <wl@gnu.org>
+
+ * docs/docmaker.py (DocSection::add_element): Use
+ `self.print_error()'.
+
+ * builds/unix/config.{guess,sub}: Updated (from ftp.gnu.org).
+
+2001-02-13 David Turner <david.turner@freetype.org>
+
+ * docs/docmaker.py, include/freetype/*.h: Updated the DocMaker
+ script to support chapters and section block ordering. Updated the
+ public header files accordingly.
+
+ * src/base/ftglyph.c (FT_Glyph_Copy): Advance width and glyph format
+ were not correctly copied.
+
+2001-02-08 Tom Kacvinsky <tkacvins@freetype.org>
+
+ * src/cff/cffparse.c (cff_parse_font_matrix): Removed an
+ unnecessary fprintf( stderr, ... ).
+
+2001-02-07 Tom Kacvinsky <tkacvins@freetype.org>
+
+ * src/type1/t1objs.c (T1_Init_Face): Added code to get the
+ units_per_EM from the value assigned in parse_font_matrix, if
+ available. Default to 1000 if not available.
+
+ * src/cff/cffparse.c (cff_parse_font_matrix): Added logic to get
+ the units_per_EM from the FontMatrix.
+
+ (cff_parse_fixed_thousand): New function. Gets a real number from
+ the CFF font, but multiplies by 1000 (this is to avoid rounding
+ errors when placing this real number into a 16.16 fixed number).
+
+ (cff_parse_real): Added code so that the integer part is moved
+ into the high sixteen bits of the 16.16 fixed number.
+
+ * src/cff/cffobjs.c (CFF_Init_Face): Added logic to get the units
+ per EM from the CFF dictionary, if available.
+
+ * include/freetype/internal/cfftypes.h: In struct CFF_Font_Dict_,
+ added a units_per_em member to facilitate passing of units_per_em
+ from function cff_parse_font_matrix.
+
+ * src/type1/t1load.c (is_alpha): Make `-' a legal alphanumeric
+ character. This is so that font names with `-' are fully parsed,
+ etc...
+
+2001-02-02 Werner Lemberg <wl@gnu.org>
+
+ * src/psaux/psobjs.c (shift_elements): Remove if clause (which is
+ obsolete now).
+
+ (reallocate_t1_table, PS_Table_Done): Replace REALLOC() with ALLOC()
+ + MEM_Copy() to avoid a memory bug.
+
+2001-02-01 David Turner <david.turner@freetype.org>
+
+ * docs/docmaker.py: Improved the index sorting routine to place
+ capital letters before small ones. Added the `<order>' marker to
+ section blocks in order to give the order of blocks.
+
+2001-01-30 Antoine Leca <Antoine.Leca@renault.fr>
+
+ * include/freetype/ttnameid.h: Latest updates to Microsoft language
+ ID codes.
+
+2001-01-24 Tom Kacvinsky <tkacvins@freetype.org>
+
+ * src/cff/t1load.c (parse_font_matrix): Added heuristic to get
+ units_per_EM from the font matrix.
+
+ (parse_dict): Deleted test to see whether the FontInfo keyword has
+ been seen. Deletion of this test allows fonts without FontInfo
+ dictionaries to be parsed by the Type 1 driver.
+
+ (T1_Open_Face): Deleted empty subroutines array test to make sure
+ fonts with no subroutines still are parsed.
+
+2001-01-17 Francesco Zappa Nardelli <francesco.zappa.nardelli@ens.fr>
+
+ * src/pcfread.c (pcf_get_properties, pcf_get_metrics,
+ pcf_get_bitmaps): Fix compiler errors.
+
+2001-01-11 David Turner <david.turner@freetype.org>
+
+ * src/pcf/pcfread.c: Removed some compilation warnings related
+ to comparison of signed vs. unsigned integers.
+
+ * include/freetype/internal/ftdebug.h: Changed the debug trace
+ constants from trace_t2xxxx to trace_cffxxxx to be able to compile
+ the CFF driver in debug mode.
+
+2001-01-11 Matthew Crosby <mcrosby@marthon.org>
+
+ * builds/unix/freetype-config.in: Fix problems with separate
+ --prefix and --exec-prefix.
+
+2001-01-11 David Turner <david.turner@freetype.org>
+
+ * docs/docmaker.py: Added cross-references generation as well as
+ more robust handling of pathname wildcard matching.
+
+2001-01-10 Werner Lemberg <wl@gnu.org>
+
+ * docs/docmaker.py: Minor improvements to reduce unwanted spaces
+ and empty lines in output.
+
+2001-01-09 David Turner <david.turner@freetype.org>
+
+ * docs/docmaker.py: Improved script to generate table of contents
+ and index pages. It also supports wildcards on non Unix systems.
+
+ * include/freetype/*.h, include/freetype/cache/*.h: Updated comments
+ to include section definitions/delimitations for the API Reference
+ generator.
+
+ * include/freetype/freetype.h: Moved declaration of
+ `FT_Generic_Finalizer' and the `FT_Generic' structure to...
+ * include/freetype/fttypes.h: here.
+
+2001-01-04 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/ttnameid.h: Updated Unicode code range comments.
+
+2001-01-03 Tom Kacvinsky <tkacvins@freetype.org>
+
+ * src/cff/rules.mk: Use cffgload.{c,h} instead of t2gload.{c,h}.
+
+ * include/freetype/internal/internal.h: Changed to use cfftypes.h
+ (cfferrs.h) instead of t2types.h (t2errors.h, respectively).
+
+ * include/freetype/internal/cfftypes.h: Merged in changes from
+ t2types.h and made this the canonical `types' header for the CFF
+ driver.
+
+ * include/freetype/internal/t2types.h: This file was merged with
+ cfftypes.h and is no longer necessary.
+
+ * include/freetype/internal/t2errors.h: Renamed to cfferrs.h.
+
+ * src/cff/cffobjs.c, src/cff/cffobjs.h, src/cff/cffparse.c,
+ src/cff/cffdrivr.c, src/cff/cff.c, src/cff/cffload.c,
+ src/cff/cffgload.c, src/cff/cffgload.h: Changed to use
+ cffgload.{c,h} instead of t2gload.{c,h}. All occurrences of t2_
+ (T2_) were replaced with cff_ (CFF_, respectively).
+
+ * src/cff/t2gload.h: Renamed cffgload.h.
+
+ * src/cff/t2gload.c: Renamed cffgload.c
+
+2000-01-02 Jouk Jansen <joukj@hrem.stm.tudelft.nl>
+
+ * builds/vms: Support files for VMS architecture added.
+ * descrip.mms, src/*/descrip.mms: VMS makefiles added.
+ * README.VMS: New file.
+
+2000-01-01 Werner Lemberg <wl@gnu.org>
+
+ * LICENSE.TXT: Added info about PCF driver license.
+
+2001-01-01 Francesco Zappa Nardelli <francesco.zappa.nardelli@ens.fr>
+
+ * src/pcf/*: New driver module for PCF font format (used in
+ X Window System).
+ * include/freetype/internal/ftdebug.h (FT_Trace): Added values for
+ PCF driver.
+ * include/freetype/internal/pcftypes.h: New file.
+ * include/freetype/config/ftmodule.h: Added PCF driver module.
+
+2001-01-01 Werner Lemberg <wl@gnu.org>
+
+ * src/winfonts/winfnt.c (FNT_Get_Char_Index): Fix parameter type.
+
+2000-12-31 Werner Lemberg <wl@gnu.org>
+
+ * builds/modules.mk (clean_module_list): Fixed deletion of module
+ file in case `make make_module_list' is called before `make setup'.
+
+2000-12-30 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cffload.c (CFF_Load_Charset): Improved error messages.
+ (CFF_Load_Charset, CFF_Load_Encoding): Remove unnecessary variable
+ definition.
+
+2000-12-30 Tom Kacvinsky <tkacvins@freetype.org>
+
+ * include/freetype/internal/t2types.h,
+ include/freetype/internal/cfftypes.h: Changed the structures for
+ CFF_Encoding and CFF_Encoding for the new implementations of the
+ charset and encoding parsers in the CFF driver.
+
+ * src/cff/t2gload.c (t2_lookup_glyph_by_stdcharcode,
+ t2_operator_seac): Added these functions for use in implementing the
+ seac emulation provided by the Type 2 endchar operator.
+ (T2_Parse_CharStrings): Added seac emulation for the endchar
+ operator.
+
+ * src/cff/cffload.c (CFF_Load_Encoding, CFF_Load_Charset,
+ CFF_Done_Encoding, CFF_Done_Charset): Extended to load and parse the
+ charset/encoding tables, and free the memory used by them when the
+ CFF driver is finished with them. Added tables
+
+ cff_isoadobe_charset
+ cff_expert_charset
+ cff_expertsubset_charset
+ cff_standard_encoding
+ cff_expert_encoding
+
+ so that the encoding/charset parser can handle predefined encodings and
+ charsets.
+
+2000-12-24 Tom Kacvinsky <tkacvins@freetype.org>
+
+ * src/cff/t2gload.c (T2_Load_Glyph): Added code so that the font
+ transform is applied.
+
+ * src/cff/cffparse.c (cff_parse_font_matrix): Added code so that
+ the font matrix numbers are scaled by 1/(matrix->yy). Also, the
+ offset vector now contains integer values instead of 16.16 fixed
+ numbers.
+
+2000-12-22 Tom Kacvinsky <tkacvins@freetype.org>
+
+ * src/autohint/ahhint.c (ah_hinter_load_glyph):
+ Removed unnecessary comments and commented-out code.
+
+2000-12-21 David Turner <david.turner@freetype.org>
+
+ * src/cid/cidafm.c, src/cid/cidafm.h: removed un-needed files,
+ we'll work on supporting CID AFM files later I guess :-)
+
+2000-12-21 Tom Kacvinsky <tkacvins@freetype.org>
+
+ * src/autohint/ahhint.c (ah_hinter_load, ah_hinter_load_glyph):
+ Changed so that fonts with a non-standard FontMatrix render
+ correctly. Previously, the first glyph rendered from such a
+ font did not have the transformation matrix applied.
+
+2000-12-17 Werner Lemberg <wl@gnu.org>
+
+ * *.mk: Added lots of `.PHONY' targets.
+
+2000-12-17 Karsten Fleischer <kfleisc1@ford.com>
+
+ * *.mk: Implemented `platform' target to disable auto-detection.
+
+2000-12-14 Werner Lemberg <wl@gnu.org>
+
+ * docs/design/modules.html: Removed. Covered by design-*.html.
+
+ * INSTALL: Added info about makepp.
+
+2000-12-14 David Turner <david.turner@freetype.org>
+
+ Added support for clipped direct rendering in the smooth renderer.
+ This should not break binary compatibility of existing applications.
+
+ * include/freetype/fttypes.h, include/freetype/ftimage.h: Move
+ definition of the FT_BBox structure from the former to the latter.
+ * include/freetype/ftimage.h: Add `ft_raster_flag_clip' value to
+ FT_Raster_Flag enumeration.
+ Add `clip_box' element to FT_Raster_Params structure.
+ * src/smooth/ftgrays.c (grays_convert_glyph): Implement it.
+
+ * INSTALL: Updated installation instructions on Win32, listing the
+ new `make setup list' target used to list supported
+ compilers/targets.
+
+ * src/raster/ftraster.c (ft_black_render): Test for unsupported
+ direct rendering before testing arguments.
+
+2000-12-13 David Turner <david.turner@freetype.org>
+
+ * include/freetype/config/ft2build.h,
+ include/freetype/internal/internal.h: Fixed header inclusion macros
+ to use direct definitions. This is the only way to do these things
+ in a portable way :-( The rest of the code should follow shortly
+ though everything compiles now.
+
+ * builds/compiler/intelc.mk, builds/compiler/watcom.mk: New files.
+
+ * builds/win32/detect.mk: Added support for the Intel C/C++
+ compiler, as well as _preliminary_ (read: doesn't work!) support for
+ Watcom. Also added a new setup target. Type `make setup list' for
+ a list of supported command-line compilers on Win32.
+
+ * src/base/ftdebug.c: Added dummy symbol to avoid empty file if
+ conditionals are off.
+
+2000-12-13 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/ftsystem.c: Fixed typos. Fixed inclusion of wrong
+ ftconfig.h file.
+
+2000-12-12 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/config/ft2build.h (FT2_ROOT, FT2_CONFIG_ROOT):
+ Removed. ANSI C doesn't (explicitly) allow macro expansion in
+ arguments using `##'.
+ (FT2_PUBLIC_FILE, FT2_CONFIG_FILE, FT2_INTERNAL_FILE): Use directory
+ names directly. Make them configurable. Use `##' to strip leading
+ and trailing spaces from arguments.
+
+ * builds/unix/ft2unix.h: Adapted.
+
+ * src/base/ftsystem.c (ft_alloc, ft_realloc, ft_free, ft_io_stream,
+ ft_close_stream): Use FT_CALLBACK_DEF.
+
+ * builds/unix/ftsystem.c: Use new header scheme.
+ (FT_Done_Memory): Use free() from FT_Memory structure.
+
+ * src/base/ftinit.c, src/base/ftmac.c: Header scheme fixes.
+
+2000-12-11 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/config/ft2build.h (FT2_CONFIG_ROOT,
+ FT2_PUBLIC_FILE, FT2_CONFIG_FILE, FT2_INTERNAL_FILE,
+ FT_SOURCE_FILE): Use `##' operator to be really ANSI C compliant.
+
+2000-12-09 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/detect.mk: Remove unused USE_CFLAGS variable.
+
+2000-12-08 Werner Lemberg <wl@gnu.org>
+
+ * */*.h: Changed body inclusion macro names to start and end with
+ `__' (those which haven't converted yet). Fixed minor conversion
+ issues.
+
+ * src/winfonts/winfnt.c: Updated to new header inclusion scheme.
+
+ * src/truetype/ttinterp.c: Remove unused CALC_Length() macro.
+
+2000-12-07 David Turner <david.turner@freetype.org>
+
+ * */*.[ch]: Changed source files to adhere to the new
+ header inclusion scheme. Not completely tested but works for now
+ here.
+
+ * src/cff/t2driver.c: Renamed and updated to...
+ * src/cff/cffdrivr.c: New file.
+ * src/cff/t2driver.h: Renamed and updated to...
+ * src/cff/cffdrivr.h: New file.
+ * src/cff/t2load.c: Renamed and updated to...
+ * src/cff/cffload.c: New file.
+ * src/cff/t2load.h: Renamed and updated to...
+ * src/cff/cffload.h: New file.
+ * src/cff/t2objs.c: Renamed and updated to...
+ * src/cff/cffobjs.c: New file.
+ * src/cff/t2objs.h: Renamed and updated to...
+ * src/cff/cffobjs.h: New file.
+ * src/cff/t2parse.c: Renamed and updated to...
+ * src/cff/cffparse.c: New file.
+ * src/cff/t2parse.h: Renamed and updated to...
+ * src/cff/cffparse.h: New file.
+ * src/cff/t2tokens.h: Renamed and updated to...
+ * src/cff/cfftoken.h: New file.
+
+ * src/cff/cff.c, src/cff/rules.mk: Updated.
+
+2000-12-06 David Turner <david.turner@freetype.org>
+
+ * src/cache/ftlru.c (FT_Lru_Done): Fixed memory leak.
+
+2000-12-06 Werner Lemberg <wl@gnu.org>
+
+ * builds/module.mk: Replaced `xxx #' with `xxx$(space).
+ * builds/os2/detekt.mk, builds/win32/detekt.mk: Moved comment to
+ avoid trailing spaces in variable.
+ * builds/freetype.mk: Use $(D) instead of $D to make statement more
+ readable.
+
+ * docs/docmaker.py: Formatting.
+
+2000-12-05 David Turner <david.turner@freetype.org>
+
+ * src/psaux/psauxmod.c: Fixed a broken inclusion of component
+ header files (an FT_FLAT_COMPILE test was missing).
+
+ * src/cache/ftcmanag.c (FTC_Manager_Done): Fixed a bug that caused
+ an occasional crash when the function was called (due to a dangling
+ pointer).
+
+ * src/base/ftsystem.c (FT_Done_Memory): Fixed an obvious bug:
+ The ANSI `free()' function was called instead of `memory->free()'.
+
+ * docs/docmaker.py: Added section filtering, multi-page generation
+ (index page generation is still missing though).
+
+2000-12-04 David Turner <david.turner@freetype.org>
+
+ * builds/unix/install.mk, builds/unix/ft2unix.h: The file `ft2unix.h'
+ is now installed as <ft2build.h> for Unix systems. Note that we
+ still use the `freetype2/freetype' installation path for now.
+
+ * */*.[ch]: Now using <ft2build.h> as the default build and setup
+ configuration file in all public headers. Internal source files
+ still need some changes though.
+
+ * builds/devel/ft2build.h, builds/devel/ftoption.h: Created a new
+ directory to hold all development options for both the Unix and
+ Win32 developer builds.
+
+ * builds/win32/detect.mk, builds/win32/w32-bccd.mk,
+ builds/win32/w32-dev.mk: Changed the developer build targets to
+ `devel-gcc' and `devel-bcc' in order to be able to develop with the
+ Borland C++ compiler.
+
+2000-12-01 David Turner <david.turner@freetype.org>
+
+
+ * Version 2.0.1 released.
+ =========================
+
+
+ * builds/unix/configure.in, builds/unix/configure,
+ builds/cygwin/configure.in, builds/cygwin/configure: Setting
+ `version_info' to 6:1:0 for the 2.0.1 release.
+
+ * CHANGES: Added a summary of changes between 2.0.1 and 2.0.
+
+ * builds/unix/ftconfig.in, builds/cygwin/ftconfig.in: Changes
+ to allow compilation under Unix with the Unix-specific config
+ files.
+
+2000-12-01 Werner Lemberg <wl@gnu.org>
+
+ * INSTALL: Revised.
+ * builds/compiler/bcc-dev.mk, builds/compiler/visualage.mk,
+ builds/compiler/bcc.mk, builds/win32/w32-bcc.mk,
+ builds/win32/w32-bccd.mk: Revised.
+ * include/freetype/config/ftbuild.h,
+ include/freetype/internal/internal.h: Revised.
+ * include/freetype/ftimage.h: Updated to new header inclusion scheme.
+
+2000-11-30 Werner Lemberg <wl@gnu.org>
+
+ * builds/toplevel.mk (.PHONY): Adding `distclean'.
+ * builds/unix/detect.mk (.PHONY): Adding `devel', `unix', `lcc',
+ `setup'.
+
+2000-11-30 David Turner <david.turner@freetype.ogr>
+
+ * INSTALL: Slightly updated the quick starter documentation to
+ include IDE compilation, prevent against BSD Make, and specify `make
+ setup' instead of a single `make' for build configuration.
+
+ * include/config/ftbuild.h, include/internal/internal.h: Added new
+ configuration files used to determine the location of all public,
+ configuration, and internal header files for FreeType 2. Modified
+ all headers under `include/freetype' to reflect this change. Note
+ that we still need to change the library source files themselves
+ though.
+
+ * builds/compiler/bcc.mk, builds/compiler/bcc-dev.mk,
+ builds/win32/w32-bcc.mk, builds/win32/w32-bccd.mk,
+ builds/win32/detect.mk: Added new files to support compilation with
+ the free Borland C++ command-line compiler. Modified the detection
+ rules to recognize the new `bcc32' target in `make setup bcc32'.
+
+ * src/sfnt/ttcmap.c, src/sfnt/ttpost.c, src/sfnt/ttsbit.c,
+ src/truetype/ttobjs.c, src/truetype/ttgload.c,
+ src/truetype/ttinterp.c: Fixed a few comparisons that Borland C++
+ didn't really like. Basically, this compiler complains when FT_UInt
+ is compared to FT_UShort (apparently, it promotes `UShort' to `Int'
+ in these cases).
+
+2000-11-30 Tom Kacvinsky <tkacvins@freetype.org>
+
+ * t2objs.c (T2_Init_Face): Added calculation of `face->height' for
+ pure CFF fonts.
+
+ * t1objs.c (T1_Init_Face): Fixed computation of `face->height'.
+
+2000-11-29 David Turner <david.turner@freetype.org>
+
+ * src/base/ftbbox.c (BBox_Conic_Check): Fixed a really stupid
+ bug in the formula used to compute the conic Bézier extrema
+ of non-monotonous arcs.
+
+2000-11-29 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftcalc.c (FT_SqrtFixed), src/base/ftobjs.c
+ (FT_Set_Renderer): Use FT_EXPORT_DEF.
+ * src/cache/ftcimage.c (FTC_Image_Cache_Lookup),
+ src/cache/ftcmanag.c (FTC_Manager_Done, FTC_Manager_Reset,
+ FTC_Manager_Lookup_Face, FTC_Manager_Lookup_Size,
+ FTC_Manager_Register_Cache), src/cache/ftcsbits.c
+ (FTC_SBit_Cache_Lookup): Ditto.
+
+ * src/include/freetype/cache/ftcglyph.h (FTC_GlyphNode_Init),
+ src/include/freetype/ftmac.h (FT_New_Face_From_FOND): Use FT_EXPORT.
+
+2000-11-29 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/sfdriver.c: Include ttsbit.h and ttpost.h only
+ conditionally.
+
+ * src/truetype/ttdriver.c (Set_Char_Sizes, Set_Pixel_Sizes): Set
+ `size->strike_index' only conditionally.
+
+ * src/type1/t1driver.c, src/type1/t1objs.c: Include t1afm.h only
+ conditionally.
+
+ * src/winfonts/winfnt.h: Move all type definitions to...
+ * src/include/freetype/internal/fnttypes.h: New file.
+ * src/winfonts/winfnt.c: Use it.
+
+2000-11-29 ??? ??? <darin@eazel.com>
+
+ * include/freetype/internal/ftdebug.h: Replaced FT_CAT and FT_XCAT
+ with a direct solution (which also satisfies picky compilers).
+
+2000-11-28 YAMANO-UCHI Hidetoshi <mer@din.or.jp>
+
+ * src/truetype/ttobjs.c (TT_Init_Size): Fix #ifdef's to work with
+ disabled interpreter also.
+
+ * src/base/ftnames.c (FT_Get_Sfnt_Name_Count): Fix incorrect
+ parentheses.
+
+2000-11-26 Tom Kacvinsky <tkacvins@freetype.org>
+
+ * src/cff/t2gload.c (T2_Parse_CharStrings): Added logic to glyph
+ width setting code to take into account even/odd argument counts
+ and glyph width operand before endchar/hmoveto/vmoveto.
+
+2000-11-26 Werner Lemberg <wl@gnu.org>
+
+ * builds/ansi/ansi.mk: Fix inclusion order of files.
+
+2000-11-26 Keith Packard <keithp@keithp.com>
+
+ * src/type1/t1objs.c (T1_Init_Face): Compute style flags.
+
+2000-11-26 Werner Lemberg <wl@gnu.org>
+
+ * builds/compiler/ansi-cc.mk (CLEAN_LIBRARY): Fix rule and
+ conditional.
+
+2000-11-23 Werner Lemberg <wl@gnu.org>
+
+ * src/type1/t1load.c (parse_subrs, parse_charstrings): Use decrypt
+ function from PSAux module.
+
+ * src/type1/t1parse.c (T1_Done_Parse): Renamed to...
+ (T1_Finalize_Parser): New function (to avoid name clash with a
+ function in the PSAux module).
+ (T1_Decrypt): Removed since it is duplicated in the PSAux module.
+ (T1_Get_Private_Dict): Added `psaux' as new parameter; use decrypt
+ function from PSAux module.
+
+ * src/type1/t1parse.h: Adapted.
+
+2000-11-22 Tom Kacvinsky <tkacvins@freetype.org>
+
+ * src/cff/t2objs.c (T2_Init_Face): For pure CFF fonts, set
+ `root->num_faces' to `cff->num_faces' and set `units_per_EM'
+ to 1000.
+
+ * src/cff/t2parse.c (parse_t2_real): Fixed real number parsing
+ loop.
+
+ * src/cff/t2load.c (T2_Get_String): Called T2_Get_Name with a
+ sid that was off by one.
+
+2000-11-16 David Turner <david@freetype.org>
+
+ * src/autohint/ahtypes.h (AH_Hinter): Added new fields to control
+ auto-hinting of synthetic Type 1 fonts.
+
+ * src/autohint/ahhint.c (ah_hinter_load, ah_hinter_load_glyph):
+ Added auto-hinting support of synthetic Type 1 fonts.
+
+2000-11-12 Tom Kacvinsky <tkacvins@freetype.org>
+
+ * src/sfnt/ttload.c (TT_LookUp_Table, TT_Load_Generic_Table): Change
+ tracing output.
+
+ * src/sfnt/sfobjs.c (SFNT_Load_Face): Set boolean variable
+ `has-outline' to true only if the font has a `glyf' or `CFF ' table.
+
+2000-11-11 Werner Lemberg <wl@gnu.org>
+
+ * builds/win32/visualc/freetype.dsp: Fix raster1->raster and
+ type1z->type1.
+
+2000-11-11 Tom Kacvinsky <tkacvins@freetype.org>
+
+ * builds/unix/freetype-config.in, builds/cygwin/freetype-config.in:
+ Added a --libtool option. When freetype-config --libtool is
+ invoked, the absolute path to the libtool convenience library
+ is returned.
+
+2000-11-11 Werner Lemberg <wl@gnu.org>
+
+ * builds/cygwin/cygwin-def.in: Same fix as previous.
+
+2000-11-10 Tom Kacvinsky <tkacvins@freetype.org>
+
+ * builds/unix/unix-def.in: Add
+
+ INSTALL_PROGRAM := @INSTALL_PROGRAM@
+ INSTALL_SCRIPT := @INSTALL_SCRIPT@
+
+ so that installation of freetype-config does not fail.
+
+2000-11-10 Werner Lemberg <wl@gnu.org>
+
+ * builds/cygwin/freetype-config.in, builds/unix/freetype-config.in:
+ Move test down for empty --exec-prefix.
+ Fix --version.
+
+ * builds/cygwin/install.mk, builds/unix/install.mk: Use
+ $(INSTALL_SCRIPT) for installation of freetype-config.
+
+ * builds/cygwin/install.mk: Fix clean target names.
+
+2000-11-09 David Turner <david@freetype.org>
+
+
+ * Version 2.0 released.
+ =======================
+
+----------------------------------------------------------------------------
+
+Copyright 2000, 2001, 2002, 2007 by
+David Turner, Robert Wilhelm, and Werner Lemberg.
+
+This file is part of the FreeType project, and may only be used, modified,
+and distributed under the terms of the FreeType project license,
+LICENSE.TXT. By continuing to use, modify, or distribute this file you
+indicate that you have read the license and understand and accept it
+fully.
+
+
+Local Variables:
+version-control: never
+coding: utf-8
+End:
diff --git a/src/3rdparty/freetype/ChangeLog.21 b/src/3rdparty/freetype/ChangeLog.21
new file mode 100644
index 0000000..3a1bcf0
--- /dev/null
+++ b/src/3rdparty/freetype/ChangeLog.21
@@ -0,0 +1,9439 @@
+2005-06-08 Werner Lemberg <wl@gnu.org>
+
+
+ * Version 2.1.10 released.
+ ==========================
+
+
+ * src/pcf/readme: Renamed to...
+ * src/pcf/README: This.
+
+2005-06-07 Detlef Würkner <TetiSoft@apg.lahn.de>
+
+ * builds/amiga/*: Added copyright notes, reworked some comments.
+
+2005-06-05 Werner Lemberg <wl@gnu.org>
+
+ * Add copyright notices to all files which don't have one.
+
+ * docs/license.txt: Renamed to...
+ * docs/LICENSE.TXT: This.
+ * docs/FTL.txt: Renamed to...
+ * docs/FTL.TXT: This.
+ * docs/GPL.txt: Renamed to...
+ * docs/GPL.TXT: This.
+
+ * docs/PATENTS: Slightly reworded. Suggested by Sylvain Beucler
+ <beuc@gnu.org>.
+
+2005-06-04 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/ftimage.h (FT_Outline_MoveToFunc,
+ FT_Outline_LineToFunc, FT_Outline_ConicToFunc,
+ FT_Outline_CubicToFunc, FT_Raster_RenderFunc),
+ include/freetype/ftrender.h (FT_Glyph_TransformFunc,
+ FT_Renderer_RenderFunc, FT_Renderer_TransformFunc): Don't use
+ `const' to stay compatible with FreeType 2.1.9.
+
+2005-06-01 Adam D. Moss <adam@gimp.org>
+
+ * src/base/ftstroke.c (ft_stroker_inside): Revert `sigma' patch from
+ 2004-07-11; this gives much better results under normal
+ circumstances.
+
+2005-05-30 Chia I Wu <b90201047@ntu.edu.tw>
+
+ * include/freetype/ftbitmap.h (FT_Bitmap_Embolden): Minor
+ documentation improvements.
+
+ * include/freetype/ftoutln.h (FT_Outline_Embolden): Fix typos.
+
+ * src/base/ftbitmap.c (FT_Bitmap_Embolden): Add support for bitmap
+ of pixel_mode FT_PIXEL_MODE_GRAY2 or FT_PIXEL_MODE_GRAY4.
+ If xstr is larger than 8 and bitmap is of pixel_mode
+ FT_PIXEL_MODE_MONO, set xstr to 8 instead of returning error.
+
+2005-05-29 Chia I Wu <b90201047@ntu.edu.tw>
+
+ * src/base/ftbitmap.c (FT_Bitmap_Embolden): Fix emboldening bitmap
+ of mode FT_PIXEL_MODE_GRAY. Also add support for mode
+ FT_PIXEL_MODE_LCD and FT_PIXEL_MODE_LCD_V.
+ (ft_bitmap_assure_buffer): FT_PIXEL_MODE_LCD and FT_PIXEL_MODE_LCD_V
+ should have ppb (pixel per byte) 1.
+ Zero the padding when there's no need to allocate memory.
+
+ * src/base/ftsynth.c (FT_GlyphSlot_Embolden): Handle slot->advance
+ too.
+ More suited emboldening strength.
+
+2005-05-28 Chia I Wu <b90201047@ntu.edu.tw>
+
+ * src/base/ftbitmap.c (FT_Bitmap_Embolden): Handle negative pitch.
+ Handle FT_PIXEL_MODE_GRAY with num_gray != 256.
+ Improve speed for FT_PIXEL_MODE_GRAY.
+ (ft_bitmap_assure_buffer): Accept FT_PIXEL_MODE_LCD and
+ FT_PIXEL_MODE_LCD_V.
+
+2005-05-27 Chia I Wu <b90201047@ntu.edu.tw>
+
+ * src/base/ftsynth.c (FT_GlyphSlot_Embolden): Initialize `error'.
+
+ * src/base/ftobjs.c (ft_cmap_done_internal): New function.
+ (FT_CMap_Done): Remove cmap from cmap list.
+ (destroy_charmaps, FT_CMap_New): Don't call FT_CMap_Done but
+ ft_cmap_done_internal.
+
+2005-05-26 Werner Lemberg <wl@gnu.org>
+
+ * docs/GPL.txt: Update postal address of FSF.
+
+2005-05-26 Chia I Wu <b90201047@ntu.edu.tw>
+
+ * include/freetype/ftbitmap.h (FT_Bitmap_Embolden): Improve
+ documentation.
+
+ * src/base/ftsynth.c (FT_BOLD_THRESHOLD): Removed.
+ (FT_GlyphSlot_Embolden): Check whether slot is bitmap owner.
+ Always modify the metrics.
+
+2005-05-24 Werner Lemberg <wl@gnu.org>
+
+ * docs/CHANGES: Updated.
+
+2005-05-24 Chia I Wu <b90201047@ntu.edu.tw>
+
+ * include/freetype/ftbitmap.h (FT_Bitmap_Embolden): New declaration.
+
+ * include/freetype/ftoutln.h (FT_Outline_Embolden): New declaration.
+
+ * src/base/ftbitmap.c (ft_bitmap_assure_buffer): New auxiliary
+ function.
+ (FT_Bitmap_Embolden): New function.
+
+ * src/base/ftoutln.c (FT_Outline_Embolden): New function.
+
+ * src/base/ftsynth.c: Don't include FT_INTERNAL_CALC_H and
+ FT_TRIGONOMETRY_H but FT_BITMAP_H.
+ (FT_GlyphSlot_Embolden): Use FT_Outline_Embolden or
+ FT_Bitmap_Embolden.
+
+2005-05-24 Werner Lemberg <wl@gnu.org>
+
+ * configure: Always remove config.mk, builds/unix/unix-def.mk, and
+ builds/unix/unix-cc.mk. This fixes repeated calls of the script.
+ Reported by Nelson Beebe and Behdad Esfahbod.
+
+ * README.CVS: Mention file permissions.
+
+2005-05-23 Werner Lemberg <wl@gnu.org>
+
+ * builds/amiga/makefile.os4 (WARNINGS), builds/compiler/gcc-dev.mk
+ (CFLAGS), builds/compiler/gcc.mk (CFLAGS): Remove
+ -fno-strict-aliasing.
+
+ * src/sfnt/rules.mk (SFNT_DRV_SRC): Don't include ttsbit0.c --
+ it is currently loaded from ttsbit.c.
+
+2005-05-23 Behdad Esfahbod <behdad@cs.toronto.edu>
+
+ Say you have `(Foo*)x' and want to assign, pass, or return it as
+ `(Bar*)'. If you simply say `x' or `(Bar*)x', then the C compiler
+ would warn you that type casting incompatible pointer types breaks
+ strict-aliasing. The solution is to cast to `(void*)' instead which
+ is the generic pointer type, so the compiler knows that it should
+ make no strict-aliasing assumption on `x'. But the problem with
+ `(void*)x' is that seems like in C++, unlike C, `void*' is not a
+ generic pointer type and assigning `void*' to `Bar*' without a cast
+ causes an error. The solution is to cast to `Bar*' too, with
+ `(Bar*)(void*)x' as the result -- this is what the patch does.
+
+ * include/freetype/cache/ftccache.h (FTC_CACHE_LOOKUP_CMP),
+ include/freetype/cache/ftcmru.h (FTC_MRULIST_LOOKUP_CMP): Remove
+ cast on lvalue, use a temporary pointer instead.
+ Cast temporarily to (void*) to not break strict aliasing.
+
+ * include/freetype/internal/ftmemory.h (FT_MEM_ALLOC,
+ FT_MEM_REALLOC, FT_MEM_QALLOC, FT_MEM_QREALLOC, FT_MEM_FREE),
+ src/base/ftglyph.c (FT_Glyph_To_Bitmap): Cast temporarily to (void*)
+ to not break strict aliasing.
+
+ * src/base/ftinit.c (FT_USE_MODULE): Fix wrong type information.
+
+ * builds/unix/configure.ac (XX_CFLAGS): Remove -fno-strict-aliasing.
+
+2005-05-23 David Turner <dturner@freetype.org>
+
+ Fix Savannah bug #12213 (incorrect behaviour of the cache sub-system
+ in low-memory conditions).
+
+ * include/freetype/cache/ftccache.h (FTC_CACHE_TRYLOOP,
+ FTC_CACHE_TRYLOOP_END): New macros.
+
+ * src/cache/ftccache.c (FTC_Cache_NewNode), src/cache/ftcsbits.c
+ (ftc_snode_compare): Use FT_CACHE_TRYLOOP and FTC_CACE_TRYLOOP_END.
+
+2005-05-23 Werner Lemberg <wl@gnu.org>
+
+ * src/base/rules.mk (BASE_SRC): Don't add ftsynth.c here but...
+ (BASE_EXT_SRC): Here.
+
+2005-05-22 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftrfork.c (raccess_guess_apple_generic): Mark
+ `version_number' and `entry_length' as unused.
+ (raccess_guess_linux_double_from_file_name): Remove `memory'.
+ (raccess_make_file_name): Mark `error' as unused.
+
+ * src/bdf/bdflib.c (_bdf_parse_properties): Remove `memory'.
+
+ * src/cid/cidobjs.c (cid_face_init): Remove `psnames'.
+
+ * src/sfnt/sfobjs.c (sfnt_load_face): Remove `memory'.
+
+ * src/truetype/ttgxvar.c (ft_var_readpackedpoints,
+ ft_var_readpackeddeltas, ft_var_load_avar): Mark `error' as unused.
+
+ * src/base/rules.mk (BASE_SRC): Add ftsynth.c.
+
+2005-05-21 David Turner <david@freetype.org>
+
+ * src/base/ftsynth.c (FT_GlyphSlot_Embolden): Fix a bug that
+ produced unpleasant artefacts when trying to embolden very sharp
+ corners.
+
+2005-05-20 Werner Lemberg <wl@gnu.org>
+
+ * docs/CHANGES: Updated.
+
+2005-05-20 Chia I Wu <b90201047@ntu.edu.tw>
+
+ * src/base/ftbitmap.c: Don't include FT_FREETYPE_H and FT_IMAGE_H
+ but FT_BITMAP_H.
+ (FT_Bitmap_Copy): New function (from ftglyph.c).
+
+ * include/freetype/ftbitmap.h (FT_Bitmap_Copy): New public
+ definition.
+
+ * src/base/ftglyph.c: Include FT_BITMAP_H.
+ (ft_bitmap_copy): Move to ftbitmap.c.
+ (ft_bitmap_glyph_init): Remove `memory' variable.
+ Create new bitmap object if FT_GLYPH_OWN_BITMAP isn't set.
+ (ft_bitmap_glyph_copy): Use FT_Bitmap_Copy.
+ (ft_bitmap_glyph_done): Use FT_Bitmap_Done.
+ (ft_outline_glyph_init): Use FT_Outline_Copy.
+
+ * src/base/ftoutln.c (FT_Outline_Copy): Handle source == target.
+ (FT_Outline_Done_Internal): Check for valid `memory' pointer.
+ (FT_Outline_Translate, FT_Outline_Reverse, FT_Outline_Render,
+ FT_Outline_Transform): Check for valid `outline' pointer.
+
+ * src/base/ftobjs.c (FT_New_GlyphSlot): Prepend glyph slot to
+ face->glyph, otherwise a new second glyph slot cannot be created.
+ (FT_Done_GlyphSlot): Fix memory leak.
+ (FT_Open_Face): Updated -- face->glyph is already managed by
+ FT_New_GlyphSlot.
+
+ * src/type42/t42objs.c (T42_GlyphSlot_Done): Updated.
+
+2005-05-20 Kirill Smelkov <kirr@mns.spb.ru>
+
+ * include/freetype/ftimage.h (FT_Raster_Params),
+ include/freetype/ftoutln.h (FT_Outline_Translate,
+ FT_Outline_Transform), src/base/ftoutln.c (FT_Outline_Translate,
+ FT_Outline_Transform): Decorate parameters with `const' where
+ appropriate.
+ Update all callers.
+
+ * src/raster/ftraster.c (ft_black_reset), src/smooth/ftgrays.c
+ (gray_raster_reset): Remove `const' from `pool_base' argument.
+
+2005-05-18 Kirill Smelkov <kirr@mns.spb.ru>
+
+ * src/raster/ftmisc.h: New file. Only needed if ftraster.c is
+ compiled as stand-alone.
+
+ * src/raster/ftraster.c: Add comment how to compile as stand-alone.
+ s/FT_CONFIG_OPTION_STATIC_RASTER/FT_STATIC_RASTER/.
+ s/TT_STATIC_RASTER/FT_STATIC_RASTER/.
+ [_STANDALONE_]: Include ftimage.h and ftmisc.h.
+ (FT_TRACE1, FT_TRACE6, ft_memset, FT_MEM_ZERO): Define
+ conditionally.
+ (Render_Glyph, Render_Gray_Glyph): Return Raster_Err_None (or
+ Raster_Err_Unsupported).
+ (ft_black_new) [_STANDALONE_]: Fix type of `the_raster'.
+ (ft_black_init, ft_black_reset, ft_black_set_mode, ft_black_render):
+ Use `ras', not `raster'.
+ (ft_black_done): Use FT_UNUSED_RASTER.
+ (Horizontal_Sweep_Init, Horizontal_Sweep_Step,
+ Horizontal_Gray_Sweep_Span): Use FT_UNUSED_RASTER.
+
+2005-05-18 Werner Lemberg <wl@gnu.org>
+
+ * docs/announce: Start updating.
+
+ * docs/CHANGES: Updated.
+
+2005-05-16 Vitaliy Pasternak <v_a_pasternak@mail.ru>
+
+ * builds/win32/visualc/freetype.vcproj: Updated.
+ Exclude debug info for `Release' versions to reduce library size.
+
+2005-05-16 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftobjs.c (FT_Open_Face): Make it work as documented, this
+ is, ignore `aface' completely if face_index < 0. Reported by David
+ Osborn <spam@habitualhiatus.com>.
+
+2005-05-16 Kirill Smelkov <kirr@mns.spb.ru>
+
+ * include/freetype/ftimage.h (FT_Outline_MoveToFunc,
+ FT_Outline_LineTo_Func, FT_Outline_ConicToFunc,
+ FT_Outline_CubicToFunc), src/smooth/ftgrays.c (gray_render_conic,
+ gray_render_cubic, gray_move_to, gray_line_to, gray_conic_to,
+ gray_cubic_to, gray_render_span, gray_sweep): Decorate parameters
+ with `const' where appropriate.
+
+2005-05-11 Kirill Smelkov <kirr@mns.spb.ru>
+
+ * include/freetype/ftimage.h (FT_Raster_RenderFunc),
+ include/freetype/ftrender.h (FT_Glyph_TransformFunc,
+ FT_Renderer_Render_Func, FT_Renderer_TransformFunc),
+ src/base/ftglyph.c (ft_outline_glyph_transform),
+ src/raster/ftrend1.c (ft_raster1_transform, ft_raster1_render),
+ src/smooth/ftgrays.c (FT_Outline_Decompose, gray_raster_render),
+ src/smooth/ftsmooth.c (ft_smooth_transform,
+ ft_smooth_render_generic, ft_smooth_render, ft_smooth_render_lcd,
+ ft_smooth_render_lcd_v): Decorate parameters with `const' where
+ appropriate.
+
+ * src/raster/ftraster.c (RASTER_RENDER_POOL): Removed. Obsolete.
+ (ft_black_render): Decorate parameters with `const' where
+ appropriate.
+
+2005-05-11 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/ttcmap.c (tt_cmap4_set_range): Fix typo (FT_PEEK_SHORT ->
+ FT_PEEK_USHORT) which caused crashes. Reported by Ismail Donmez
+ <ismail@kde.org.tr>.
+
+2005-05-08 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/internal/ftserv.h (FT_FACE_FIND_GLOBAL_SERVICE)
+ [__cplusplus]: Fix typo.
+
+2005-05-07 Werner Lemberg <wl@gnu.org>
+
+ Handle unsorted SFNT type 4 cmaps correctly (reported by Dirck
+ Blaskey <listtarget@danbala.com>).
+
+ * src/sfnt/ttcmap.h (TT_CMap): Add member `unsorted'.
+ * src/sfnt/ttcmac.c: Use SFNT_Err_Ok where appropriate.
+
+ (tt_cmap0_validate, tt_cmap2_validate, tt_cmap6_validate,
+ tt_cmap8_validate, tt_cmap10_validate, tt_cmap12_validate): Use
+ `FT_Error' as return type.
+ (tt_cmap4_validate): Use `FT_Error' as return type.
+ Return error code for unsorted cmap.
+ (tt_cmap4_char_index, tt_cmap4_char_next): Use old code for unsorted
+ cmaps.
+ (tt_face_build_cmaps): Set `unsorted' variable in cmap.
+
+2005-05-07 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttpload.c (tt_face_get_location): Fix typo.
+
+2005-05-06 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cffobjs.c (cff_face_init): Set ppem value in top
+ dictionary for SFNT-based CFF.
+
+2005-05-05 Werner Lemberg <wl@gnu.org>
+
+ Handle malformed `loca' table entries.
+
+ * docs/TODO: Add some bugs which should be fixed.
+
+ * include/freetype/internal/tttypes.h (TT_FaceRec): Add `glyf_len'
+ element.
+
+ * src/truetype/ttpload.c (tt_face_load_loca): Get length of `glyf'
+ table.
+ (tt_face_get_location): Fix computation of `asize' for malformed
+ `loca' entries.
+
+2005-05-01 David Turner <david@freetype.org>
+
+ * Jamfile: Remove `otvalid' from the list of compiled modules.
+
+ * include/freetype/internal/ftserv.h: Add compiler pragmas to get
+ rid of annoying warnings with Visual C++ compiler in maximum warning
+ mode.
+
+ * src/autofit/afhints.c, src/autofit/aflatin.c, src/base/ftstroke.c,
+ src/bdf/bdfdrivr.c, src/cache/ftcbasic.c, src/cache/ftccmap.c,
+ src/cache/ftcmanag.c, src/cff/cffload.c, src/cid/cidload.c,
+ src/lzw/zopen.c, src/otvalid/otvgdef.c, src/pcf/pcfread.c,
+ src/sfnt/sfobjs.c, src/truetype/ttgxvar.c: Remove compiler warnings.
+
+2005-04-28 Werner Lemberg <wl@gnu.org>
+
+ * docs/TODO: Updated.
+
+2005-04-24 Werner Lemberg <wl@gnu.org>
+
+ * src/otvalid/otvcommn.c
+ (otv_GSUBGPOS_have_MarkAttachmentType_flag): Handle table == 0.
+
+2005-04-16 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cffobjs.c (cff_face_init): Set default upem value in top
+ font dict also.
+ Handle font matrix settings in subfonts.
+
+ * src/cff/cffgload.c (cff_slot_load): Use the correct font matrix
+ for CID-keyed fonts with subfonts.
+
+ * docs/formats.txt: Updated.
+
+2005-04-14 Kirill Smelkov <kirr@mns.spb.ru>
+
+ * include/freetype/freetype.h (FT_Vector_Transform),
+ include/freetype/ftimage.h (FT_Raster_Params),
+ include/freetype/ftoutln.h, src/base/ftoutln.c (FT_Outline_Get_CBox,
+ FT_Outline_Copy, FT_Outline_Transform, FT_Vector_Transform,
+ FT_Outline_Get_Bitmap), src/raster/ftraster.c (ft_black_render),
+ src/smooth/ftgrays.c (gray_raster_render): Decorate parameters with
+ `const' where appropriate.
+
+2005-04-14 Werner Lemberg <wl@gnu.org>
+
+ * src/type1/t1load.c (parse_charstrings): Catch this non-standard
+ beginning of the /CharStrings dictionary:
+
+ /CharStrings 118 dict def
+ Private begin
+ CharStrings begin
+
+ * src/sfnt/ttsbit0.c (tt_sbit_decoder_load_image): Fix arguments
+ to call of tt_sbit_decoder_load_bitmap.
+
+2005-04-13 Werner Lemberg <wl@gnu.org>
+
+ * docs/TODO: Updated.
+
+ * autogen.sh: Use `--force' for all commands.
+
+2005-04-09 Werner Lemberg <wl@gnu.org>
+
+ * src/pshinter/pshalgo.c (ps_hints_apply): Change scaling values
+ only if `fitted' is not zero.
+
+2005-04-06 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttgload.c (tt_face_get_metrics) [FT_OPTIMIZE_MEMORY]:
+ Fix typo which sometimes causes wrong metrics for the last glyph.
+
+2005-04-04 David Turner <david@freetype.org>
+
+ * devel/ftoption.h, include/freetype/config/ftoption.h
+ (FT_OPTIMIZE_MEMORY): Comment out this macro for the upcoming 2.1.10
+ release.
+ (*_CHESTER_*): Removed. No longer used.
+
+ * src/autofit/afhints.c (af_axis_hints_new_segment,
+ af_axis_hints_new_edge): Small tweak to use less heap memory.
+
+2005-04-03 Werner Lemberg <wl@gnu.org>
+
+ * src/type1/t1parse.c (T1_New_Parser): Relax the check for a valid
+ first line in the font.
+
+2005-04-03 Werner Lemberg <wl@gnu.org>
+
+ * docs/CHANGES, include/freetype/freetype.h: Improve documentation
+ of FT_Set_Pixel_Sizes and FT_Set_Char_Size.
+
+2005-03-26 Detlef Würkner <TetiSoft@apg.lahn.de>
+
+ * builds/amiga/src/base/ftsystem.c (ft_amiga_stream_io): Fix buffer
+ offsets after a large read.
+
+2005-03-26 Werner Lemberg <wl@gnu.org>
+
+ * src/autofit/afglobal.c (af_face_globals_get_metrics):
+ s/index/gidx/.
+
+ * src/sfnt/ttsbit0.c (tt_sbit_decoder_load_image): Fix compiler
+ warnings.
+
+ * src/sfnt/rules.mk (SFNT_DRV_SRC): Add ttsbit0.c.
+
+ * src/sfnt/ttsbit0.h: Dummy file for build with `make'.
+
+2005-03-26 Detlef Würkner <TetiSoft@apg.lahn.de>
+
+ Update of the Amiga port.
+
+ * builds/amiga/makefile, builds/amiga/makefile.os4,
+ builds/amiga/smakefile: Included the base extension files
+ (ftbitmap.c, ftotval.c, ftpfr.c, ftstroke.c, ftxf86.c).
+
+2005-03-25 Detlef Würkner <TetiSoft@apg.lahn.de>
+
+ Update of the Amiga port.
+
+ * builds/amiga/makefile, builds/amiga/smakefile: Handle new modules.
+
+ * builds/amiga/makefile.os4: Makefile for AmigaOS4 SDK.
+
+ * builds/amiga/README: Updated.
+
+ * builds/amiga/include/freetype/config/ftconfig.h: Handle gcc for
+ AmigaOS4.
+
+ * builds/amiga/include/freetype/config/ftmodule.h: Handle new
+ modules.
+
+ * builds/amiga/src/base/ftdebug.c: Updated to current version of
+ default ftdebug.c.
+ Add various include files and macros to have proper support for
+ both AmigaOS4 and older AmigaOS versions.
+ Don't declare KVPrintF explicitly.
+ Replace getenv with GetVar.
+ Actually enable debugging code.
+
+ * builds/amiga/src/base/ftsystem.c: Major rewrite.
+
+2005-03-23 Werner Lemberg <wl@gnu.org>
+
+ * tests/*: Removed.
+
+2005-03-23 Werner Lemberg <wl@gnu.org>
+
+ * docs/CHANGES, docs/INSTALL.ANY: Updated.
+
+ * include/freetype/ftmoderr.h: Replace `Autohint' with `Autofit'.
+ Add `OTvalid'.
+
+ * src/autofit/aferrors.h: New file.
+
+ * src/autofit/afglobal.c, src/autofit/afhints.c,
+ src/autofit/aflatin.c, src/autofit/afloader.c: s/FT_Err_/AF_Err_/.
+ Include aferrors.h.
+
+ * src/autofit/rules.mk (AUTOF_DRV_H): Include aferrors.h.
+
+ * src/otvalid/otverror.h: s/FT_Mod_Err_OTV/FT_Mod_Err_OTvalid/.
+
+2005-03-22 David Turner <david@freetype.org>
+
+ * src/autohint/*: Removed.
+ * Jamfile: Updated.
+
+2005-03-15 David Turner <david@freetype.org>
+
+ * src/bdf/bdflib.c: Remove compiler warnings.
+ (hash_rehash, hash_init): Don't call FT_MEM_ZERO.
+ (_bdf_list_t): Add `memory' field.
+ (_bdf_list_init, _bdf_list_done, _bdf_list_ensure): New functions.
+ (_bdf_shift, _bdf_join): Rename to...
+ (_bdf_list_shift, _bdf_list_join): This.
+ (_bdf_split): Renamed to...
+ (_bdf_list_split): This. Use new functions.
+ (bdf_internal_readstream): Removed.
+ (NO_SKIP): New macro.
+ (_bdf_readstream): Rewritten.
+ (bdf_create_property, _bdf_add_comment): Improve allocation.
+ (_bdf_set_default_spacing, _bdf_parse_glyphs): Updated. Improve
+ allocation.
+ (_bdf_parse_properties, _bdf_parse_start): Updated.
+ (bdf_load_font): Updated to use new functions.
+
+ * src/type1/t1parse.c (check_type1_format): New function.
+ (T1_New_Parser): Use it to check font header before allocating
+ anything on the heap.
+
+ * src/type42/t42parse.c (t42_parser_init): Modify functions to check
+ the font header before allocating anything on the heap.
+
+ * include/freetype/internal/ftmemory.h (FT_ARRAY_MAX,
+ FT_ARRAY_CHECK): New macros.
+
+ * src/base/ftstream.c (FT_Stream_TryRead): New function.
+ * include/freetype/internal/ftstream.h: Updated.
+
+ * src/pcf/pcfread.c (pcf_read_TOC), src/pcf/pcfutil.c
+ (BitOrderInvert, TwoByteSwap, FourByteSwap): Minor fixes and
+ simplifications. Try to protect the PCF driver from doing stupid
+ things with broken fonts.
+
+ * src/lzw/ftlzw.c (FT_Stream_OpenLZW): Check the LZW header before
+ doing anything else. This avoids unnecessary heap allocations
+ (400KByte of heap memory for the LZW decoder).
+
+ * src/gzip/ftgzip.c (FT_Stream_OpenGZip): Ditto for the gzip
+ decoder, although the code savings are smaller.
+
+ * docs/CHANGES: Updated.
+
+2005-03-10 David Turner <david@freetype.org>
+
+ * src/tools/glnames.py: Add comment to explain the compression
+ being used for the Adobe Glyph List.
+
+2005-03-10 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttpload.c (tt_face_load_cvt, tt_face_load_fpgm):
+ Fix serious typo which prevented correct TT rendering.
+
+ * include/freetype/internal/ftmemory.h: Undo change from 2005-03-03.
+ To suppress warnings it is sufficient to use `-fno-strict-aliasing'.
+
+2005-03-10 Werner Lemberg <wl@gnu.org>
+
+ * src/tools/glnames.py: Formatted.
+ Format output to be in sync with other FreeType code.
+ Import `re' and `os.path'.
+ (StringTable) <__init__>: Add parameter to initialize master table
+ name.
+ (StringTable) <dump>: Don't pass master table name.
+ (StringTable) <dump_sublist>: Emit explanatory comment.
+ Simplify and make output more human readable.
+ (t1_bias, glyph_list, adobe_glyph_names): Removed. Unused.
+ (main): Use `basename' for file name in header.
+
+ * src/psnames/pstables.h: Regenerated.
+
+2005-03-09 David Turner <david@freetype.org>
+
+ * src/tools/glnames.py: Rewrite the generator for the `pstables.h'
+ header file which contains various constant tables related to glyph
+ names. It now uses a different, more compact storage scheme that
+ saves about 20KB. This also closes Savannah bug #12262.
+
+ * src/psnames/pstables.h: Regenerated.
+
+ * src/psnames/psmodule.c (ps_unicode_value): Use
+ `ft_get_adobe_glyph_index', a new function defined in `pstables.h'.
+ (ps_get_macintosh_name, ps_get_standard_strings): Updated.
+
+ * src/base/ftobjs.c (FT_Set_Char_Sizes): Handle fractional sizes
+ more carefully. This fixes Savannah bug #12263.
+
+2005-03-06 David Turner <david@freetype.org>
+
+ * src/otvalid/otvgsub.c, src/otvalid/otvgpos.c: Make static tables
+ constant.
+
+ * src/autofit/aflatin.c (af_latin_metrics_init): Fix Savannah bug
+ #12212 (auto-hinter refuses to work if no Unicode charmap in font).
+
+2005-03-05 Werner Lemberg <wl@gnu.org>
+
+ * autogen.sh: New script for bootstrapping.
+
+ * README.CVS: New file which documents bootstrapping.
+
+ * builds/unix/aclocal.m4, builds/unix/config.guess,
+ builds/unix/config.sub, builds/unix/configure,
+ builds/unix/ltmain.sh: Removed.
+
+2005-03-04 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftutil.c: Include FT_INTERNAL_OBJECTS_H.
+
+2005-03-03 Werner Lemberg <wl@gnu.org>
+
+ Various fixes for C and C++ compiling.
+
+ * src/autofit/*: Add copyright messages.
+
+ * src/autofit/afhints.c (af_glyph_hints_done): Don't use
+ `AF_Dimension' but `int' for loop counter.
+
+ * src/autofit/aflatin.c (af_latin_metrics_init_widths): Don't use
+ `AF_Dimension' but `int' for loop counter.
+ Use proper enumeration value for `render_mode'.
+ (af_latin_metrics_scale_dim): Don't shadow variables.
+ (af_latin_hints_compute_segments): Use proper cast for `major_dir'
+ and `segment_dir'.
+ (af_latin_align_linked_edge, af_latin_hint_edges): Fix arguments of call to
+ `af_latin_compute_stem_width'.
+ (af_latin_hints_apply): Don't use `AF_Dimension' but `int' for loop
+ counter.
+
+ * src/base/ftdbgmem.c (ft_mem_table_get_source, FT_DumpMemory): Use
+ proper cast for memory allocation.
+
+ * src/cff/cffdrivr.c (cff_get_kerning): Use proper cast for
+ initialization of `sfnt'.
+
+ * src/sfnt/sfdriver.c: Include `ttkern.h'.
+
+ * src/sfnt/ttkern.c (tt_face_get_kerning): Don't shadow variables.
+
+ * src/truetype/ttgload.c: Include `ttpload.h'.
+
+2005-03-03 David Turner <david@freetype.org>
+
+ * include/freetype/internal/ftmemory.h (FT_ALLOC, FT_REALLOC,
+ FT_QALLOC, FT_QREALLOC) [gcc >= 3.3]: Provide macro versions which
+ avoid compiler warnings.
+ (FT_NEW, FT_NEW_ARRAY, FT_RENEW_ARRAY, FT_QNEW, FT_QNEW_ARRAY,
+ FT_QRENEW_ARRAY, FT_ALLOC_ARRAY, FT_REALLOC_ARRAY): Updated.
+
+ * include/freetype/internal/ftserv.h (FT_FACE_FIND_SERVICE,
+ FT_FACE_FIND_GLOBAL_SERVICE, FT_FACE_LOOKUP_SERVICE) [__cplusplus]:
+ Provide macro versions which avoid compiler warnings.
+
+ * src/base/ftutil.c (ft_highpow2): New utility function.
+
+ * include/freetype/internal/ftobjs.h: Updated.
+
+ * src/pfr/pfrload.c (pfr_get_gindex, pfr_compare_kern_pairs,
+ pfr_sort_kerning_pairs): Don't define if FT_OPTIMIZE_MEMORY is set.
+ (pfr_phy_font_done): Don't handle `kern_pairs' if FT_OPTIMIZE_MEMORY
+ is set.
+ (pfr_phy_font_load): Don't call `pfr_sort_kerning_pairs' if
+ FT_OPTIMIZE_MEMORY is set.
+
+ * src/pfr/pfrobjs.c (pfr_slot_load): Comment out some code which
+ doesn't work with broken fonts.
+ (pfr_face_get_kerning) [FT_OPTIMIZE_MEMORY]: Implement.
+
+ * src/pfr/pfrtypes.h (PFR_KernItemRec): Optimize member types.
+ (PFR_NEXT_KPAIR): New macro.
+ (PFR_PhyFontRec): Don't define `kern_pairs' if FT_OPTIMIZE_MEMORY is
+ set.
+
+ * src/sfnt/ttsbit0.c (tt_sbit_decoder_load_image): Introduce
+ temporary variable to avoid gcc warning.
+ (tt_face_load_sbit_image): Mark unused variables with FT_UNUSED.
+
+ * src/truetype/ttpload.c (tt_face_load_loca) [FT_OPTIMIZE_MEMORY]:
+ Remove redundant variable.
+
+ * include/freetype/config/ftmodule.h: Moving the order of drivers to
+ speed up font loading. The PCF and BDF loaders are still slow and
+ consume far too much memory.
+
+2005-03-03 Werner Lemberg <wl@gnu.org>
+
+ * devel/ftoption.h: Updated to recent changes.
+
+2005-03-02 Werner Lemberg <wl@gnu.org>
+
+ * src/autofit/afdummy.c, src/autofit/afdummy.h
+ (af_dummy_script_class): Fix type.
+
+ * src/autofit/aflatin.c, src/autofit/aflatin.h
+ (af_latin_script_class): Fix type.
+
+ * src/autofit/rules.mk (AUTOF_DRV_SRC): Fix typo.
+
+2005-03-01 David Turner <david@freetype.org>
+
+ * src/sfnt/ttkern.c (tt_face_load_kern, tt_face_get_kerning),
+ src/sfnt/ttsbit0.c (tt_face_load_sbit_strikes,
+ tt_sbit_decoder_load_byte_aligned, tt_sbit_decoder_load_compound,
+ tt_sbit_decoder_load_image), src/sfnt/ttload.c
+ (tt_face_load_metrics): Remove compiler warnings
+ -- redundant variables, missing initializations, etc.
+
+ * src/sfnt/ttsbit.h: Handle FT_OPTIMIZE_MEMORY.
+
+ * src/autofit/rules.mk, src/autofit/module.mk,
+ src/autofit/afangles.h: New files.
+
+ * src/autofit/afhints.c (af_axis_hints_new_segment,
+ af_axis_hints_new_edge): New functions.
+ (af_glyph_hints_done): Do proper deallocation.
+ (af_glyph_hints_reload): Only reallocate points array. This
+ drastically reduces heap usage.
+
+ * src/autofit/afhints.h (AF_PointRec, AF_SegmentRec): Optimize
+ member types and positions.
+ (AF_AxisHintsRec): Add `max_segments' and `max_edges'.
+ (af_axis_hints_new_segment, af_axis_hints_new_edge): New prototypes.
+
+ * src/autofit/aflatin.c (af_latin_metricsc_scale): Don't call
+ AF_SCALER_EQUAL_SCALES.
+ (af_latin_hints_compute_segments): Change return type to FT_Error.
+ Update all callers.
+ Improve segment allocation.
+ (af_latin_hints_compute_edges): Change return type to FT_Error.
+ Update all callers.
+ Improve edge allocation and link handling.
+ (af_latin_hints_detect_features): Change return type to FT_Error.
+ Update all callers.
+
+ * src/autofit/aflatin.h: Updated.
+
+ * src/autofit/afloader.c (af_loader_load_g)
+ <FT_GLYPH_FORMAT_OUTLINE>: Assure axis->num_edges > 1. This fixes
+ a bug with certain fonts.
+
+ * include/freetype/config/ftmodule.h: The auto-fitter is now the
+ only supported auto-hinting module.
+
+ * include/freetype/config/ftstdlib.h (FT_INT_MAX): New macro.
+
+2005-02-28 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttpload.c (tt_face_load_loca): Fix typo.
+
+ * src/sfnt/ttkern.c: Include `ttkern.h'.
+ (FT_COMPONENT): Updated.
+
+ * include/freetype/internal/fttrace.h: Add entry for `ttkern'.
+
+ * src/sfnt/ttsbit0.c: s/FT_Err_/SFNT_Err_/.
+ Decorate constants with `U' and `L' where necessary.
+
+ * src/sfnt/ttcmap.c (tt_cmap4_next): Remove unused variable.
+
+2005-02-28 David Turner <david@freetype.org>
+
+ * src/base/ftdbgmem.c (FT_DumpMemory): Added sorting of memory
+ sources according to decreasing maximum cumulative allocations.
+ (ft_mem_source_compare): New auxiliary function.
+
+ * src/sfnt/ttsbit0.c: New file, implementing a heap-optimized
+ embedded bitmap loader.
+
+ * src/sfnt/ttsbit.c: Include `ft2build.h', FT_INTERNAL_DEBUG_H,
+ FT_INTERNAL_STREAM_H, FT_TRUETYPE_TAGS_H.
+ Load `ttsbit0.c' if FT_OPTIMIZE_MEMORY is set, otherwise use
+ file contents.
+ (tt_face_load_sbit_strikes): Set up root fields to indicate the
+ strikes. This fixes Savannah bug #12107.
+ Use `static' keyword for `sbit_line_metrics_field',
+ `strike_start_fields', `strike_end_fields'.
+
+ * include/freetype/internal/tttypes.h (TT_FaceRec): Define
+ `sbit_table', `sbit_table_size', `sbit_num_strikes' if
+ FT_OPTIMIZE_MEMORY is set.
+ Don't define `num_sbit_strikes' and `sbit_strikes' if
+ FT_OPTIMIZE_MEMORY is set.
+
+ * src/cff/cffobjs.c (sbit_size_reset): Handle FT_OPTIMIZE_MEMORY.
+
+ * src/sfnt/sfobjs.c (sfnt_load_face): Fixed bug that prevented
+ loading SFNT fonts without a `kern' table.
+ Properly pass root->face_flags.
+ Remove code for TT_CONFIG_OPTION_EMBEDDED_BITMAPS.
+
+ * src/sfnt/sfdriver.c (sfnt_interface)
+ [TT_CONFIG_OPTION_EMBEDDED_BITMAPS]: Don't use `tt_find_sbit_image'
+ and `tt_load_sbit_metrics'.
+
+ * src/sfnt/ttcmap.c: Optimize linear charmap scanning for Format 4.
+ (OPT_CMAP4): New macro.
+ (TT_CMap4Rec) [OPT_CMAP4]: New structure.
+ (tt_cmap4_init, tt_cmap4_set_range, tt_cmap4_next, tt_cmap4_reset)
+ [OPT_CMAP4]: New functions.
+ (tt_cmap4_char_next) [OPT_CMAP4]: Use `tt_cmap4_next' and
+ `tt_cmap4_reset'.
+ (tt_cmap4_class_rec) [OPT_CMAP4]: Use `TT_CMap4Rec' and
+ `tt_cmap4_init'.
+
+ * src/truetype/ttobjs.c (Reset_SBit_Size): Handle
+ FT_OPTIMIZE_MEMORY.
+
+ * src/autofit/afhints.h (AF_PointRec, AF_SegmentRec, AF_EdgeRec):
+ Optimize member types.
+
+ * src/autofit/afloader.c (af_loader_done): Call
+ `af_glyph_hints_done'.
+
+2005-02-27 David Turner <david@freetype.org>
+
+ * src/sfnt/ttkern.c (tt_face_load_kern): Fix a small bug which
+ caused invalid (random) return values for the horizontal kerning.
+
+2005-02-25 David Turner <david@freetype.org>
+
+ Implement several memory optimizations to drastically reduce the
+ heap usage of FreeType, especially in the case of memory-mapped
+ files. The idea is to avoid loading and decoding tables in the
+ heap, and instead access the raw data whenever possible (i.e., when
+ it doesn't compromise performance).
+
+ This has several benefits: For example, opening vera.ttf now uses
+ just a small amount of memory (even when the FT_Library footprint is
+ accounted for), until you start loading glyphs. Even then, you save
+ at least 20KB compared to the non-optimized case. Performance of
+ various operations, including open and close, has also been
+ dramatically improved.
+
+ More optimizations to come, especially for the auto-hinter.
+
+ * include/freetype/internal/sfnt.h (TT_Face_GetKerningFunc): New
+ function type.
+ (SFNT_Interface): Add it.
+
+ * include/freetype/internal/tttypes.h (TT_HdmxEntryRec, TT_HdmxRec,
+ TT_Kern0_PairRec): Don't define if FT_OPTIMIZE_MEMORY is set.
+ (TT_FaceRec): Define `horz_metrics', `horz_metrics_size',
+ `vert_metrics', `vert_metrics_size', `hdmx_table',
+ `hdmx_table_size', `hdmx_record_count', `hdmx_record_size',
+ `hdmx_record_sizes', `kern_table', `kern_table_size,
+ `num_kern_tables', `kern_avail_bits', `kern_order_bits' if
+ FT_OPTIMIZE_MEMORY is set.
+ Don't define `hdmx', `num_kern_pairs', `kern_table_index',
+ `kern_pairs' if FT_OPTIMIZE_MEMORY is set.
+
+ * src/base/ftdbgmem.c (ft_mem_table_set): Don't shadow variable.
+ Fix compiler warning.
+
+ * src/cff/cffdrivr.c (Get_Kerning): Renamed to...
+ (cff_get_kerning): This. Simplify.
+ (cff_driver_class): Updated.
+
+ * src/sfnt/Jamfile (_sources): Add `ttkern'.
+ * src/sfnt/rules.mk (SFNT_DRV_SRC): Add `ttkern.c'.
+
+ * src/sfnt/sfdriver.c (sfnt_interface): Add `tt_face_get_kerning'.
+
+ * src/sfnt/sfnt.c: Include `ttkern.c'.
+
+ * src/sfnt/sfobjs.c: Include `ttkern.h'.
+ (sfnt_load_face): Consider the `kern' and `gasp' table as optional.
+ (sfnt_done_face): Call `tt_face_done_kern'.
+ Handle horizontal metrics for FT_OPTIMIZE_MEMORY.
+
+ * src/sfnt/ttkern.c, src/sfnt/ttkern.h: New files. Code has been
+ taken from `ttload.c' and `ttload.h'.
+ Provide special versions of `tt_face_load_kern',
+ `tt_face_get_kerning', and `tt_face_done_kern' for
+ FT_OPTIMIZE_MEMORY.
+
+ * src/sfnt/ttload.c (tt_face_load_metrics, tt_face_load_hdmx,
+ tt_face_free_hdmx): Provide version for FT_OPTIMIZE_MEMORY.
+ (tt_face_load_kern, tt_kern_pair_compare, TT_KERN_INDEX): Moved to
+ `ttkern.c'.
+
+ * src/sfnt/ttload.h: Updated.
+
+ * src/sfnt/ttsbit.c (sbit_metrics_field): Add `static' keyword.
+
+ * src/truetype/ttdriver.c (Get_Kerning): Renamed to...
+ (tt_get_kerning): This. Simplify.
+ (tt_driver_class): Updated.
+
+ * src/truetype/ttgload.c (TT_Get_Metrics): Renamed to...
+ (tt_face_get_metrics): This. Provide version for FT_OPTIMIZE_MEMORY.
+ Update all callers.
+ (Get_Advance_Widths): Replaced with...
+ (Get_Advance_WidthPtr): This. Provide version for
+ FT_OPTIMIZE_MEMORY.
+ Update all callers.
+
+ * src/truetype/ttgload.h: Updated.
+
+2005-02-22 David Turner <david@freetype.org>
+
+ * src/base/ftdbgmem.c: Partly rewritten. Added the ability to list
+ all allocation sites in the memory debugger. Also a new function
+ FT_DumpMemory() was added. It is only available in builds with
+ FT_DEBUG_MEMORY defined, and you must declare it in your own code to
+ use it, i.e., with something like:
+
+ extern void FT_DumpMemory( FT_Memory );
+
+ ...
+
+ FT_DumpMemory( memory );
+
+ * include/freetype/config/ftoption.h
+ (TT_CONFIG_OPTION_BYTECODE_INTERPRETER): Comment out definition --
+ again.
+ (FT_OPTIMIZE_MEMORY): New configuration macro to control various
+ optimizations for reducing the heap footprint of memory-mapped
+ TrueType files.
+
+ * include/freetype/internal/ftmemory.h (FT_ARRAY_ZERO): New
+ convenience macro.
+
+ * include/freetype/internal/tttypes.h (TT_FaceRec)
+ [FT_OPTIMIZE_MEMORY]: Use optimized types for `num_locations' and
+ `glyph_locations'.
+
+ * src/truetype/ttgload.c (load_truetype_glyph): Call
+ `tt_face_get_location'.
+
+ * src/truetype/ttobjs.c (tt_face_init)
+ [FT_CONFIG_OPTION_INCREMENTAL]: Improve error handling.
+ (tt_face_done): Call `tt_face_done_loca'.
+
+ * src/truetype/ttpload.c (tt_face_get_location, tt_face_done_loca):
+ New functions. If FT_OPTIMIZE_MEMORY is set, the locations table is
+ read directly from memory-mapped streams, instead of being decoded
+ into the heap.
+ (tt_face_load_loca) [FT_OPTIMIZE_MEMORY]: New implementation.
+ (tt_face_load_cvt, tt_face_load_fpgm): Only load table if the
+ bytecode interpreter is compiled in.
+
+ * src/truetype/ttpload.h: Updated.
+
+ * src/autohint/ahglyph.c (ah_outline_load): Improve allocation
+ logic.
+
+2005-02-20 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/ltmain.sh: Regenerated with `libtoolize --force
+ --copy' from libtool 1.5.14.
+ * builds/unix/aclocal.m4: Regenerated with `aclocal -I .' from
+ automake 1.9.4.
+
+ * builds/unix/config.guess, builds/unix/config.sub: Updated from
+ `config' CVS module at subversions.gnu.org.
+
+ * builds/unix/install-sh, builds/unix/mkinstalldirs: Updated from
+ `texinfo' CVS module at subversions.gnu.org.
+
+2005-02-14 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cffcmap.c (cff_cmap_unicode_init): Don't try to build
+ a cmap for a CID-keyed font which doesn't have SIDs.
+
+2005-02-13 Werner Lemberg <wl@gnu.org>
+
+ * src/type1/t1load.c (read_binary_data): Return more meaningful
+ value.
+ (parse_encoding, parse_subrs, parse_charstrings, parse_dict): Check
+ parser error value after call to T1_Skip_PS_Token (where necessary).
+
+ * src/type1/t1parse.c (T1_Get_Private_Dict): Check parser error
+ value after call to T1_Skip_PS_Token.
+
+ * src/cid/cidparse.c (cid_parser_new): Check parser error value
+ after call to cid_parser_skip_PS_token.
+
+ * src/type42/t42parse.c (t42_parse_encoding, t42_parse_sfnts,
+ t42_parse_charstrings, t42_parse_dict): Check parser error value
+ after call to T1_Skip_PS_Token (where necessary).
+
+ * src/psaux/psobjc.c (skip_string, ps_parser_skip_PS_token,
+ ps_tobytes): Add error messages.
+
+2005-02-12 Werner Lemberg <wl@gnu.org>
+
+ * configure: Output more variables to the created Makefile so that
+ it can be used for ft2demos also (if the FT2DEMOS variable is
+ defined).
+
+2005-02-10 David Turner <david@freetype.org>
+
+ * src/pfr/pfrgload.c (pfr_glyph_load): Fix an unbounded growing
+ dynamic array when loading a glyph from a PFR font (Savannah bug
+ #11921).
+
+ * src/base/ftbitmap.c (FT_Bitmap_Convert): Small improvements to the
+ conversion function (mainly stupid optimization).
+
+ * src/base/Jamfile: Adding ftbitmap.c to the list of compiled files.
+
+2005-02-10 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/freetype-config.in: Add new flag `--ftversion' to
+ return the FreeType version. Suggested by George Williams
+ <gww@silcom.com>.
+
+ * docs/CHANGES: Updated.
+
+2005-02-09 Werner Lemberg <wl@gnu.org>
+
+ * src/otvalid/otvmod.c (otv_validate): Deallocate arrays in case
+ of error. Reported by YAMANO-UCHI Hidetoshi <mer@din.or.jp>.
+
+2005-02-08 Werner Lemberg <wl@gnu.org>
+
+ * src/psaux/t1decode.c (t1_decoder_parse_charstrings)
+ <op_closepath>: Accept `T1_Parse_Have_Moveto' state also which can
+ happen in empty glyphs. Reported by Ian Brown
+ <ian.brown@printsoft.de> (Savannah bug #11856).
+
+2005-02-04 Werner Lemberg <wl@gnu.org>
+
+ * src/otlayout/*: Removed. Obsolete.
+
+2004-12-28 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/ltmain.sh: Regenerated with `libtoolize --force
+ --copy' from libtool 1.5.10.
+ * builds/unix/aclocal.m4: Regenerated with `aclocal -I .' from
+ automake 1.9.4.
+ * builds/unix/configure: Regenerated with autoconf 2.59b.
+
+ * builds/unix/config.guess, builds/unix/config.sub: Updated from
+ `config' CVS module at subversions.gnu.org.
+
+ * builds/unix/install-sh: Updated from
+ `texinfo' CVS module at subversions.gnu.org.
+
+ * builds/unix/ftsystem.c (FT_Stream_Open): Add proper cast for
+ ft_alloc.
+ Fix compiler warning.
+
+2004-12-27 Dirck Blaskey <listtarget@danbala.com>
+
+ * src/cff/cffobjs.c (cff_face_init): Improve computation of
+ FT_STYLE_BOLD_FLAG.
+
+2004-12-27 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cffobjs.c (cff_face_init): A CFF within an SFNT can have
+ only a single font. This is undocumented but has been verified on
+ the opentype list.
+
+2004-12-26 Werner Lemberg <wl@gnu.org>
+
+ * Jamfile (FT2_COMPONENTS): Add `otvalid'.
+
+2004-12-25 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftbitmap.c (FT_Bitmap_Convert): Fix compiler warning.
+
+2004-12-15 Werner Lemberg <wl@gnu.org>
+
+ * vms_make.com: Add ftbitmap.obj.
+
+2004-12-14 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftbitmap.c, include/freetype/ftbitmap.h: New files for
+ handling various bitmap formats.
+
+ * include/freetype/config/ftheader.h (FT_BITMAP_H): New macro.
+
+ * src/base/rules.mk (BASE_EXT_SRC): Add ftbitmap.c.
+
+ * src/bdf/bdfdrivr.c (BDF_Glyph_Load): Don't convert bitmaps to 8bpp
+ but return them as-is.
+
+ * docs/CHANGES: Mention new bitmap API.
+ * include/freetype/ftchapter.s: Updated.
+
+2004-12-11 Robert Clark <freetype@ratty.org.uk>
+
+ * src/base/ftobjs.c (FT_Get_Kerning): Make kerning amount
+ dependent on ppem by scaling down for ppem < 25, then do normal
+ rounding. This gives slightly better results than rounding towards
+ zero.
+
+2004-12-09 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftobjs.c (FT_Get_Kerning): Always round towards zero
+ for FT_KERNING_DEFAULT. This greatly enhances the kerning for
+ small ppem values.
+
+2004-12-08 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftobjs.c (ft_glyphslot_clear): Reset `lsb_delta' and
+ `rsb_delta'.
+
+2004-12-05 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/install.mk (install): Use $(OBJ_BUILD) for ftconfig.h.
+
+2004-12-03 Antoine Leca <Antoine-Freetype@Leca-Marti.org>
+
+ * include/freetype/ttnameid.h: Updated to latest
+ specifications from Microsoft.
+
+2004-11-26 Jouk Jansen <joukj@hrem.stm.tudelft.nl>
+
+ * vms_make.com: Include ftbbox.c.
+ Fix `ccopt'.
+ Handle `otvalid' module.
+ Update `vmslib.dat' default values.
+ Fixes to `libs.opt'.
+
+2004-11-23 Anders Kaseorg <anders@kaseorg.com>
+
+ * src/base/ftoutln.c (FT_OrientationExtremumRec,
+ ft_orientation_extremum_compute): Removed.
+ (FT_Outline_Get_Orientation): Rewritten, simplified.
+
+ * src/autohint/ahglyph.c: Include FT_OUTLINE_H.
+ (ah_test_extremum, ah_get_orientation): Removed.
+ (ah_outline_load): Use FT_Outline_Get_Orientation.
+
+ * src/base/ftsynth.c (ft_test_extrama, ft_get_orientation): Removed.
+ (FT_GlyphSlot_Embolden): Use FT_Outline_Get_Orientation.
+
+2004-11-23 Fernando Papa <fpapa@netgate.com.uy>
+
+ * src/truetype/ttinterp.h: Fix typo.
+
+2004-11-22 Antoine Leca <Antoine-Freetype@Leca-Marti.org>
+
+ * builds/win32/detect.mk: Corrected logic that detects Windows NT to
+ use the previous change even if win32 is forced. Corrected
+ detection of win32 on Win9X.
+
+ * builds/dos/detect.mk: Added same correction as for win32 about
+ COPY on Windows NT. Detection of plain DOS 7.x.
+
+2004-11-22 Werner Lemberg <wl@gnu.org>
+
+ * builds/detect.mk: Undo change from 2004-11-20.
+ * builds/win32/detect.mk: If the `OS' environment variable contains
+ `Windows_NT', use `cmd.exe /c copy' for copying files.
+
+2004-11-20 Werner Lemberg <wl@gnu.org>
+
+ * builds/detect.mk (dos_setup): Use `cmd.exe' for copying
+ $(CONFIG_MK) to force lowercase file name under Windows.
+
+2004-11-19 Werner Lemberg <wl@gnu.org>
+
+ Fix a serious bug in the TT hinter.
+
+ * src/truetype/ttgload.c (TT_Process_Simple_Glyph): Don't shift
+ points vertically before hinting.
+
+ * docs/CHANGES: Updated.
+
+ * src/cache/ftcglyph.c (FTC_GNode_UnselectFamily,
+ FTC_GCache_Lookup): A new try to fix comparison with zero.
+
+2004-11-16 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/configure.ac: Add `-fno-strict-aliasing' if gcc is
+ used.
+ * builds/unix/configure: Regenerated.
+ * builds/unix/config.guess, builds/unix/config.sub: Updated from
+ `config' CVS module at subversions.gnu.org.
+
+2004-11-16 Dr. Martin P.J. Zinser <zinser@decus.de>
+
+ * src/cache/ftcglyph.c (FTC_GNode_UnselectFamily,
+ FTC_GCache_Lookup): Fix comparison with zero.
+
+ * docs/INSTALL.VMS: Updated.
+
+ * vms_make.com: Updated. All `descrip.mms' files are now created
+ automatically.
+
+ * src/*/descrip.mms: Removed.
+
+2004-11-16 Owen Taylor <otaylor@redhat.com>
+
+ * builds/unix/freetype-config.in: Suppress -L$libdir for
+ /usr/lib64 as well as /usr/lib. (Reported by Dan Winship -
+ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=139199)
+
+2004-11-11 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cffdrivr.c (cff_service_ps_info): Updated.
+ * src/cid/cidriver.c (cid_service_ps_info): Updated.
+ * src/type42/t42drivr.c (t42_ps_get_font_private): New function.
+ (t42_service_ps_info): Updated.
+
+ * src/type42/t42parse.c (t42_parse_dict): Remove compiler warning.
+
+2004-11-11 David Bevan <dbevan@emtex.com>
+
+ Add new function FT_Get_PS_Font_Private().
+
+ * include/freetype/internal/services/svpsinfo.h
+ (PS_GetFontPrivateFunc): New service function.
+
+ * include/freetype/t1tables.h, src/base/fttype1.c
+ (FT_Get_PS_Font_Private): New function.
+
+ * src/type1/t1driver.c (t1_ps_get_font_private): New function.
+ (t1_service_ps_info): Updated.
+
+2004-10-13 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/config/ftstdlib.h: Include `stddef.h'.
+ (ft_ptrdiff_t): Define.
+
+ * include/freetype/fttypes.h (FT_PtrDist): Use `ft_ptrdiff_t'.
+
+ * src/cid/cidload.c (cid_parse_dict), src/type1/t1load.c
+ (parse_dict): Fix compiler warning.
+
+2004-10-11 Joshua Neal <jneal@csdaily.com>
+
+ * src/sfnt/ttcmap.c (tt_face_build_cmaps): Check for pointer
+ overflow.
+
+ * src/sfnt/ttload.c (tt_face_load_hdmx): Protect against bad input.
+ Don't use FT_QNEW_ARRAY but FT_NEW_ARRAY to make deallocation work
+ in case of failure.
+
+ * src/sfnt/ttsbit.c (Load_SBit_Range): Check range intervals.
+ (tt_face_load_sbit_strikes): Allocate `strike_sbit_ranges' after
+ frame test.
+
+ * src/truetype/ttgload.c (TTLoad_Simple_Glyph): Add assertion for
+ `flag'.
+
+2004-10-09 Werner Lemberg <wl@gnu.org>
+
+ * docs/CHANGES: Updated.
+
+2004-10-09 Boris Letocha <b.letocha@cz.gmc.net>
+
+ Fix handling of NPUSHW if skipped in data stream.
+
+ * src/truetype/ttinterp.c (opcode_length): Set value for NPUSHW
+ to -2.
+ (SkipCode, TT_RunIns): Use opcode_length value for computation of
+ bytes to be skipped.
+
+2004-09-10 Jouk Jansen <joukj@hrem.stm.tudelft.nl>
+
+ * vms_make.com: Updated.
+
+2004-09-09 Werner Lemberg <wl@gnu.org>
+
+ Adding OpenType validation module. The code is based on the
+ (unfinished) `otlayout' module but has been heavily modified to make
+ it much more compact.
+
+ * src/otvalid/*: New module.
+
+ * include/freetype/ftotval.h, src/base/ftotval.c,
+ include/freetype/internal/services/svotval.h: New files.
+
+ * include/freetype/config/ftmodule.h: Add otv_module_class.
+ * include/freetype/config/ftheader.h (FT_OPENTYPE_VALIDATE_H): New
+ macro.
+ * include/freetype/internal/ftserv.h
+ (FT_SERVICE_OPENTYPE_VALIDATE_H): New macro.
+ * include/freetype/internal/fttrace.h (otvmodule, otvcommon,
+ otvbase, otvgdef, otvgpos, otvgsub, otvjstf): New trace components.
+
+ * include/freetype/ftchapters.h: Updated.
+
+ * src/base/Jamfile (Library), src/base/descrip.mms (OBJS),
+ src/base/rules.mk (BASE_EXT_SRC): Updated.
+
+ * docs/CHANGES: Updated.
+
+2004-09-08 Werner Lemberg <wl@gnu.org>
+
+ * src/tools/docmaker/sources.py (re_source_block_format2) <column>:
+ Use lookahead assertion to not match `*/'. This removes spurious
+ insertions of `/' in the HTML output.
+
+2004-09-07 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttgxvar.c (TT_Vary_Get_Glyph_Deltas): Fix call to
+ FT_NEW_ARRAY.
+
+2004-09-04 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/internal/ftobjs.h: Don't include
+ FT_CONFIG_STANDARD_LIBRARY_H.
+ (FT_Validator, FT_ValidationLevel, FT_ValidatorRec, FT_VALIDATOR,
+ ft_validator_init, ft_validator_run, ft_validator_error, FT_INVALID,
+ FT_INVALID_TOO_SHORT, FT_INVALID_OFFSET, FT_INVALID_FORMAT,
+ FT_INVALID_GLYPH_ID, FT_INVALID_DATA): Move to...
+
+ * include/freetype/internal/ftvalid.h: New file.
+ Make FT_INVALID return module-specific error codes.
+
+ * include/freetype/internal/internal.h (FT_INTERNAL_VALIDATE_H): New
+ macro.
+
+ * include/freetype/fterrors.h: Undefine FT_ERR_PREFIX only if
+ FT_KEEP_ERR_PREFIX isn't defined.
+
+ * src/base/ftobjs.c: Include FT_INTERNAL_VALIDATE_H.
+
+ * src/sfnt/ttcmap.h: Don't include FT_INTERNAL_OBJECTS_H but
+ FT_INTERNAL_VALIDATE_H.
+
+ * src/sfnt/ttcmap.c: Don't include FT_INTERNAL_OBJECTS_H but
+ FT_INTERNAL_VALIDATE_H.
+ Include sferrors.h before FT_INTERNAL_VALIDATE_H.
+ s/FT_Err_Ok/SFNT_Err_Ok/.
+
+ * src/sfnt/sferrors.h: Define FT_KEEP_ERR_PREFIX.
+
+ * src/type1/t1afm.c: Include t1errors.h.
+
+2004-09-03 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftdebug.c (ft_debug_init): Highest debug level is 7,
+ not 6.
+ * docs/DEBUG: Updated.
+
+2004-08-30 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/tttags.h (TTAG_BASE, TTAG_GDEF, TTAG_GPOS,
+ TTAG_JSTF): New tags.
+
+ * include/freetype/fttypes.h (FT_Bytes, FT_Tag): New typedefs.
+ (FT_Int): Add `signed'.
+
+2004-08-29 Werner Lemberg <wl@gnu.org>
+
+ * src/otlayout/otlgpos.c (otl_gpos_subtable_validate): Add argument
+ to pass number of lookups.
+ Update all callers.
+ Don't call otl_lookup_list_validate but otl_lookup_validate.
+ (otl_gpos_validate): Call otl_lookup_list_validate instead of
+ otl_gpos_subtable_validate.
+
+ * src/otlayout/otlgpos.h: Updated.
+
+ * src/otlayout/otljstf.c (otl_jstf_max_validate): Add argument to
+ pass number of lookups.
+ Update all callers.
+
+
+ * src/cff/cffparse.c (cff_parse_real): s/exp/exponent/ to avoid
+ compiler warning.
+
+
+ * src/sfnt/ttcmap0.c, src/sfnt/ttcmap0.h: Renamed to...
+ * src/sfnt/ttcmap.c, src/sfnt/ttcmap.h: This.
+ * src/sfnt/Jamfile, src/sfnt/rules.mk, src/sfnt/sfdriver.c,
+ src/sfnt/sfnt.c, src/sfnt/sfobjs.c: Updated.
+
+
+ * builds/compiler/gcc-dev.mk (CFLAGS): Don't add `-Wnested-externs'
+ if compiler is g++ (v3.3.3 emits a warning otherwise).
+
+2004-08-28 Werner Lemberg <wl@gnu.org>
+
+ * src/otlayout/otlgpos.c (otl_value_length): Return number of bytes,
+ not number of 16bit entities.
+ (otl_gpos_lookup2_validate): Check class definition tables for
+ format 2.
+ Fix loop for format 2.
+ (otl_liga_mark2_validate): Fix offset for otl_anchor_validate.
+
+2004-08-27 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftmac.c: Don't include truetype/ttobjs.h.
+ Don't include type1/t1objs.h.
+ (FT_New_Face_From_FSSpec) [!__MWERKS__]: Remove compiler warnings.
+
+2004-08-27 Mathieu Malaterre <mathieu@malaterre.com>
+
+ * src/base/ftmac.c: Handle OS_INLINE for xlc compiler also.
+
+2004-08-27 Werner Lemberg <wl@gnu.org>
+
+ * src/otlayout/otlayout.h: Add copyright.
+ (OTL_INVALID_OFFSET): Removed.
+
+ * src/otlayout/otlgdef.h: Include otlayout.h.
+ Comment out inclusion of otltable.h.
+
+ * src/otlayout/otlgpos.c (otl_gpos_lookup4_validate): Fix call
+ to otl_base_array_validate.
+ (otl_liga_mark2_validate): Fix `for' loop.
+
+ * src/otlayout/otlgsub.c (otl_ligature_validate): Check `glyph_id',
+ not components array.
+
+ * src/otlcommn.c (otl_lookup_get_count, otl_feature_get_count):
+ Comment out.
+ (otl_lookup_list_get_count, otl_feature_list_get_count): Activate.
+ (otl_feature_list_validate, otl_gsubgpos_get_lookup_count):
+ s/otl_lookup_get_count/otl_lookup_list_get_count/.
+ (otl_script_list_validate):
+ s/otl_feature_get_count/otl_feature_list_get_count/.
+ (otl_script_validate): Call otl_lang_validate for default language.
+
+ * src/otlayout/otlcommn.h: Updated.
+
+2004-08-16 Werner Lemberg <wl@gnu.org>
+
+ * src/otlayout/otlgpos.c (otl_gpos_lookup1_validate,
+ otl_gpos_lookup2_validate, otl_gpos_lookup3_validate,
+ otl_gpos_lookup4_validate, otl_gpos_lookup5_validate,
+ otl_gpos_lookup6_validate, otl_gpos_lookup9_validate,
+ otl_gpos_validate): Update
+ function arguments.
+ (otl_gpos_lookup7_validate, otl_gpos_lookup8_validate): Update
+ function arguments.
+ Handle NULL offsets correctly.
+ Check sequence and lookup indices for format 3.
+ (otl_pos_rule_validate, otl_chain_pos_rule_validate): Add argument
+ to pass lookup count.
+ Check sequence and glyph indices.
+ (otl_gpos_subtable_validate): Update function arguments.
+ Update callers.
+
+ * src/otlayout/otlgpos.h: Updated.
+
+ * src/otlayout/otlgsub.c (otl_gsub_lookup1_validate,
+ otl_gsub_lookup3_validate, otl_gsub_lookup8_validate): Update
+ function arguments.
+ Add glyph index checks.
+ (otl_sequence_validate, otl_alternate_set_validate,
+ otl_ligature_validate): Add argument to pass glyph count.
+ Update callers.
+ Add glyph index check.
+ (otl_gsub_lookup2_validate, otl_gsub_lookup4_validate): Update
+ function arguments.
+ (otl_ligature_set_validate): Add argument to pass glyph count.
+ Update caller.
+ (otl_sub_class_rule_validate,
+ otl_sub_class_rule_set_validate): Removed.
+ (otl_sub_rule_validate, otl_chain_sub_rule_validate): Add argument
+ to pass lookup count.
+ Update callers.
+ Add lookup index check.
+ (otl_sub_rule_set_validate, otl_chain_sub_rule_set_validate): Add
+ argument to pass lookup count.
+ Update callers.
+ (otl_gsub_lookup5_validate): Update function arguments.
+ Handle NULL offsets correctly.
+ Don't call otl_sub_class_rule_set_validate but
+ otl_sub_rule_set_validate.
+ Check sequence and lookup indices for format 3.
+ (otl_gsub_lookup6_validate): Update function arguments.
+ Handle NULL offsets correctly.
+ Check sequence and lookup indices for format 3.
+ (otl_gsub_lookup7_validate, otl_gsub_validate): Update function
+ arguments.
+
+ * src/otlayout/otlgsub.h: Updated.
+
+ * src/otlayout/otlbase.c (otl_base_validate): Handle NULL offsets
+ correctly.
+
+ * src/otlayout/otlcommn.c (otl_class_definition_validate): Fix
+ compiler warning.
+ (otl_coverage_get_first, otl_coverage_get_last): New functions.
+ (otl_lookup_validate): Add arguments to pass lookup and glyph
+ counts.
+ Update callers.
+ (otl_lookup_list_validate): Add argument to pass glyph count.
+ Update callers.
+
+ * src/otlayout/otlcommn.h: Updated.
+
+ * src/otlayout/otljstf.c (otl_jstf_extender_validate,
+ otl_jstf_max_validate, otl_jstf_script_validate,
+ otl_jstf_priority_validate, otl_jstf_lang_validate): Add parameter
+ to validate glyph indices.
+ Update callers.
+ (otl_jstf_validate): Add parameter which specifies number of glyphs
+ in font.
+
+ * src/otlayout/otljstf.h: Updated.
+
+2004-08-15 Werner Lemberg <wl@gnu.org>
+
+ * src/otlayout/otlgpos.c (otl_liga_mark2_validate): Add parameter
+ to handle possible NULL values properly.
+ Update all callers.
+
+2004-08-15 Werner Lemberg <wl@gnu.org>
+
+ * src/otlayout/gpos.c: Rename counting variables to be more
+ meaningful.
+ Add copyright.
+ (otl_liga_attach_validate): Renamed to...
+ (otl_liga_mark2_validate): This.
+ Update all callers.
+ (otl_mark2_array_validate): Removed.
+ (otl_gpos_lookup6_validate): Call otl_liga_mark2_validate, not
+ otl_mark2_array_validate.
+ (otl_pos_class_set_validate, otl_pos_class_rule_validate): Removed.
+ (otl_gpos_lookup7_validate): Complete code for format 2.
+ (otl_chain_pos_class_rule_validate,
+ otl_chain_pos_class_set_validate): Removed.
+ (otl_gpos_lookup8_validate): Don't call
+ otl_chain_pos_class_set_validate but
+ otl_chain_pos_rule_set_validate.
+ Simplify some code.
+
+ * src/otlayout/otlgpos.h: Add copyright.
+
+2004-08-14 Werner Lemberg <wl@gnu.org>
+
+ * src/otlayout/otljstf.c (otl_jstf_gsub_mods_validate): Removed.
+ (otl_jstf_gpos_mods_validate): Renamed to...
+ (otl_jstf_gsubgpos_mods_validate): This.
+ Test whether lookup_count is zero.
+ (otl_jstf_priority_validate): Use otl_jstf_gsubgpos_mods_validate.
+ (otl_jstf_validate): Initialize gsub_lookup_count and
+ gpos_lookup_count if gsub or gpos is zero.
+
+ * src/otlayout/otlgsub.c: Rename counting variables to be more
+ meaningful.
+ Add copyright.
+ (otl_gsub_lookup1_validate): Simplify code.
+ (otl_gsub_lookup2_validate, otl_gsub_lookup3_validate,
+ otl_gsub_lookup4_validate, otl_gsub_lookup7_validate): Remove unused
+ variables.
+ (otl_gsub_lookup5_validate): Remove unused variable.
+ Fix call to otl_sub_rule_set_validate and
+ otl_sub_class_rule_set_validate.
+ (otl_chain_sub_class_rule_validate,
+ otl_chain_sub_class_set_validate): Removed.
+ (otl_gsub_lookup6_validate): Remove unused variable.
+ Fix call to otl_chain_sub_rule_set_validate.
+ (otl_gsub_lookup7_validate): Handle lookup type 8 also.
+ (otl_gsub_lookup8_validate: New function.
+ (otl_gsub_lookup1_apply, otl_gsub_lookup2_apply,
+ otl_gsub_lookup3_apply): Commented out.
+ (otl_gsub_validate_funcs): Add otl_gsub_lookup7_validate and
+ otl_gsub_lookup8_validate.
+ (otl_gsub_validate): Updated.
+
+ * src/otlayout/otlgsub.h: Add copyright.
+
+ * src/otlayout/otlcommn.c, src/otlayout/otlcommn.h
+ (otl_coverage_get_index): Comment out.
+
+2004-08-13 Werner Lemberg <wl@gnu.org>
+
+ * src/otlayout/otlcommn.c (otl_gsubgpos_get_lookup_count): New
+ function.
+ * src/otlayout/otlcommn.h: Updated.
+
+ * src/otlayout/otlbase.c: Rename counting variables to be more
+ meaningful.
+ Add copyright message.
+ * src/otlayout/otlbase.h: Add copyright message.
+
+ * src/otlayout/otlgdef.c: Rename counting variables to be more
+ meaningful.
+ Add copyright message.
+ Use OTL_CHECK everywhere.
+ (otl_caret_value_validate): Remove unused variable.
+ (otl_gdef_validate): All tables are optional.
+ * src/otlayout/otlgdef.h: Add copyright message.
+
+ * src/otlayout/otljstf.c: Rename counting variables to be more
+ meaningful.
+ Add copyright message.
+ (otl_jstf_gsub_mods_validate, otl_jstf_gpos_mods_validate): Add
+ parameter to pass lookup count.
+ Update all callers.
+ Check lookup array.
+ (otl_jstf_max_validate):
+ s/otl_gpos_subtable_check/otl_gpos_subtable_validate/.
+ (otl_jstf_priority_validate, otl_jstf_lang_validate,
+ otl_jstf_script_validate): Add two parameters to pass lookup counts.
+ Update all callers.
+ (otl_jstf_validate): Add two parameters to pass GPOS and GSUB
+ table offsets; use otl_gsubgpos_get_lookup_count to convert extract
+ lookup counts.
+ Fix typo.
+ * src/otlayout/otljstf.h: Updated.
+ Add copyright message.
+
+ * src/otlayout/otlgpos.c (otl_gpos_subtable_validate): New function.
+ (otl_gpos_validate): Use it.
+ * src/otlayout/otlgpos.h: Updated.
+
+2004-08-13 Werner Lemberg <wl@gnu.org>
+
+ * src/otlayout/otcommn.c: Use OTL_CHECK everywhere.
+ (otl_coverage_validate): Initialize `p',
+ s/count/num_glyphs/.
+ s/start_cover/start_coverage/.
+ (otl_coverage_get_index): Return OTL_Long, not OTL_Int.
+ Remove unused variables.
+ (otl_class_definition_validate): s/count/num_glyphs/.
+ Remove unused variables.
+ (otl_class_definition_get_value, otl_device_table_get_start,
+ otl_device_table_get_end, otl_device_table_get_delta,
+ otl_lookup_get_table, otl_lookup_list_get_count,
+ otl_lookup_list_get_lookup, otl_lookup_list_get_table,
+ otl_feature_get_lookups, otl_feature_list_get_count,
+ otl_feature_list_get_feature, otl_lang_get_count,
+ otl_lang_get_req_feature, otl_lang_get_features): Commented out
+ temporarily until we really need it.
+ (otl_lookup_validate): Removed.
+ (otl_lookup_table_validate): Renamed to ...
+ (otl_lookup_validate): This. Update callers.
+ (otl_lookup_list_validate): Remove already commented out definition
+ and move the other definition up.
+ (otl_feature_validate): Add parameter to pass number of lookups.
+ Update callers.
+ Check lookup indices.
+ (otl_feature_list_validate): Add parameter to pass lookup table.
+ Update callers.
+ (otl_lang_validate): Add parameter to pass number of features.
+ Update callers.
+ Handle req_feature and check feature indices.
+ (otl_script_validate): Add parameter to pass number of features.
+ Update callers.
+ (otl_script_list_validate): Add parameter to pass feature table.
+ Update callers.
+
+ * src/otlayout/otcommn.h: s/LOCALDEF/LOCAL/.
+ Comment out the same functions as in otcommn.c.
+ (otl_script_list_get_script): Removed.
+
+ * src/otlayout/otlgsub.c (otl_gsub_lookup1_apply): Change `index' to
+ type OTL_Long.
+ (otl_gsub_lookup2_apply, otl_gsub_lookup3_apply): Change `index' to
+ type OTL_Long.
+ Fix test.
+ (otl_gsub_validate): Fix order of validation.
+
+ * src/otlayout/otlgpos.c (otl_gpos_validate): Fix order of
+ validation.
+
+2004-08-12 Werner Lemberg <wl@gnu.org>
+
+ Make otlayout module compile (without actually working).
+
+ * src/otlayout/*: s/OTL_Valid/OTL_Validator/.
+ s/NULL/0/.
+
+ * src/otlayout/otlayout.h: Fix various typos.
+ (OTL_Bool): New typedef.
+ (OTL_Int, OTL_Long, OTL_Int16, OTL_Int32): Use `signed' keyword.
+ (OTL_Err_InvalidArgument): Removed.
+ (OTL_Err_InvalidData, OTL_Err_InvalidSize): New enum values.
+ (OTL_MAKE_TAG): Add missing parenthesis.
+ (OTL_INVALID_DATA): Use OTL_Err_InvalidData.
+ (OTL_INVALID_TOO_SHORT): Use OTL_Err_InvalidSize.
+ (OTL_INVALID_FORMAT, OTL_INVALID_OFFSET): New macros.
+
+ * src/otlayout/otlgpos.c: s/FT_/OTL_/.
+ s/OTL_Short/OTL_Int16/.
+ (otl_gpos_pairset_validate): Add return type.
+ (otl_base_array_validate): Fix call to otl_anchor_validate.
+ (otl_liga_array_validate): Fix call to otl_liga_attach_validate.
+ (otl_gpos_lookup5_validate): Fix typos.
+ (otl_gpos_lookup6_validate): Fix call to otl_mark2_array_validate.
+ (otl_gpos_lookup7_validate): Comment out unfinished code.
+ Fix typos.
+
+ * src/otlayout/otlgsub.c: Add forward declaration for
+ otl_gsub_validate_funcs.
+ (otl_gsub_lookup1_apply, otl_gsub_lookup2_apply,
+ otl_gsub_lookup3_apply): Fix call to otl_parser_check_property.
+ s/otl_coverage_lookup/otl_coverage_get_index/.
+ (otl_ligature_validate): Add missing variable declaration.
+ (otl_sub_rule_validate): Fix typo.
+ (otl_sub_class_rule_validate): Add missing variable declaration.
+ Fix typo.
+ (otl_gsub_lookup5_validate): Fix typo.
+ (otl_gsub_lookup6_validate): Fix call to
+ otl_chain_sub_class_set_validate.
+ (otl_gsub_validate_funcs): Don't use `const'.
+
+ * src/otlayout/otlcommn.c (otl_class_definition_get_value,
+ otl_device_table_validate, otl_device_table_get_delta,
+ otl_lookup_validate, otl_script_validate): Add missing
+ variable declarations.
+ (otl_lookup_list_validate): Comment out first definition.
+ (otl_lookup_list_foreach, otl_feature_list_foreach): Comment out.
+ (otl_feature_list_validate):
+ s/otl_feature_table_validate/otl_feature_validate/.
+ (otl_script_list_validate):
+ s/otl_script_table_validate/otl_script_validate/.
+
+ * src/otlayout/otlcommn.h: Comment out first declaration.
+ (otl_lookup_list_foreach, otl_feature_list_foreach): Comment out.
+
+ * src/otlayout/otlbase.c (otl_base_coord_validate): Fix call to
+ otl_device_table_validate.
+ (otl_base_script_validate): Add missing variable declarations.
+ (otl_base_script_list_validate): Fix call to
+ otl_base_script_validate.
+ (otl_axis_table_validate): Fix calls to otl_base_tag_list_validate
+ and otl_base_script_list_validate.
+ (otl_base_validate): Fix calls to otl_axis_table_validate.
+
+ * src/otlayout/otlgdef.c (otl_attach_list_validate): Fix call to
+ otl_attach_point_validate.
+ (otl_caret_value_validate): Add missing variable declaration.
+ Fix call to otl_device_table_validate.
+ (otl_ligature_glyph_validate): Fix call to otl_caret_value_validate.
+ (otl_ligature_caret_list_validate): Fix call to
+ otl_ligature_glyph_validate.
+ (otl_gdef_validate): Fix calls to otl_class_definition_validate,
+ otl_attach_list_validate, otl_ligature_caret_list_validate, and
+ otl_class_definition_validate.
+
+ * src/otlayout/otltable.h (otl_table_validate, otl_table_init,
+ otl_table_set_script): Comment out.
+
+ * src/otlayout/otlparse.h (OTL_ParserRec):
+ s/OTL_Alternate/OTL_GSUB_Alternate/.
+ (OTL_ParseError): Add OTL_Err_Parser_Memory and
+ OTL_Err_Parser_Internal.
+ (otl_parser_error): Fix typo.
+ (otl_parser_check_property): Remove third argument.
+
+ * src/otlayout/otlparse.c (otl_string_ensure):
+ s/OTL_Parse_Err_Memory/OTL_Err_Parser_Memory/.
+ (OTL_STRING_ENSURE, otl_parser_error, otl_parser_get_index,
+ otl_parser_replace_1, otl_parser_replace_n): Fix typos.
+ (OTL_PARSER_UNCOVERED): Removed.
+ (otl_parser_check_property): Remove third argument.
+
+ * src/otlayout/otljstf.c (otl_jstf_priority_validate): Add missing
+ variable declaration.
+
+ * src/otlayout/otlutils.h (OTL_MEM_REALLOC): Fix typo.
+
+2004-08-11 Danny <dannyboynow@yahoo.com>
+
+ * src/base/ftstream.c (FT_Stream_Close): Don't reset stream->close
+ to NULL. This allows custom close functions to delete the FT_STREAM
+ object.
+
+2004-08-11 Werner Lemberg <wl@gnu.org>
+
+ Add API to get information about SFNT tables.
+
+ * include/freetype/internal/services/svsfnt.h
+ (FT_SFNT_Table_Info_Func): New typedef.
+ (SFNT_Table): Add it.
+
+ * src/base/ftobjs (FT_Sfnt_Table_Info): New function.
+
+ * include/freetype/tttables.h: Updated.
+
+ * src/sfnt/sfdriver.c (sfnt_table_info): New function.
+ (sfnt_service_sfnt_table): Add it.
+
+ * docs/CHANGES: Updated.
+
+
+ * include/freetype/freetype.h (FREETYPE_PATCH): Set to 10.
+
+ * builds/unix/configure.ac (version_info): Set to 9:8:3.
+ * builds/unix/configure: Updated.
+
+ * builds/win32/visualc/index.html,
+ builds/win32/visualc/freetype.dsp,
+ builds/win32/visualc/freetype.vcproj: s/219/2110/, s/2.1.9/2.1.10/.
+
+ * builds/freetype.mk (refdoc), README, Jamfile (RefDoc):
+ s/2.1.9/2.1.10/.
+
+ * docs/CHANGES, docs/VERSION.DLL: Updated.
+
+2004-08-11 Detlef Würkner <TetiSoft@apg.lahn.de>
+
+ * src/base/ftrfork.c (FT_Raccess_Guess)
+ [!FT_CONFIG_OPTION_GUESSING_EMBEDDED_FORK]: Remove compiler
+ warnings.
+
+2004-08-06 Adam Piotrowski <st_intel@poczta.onet.pl>
+
+ * src/pfr/pfrload.c (pfr_sort_kerning_pairs): Single-byte
+ adjustments are unsigned, not signed.
+
+2004-08-05 David Turner <david@freetype.org>
+
+ `Activate' gray-scale specifing hinting within the TrueType
+ bytecode interpreter. This is an experimental feature which
+ should probably be made optional.
+
+ * src/truetype/ttgload.c (TT_Process_Simple_Glyph,
+ load_truetype_glyph): Move the code to set the pedantic_hinting flag
+ to...
+ (TT_Load_Glyph): Here.
+ Set `grayscale' flag except for `FT_LOAD_TARGET_MONO'.
+
+ * src/truetyep/ttinterp.c (Ins_GETINFO): Return MS rasterizer
+ version 1.7.
+ Return rotation and stretching info only if glyph is rotated or
+ stretched, respectively.
+ Handle grayscale info.
+
+ * src/truetype/ttinterp.h (TT_ExecContextRec): Add `grayscale'
+ member.
+
+2004-08-02 George Williams <gww@silcom.com>
+
+ * src/base/ftobjs.c (FT_Attach_File): Initialize `open.stream'.
+
+2004-08-01 Werner Lemberg <wl@gnu.org>
+
+ * docs/CHANGES: Updated.
+
+2004-08-01 George Williams <gww@silcom.com>
+
+ FreeType now can read kerning values from PFM files.
+
+ * src/type1/t1afm.c (T1_Done_AFM): Renamed to...
+ (T1_Done_Metrics): This.
+ Update all callers.
+ (T1_Read_AFM): Make it static.
+ Don't enter and leave a frame.
+ (LITTLE_ENDIAN_USHORT, LITTLE_ENDIAN_UINT): New macros.
+ (T1_Read_PFM): New function.
+ (T1_Read_Metrics): New higher-level function to be used instead of
+ T1Read_AFM.
+ Update all callers.
+
+2004-07-31 Werner Lemberg <wl@gnu.org>
+
+ * src/pcf/pcfread (pcf_load_font), src/bdf/bdfdrivr.c
+ (BDF_Face_Init), src/truetype/ttgxvar (TT_Get_MM_Var,
+ tt_face_vary_cvt): Fix compiler warnings.
+
+2004-07-26 Søren Sandmann <sandmann@daimi.au.dk>
+
+ * src/pcf/pcfread.c (pcf_interpret_style): Always allocate memory for
+ face->style_name.
+ * src/pcf/pcfdrivr.c (PCF_Face_Done): Free `style_name'.
+
+2004-07-26 Darren J Longhorn <darren.longhorn@redcom.co.uk>
+
+ * include/freetype/config/ftconfig.h (FT_SIZEOF_LONG): Recognize
+ five-byte `long' (which is avoided then).
+
+2004-07-25 Detlef Würkner <TetiSoft@apg.lahn.de>
+
+ * src/pcf/pcfdrivr.c (PCF_Set_Pixel_Size): Compare heights, not
+ ppem values.
+ (PCF_Set_Point_Size): Don't call PCF_Set_Pixel_Size but provide own
+ code to compare ppem values.
+ * src/bdf/bdfdrivr.c (BDF_Set_Pixel_Size): Compare heights, not
+ ppem values.
+ (BDF_Set_Point_Size): Don't call BDF_Set_Pixel_Size but provide own
+ code to compare ppem values.
+
+2004-07-25 Kornfeld Eliyahu Peter <peter@e-kadmon.net>
+
+ * src/sfnt/sfobjs.c (sfnt_load_face): Handle
+ TT_NAME_ID_PREFERRED_FAMILY and TT_NAME_ID_PREFERRED_SUBFAMILY.
+
+2004-07-24 Derek B. Noonburg <derekn@foolabs.com>
+
+ * src/cff/cffload.c (cff_font_load): Always create inverse mapping.
+ Even if the charstring count is the same as the CID count, it is
+ still possible that the font uses a different CID -> GID mapping.
+
+2004-07-23 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttobjs.c (tt_face_init): Accept 0x00020000 format tag
+ found in some Arphic fonts made for Chinese version of Windows 3.1.
+
+2004-07-17 David Turner <david@freetype.org>
+
+ Fixed a dangling pointer bug in the cache code that happened in very
+ rare cases, i.e., when a new family object was destroyed by an
+ out-of-memory condition during a glyph node initialization. The
+ function FTC_Cache_Lookup would flush the cache and restart the
+ lookup with a bad pointer.
+
+ * include/freetype/cache/ftcglyph.h (FTC_FAMILY_TREE): New macro.
+ (FTC_GCACHE_LOOKUP_CMP): Use it.
+ Handle reference count in `num_nodes' correctly.
+
+ * src/cache/ftcglyph.c (FTC_GNode_UnselectFamily): Use
+ FTC_FAMILY_FREE.
+ (FTC_GCache_Lookup): Handle reference count in `num_nodes' correctly.
+
+ * src/cache/ftcmanag.c (FTC_Manager_FlushN): Fixed a cache flushing
+ bug.
+
+ * src/truetype/ttinterp.c (Normalize): Fixed a bug that caused
+ long and unnecessary delays while normalizing huge vectors.
+
+2004-07-15 Werner Lemberg <wl@gnu.org>
+
+ * docs/CHANGES: Updated.
+
+ * src/base/ftstroke.c (FT_Stroker_ParseOutline): Fix compiler
+ warning.
+
+2004-07-15 David Turner <david@freetype.org>
+
+ * src/base/ftstroke.c (FT_Stroker_ParseOutline): Single points
+ are not stroked, preventing a bug with pala.ttf and other
+ fonts.
+
+ * include/freetype/ftstroke.h: Updating documentation comments.
+
+2004-07-13 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftstroke.c (ft_stroke_border_reverse): Removed. Unused.
+
+2004-07-12 David Turner <david@freetype.org>
+
+ * src/base/ftstroke.c (ft_stroke_border_close): Add second parameter
+ to indicate reversion of points.
+ Update all callers.
+ (ft_stroke_border_reverse): Fix initialization of `point1' and
+ `tag1'.
+
+ * src/cache/ftcsbits.c (ftc_snode_load): Fixing advance computation
+ for transformed glyphs.
+
+2004-07-11 David Turner <david@freetype.org>
+
+ Fix bugs that prevented the stroker to correctly generate stroked
+ paths from closed paths, i.e., nearly all glyphs in vectorial fonts.
+
+ The code is still _very_ buggy though; treat with special care.
+
+ * src/base/ftstroke.c (FT_STROKE_TAG_BEGIN_END): New macro.
+ (ft_stroke_border_reverse): New function.
+ (ft_stroker_inside): Remove local variable `sigma'; use different
+ threshold.
+ (ft_stroker_add_reverse_left): Switch begin/end tags if necessary.
+ (FT_Stroker_EndSubPath): Call ft_stroker_inside and
+ ft_stroke_border_reverse.
+
+2004-06-26 Peter Kovar <peter.kovar@r3.roburnet.sk>
+
+ * src/truetype/ttgload.c (load_truetype_glyph): Fix typo.
+
+2004-06-25 Werner Lemberg <wl@gnu.org>
+
+ * src/type1/t1afm.c (afm_atoindex): Fix boundary test. Reported
+ by Dirck Blaskey.
+
+2004-06-24 David Turner <david@freetype.org>
+
+
+ * Version 2.1.9 released.
+ =========================
+
+
+ * src/truetype/ttgload.c, src/truetype/ttxgvar.c: Removing
+ compiler warnings.
+
+2004-06-23 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/internal/ftmemory.h [FT_DEBUG_MEMORY]: Declare
+ FT_QAlloc_Debug and FT_QRealloc_Debug.
+
+ * src/base/ftutil.c (FT_QAlloc): Fix error and debug messages.
+ (FT_QRealloc): Call FT_QAlloc if original pointer is NULL.
+ Fix error message.
+
+2004-06-23 David Turner <david@freetype.org>
+
+ * include/freetype/internal/ftmemory.h, src/base/ftutil.c
+ (FT_QAlloc, FT_QRealloc), src/base/ftdbgmem.c (FT_QAlloc_Debug,
+ FT_QRealloc_Debug): New functions that perform allocation without
+ zero-ing out the corresponding blocks.
+
+ * include/freetype/internal/ftmemory.h (FT_MEM_QALLOC,
+ FT_MEM_QREALLOC, FT_MEM_QNEW, FT_MEM_QNEW_ARRAY,
+ FT_MEM_QRENEW_ARRAY, FT_QALLOC, FT_QREALLOC, FT_QNEW, FT_QNEW_ARRAY,
+ FT_QRENEW_ARRAY): New macros.
+
+ * src/base/ftstream.c (FT_Stream_EnterFrame): Use FT_QALLOC.
+ * src/gzip/ftgzip.c (FT_Stream_OpenGzip): Use FT_QNEW_ARRAY.
+ * src/sfnt/sfobjs.c (tt_face_get_name): Use FT_QNEW_ARRAY.
+
+ * src/sfnt/ttload.c (tt_face_load_directory, tt_face_load_metrics,
+ tt_face_load_gasp): Use FT_QNEW_ARRAY.
+ (tt_face_load_kern): Use FT_QNEW_ARRAY.
+ Small optimization in the kerning table verifier; this speeds up
+ TrueType face opening by about 7%.
+ (tt_face_load_hdmx): Use FT_QNEW_ARRAY and FT_QALLOC.
+
+ * include/freetype/config/ftmodule.h: Changed the order of modules,
+ putting TrueType and Type 1 first. This dramatically improves the
+ performance of face open/close operations. For example, putting the
+ TrueType driver first in the list results in a 5x speedup when
+ opening `Vera.ttf'.
+
+ The very problem is that both the PCF and BDF drivers do a lot more
+ than necessary to detect that they cannot handle a font file.
+
+2004-06-22 Werner Lemberg <wl@gnu.org>
+
+ * src/pcf/pcfread.c (pcf_read_TOC, pcf_get_properties,
+ pcf_get_metrics, pcf_get_bitmaps, pcf_get_encodings): Improve
+ debugging messages.
+
+ * src/pcf/pcfdrivr.c (FT_COMPOMENT): Move up.
+ (PCF_Face_Init): Simplify code.
+
+ * src/bdf/bdfdrivr.h (BDF_FaceRec): New element `default_glyph'.
+
+ * src/bdf/bdflib.c (_bdf_add_property, _bdf_parse_start),
+ src/bdf/bdf.h (bdf_font_t): s/default_glyph/default_char/.
+
+ * src/bdf/bdfdrivr.c (BDF_Face_Init): Fix number of glyphs.
+ Set `default_glyph'.
+ (BDF_Glyph_Load): Use `default_glyph' for undefined glyph.
+
+ * docs/CHANGES: Updated.
+
+2004-06-21 Werner Lemberg <wl@gnu.org>
+
+ * docs/CHANGES: Updated.
+
+2004-06-21 David Turner <david@freetype.org>
+
+ * src/truetype/ttgload.c (TT_Process_Simple_Glyph,
+ load_truetype_glyph): Don't access (unrounded)
+ `TT_Size.root.metrics' but (rounded) `TT_Size.metrics'. This fixes
+ a scaling bug that caused incorrect rendering when the bytecode
+ interpreter was enabled.
+
+2004-06-14 Huw D M Davies <h.davies1@physics.ox.ac.uk>
+
+ * src/winfonts/winfnt.c (FNT_Face_Init): Set x_ppem and y_ppem
+ based on pixel_width and pixel_height.
+ (FNT_Size_Set_Pixels): Updated.
+
+2004-06-14 Werner Lemberg <wl@gnu.org>
+
+ * src/lzw/zopen.c: Comment out inclusion of signal.h and unistd.h.
+ Reported by Hyvärinen Jyrki Juhani.
+
+2004-06-11 Werner Lemberg <wl@gnu.org>
+
+ * docs/CHANGES: Updated.
+
+2004-06-10 David Turner <david@freetype.org>
+
+ * src/base/ftobject.c, src/base/fthash.c, src/base/ftexcept.c,
+ src/base/ftsysio.c, src/base/ftsysmem.c, src/base/ftlist.c: Removed.
+ Obsolete.
+
+ * src/raster/ftraster.c (Alignment, PAlignment): New union to fix
+ problems with 64bit systems.
+ (AlignProfileSize): Use it.
+
+2004-06-08 David Turner <david@freetype.org>
+
+ * include/freetype/freetype.h (FT_GlyphMetrics): Move `lsb_delta'
+ and `rsb_delta' elements to...
+ (FT_GlyphSlotRec): Here to retain binary compatibility with older
+ FreeType versions.
+ Update all users.
+
+ * src/sfnt/sfobjs.c (tt_face_get_name): Remove compiler warning.
+
+ * src/winfonts/winfnt.c (FNT_Load_Glyph): Add missing initialization
+ of slot->metrics.width and slot->metrics.height when loading a
+ Windows FNT glyph. Thanks to Huw Davies.
+
+ * include/freetype/cache/ftcmru.h (FTC_MruNode_CompareFunc): Change
+ return type to FT_Bool.
+
+ * src/cache/ftbasic.c (ftc_basic_family_compare): Change return
+ type to FT_Bool.
+
+ * src/cache/ftccache.c (FTC_Cache_Init, ftc_cache_init): Make
+ the former call the latter, not vice versa.
+ (FTC_Cache_Done, ftc_cache_done): Ditto.
+
+ * src/cache/ftcglyph.c (FTC_GNode_Compare, ftc_gnode_compare): Make
+ the former call the latter, not vice versa.
+ (FTC_GCache_Init, ftc_gcache_init): Ditto.
+ (FTC_GCache_Done, ftc_gcache_done): Ditto.
+
+ * src/cache/ftcimage.c (FTC_INode_Free, ftc_inode_free): Make the
+ former call the latter, not vice versa.
+ (FTC_INode_Weight, ftc_inode_weight): Ditto.
+
+ * src/cache/ftcmanag.c (ftc_size_node_compare,
+ ftc_size_node_compare_faceid, ftc_face_node_compare): Change return
+ type to FT_Bool.
+
+ * src/cache/ftcsbits.c (FTC_SNode_Free, ftc_snode_free): Make the
+ former call the latter, not vice versa.
+ (FTC_SNode_Weight, ftc_snode_weight): Ditto.
+ (FTC_SNode_Compare, ftc_snode_compare): Ditto.
+
+ * src/cache/ftcsbits.c: Fix some bugs and inefficiencies in the cache
+ sub-system.
+
+2004-06-05 Werner Lemberg <wl@gnu.org>
+
+ * src/autofit/afloader.c (af_loader_load_g): Set `lsb_delta' and
+ `rsb_delta' in slot->metrics and tune side bearings slightly.
+
+2004-06-04 Werner Lemberg <wl@gnu.org>
+
+ * docs/CHANGES: Updated.
+
+2004-06-04 David Chester <davidchester@gmx.net>
+
+ Improve inter-letter spacing for autohinted glyphs.
+
+ * include/freetype/freetype.h (FT_Glyph_Metrics): Add elements
+ `lsb_delta' and `rsb_delta'.
+
+ * src/autohint/ahhint.c (ah_hinter_load): Set `lsb_delta' and
+ `rsb_delta' in slot->metrics and tune side bearings slightly.
+
+2004-06-04 David Turner <david@freetype.org>
+
+ * src/autofit/*: Important fixes to the auto-fitter. The output
+ now seems to be 100% equivalent to the auto-hinter, while being
+ about 2% faster (which proves that script-specific algorithm
+ selection isn't a performance problem).
+
+ To test it, change `autohint' to `autofit' in
+ <freetype/config/ftmodule.h> and recompile.
+
+ A few more testing is needed before making this the official
+ auto-hinting module.
+
+2004-06-02 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttgload.c (compute_glyph_metrics): Fix compiler
+ warnings.
+
+2004-06-01 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/sfobjs.c (tt_face_get_name): Make sure that an English
+ name record for the Apple platform is preferred to a non-English
+ entry for the Microsoft platform. Problem reported by HANDA
+ Ken'ichi.
+
+2004-05-19 George Williams <gww@silcom.com>
+
+ * src/type1/t1load.c (mm_axis_unmap, mm_weights_unmap): New
+ auxiliary functions.
+ (T1_Get_MM_Var): Provide axis tags.
+ Use mm_axis_unmap and mm_weights_unmap to provide default values
+ for design and normalized axis coordinates.
+
+ * include/freetype/t1tables.h (PS_DesignMapRec): Change type of
+ `design_points' to FT_Long.
+ Update all users.
+
+2004-05-17 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftbbox.c (BBox_Conic_Check): Fix boundary cases.
+ Reported by Mikey Anbary <manbary@vizrt.com>.
+
+2004-05-15 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/sfobjs.c (sfnt_done_face): Free face->postscript_name.
+
+2004-05-15 George Williams <gww@silcom.com>
+
+ * src/sfnt/ttload.c (tt_face_load_max_profile): Always set
+ face->root.num_glyphs.
+
+2004-05-14 Masatake YAMATO <jet@gyve.org>
+ George Williams <gww@silcom.com>
+
+ * src/sfnt/ttload.c (sfnt_dir_check): Handle `bhed' properly.
+
+2004-05-14 Werner Lemberg <wl@gnu.org>
+
+ * src/cache/ftcbasic.c (ftc_basic_family_compare,
+ ftc_basic_family_init, ftc_basic_family_get_count,
+ ftc_basic_family_load_bitmap, ftc_basic_family_load_glyph,
+ ftc_basic_gnode_compare_faceid): Adjust parameters and return types
+ to prototypes given in header files from include/freetype/cache.
+ Use casts to proper types locally.
+ (ftc_basic_image_family_class, ftc_basic_image_cache_class,
+ ftc_basic_sbit_family_class, ftc_basic_sbit_cache_class): Remove
+ casts.
+
+ * src/cache/ftccback.h: Adjust parameters and return types to
+ prototypes given in header files from include/freetype/cache.
+
+ * src/cache/ftcimage.c (ftc_inode_free, ftc_inode_new,
+ ftc_inode_weight): Adjust parameters and return types to prototypes
+ given in header files from include/freetype/cache. Use casts to
+ proper types locally.
+
+ * src/cache/ftcsbits.c (ftc_snode_free, ftc_snode_new,
+ ftc_snode_weight, ftc_snode_compare): Adjust parameters and return
+ types to prototypes given in header files from
+ include/freetype/cache. Use casts to proper types locally.
+
+ * src/cache/ftccmap.c (ftc_cmap_node_free, ftc_cmap_node_new,
+ ftc_cmap_node_weight, ftc_cmap_node_compare,
+ ftc_cmap_node_remove_faceid): Adjust parameters and return types to
+ prototypes given in header files from include/freetype/cache. Use
+ casts to proper types locally.
+ (ftc_cmap_cache_class): Remove casts.
+
+ * src/cache/ftcglyph.c (ftc_gnode_compare, ftc_gcache_init,
+ ftc_gcache_done): Adjust parameters and return types to prototypes
+ given in header files from include/freetype/cache. Use casts to
+ proper types locally.
+
+ * src/cache/ftcmanag.c (ftc_size_node_done, ftc_size_node_compare,
+ ftc_size_node_init, ftc_size_node_reset,
+ ftc_size_node_compare_faceid, ftc_face_node_init,
+ ftc_face_node_done, ftc_face_node_compare: Adjust parameters and
+ return types to prototypes given in header files from
+ include/freetype/cache. Use casts to proper types locally.
+
+ (ftc_size_list_class, ftc_face_list_class): Remove casts.
+
+2004-05-13 Werner Lemberg <wl@gnu.org>
+
+ * src/autohint/ahmodule.c (ft_autohinter_init, ft_autohinter_done):
+ Use FT_Module as parameter and do a cast to FT_AutoHinter locally.
+ (autohint_module_class): Remove casts.
+
+ * src/base/ftglyph.c (ft_bitmap_glyph_init, ft_bitmap_glyph_copy,
+ ft_bitmap_glyph_done, ft_bitmap_glyph_bbox, ft_outline_glyph_init,
+ ft_outline_glyph_done, ft_outline_glyph_copy,
+ ft_outline_glyph_transform, ft_outline_glyph_bbox,
+ ft_outline_glyph_prepare): Use FT_Glyph as parameter and do a cast
+ to FT_XXXGlyph locally.
+ Use FT_CALLBACK_DEF throughout.
+ (ft_bitmap_glyph_class, ft_outline_glyph_class): Remove casts.
+
+ * src/bdf/bdfdrivr.c (bdf_cmap_init, bdf_cmap_done,
+ bdf_cmap_char_index, bdf_cmap_char_next): Use FT_CMap as parameter
+ and do a cast to BDF_CMap locally.
+ (bdf_cmap_class): Remove casts.
+
+2004-05-12 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cffgload.h (CFF_Builder): Remove `error'.
+ * src/cff/cffgload.c (cff_decoder_parse_charstrings): Replace
+ `Memory_Error' with `Fail' und update all users.
+
+2004-05-11 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/internal/psaux.h (T1_ParseState): New
+ enumeration.
+ (T1_BuilderRec): Replace `path_begun' with `parse_state'.
+ Remove `error'.
+ * src/psaux/t1decode.c (t1_decoder_parse_charstrings): Replace
+ `Memory_Error' with `Fail' and update all users.
+ Don't use `builder->error'.
+ Replace `path_begun' with `parse_state' and check parsing states.
+
+ * src/psaux/psobjs.c (t1_builder_init, t1_builder_start_point):
+ Replace `path_begun' with `parse_state' and check parsing states.
+
+2004-05-10 George Williams <gww@silcom.com>
+
+ * src/truetype/ttxgvar.c (ft_var_load_avar): Do free arrays in case
+ of error -- `avar' is optional so we can't rely on tt_done_blend
+ being called automatically.
+
+2004-05-09 George Williams <gww@silcom.com>
+
+ * src/truetype/ttxgvar.c (ft_var_load_avar, ft_var_load_gvar): Fix
+ error handling.
+
+2004-05-07 Werner Lemberg <wl@gnu.org>
+
+ * src/pfr/pfrobjs.c, src/pfr/pfrobjs.h (pfr_face_init,
+ pfr_face_done, pfr_face_get_kerning, pfr_slot_init, pfr_slot_done,
+ pfr_slot_load): Don't use PFR_XXX but FT_XXX arguments which are
+ typecast to the proper PFR_XXX types within the function.
+ Update code accordingly.
+
+ * src/pfr/pfrdrivr.c (pfr_get_kerning, pfr_get_advance,
+ pfr_get_metrics, pfr_get_service): Don't use PFR_XXX but FT_XXX
+ arguments which are typecast to the proper PFR_XXX types within the
+ function.
+ Update code accordingly.
+ Use FT_CALLBACK_DEF throughout.
+ (pfr_metrics_service_rec, pfr_driver_class): Remove casts.
+
+2004-05-06 Masatake YAMATO <jet@gyve.org>
+
+ * src/truetype/ttgxvar.c (ft_var_load_gvar): Use FT_FACE_STREAM.
+ (*): Rename local variable OffsetToData to offsetToData.
+
+2004-05-06 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cffobjs.c (cff_size_done, cff_size_init, cff_size_reset,
+ cff_slot_done, cff_slot_init, cff_face_init, cff_face_done): Access
+ root fields directly.
+ * src/cff/cffdrivr.c (Load_Glyph): Access root fields directly.
+
+ * src/truetype/ttgload.c (TT_Process_Simple_Glyph): Save current
+ frame before calling TT_Vary_Get_Glyph_Deltas.
+
+ * src/pcf/pcfdrivr.c (PCF_CMapRec): Rename `cmap' to `root' for
+ consistency.
+ (pcf_cmap_init, pcf_cmap_done, pcf_cmap_char_index,
+ pcf_cmap_char_next): Don't use PCF_XXX but FT_XXX arguments which
+ are typecast to the proper PCF_XXX types within the function.
+ Update code accordingly.
+ (pcf_cmap_class): Remove casts.
+ (PCF_Face_Done, PCF_Face_Init, PCF_Set_Pixel_Size): Don't use
+ PCF_XXX but FT_XXX arguments which are typecast to the proper
+ PCF_XXX types within the function.
+ Update code accordingly.
+ Use FT_CALLBACK_DEF throughout.
+ (PCF_Set_Point_Size): New wrapper function.
+ (PCF_Glyph_Load, pcf_driver_requester): Use FT_CALLBACK_DEF.
+ (pcf_driver_class): Remove casts.
+
+2004-05-04 Steve Hartwell <shspamsink@comcast.net>
+
+ * src/truetype/ttobjs.c (tt_driver_done): Fix typo.
+
+2004-05-04 Werner Lemberg <wl@gnu.org>
+
+ * src/bdf/bdfdrivr.c (BDF_Face_Done, BDF_Face_Init,
+ BDF_Set_Pixel_Size): Don't use BDF_XXX but FT_XXX arguments which
+ are typecast to the proper BDF_XXX types within the function.
+ Update code accordingly.
+ Use FT_CALLBACK_DEF throughout.
+ (BDF_Set_Point_Size): New wrapper function.
+ (bdf_driver_class): Remove casts.
+
+ * src/cff/cffdrivr.c (Get_Kerning, Load_Glyph, cff_get_interface):
+ Don't use CFF_XXX but FT_XXX arguments which are typecast to the
+ proper CFF_XXX types within the function.
+ Update code accordingly.
+ Use FT_CALLBACK_DEF throughout.
+ (cff_driver_class): Remove casts.
+
+ * src/cff/cffobjs.h, src/cff/cffobjs.c (cff_size_done,
+ cff_size_init, cff_size_reset, cff_slot_done, cff_slot_init,
+ cff_face_init, cff_face_done, cff_driver_init, cff_driver_done):
+ Don't use CFF_XXX but FT_XXX arguments which are typecast to the
+ proper CFF_XXX types within the function.
+ Update code accordingly.
+ (cff_point_size_reset): New wrapper function.
+
+ * src/cid/cidobjs.h, src/cid/cidobjs.c (cid_slot_done,
+ cid_slot_init, cid_size_done, cid_size_init, cid_size_reset,
+ cid_face_done, cid_face_init, cid_driver_init, cid_driver_done):
+ Don't use CID_XXX but FT_XXX arguments which are typecast to the
+ proper CID_XXX types within the function.
+ Update code accordingly.
+ (cid_point_size_reset): New wrapper function.
+
+ * src/cid/cidgload.c, src/cid/cidgload.h (cid_slot_load_glyph):
+ Don't use CID_XXX but FT_XXX arguments which are typecast to the
+ proper CID_XXX types within the function.
+ Update code accordingly.
+
+ * src/cid/cidriver.c (cid_get_interface):
+ Don't use CID_XXX but FT_XXX arguments which are typecast to the
+ proper CID_XXX types within the function.
+ Update code accordingly.
+ Use FT_CALLBACK_DEF.
+ (t1cid_driver_class): Remove casts.
+
+ * src/truetype/ttdriver.c (tt_get_interface): Use FT_CALLBACK_DEF.
+ * src/truetype/ttgxvar.c (ft_var_load_avar): Don't free non-local
+ variables (this is done later).
+ (ft_var_load_avar): Fix call to FT_FRAME_ENTER.
+ (TT_Get_MM_Var): Fix size for `fvar_fields'.
+ (TT_Vary_Get_Glyph_Deltas): Handle deallocation of local variables
+ correctly.
+
+ * src/base/ftdbgmem.c (ft_mem_debug_realloc): Don't abort if
+ current size is zero.
+
+2004-05-03 Steve Hartwell <shspamsink@comcast.net>
+
+ * src/truetype/ttobjs.h, src/truetype/ttobjs.c (tt_face_init,
+ tt_face_done, tt_size_init, tt_size_done, tt_driver_init,
+ tt_driver_done): Don't use TT_XXX but FT_XXX arguments which are
+ typecast to the proper TT_XXX types within the function.
+ Update code accordingly.
+
+ * src/truetype/ttdriver.c (Get_Kerning, Set_Char_Sizes,
+ Set_Pixel_Sizes, Load_Glyph, tt_get_interface): Don't use TT_XXX but
+ FT_XXX arguments which are typecast to the proper TT_XXX types
+ within the function.
+ Update code accordingly.
+ (tt_driver_class): Remove casts.
+
+2004-05-02 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/ttload.c (tt_face_free_names): Check that `table->names'
+ is not NULL. Reported by Gordon Childs <gchilds@quickcut.com.au>.
+
+2004-04-29 Werner Lemberg <wl@gnu.org>
+
+ * docs/formats.txt: Add more information on PFR format.
+
+2004-04-28 Werner Lemberg <wl@gnu.org>
+
+ * docs/formats.txt: New file.
+ * docs/CHANGES: Updated.
+
+2004-04-28 Masatake YAMATO <jet@gyve.org>
+
+ * include/freetype/internal/tttypes.h (GX_BlendRec_)
+ [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Fix a typo.
+
+ * src/truetype/ttgxvar.h (GX_BlendRec_): Fix a typo.
+
+2004-04-27 Masatake YAMATO <jet@gyve.org>
+
+ * src/truetype/ttgxvar.h: Use FT_LOCAL instead of FT_LOCAL_DEF
+ for function declarations.
+
+2004-04-25 George Williams <gww@silcom.com>
+
+ * src/truetype/ttgxvar.c (ft_var_apply_tuple): Fix typo.
+
+2004-04-25 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/Jamfile, docs/CHANGES: Updated.
+
+2004-04-24 Werner Lemberg <wl@gnu.org>
+
+ * src/pcf/pcfdrivr.c: Revert change from 2004-04-17.
+ * src/pcf/pcfutil.c: Use FT_LOCAL_DEF.
+ * src/pcf/pcfutil.h: Include FT_CONFIG_CONFIG_H.
+ Use FT_BEGIN_HEADER and FT_END_HEADER.
+ Use FT_LOCAL.
+
+2004-04-24 George Williams <gww@silcom.com>
+
+ Add support for Apple's distortable font technology (in GX fonts).
+
+ * devel/ftoption.h, include/freetype/config/ftoption.h
+ (TT_CONFIG_OPTION_GX_VAR_SUPPORT): New macro.
+
+ * include/freetype/ftmm.h (FT_Var_Axis, FT_Var_Named_Style,
+ FT_MM_Var): New structures.
+ (FT_Get_MM_Var, FT_Set_Var_Design_Coordinates,
+ FT_Set_Var_Blend_Coordinates): New function declarations.
+
+ * include/freetype/internal/services/svmm.h (FT_Get_MM_Var_Func,
+ FT_Set_Var_Design_Func): New typedefs.
+ Update MultiMasters service.
+
+ * include/freetype/internal/tttypes.h
+ [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Include FT_MULTIPLE_MASTERS_H.
+ (GX_Blend) [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: New typedef.
+ (TT_Face) [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: New members `doblend'
+ and `blend'.
+
+ * include/freetype/tttags.h (TTAG_avar, TTAG_cvar, TTAG_gvar): New
+ macros.
+
+ * include/freetype/internal/fttrace.h: Add `ttgxvar'.
+
+ * src/base/ftmm.c (FT_Get_MM_Var, FT_Set_Var_Design_Coordinates,
+ FT_Set_Var_Blend_Coordinates): New functions.
+
+ * src/sfnt/sfobjs.c (sfnt_load_face)
+ [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Set FT_FACE_FLAG_MULTIPLE_MASTERS
+ flag for GX var fonts.
+
+ * src/truetype/ttgxvar.c, src/truetype/ttgxvar.h: New files.
+
+ * src/truetype/truetype.c [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Include
+ ttgxvar.c.
+
+ * src/truetype/ttdriver.c [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Include
+ FT_MULTIPLE_MASTERS_H, FT_SERVICE_MULTIPLE_MASTERS_H, and ttgxvar.h.
+ (tt_service_gx_multi_masters) [TT_CONFIG_OPTION_GX_VAR_SUPPORT]:
+ New service.
+ (tt_services) [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Updated.
+
+ * src/truetype/ttgload.c [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Include
+ ttgxvar.h.
+ (TT_Process_Simple_Glyph, load_truetype_glyph)
+ [TT_CONFIG_OPTION_GX_VAR_SUPPORT] :Support GX var fonts.
+
+ * src/truetype/ttobjs.c [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Include
+ ttgxvar.h.
+ (tt_done_face) [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Call
+ tt_done_blend.
+
+ * src/truetype/ttpload.c [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Include
+ ttgxvar.h.
+ (tt_face_load_cvt) [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Call
+ tt_face_vary_cvt.
+
+ * src/truetype/rules.mk (TT_DRV_SRC): Add ttgxvar.c.
+
+ * src/type1/t1driver.c (t1_service_multi_masters): Add T1_Get_MM_Var
+ and T1_Set_Var_Design.
+
+ * src/type1/t1load.c (FT_INT_TO_FIXED, FT_FIXED_TO_INT): New macros.
+ (T1_Get_MM_Var, T1_Set_Var_Design): New functions.
+
+ * src/type1/t1load.h (T1_Get_MM_Var, T1_Set_Var_Design): New
+ function declarations.
+
+2004-04-23 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/ftcache.h (FT_Get_CharMap_Index): Rename
+ declaration and move to...
+ * include/freetype/freetype.h (FT_Get_Charmap_Index): Here.
+ (FREETYPE_PATCH): Set to 9.
+
+ * src/base/ftobjs.c (FT_Get_Charmap_Index): New function.
+
+ * builds/unix/configure.ac (version_info): Set to 9:7:3.
+ * builds/unix/configure: Updated.
+
+ * builds/win32/visualc/index.html,
+ builds/win32/visualc/freetype.dsp,
+ builds/win32/visualc/freetype.vcproj: s/218/219/.
+
+ * builds/freetype.mk (refdoc), README, Jamfile (RefDoc):
+ s/2.1.8/2.1.9/.
+
+ * docs/CHANGES, docs/VERSION.DLL: Updated.
+
+2004-04-21 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cffparse.c (cff_parser_run), src/psaux/psobjs.c
+ (ps_parser_load_field): Use FT_CHAR_BIT.
+
+2004-04-21 David Turner <david@freetype.org>
+
+
+ * Version 2.1.8 released.
+ =========================
+
+
+ * src/cff/cffobjs.c (cff_face_init): Fix a small memory leak.
+
+ * src/autofit/afloader.c (af_loader_load_g), src/autofit/afmodule.c
+ (af_autofitter_load_glyph), src/base/ftdebug.c (FT_Trace_Get_Name):
+ Remove compiler warnings.
+
+ * src/autofit/aftypes.h: Undefine AF_DEBUG.
+
+ * src/lzw/zopen.c (rmask), src/pcf/pcfdrivr.c (pcf_service_bdf,
+ pcf_services), src/pcf/pcfread.c (tableNames), src/psaux/psobjs.c
+ (ft_char_table), src/type42/t42drivr.c (t42_service_glyph_dict,
+ t42_service_ps_font_name): Decorate data arrays with `const' to
+ avoid populating the `.data' segment.
+
+ * src/lzw/Jamfile: New file.
+
+2004-04-20 Werner Lemberg <wl@gnu.org>
+
+ * src/psaux/psobjs.c (T1Radix): Renamed to...
+ (ps_radix): This.
+ Update current cursor position.
+
+ * docs/CHANGES: Updated.
+
+2004-04-18 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttgload.c, src/truetype/ttgload.h (TT_Load_Glyph),
+ src/ttdriver.c (Load_Glyph): Change type of `glyph_index' to
+ FT_UInt. From Lex Warners.
+
+2004-04-17 Chisato Yamauchi <cyamauch@a.phys.nagoya-u.ac.jp>
+
+ * src/sfnt/ttload.c (tt_face_load_sfnt_header): Really fix change
+ from 2004-03-19.
+
+ * src/bdf/bdfdrivr.c (BDF_Face_Init): Use `ft_strlen'.
+
+ * src/pcf/pcfutil.c, src/pcf/pcfutil.h: Decorate functions with
+ `static'.
+ Remove unused function `RepadBitmap'.
+ * src/pcf/pcfdrivr.c: Don't include pcfutil.h.
+
+2004-04-16 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/freetype-config.in (usage): Fix and improve usage
+ information.
+
+2004-04-15 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/ftconfig.in, builds/vms/ftconfig.h: Define
+ FT_CHAR_BIT.
+
+ * src/base/ftobjs.c (FT_Load_Glyph): Don't apply autohinting if
+ glyph is vertically distorted or mirrored.
+
+ * src/cff/cffgload.c (cff_slot_load): Handle zero `size' properly
+ for embedded bitmaps.
+
+ * docs/CHANGES: Updated.
+
+2004-04-15 bytesoftware <bytesoftware@btinternet.com>
+
+ * include/freetype/config/ftconfig.h, src/base/ftstream.c
+ (FT_Stream_ReadFields): More fixes using FT_CHAR_BIT.
+
+2004-04-14 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/config/ftconfig.h (FT_CHAR_BIT): New macro.
+
+2004-04-14 Alex Strelnikov <ptktyrf@mail.ru>
+
+ * src/cache/ftcsbits.c (ftc_snode_load): Initialize `*asize' in case
+ of error.
+
+2004-04-14 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftmac.c [__GNUC__]: Define OS_INLINE.
+ * builds/unix/configure.ac: Don't try to remove `-ansi' compilation
+ switch on the Mac.
+
+ * builds/unix/ltmain.sh: Regenerated with `libtoolize --force
+ --copy' from libtool 1.5.6.
+ * builds/unix/aclocal.m4: Regenerated with `aclocal -I .' from
+ automake 1.8a.
+ * builds/unix/configure: Regenerated with autoconf 2.59a.
+
+2004-04-13 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/config/ftconfig.h: Use CHAR_BIT to define
+ size of FT_SIZEOF_xxx.
+
+2004-04-12 Chisato Yamauchi <cyamauch@a.phys.nagoya-u.ac.jp>
+
+ * include/freetype/internal/sfnt.h (TT_Find_SBit_Image_Func,
+ TT_Load_SBit_Metrics_Func): New typedefs.
+ (SFNT_Interface): Add find_sbit_image and load_sbit_metrics.
+
+ * src/sfnt/sfdriver.c (sfnt_interface): Updated.
+ * src/sfnt/ttsbit.h (tt_find_sbit_image, tt_load_sbit_metrics): New
+ declarations.
+ * src/sfnt/ttsbit.c (find_sbit_image): Renamed to...
+ (tt_find_sbit_image): This.
+ Updated all callers.
+ (load_sbit_metrics): Renamed to...
+ (tt_load_sbit_metrics): This.
+ Updated all callers.
+
+2004-04-12 Werner Lemberg <wl@gnu.org>
+
+ * configure: Accept makepp also.
+
+ * builds/unix/detect.mk: Use proper path to unix-def.mk.
+ * builds/unix/unix-def.in (BUILD_DIR, PLATFORM): Remove.
+ * builds/unix/unix.mk (BUILD_DIR, PLATFORM): Define.
+ Use BUILD_DIR.
+
+ * docs/INSTALL, docs/INSTALL.GNU, docs/INSTALL.UNX: Update
+ documentation on makepp.
+
+2004-04-11 Werner Lemberg <wl@gnu.org>
+
+ * src/lzw/zopen.c: Don't include sys/param.h and sys/stat.h.
+
+2004-04-10 Werner Lemberg <wl@gnu.org>
+
+ * src/lzw/ftlzw.c: Include zopen.h dependent on
+ FT_CONFIG_OPTION_USE_LZW.
+
+ * src/base/ftdebug.c: s/index/idx/ to avoid compiler warnings.
+
+2004-04-02 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/ltmain.sh: Regenerated with `libtoolize --force
+ --copy' from libtool 1.5.2.
+ * builds/unix/aclocal.m4: Regenerated with `aclocal -I .' from
+ automake 1.8a.
+ * builds/unix/configure: Regenerated with autoconf 2.59a.
+
+2004-04-01 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/ft-munmap.m4 (FT_MUNMAP_PARAM): Fix arguments of
+ AC_COMPILE_IFELSE.
+ * builds/unix/aclocal.m4: Regenerated with `aclocal -I .' from
+ automake 1.8a.
+ * builds/unix/configure: Regenerated with autoconf 2.59a.
+ * builds/unix/config.guess, builds/unix/config.sub: Updated from
+ `config' CVS module at subversions.gnu.org.
+ * builds/unix/install-sh, builds/unix/mkinstalldirs: Updated from
+ `texinfo' CVS module at subversions.gnu.org.
+ * builds/freetype.mk (refdoc): Updated.
+
+2004-03-31 Werner Lemberg <wl@gnu.org>
+
+ Handle broken FNT files which don't have a trailing NULL byte
+ in the face name string.
+
+ * src/winfonts/winfnt.h (FNT_FontRec): New member `family_name'.
+ * src/winfonts/winfnt.c (fnt_font_done): Free font->family_name.
+ (FNT_Face_Init): Append a final zero byte to the font face name.
+
+2004-03-30 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/ttload.c (tt_face_load_sfnt_header): Fix change from
+ 2004-03-19.
+
+2004-03-27 Werner Lemberg <wl@gnu.org>
+
+ * src/base/descrip.mms (OBJS): Add ftbbox.obj.
+
+2004-03-26 George Williams <gww@silcom.com>
+
+ Add vertical phantom points.
+
+ * include/freetype/internal/tttypes.h (TT_LoaderRec): Add
+ `top_bearing', `vadvance', `pp3', and `pp4'.
+
+ * src/autofit/afloader.c (af_loader_load_g): Handle two more points.
+
+ * src/autohint/ahhint.c (ah_hinter_load): Handle two more points.
+ * src/truetype/ttgload.c (Get_VMetrics): New function.
+ (TT_Load_Simple_Glyph, TT_Process_Simple_Glyph): Handle two more
+ points.
+ (load_truetype_glyph): Use Get_VMetrics.
+ Handle two more points.
+ (compute_glyph_metrics): Thanks to vertical phantom points we now
+ can always compute `advance_height' and `top_bearing'.
+ * src/truetype/ttobjs.h (TT_SubglyphRec): Add vertical phantom
+ points.
+
+
+ * src/autohint/ahglyph.c (ah_outline_load): Fix allocation of
+ `news'.
+
+2004-03-21 Werner Lemberg <wl@gnu.org>
+
+ * src/bdf/bdfdrivr.c (BDF_Glyph_Load): Fix left side bearing.
+
+2004-03-20 Steve Hartwell <shspamsink@comcast.net>
+
+ * src/cache/ftcmru.c (FTC_MruList_RemoveSelection): Handle a NULL
+ value for `selection' as `select all'.
+
+2004-03-19 Steve Hartwell <shspamsink@comcast.net>
+
+ * src/sfnt/ttload.c (tt_face_load_sfnt_header): Reject face_index
+ values > 0 if loading non-TTC fonts.
+
+ * src/base/ftmac.c (open_face_from_buffer): Set positive face_index
+ to zero before calling FT_Open_Face.
+
+ * docs/CHANGES: Updated.
+
+2004-03-04 Werner Lemberg <wl@gnu.org>
+
+ * Jamfile, vms_make.com, builds/win32/visualc/freetype.dsp,
+ builds/win32/visualc/freetype/vcproj, include/freetype/ftmoderr.h:
+ Add LZW module.
+
+ * Jamfile.in: Removed.
+
+ * docs/CHANGES: Updated.
+
+ * include/freetype/internal/ftobjs.h: s/MIN/FT_MIN/, s/MAX/FT_MAX/,
+ s/ABS/FT_ABS/. Updated all callers.
+
+ * src/type1/t1load.c (parse_dict), src/pcf/pcfdrivr.c
+ (PCF_Face_Init): Use FT_ERROR_BASE.
+
+2004-03-04 Albert Chin <china@thewrittenword.com>
+
+ Add support for PCF fonts compressed with LZW (extension .pcf.Z,
+ created with `compress').
+
+ * include/freetype/config/ftoption.h, devel/ftoption.h
+ (FT_CONFIG_OPTION_USE_LZW): New macro.
+
+ * include/freetype/ftlzw.h: New file.
+ * include/freetype/config/ftheader.h (FT_LZW_H): New macro for
+ ftlzw.h.
+
+ * src/lzw/*: New files.
+
+ * src/pcf/pcfdrivr.c: Include FT_LZW_H.
+ (PCF_Face_Init): Try LZW also.
+
+ * src/gzip/ftgzip.c: s/0/Gzip_Err_Ok/ where appropriate.
+ Beautify.
+
+2004-03-03 Werner Lemberg <wl@gnu.org>
+
+ * src/pshinter/pshalgo.c (psh_hint_table_init): Simplify code.
+
+2004-03-02 Werner Lemberg <wl@gnu.org>
+
+ Add embedded bitmap support to CFF driver.
+
+ * src/cff/cffobjs.h (CFF_SizeRec): New structure.
+
+ * src/cff/cffgload.c (cff_builder_init): Updated.
+ (cff_slot_load): Updated.
+ [TT_CONFIG_OPTION_EMBEDDED_BITMAPS]: Load sbit.
+
+ * src/cff/cffobjs.c (sbit_size_reset)
+ [TT_CONFIG_OPTION_EMBEDDED_BITMAPS]: New function.
+ (cff_size_get_globals_funcs, cff_size_done, cff_size_init): Updated.
+ (cff_size_reset): Updated.
+ [TT_CONFIG_OPTION_EMBEDDED_BITMAPS]: Call sbit_size_reset.
+
+ * src/cff/cffdrivr.c (Load_Glyph): Updated.
+ (cff_driver_class): Use CFF_SizeRec.
+
+ * docs/CHANGES: Updated.
+
+2004-03-01 Werner Lemberg <wl@gnu.org>
+
+ * src/pshinter/pshglob.c (psh_globals_scale_widths): Don't use
+ FT_RoundFix but FT_PIX_ROUND.
+ (psh_blues_snap_stem): Don't use blue_shift but blue_threshold.
+
+ * src/pshinter/pshalgo.c (PSH_STRONG_THRESHOLD_MAXIMUM): New macro.
+ (psh_glyph_find_string_points): Use PSH_STRONG_THRESHOLD_MAXIMUM.
+ (psh_glyph_find_blue_points): New function. Needed for fonts like
+ p052003l.pfb (URW Palladio L Roman) which have flex curves at the
+ base line within blue zones, but the flex curves aren't covered by
+ hints.
+ (ps_hints_apply): Use psh_glyph_find_blue_points.
+
+2004-02-27 Garrick Meeker <garrick@digitalanarchy.com>
+
+ * builds/unix/configure.ac: Fix compiler flags for
+ `--with-old-mac-fonts'.
+ * builds/unix/configure: Regenerated.
+
+ * src/base/ftmac.c: s/TARGET_API_MAC_CARBON/!TARGET_API_MAC_OS8/.
+ (FT_New_Face_From_Resource): New function.
+ (FT_New_Face): Use FT_New_Face_From_Resource.
+ (FT_New_Face_From_FSSpec): Use FT_New_Face_From_Resource.
+ [__MWERKS__]: Don't include FSp_fopen.h.
+
+2004-02-26 Werner Lemberg <wl@gnu.org>
+
+ * src/pshinter/pshglob.c (psh_globals_new): Fix value of
+ `dim->stdw.count'.
+ Don't assign default values to blue scale and blue shift.
+
+2004-02-25 Werner Lemberg <wl@gnu.org>
+
+ * docs/CHANGES: Updated.
+
+2004-02-25 Garrick Meeker <garrick@digitalanarchy.com>
+ Steve Hartwell <shspamsink@comcast.net>
+
+ Improve MacOS fond support. Provide a new API
+ `FT_New_Face_From_FSSpec' similar to `FT_New_Face'.
+
+ * src/base/ftmac.c [__MWERKS__]: Include FSp_fpopen.h.
+ STREAM_FILE [__MWERKS__]: New macro.
+ (ft_FSp_stream_close, ft_FSp_stream_io) [__MWERKS__]: New functions.
+ (file_spec_from_path) [__MWERKS__]: Updated #if statement.
+ (get_file_type, make_lwfn_spec): Use `const' for argument.
+ (is_dfont) [TARGET_API_MAC_CARBON]: Removed.
+ (count_face_sfnt, count_faces): New functions.
+ (parse_fond): Do some range checking.
+ (read_lwfn): Change type of second argument.
+ No longer call FSpOpenResFile.
+ (OpenFileAsResource): New function.
+ (FT_New_Face_From_LWFN): Use `const' for second argument.
+ Use OpenFileAsResource.
+ (FT_New_Face_From_Suitcase): Change type of second argument.
+ No longer call FSpOpenResFile.
+ Loop over all resource indices.
+ (FT_New_Face_From_dfont) [TARGET_API_MAC_CARBON]: Removed.
+ (FT_GetFile_From_Mac_Name): Use `const' for first argument.
+ (ResourceForkSize): Removed.
+ (FT_New_Face): Updated to use new functions.
+ (FT_New_Face_From_FSSpec): New function.
+
+ * include/freetype/ftmac.h: Updated.
+
+2004-02-24 Malcolm Taylor <mtaylor@clear.net.nz>
+
+ * src/autohint/ahhint.c (ah_hinter_load) <FT_GLYPH_FORMAT_OUTLINE>:
+ Handle case where outline->num_vedges is zero while computing hinted
+ metrics.
+
+2004-02-24 Gordon Childs <gchilds@quickcut.com.au>
+
+ * src/cff/cffcmap.c (cff_cmap_unicode_init): Provide correct value
+ for `count'.
+
+2004-02-24 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/t1tables.h (PS_PrivateRec): Add
+ `expansion_factor'.
+
+ * src/pshinter/pshglob (psh_blues_scale_zones): Fix computation
+ of blues->no_overshoots -- `blues_scale' is stored with a
+ magnification of 1000, and `scale' returns fractional pixels.
+
+ * src/type1/t1load.c (T1_Open_Face): Initialize `blue_shift',
+ `blue_fuzz', `expansion_factor', and `blue_scale' according to the
+ Type 1 specification.
+
+ * src/type1/t1tokens.h: Handle `ExpansionFactor'.
+
+ * docs/CHANGES: Updated.
+
+2004-02-24 Masatake YAMATO <jet@gyve.org>
+
+ Provide generic access to MacOS resource forks.
+
+ * src/base/ftrfork.c, include/freetype/internal/ftrfork.h: New
+ files.
+
+ * src/base/ftobjs.c: Include FT_INTERNAL_RFORK_H.
+ (Mac_Read_POST_Resource, Mac_Read_sfnt_Resource): Remove arguments
+ `resource_listoffset' and `resource_data' and adapt code
+ accordingly. These values are calculated outside of the function
+ now.
+ Add new argument `offsets'.
+ (IsMacResource): Use `FT_Raccess_Get_HeaderInfo' and
+ `FT_Raccess_Get_DataOffsets'.
+ (load_face_in_embedded_rfork): New function.
+ (load_mac_face): Use load_face_in_embedded_rfork.
+ (ft_input_stream_new): Renamed to...
+ (FT_Stream_New): This. Use FT_BASE_DEF. Updated all callers.
+ (ft_input_stream_free): Renamed to...
+ (FT_Stream_Free): This. Use FT_BASE_DEF. Updated all callers.
+
+ * src/base/ftbase.c: Include ftrfork.c.
+
+ * src/base/rules.mk (BASE_SRC), src/base/Jamfile: Updated.
+
+ * include/freetype/internal/internal.h (FT_INTERNAL_RFORK_H):
+ New macro.
+
+ * include/freetype/internal/fttrace.h: Added `rfork' as a new
+ trace definition.
+
+ * include/freetype/internal/ftstream.h: Declare FT_Stream_New and
+ FT_Stream_Free.
+
+ * include/freetype/config/ftoption.h, devel/ftoption.h
+ (FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK): New option.
+
+ * include/freetype/config/ftstdlib.h (ft_strrchr): New macro.
+
+2004-02-23 Werner Lemberg <wl@gnu.org>
+
+ * docs/CHANGES: Updated.
+
+ * include/freetype/internal/ftdebug.h: Include FT_FREETYPE_H.
+
+2004-02-23 Masatake YAMATO <jet@gyve.org>
+
+ Provide a simple API to control FreeType's tracing levels.
+
+ * include/freetype/internal/ftdebug.h (FT_Trace_Get_Count,
+ FT_Trace_Get_Name): New declarations.
+
+ * src/base/ftdebug.c (FT_Trace_Get_Count, FT_Trace_Get_Name): New
+ functions.
+
+2004-02-23 David Turner <david@freetype.org>
+
+ * src/autofit/afhints.c, src/autofit/afhints.h,
+ src/autofit/aflatin.c, src/autofit/afloader.c, src/types.h: Grave
+ bugs have been fixed. The auto-fitter works, doesn't crash, but
+ still produces unexpected results...
+
+2004-02-21 Werner Lemberg <wl@gnu.org>
+
+ * src/pshinter/pshalgo.c (PSH_STRONG_THRESHOLD): Changed to hold
+ the accepted shift for strong points in fractional pixels (which
+ is a heuristic value).
+ (psh_glyph_find_strong_points): Compute threshold for
+ psh_hint_table_find_strong_points.
+ (psh_hint_table_find_strong_point): Add parameter to pass threshold.
+
+2004-02-20 Werner Lemberg <wl@gnu.org>
+
+ * src/pshinter/pshrec.c (ps_mask_table_set_bits): Don't call
+ ps_mask_table_alloc but ps_mask_table_last.
+ (ps_hints_t2mask): Use correct position and number for vertical
+ and horizontal hinter mask bits.
+
+ * docs/CHANGES: Updated.
+
+2004-02-19 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftstroke.c (FT_Glyph_StrokeBorder): Fix enum handling.
+ * src/cff/cffdrivr.c (cff_get_cmap_info): Remove compiler warning.
+
+2004-02-18 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/freetype.h: Document FT_LOAD_TARGET_XXX properly.
+
+ * src/base/ftglyph.c (ft_bitmap_glyph_class,
+ ft_outline_glyph_class): Tag with FT_CALLBACK_TABLE_DEF.
+
+ * src/smooth/ftsmooth.c (ft_smooth_render): Handle
+ FT_RENDER_MODE_LIGHT.
+
+2004-02-17 Werner Lemberg <wl@gnu.org>
+
+ Fix callback functions in cache module.
+
+ * src/cache/ftccback.h: New file for callback declarations.
+
+ * src/cache/ftcbasic.c (ftc_basic_family_compare,
+ ftc_basic_family_init, ftc_basic_family_get_count,
+ ftc_basic_family_load_bitmap, ftc_basic_family_load_glyph,
+ ftc_basic_gnode_compare_faceid): Use FT_CALLBACK_DEF.
+ (ftc_basic_image_family_class, ftc_basic_image_cache_class,
+ ftc_basic_sbit_family_class, ftc_basic_sbit_cache_class):
+ Use FT_CALLBACK_TABLE_DEF and local wrapper functions.
+
+ * src/cache/ftccache.c: Include ftccback.h.
+ (ftc_cache_init, ftc_cache_done): New wrapper functions which use
+ FT_LOCAL_DEF.
+
+ * src/cache/ftccmap.c: Include ftccback.h.
+ (ftc_cmap_cache_class): Use local wrapper functions.
+
+ * src/cache/ftcglyph.c: Include ftccback.h.
+ (ftc_gnode_compare, ftc_gcache_init, ftc_gcache_done): New wrapper
+ functions which use FT_LOCAL_DEF.
+
+ * src/cache/ftcimage.c: Include ftccback.h.
+ (ftc_inode_free, ftc_inode_new, ftc_inode_weight): New wrapper
+ functions which use FT_LOCAL_DEF.
+
+ * src/cache/ftcmanag.c (ftc_size_list_class, ftc_face_list_class):
+ Use FT_CALLBACK_TABLE_DEF.
+
+ * src/cache;/ftcsbits.c: Include ftccback.h.
+ (ftc_snode_free, ftc_snode_new, ftc_snode_weight,
+ ftc_snode_compare): New wrapper functions which use FT_LOCAL_DEF.
+
+ * src/cache/rules.mk (CACHE_DRV_H): Add ftccback.h.
+
+2004-02-17 Masatake YAMATO <jet@gyve.org>
+
+ * include/freetype/ftmac.h (FT_GetFile_From_Mac_Name): Fix a typo
+ (FT_EXPORT_DEF -> FT_EXPORT).
+
+ * include/freetype/ftxf86.h (FT_Get_X11_Font_Format): Ditto.
+
+2004-02-15 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftobjs.c (FT_Set_Char_Size): Fix typo.
+
+2004-02-14 Masatake YAMATO <jet@gyve.org>
+
+ * builds/unix/ftsystem.c: Include errno.h.
+ (ft_close_stream): Renamed to...
+ (ft_close_stream_by_munmap): This.
+ (ft_close_stream_by_free): New function.
+ (FT_Stream_Open): Use fallback method if mmap fails.
+ Use proper function for closing the stream.
+
+2004-02-14 Werner Lemberg <wl@gnu.org>
+
+ * src/type1/t1load.c (parse_dict): Initialize `start_binary'.
+
+2004-02-13 Robert Etheridge <roberte@stcc.cc.tx.us>
+
+ * src/type42/t42objs.c (T42_Face_Init), src/type1/t1objs.c
+ (T1_Face_Init), src/cid/cidobjs.c (cid_face_init): Fix computation
+ of underline_position and underline_thickness.
+
+2004-02-12 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftobjs.c (FT_Set_Char_Size): Return immediately if
+ ppem values don't change. Suggested by Graham Asher.
+
+2004-02-11 Werner Lemberg <wl@gnu.org>
+
+ * src/cid/cidload.c (cid_face_open): Always allocate
+ face->cid_stream so that we can deallocate it safely.
+
+2004-02-10 Werner Lemberg <wl@gnu.org>
+
+ Make the PS parser more tolerant w.r.t. non-standard font data. In
+ general, an error is only reported in case of a syntax error; a
+ wrong type is now simply ignored (if possible). To be independent
+ of the order of various MM-specific keywords, the parse_shared_dict
+ routine has been removed -- the PS parser is now capable to skip
+ this data. It no longer fails on parsing e.g.
+
+ dup /WeightVector exch def
+
+ Since the token following /WeightVector isn't `[' (starting an
+ array) it is simply ignored.
+
+ * include/freetype/fterrdef.h: Define `FT_Err_Ignore' (0xA2) as a
+ new internal error value.
+
+ * src/type1/t1load.c (parse_blend_axis_types,
+ parse_blend_design_positions, parse_blend_design_map): Return
+ T1_Err_Ignore if no proper array is following the keyword.
+ (parse_weight_vector): Use T1_ToTokenArray, initializing `blend'
+ structure, if necessary.
+ Return T1_Err_Ignore if no proper array is following the keyword.
+ (parse_shared_dict): Removed.
+ (parse_encoding): Set parser->root.error to return T1_Err_Ignore
+ if no result can be obtained.
+ Check for errors before accessing `elements' array.
+ (t1_keywords): Remove /shareddict.
+ (parse_dict): Reset error if t1_load_keyword returns T1_Err_Ignore.
+ Set keyword_flag only in case of success.
+ Check error code if skipping an unrecognized token.
+ (T1_Open_Face) [!T1_CONFIG_OPTION_NO_MM_SUPPORT]: Call T1_Done_Blend
+ if blend commands haven't set up a proper MM font.
+
+ * src/psaux/psobjs.c (ps_parser_load_field_table): Remove special
+ code for synthetic fonts.
+ Return PSaux_Err_Ignore if no proper value has been found.
+
+2004-02-09 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cffgload.c (cff_decoder_parse_charstrings)
+ <cff_op_endchar>: Preserve glyph width before calling
+ cff_operator_seac.
+
+2004-02-09 Martin Muskens <mmuskens@aurelon.com>
+
+ * src/cff/cffgload.c (cff_decoder_parse_charstrings): Handle special
+ first argument for `hintmask' and `cntrmask' operators also.
+
+2004-02-08 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/configure.in: Call AC_SUBST for `enable_shared',
+ `hardcode_libdir_flag_spec', and `wl'.
+ * builds/unix/configure: Regenerated.
+
+ * builds/unix/freetype-config.in: Make --prefix and --exec-prefix
+ actually work.
+ Report a proper --rpath (or -R) value for --libs argument if a
+ shared library has been built.
+
+ * docs/CHANGES: Updated.
+
+2004-02-07 Keith Packard <keithp@keithp.com>
+
+ * src/bdf/bdfdrivr.c (BDF_Face_Init, BDF_Set_Pixel_Size): Fix
+ computation of various vertical and horizontal metric values.
+
+ * src/pcfdrivr.c (PCF_Set_Pixel_Size), src/pcfread (pcf_load_font):
+ Ditto.
+
+2004-02-07 Werner Lemberg <wl@gnu.org>
+
+ * builds/win32/visualc/index.html,
+ builds/win32/visualc/freetype.dsp,
+ builds/win32/visualc/freetype.dsw, docs/CHANGES: Updated.
+
+2004-02-07 Vitaliy Pasternak <v_a_pasternak@mail.ru>
+
+ * builds/win32/visualc/freetype.sln,
+ builds/win32/visualc/freetype.vcproj: New files for VS.NET 2003.
+
+2004-02-03 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/cache/ftccache.h (FTC_CACHE_LOOKUP_CMP):
+ Initialize `node'.
+ * src/type1/t1load.c (parse_dict): Initialize `have_integer'.
+
+2004-02-02 Werner Lemberg <wl@gnu.org>
+
+ * src/type1/t1load.c (parse_dict): Handle `RD' and `-|' commands
+ outside of /Subrs or /CharStrings. This can happen if there is
+ additional code manipulating those two arrays so that FreeType
+ doesn't recognize them properly.
+ (T1_Open_Face): Improve an error message.
+
+2004-02-01 Werner Lemberg <wl@gnu.org>
+
+ * src/type1/t1load.c (parse_charstrings): Exit immediately if
+ there are no elements in /CharStrings. This is needed for fonts
+ like Optima-Oblique which not only define /CharStrings but access it
+ also.
+
+2004-02-01 David Turner <david@freetype.org>
+
+ * src/sfnt/Jamfile: Removing `ttcmap' from the list of sources.
+
+ * include/freetype/cache/ftccache.h (FTC_CACHE_LOOKUP_CMP)
+ <FTC_INLINE>: Provide macro version which doesn't use inline code.
+ * include/freetype/cache/ftcglyph.h (FTC_GCACHE_LOOKUP_CMP)
+ <FTC_INLINE>: Ditto.
+ Use FTC_MRULIST_LOOKUP_CMP.
+ * include/freetype/cache/ftcmru.h (FTC_MRULIST_LOOKUP_CMP): New
+ macro.
+ (FTC_MRULIST_LOOKUP): Use it.
+
+ * src/cache/Jamfile (_sources), src/cache/descrip.mms: Updated.
+ * src/cache/ftcbasic.c: Fix compiler warnings.
+ * src/cache/ftcmanag.c (FTC_Manager_LookupSize,
+ FTC_Manager_LookupFace) <FTC_INLINE>: Use FTC_MRULIST_LOOKUP_CMP.
+ * src/cache/ftcmru.c (FTC_MruList_Find): Fix a bug (found after
+ heavy testing).
+
+ * Jamfile: Updating `refdoc' target, and adding `autohint' to the
+ list of modules to build. Both the autohinter and autofitter will
+ be built by default. But which one will be used is determined by
+ the content of `ftmodule.h'.
+
+ * src/autofit/*: Many updates, but the code is still buggy...
+
+2004-01-31 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cffgload.c (cff_operator_seac): Fix magnitude of
+ accent offset.
+ Update code similarly to the seac support for Type 1 fonts.
+ (cff_decoder_parse_charstrings) <cff_op_endchar>: Fix magnitude
+ of accent offset.
+ Don't hint glyphs twice if seac is emulated.
+ <cff_op_flex>: Assign correct point tags.
+ * docs/CHANGES: Updated.
+
+2004-01-30 Werner Lemberg <wl@gnu.org>
+
+ * src/type1/t1parse.c (T1_Get_Private_Dict): Use FT_MEM_MOVE, not
+ FT_MEM_COPY, for copying the private dict.
+
+ * src/type1/t1load.c (parse_subrs): Assign number of subrs only
+ in first run.
+ (parse_charstrings): Parse /CharStrings in second run without
+ assigning values.
+ (parse_dict): Skip all /CharStrings arrays but the first. We need
+ this for non-standard fonts like `Optima' which have different
+ outlines depending on the resolution. Note that there is no
+ guarantee that we get fitting /Subrs and /CharStrings arrays; this
+ can only be done by a real PS interpreter.
+
+2004-01-29 Antoine Leca <Antoine-Freetype@Leca-Marti.org>
+
+ * builds/win32/visualc/index.html: New file, giving detailed
+ explanations about forcing CR+LF line endings for the VC++ project
+ files.
+
+2004-01-22 Garrick Meeker <garrick@digitalanarchy.com>
+
+ * src/cff/cffload.c (cff_subfont_load): Initialize `dict'.
+
+2004-01-22 Werner Lemberg <wl@gnu.org>
+
+ Add support for the hexadecimal representation of binary data
+ started with `StartData' in CID-keyed Type 1 fonts.
+
+ * include/freetype/internal/t1types.h (CID_FaceRec): Add new
+ members `binary_data' and `cid_stream'.
+
+ * src/cid/cidload.c (cid_read_subrs): Use `face->cid_stream'.
+ (cid_hex_to_binary): New auxiliary function.
+ (cid_face_open): Add new argument `face_index' to return quickly
+ if less than zero. Updated all callers.
+ Call `cid_hex_to_binary', then open and assign memory stream to
+ `face->cid_stream' if `parser->binary_length' is non-zero.
+ * src/cid/cidload.h: Updated.
+
+ * src/cid/cidobjs.c (cid_face_done): Free `binary_data' and
+ `cid_stream'.
+
+ * src/cid/cidparse.c (cid_parser_new): Check arguments to
+ `StartData' and set parser->binary_length accordingly.
+ * src/cid/cidparse.h (CID_Parser): New member `binary_length'.
+
+ * src/cid/cidgload.c (cid_load_glyph): Use `face->cid_stream'.
+
+ * docs/CHANGES: Updated.
+
+2004-01-21 Werner Lemberg <wl@gnu.org>
+
+ include/freetype/config/ftstdlib.h (ft_atoi): Replaced with...
+ (ft_atol): This.
+ * src/base/ftdbgmem.c: s/atol/ft_atol/.
+ * src/type42/t42drivr.c: s/ft_atoi/ft_atol/.
+
+2004-01-20 Masatake YAMATO <jet@gyve.org>
+
+ * include/freetype/ftcache.h: Delete duplicated definition of
+ FTC_FaceID.
+
+ * src/cff/cffdrivr.c (cff_get_cmap_info): Call sfnt module's TT CMap
+ Info service function if the cmap comes from sfnt. Return 0 if the
+ cmap is sythesized in cff module.
+
+2004-01-20 David Turner <david@freetype.org>
+
+ * src/cache/ftcmanag.c (ftc_size_node_compare): Call
+ FT_Activate_Size.
+
+2004-01-20 Werner Lemberg <wl@gnu.org>
+
+ * src/type1/t1parse.c (T1_Get_Private_Dict): Skip exactly one
+ CR, LF, or CR/LF after `eexec'.
+
+2004-01-18 David Turner <david@freetype.org>
+
+ * src/sfnt/ttsbit.c (tt_face_set_sbit_strike): Remove compiler
+ warning.
+
+ * src/tools/docmaker/*: Updating beautifier tool.
+
+2004-01-15 David Turner <david@freetype.org>
+
+ * src/base/ftoutln.c (ft_orientation_extremum_compute): Fix
+ infinite loop bug.
+
+ * include/freetype/ftstroke.h: Include FT_GLYPH_H.
+ (FT_Stroker_Rewind, FT_Glyph_Stroke, FT_Glyph_StrokeBorder): New
+ declarations.
+
+ * src/base/ftstroke.c: Include FT_INTERNAL_OBJECTS_H.
+ (FT_Outline_GetOutsideBorder): Inverse result.
+ (FT_Stroker_Rewind, FT_Glyph_Stroke, FT_GlyphStrokeBorder): New
+ functions.
+ (FT_Stroker_EndSubPath): Close path if needed.
+ (FT_Stroker_Set, FT_Stroker_ParseOutline): Use FT_Stroker_Rewind.
+
+ * include/freetype/cache/ftcmanag.h (FTC_ScalerRec,
+ FTC_Manager_LookupSize): Moved to...
+ * include/freetype/ftcache.h (FTC_ScalerRec,
+ FTC_Manager_LookupSize): Here.
+
+ * src/tools/docmaker/docbeauty.py: New file to beautify the
+ documentation comments (e.g., to convert them to single block border
+ mode).
+ * src/tools/docmaker/docmaker.py (file_exists, make_file_list):
+ Moved to...
+ * src/tools/docmaker/utils.py (file_exists, make_file_list): Here.
+
+2004-01-14 David Turner <david@freetype.org>
+
+ * include/freetype/internal/ftmemory.h (FT_ARRAY_COPY,
+ FT_ARRAY_MOVE): New macros to make copying arrays easier.
+ Updated all relevant code to use them.
+
+2004-01-14 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cffload.c (cff_font_load): Load charstrings_index earlier.
+ Use number of charstrings as argument to CFF_Load_FD_Select (as
+ documented in the CFF specs).
+
+2004-01-13 Graham Asher <graham.asher@btinternet.com>
+
+ * src/pshinter/pshalgo.c (psh_glyph_init): Move assignment of
+ `glyph->memory' up to free arrays properly in case of failure.
+
+2004-01-10 Masatake YAMATO <jet@gyve.org>
+
+ Make `FT_Get_CMap_Language_ID' work with CFF. Bug reported by
+ Steve Hartwell <shspamsink@comcast.net>.
+
+ * src/cff/cffdrivr.c: Include FT_SERVICE_TT_CMAP_H.
+ (cff_services): Added an entry for FT_SERVICE_ID_TT_CMAP.
+ (cff_get_cmap_info): New function.
+ (cff_service_get_cmap_info) New entry for cff_services.
+
+ * src/sfnt/ttcmap0.c: Exit loop after a format match has been found.
+ Suggested by Steve Hartwell <shspamsink@comcast.net>.
+
+2004-01-03 Masatake YAMATO <jet@gyve.org>
+
+ * src/base/ftobjs.c (destroy_charmaps): New function.
+ (destroy_face, open_face): Use `destroy_charmaps'.
+
+2004-01-01 Werner Lemberg <wl@gnu.org>
+
+ * docs/CHANGES: Updated.
+
+2004-01-01 Michael Jansson <mjan@em2-solutions.com>
+
+ * src/winfonts/winfnt.c (FNT_Size_Set_Pixels): Fix sign of
+ size->metrics.descender.
+
+2003-12-31 Wolfgang Domröse <porthos.domroese@harz.de>
+
+ * src/cff/cffgload.c (cff_decoder_parse_charstrings)
+ [FT_DEBUG_LEVEL_TRACE]: Use `%ld' in FT_TRACE4.
+ <cff_op_flex1>: Change type of dx and dy to FT_Pos and remove
+ cast for accessing arguments.
+
+2003-12-31 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttgload.c (TT_Load_Simple_Glyph): Revert previous
+ change. It's not necessary.
+
+2003-12-29 Smith Charles <smith.charles@free.fr>
+
+ * src/truetype/ttgload.c (TT_Load_Simple_Glyph): Handle `repeated
+ flags set' correctly.
+
+2003-12-29 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cffobjs.c (cff_face_init): Fix memory leak by deallocating
+ `full' and `weight' properly.
+ * src/cff/cffgload.c (cff_decoder_parse_charstrings)
+ <cff_op_hintmask> [FT_DEBUG_LEVEL_TRACE]: Use `0x' as prefix for
+ tracing output.
+
+2003-12-26 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/internal/sfnt.h (TT_Set_SBit_Strike_Func):
+ Use FT_UInt for ppem values.
+ * src/sfnt/ttsbit.c (tt_face_set_sbit_strike): Use FT_UInt for
+ ppem values.
+ * src/sfnt/ttsbit.h: Updated.
+
+ * src/base/ftobjs.c (FT_Set_Pixel_Sizes): Don't allow ppem values
+ larger than -0FFFF.
+
+2003-12-25 Werner Lemberg <wl@gnu.org>
+
+ * src/base/fttrigon.c, src/base/ftgloadr.c: Inlude
+ FT_INTERNAL_OBJECTS_H.
+
+ * src/base/ftstroke.c (FT_Outline_GetInsideBorder,
+ FT_Outline_GetOutsideBorder): s/or/o/ to make it compile with
+ C++ compilers.
+
+ * src/cache/ftcmru.c, include/freetype/cache/ftcmru.h:
+ s/select/selection/ to avoid compiler warning.
+ * src/cff/cffload.h: s/select/ftselect/ to avoid potential
+ compiler warning.
+
+2003-12-24 Werner Lemberg <wl@gnu.org>
+
+ * src/cache/ftcsbits.c (FTC_SNode_Weight):
+ s/FTC_SBIT_ITEM_PER_NODE/FTC_SBIT_ITEMS_PER_NODE/.
+
+2003-12-24 David Turner <david@freetype.org>
+
+ * Fixed compilation problems in the cache sub-system.
+
+ * Partial updates to src/autofit.
+
+ * Jamfile (FT2_COMPONENTS): Add autofit module.
+
+2003-12-23 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cffgload.c (cff_lookup_glyph_by_stdcharcode): Handle
+ CID-keyed fonts.
+
+2003-12-23 David Turner <david@freetype.org>
+
+ * include/freetype/internal/ftobjs.h (FT_PAD_FLOOR, FT_PAD_ROUND,
+ FT_PAD_CEIL, FT_PIX_FLOOR, FT_PIX_ROUND, FT_CEIL): New macros. They
+ are used to avoid compiler warnings with very pedantic compilers.
+ Note that `(x) & -64' causes a warning if (x) is not signed. Use
+ `(x) & ~63' instead!
+ Updated all related code.
+
+ Add support for extraction of `inside' and `outside' borders.
+
+ * src/base/ftstroke.c (FT_StrokerBorder): New enumeration.
+ (FT_Outline_GetInsideBorder, FT_Outline_GetOutsideBorder,
+ FT_Stroker_GetBorderCounts, FT_Stroker_ExportBorder): New functions.
+ (FT_StrokeBorderRec): New boolean member `valid'.
+ (ft_stroke_border_get_counts): Updated.
+ * include/freetype/ftstroke.h: Updated.
+
+2003-12-22 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/ftwinfnt.h (FT_WinFNT_ID_*): New definitions
+ to describe the `charset' field in FT_WinFNT_HeaderRec.
+ * src/winfonts/winfnt.c (FNT_Face_Init): Set encoding to
+ FT_ENCODING_NONE except for FT_WinFNT_ID_MAC.
+
+ * include/freetype/freetype.h (FT_Encoding): Improve comment,
+ based on work by Detlef Würkner <TetiSoft@apg.lahn.de>.
+
+ * docs/CHANGES: Updated.
+
+2003-12-22 David Turner <david@freetype.org>
+
+ * include/freetype/ftcache.h,
+ include/freetype/cache/ftcmanag.h,
+ include/freetype/cache/ftccache.h,
+ include/freetype/cache/ftcmanag.h,
+ include/freetype/cache/ftcmru.h (added),
+ include/freetype/cache/ftlru.h (removed),
+ include/freetype/cache/ftcsbits.h,
+ include/freetype/cache/ftcimage.h,
+ include/freetype/cache/ftcglyph.h,
+ src/cache/ftcmru.c,
+ src/cache/ftcmanag.c,
+ src/cache/ftccache.c,
+ src/cache/ftcglyph.c,
+ src/cache/ftcimage.c,
+ src/cache/ftcsbits.c,
+ src/cache/ftccmap.c,
+ src/cache/ftcbasic.c (added),
+ src/cache/ftclru.c (removed):
+
+ *Complete* rewrite of the cache sub-system to `solve' the
+ following points:
+
+ - all public APIs have been moved to FT_CACHE_H, everything
+ under `include/freetype/cache' is only needed by client
+ applications that want to implement their own caches
+
+ - a new function named FTC_Manager_RemoveFaceID to deal
+ with the uninstallation of FaceIDs
+
+ - the image and sbit cache are now abstract classes, that
+ can be extended much more easily by client applications
+
+ - better performance in certain areas. Further optimizations
+ to come shortly anyway...
+
+ - the FTC_CMapCache_Lookup function has changed its signature,
+ charmaps can now only be retrieved by index
+
+ - FTC_Manager_Lookup_Face => FTC_Manager_LookupFace
+ FTC_Manager_Lookup_Size => FTC_Manager_LookupSize (still in
+ private header for the moment)
+
+2003-12-21 Werner Lemberg <wl@gnu.org>
+
+ * src/type1/t1load.c (parse_dict): Stop parsing if `eexec' keyword
+ is encountered.
+
+2003-12-19 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cfftypes.h (CFF_MAX_CID_FONTS): Increase to 32. For
+ example, the Japanese Hiragino font already contains 15 subfonts.
+
+ * src/cff/cffload.c (cff_font_load): Deallocate `sids' array for
+ CID-keyed fonts.
+
+ * devel/ftoption.h: Define FT_DEBUG_MEMORY.
+
+2003-12-18 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/ttnameid.h (TT_ADOBE_ID_LATIN_1): New macro.
+ * src/type1/t1objs.c (T1_Face_Init): Use TT_ADOBE_ID* values.
+
+2003-12-18 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cfftypes.h (CFF_FontRecDictRec): Change type of
+ `cid_count' to `FT_ULong'.
+
+ * src/cff/cffgload.c (cff_slot_load): Take care of empty `cids'
+ array.
+
+ * src/cff/cffload.c (cff_charset_done): Free `cids' array.
+ (cff_font_load): Create cids array only for CID-keyed fonts which
+ are subsetted.
+
+ * src/cff/cffobjs.c (cff_face_init): Check the availability of
+ the PSNames modules for non-pure CFFs also.
+ Set FT_FACE_FLAG_GLYPH_NAMES for a non-pure CFF also if it isn't
+ CID-keyed.
+
+ * src/cff/rules.mk (CFF_DRV_H): Add cfftypes.h.
+
+2003-12-17 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/sfobjs.c (sfnt_init_face): Don't set
+ FT_FACE_FLAG_GLYPH_NAMES if the font contains a version 3.0 `post'
+ table.
+
+ * docs/CHANGES: Updated.
+
+2003-12-17 Masatake YAMATO <jet@gyve.org>
+
+ Add new function FT_Get_CMap_Language_ID to extract the language ID
+ for TrueType/sfnt fonts.
+
+ * include/freetype/internal/services/svttcmap.h: New file.
+ * include/freetype/internal/ftserv.h (FT_SERVICE_TT_CMAP_H): Add
+ svttcmap.h.
+
+ * src/sfnt/sfdriver.c: Include ttcmap0.h.
+ (tt_service_get_cmap_info): New service.
+ (sfnt_services): Updated.
+
+ * src/sfnt/ttcmap0.c (tt_cmap*_get_info): New functions.
+ (tt_cmap*_class_rec): Add tt_cmap*_get_info members.
+ (tt_get_cmap_info): New function.
+ * src/sfnt/ttcmap0.h: Include FT_SERVICE_TT_CMAP_H.
+ (TT_CMap_ClassRec): New field `get_cmap_info'.
+ (tt_get_cmap_info): New declaration.
+
+ * src/base/ftobjs.c: Include FT_SERVICE_TT_CMAP_H.
+ (FT_Get_CMap_Language_ID): New function implementation.
+ * include/freetype/tttables.h (FT_Get_CMap_Language_ID): New
+ function declaration.
+
+2003-12-16 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/ttcmap.c, src/sfnt/ttcmap.h: Removed. Obsolete.
+
+ * include/freetype/internal/sfnt.h (SFNT_Interface): Remove
+ obsolete fields `load_charmap' and `free_charmap'.
+ (TT_CharMap_Load_Func, TT_CharMap_Free_Func): Removed.
+ * src/sfnt/sfnt.c: Don't include ttcmap.c.
+ * src/sfnt/rules.mk (SFNT_DRV_SRC): Don't include ttcmap.c.
+ * src/sfnt/ttload.c: Don't include ttcmap.h.
+ * src/sfnt/sfdriver.c: Don't include ttcmap.h.
+ (sfnt_interface): Updated.
+
+ * include/freetype/internal/tttypes.h (TT_TableDirRec,
+ TT_CMapDirRec, TT_CMapDirEntryRec, TT_CMap0, TT_CMap2SubHeaderRec,
+ TT_CMap2Rec, TT_CMap4Segment, TT_CMap4Rec, TT_CMap6,
+ TT_CMapGroupRec, TT_CMap8_12Rec, TT_CMap10Rec, TT_CharMap_Func,
+ TT_CharNext_Func, TT_CMapTableRec, TT_CharMapRec): Removed.
+ Obsolete.
+ * src/cff/cffobjs.h (CFF_CharMapRec): Removed. Obsolete.
+
+2003-12-15 Werner Lemberg <wl@gnu.org>
+
+ * docs/CHANGES: Updated.
+
+2003-12-15 Wolfgang Domröse <porthos.domroese@harz.de>
+
+ * builds/atari/*: New directory for building FreeType 2 on Atari
+ with the PureC compiler.
+
+2003-12-12 Wolfgang Domröse <porthos.domroese@harz.de>
+
+ * src/type1/t1gload.c (T1_Parse_Glyph_And_Get_Char_String): Add
+ cast.
+ * src/cff/cffdrivr.c (cff_ps_has_glyph_names): Assure that return
+ value is either 0 or 1.
+
+2003-12-12 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cffdrivr.c (cff_get_glyph_name): Improve error message.
+ (cff_get_name_index): Return if no PSNames service is available.
+ (cff_ps_has_glyph_names): Handle CID-keyed fonts correctly.
+ * src/cff/cfftypes.h (CFF_CharsetRec): New field `cids', used for
+ CID-keyed fonts. This is the inverse mapping of `sids'.
+ * src/cff/cffload.c (cff_charset_load): New argument `invert'.
+ Initialize charset->cids if `invert' is set.
+ (cff_font_load): In call to cff_charset_load, set `invert' to true
+ for CID-keyed fonts.
+ * src/cff/cffgload.c (cff_slot_load): Handle glyph index as CID
+ and map it to the real glyph index.
+
+ * docs/CHANGES: Updated.
+
+2003-12-11 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cffobjs.c (cff_face_init): Don't set
+ FT_FACE_FLAG_GLYPH_NAMES for CID-keyed fonts.
+ Don't construct a cmap for CID-keyed fonts.
+
+2003-12-10 Werner Lemberg <wl@gnu.org>
+
+ Use implementation specific SID value 0xFFFF to indicate that
+ a dictionary element is missing.
+
+ * src/cff/cffload.c (cff_subfont_load): Initialize all fields
+ which hold SIDs to 0xFFFF.
+ (cff_index_get_sid_string): Handle SID value 0xFFFF.
+ Handle case where `psnames' is zero.
+ (cff_font_load): Updated.
+ Don't load encoding for CID-keyed CFFs.
+
+ * src/cff/cffobjs.c (cff_face_init): Updated.
+ Don't check for PSNames module if font is CID-keyed.
+ Compute style name properly (using the same algorithm as in the
+ CID driver).
+ Fix computation of style flags.
+
+ * src/cff/cfftoken.h: Comment out handling of base_font_name.
+ Rename `postscript' field to `embedded_postscript'
+ * src/cff/cfftypes.h (CFF_FontRecDictRec): Remove `base_font_name'
+ and `postscript'.
+
+2003-12-10 Detlef Würkner <TetiSoft@apg.lahn.de>
+
+ * src/pcf/pcfdrivr.c (pcf_get_charset_id): New function (a clone
+ of the similar BDF function).
+ (pcf_service_bdf): Use it.
+
+2003-12-09 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/sfobjs.c (sfnt_load_face): Set FT_FACE_FLAG_GLYPH_NAMES
+ only if a `post' table is present.
+
+2003-12-09 George Williams <gww@silcom.com>
+
+ * src/base/ftobjs.c (load_mac_face): Recent versions of Linux
+ support Mac's HFS+ file system, thus enable code to read /rsrc on
+ non-Macintosh platforms also.
+
+2003-12-08 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/internal/psaux.h (PS_TableRec): Change type
+ of `lengths' to FT_PtrDist.
+ (T1_DecoderRec): Change type of `subrs_len' to FT_PtrDist.
+ * include/freetype/internal/t1types.h (T1_FontRec): Change type
+ of `subrs_len' and `charstrings_len' to FT_PtrDist.
+
+ * src/base/ftobjs.c (Mac_Read_POST_Resource): Replace `junk'
+ variable with better solution.
+ (IsMacResource): Remove unused variable `map_len'.
+ Replace `junk' variable with better solution.
+ (FT_Open_Face) [!FT_MACINTOSH]: Add conditional
+ FT_CONFIG_OPTION_MAC_FONTS.
+
+2003-12-08 Wolfgang Domröse <porthos.domroese@harz.de>
+
+ * src/autohint/ahhint.c (ah_hinter_hint_edges,
+ ah_hinter_align_strong_points): Add some casts.
+
+ * src/base/ftoutln.c (FT_OrientationExtremumRec): Change type
+ of `pos' to FT_Long.
+
+ * src/base/ftobjs.c (Mac_Read_POST_Resource,
+ Mac_Read_sfnt_Resource): Change type of `len' to FT_Long.
+
+ * src/type42/t42parse.c (t42_parse_dict): Add cast for `n_keywords'.
+
+2003-12-07 Werner Lemberg <wl@gnu.org>
+
+ * docs/raster.txt: New file, taken from FreeType 1 and completely
+ revised.
+
+2003-12-04 Masatake YAMATO <jet@gyve.org>
+
+ * src/type1/t1driver.c (Get_Interface): Remove FT_UNUSED for
+ t1_interface. t1_interface is used.
+
+2003-11-27 David Turner <david@freetype.org>
+
+ * src/pfr/pfrdrivr.c (pfr_get_metrics): Revert incorrect change of
+ 2003-11-23: For PFR fonts, metrics->x_scale and metrics->y_scale are
+ the scaling values for outline units, not for metric units.
+
+2003-11-25 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftcalc.c, include/freetype/internal/ftcalc.h
+ (FT_MulDiv_No_Round): Surround code with `#ifdef
+ TT_CONFIG_OPTION_BYTECODE_INTERPRETER ... #endif'.
+
+2003-11-23 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftcalc.c (FT_MulDiv_No_Round): New function (32 and
+ 64 bit version).
+ * include/freetype/internal/ftcalc.h: Updated.
+
+ * src/truetype/ttinterp.c (TT_MULDIV_NO_ROUND): New macro.
+ (TT_INT64): Removed.
+ (DO_DIV): Use TT_MULDIV_NO_ROUND.
+
+ * src/pfr/pfrdrivr.c (pfr_get_metrics): Directly use
+ metrics->x_scale and metrics->y_scale.
+
+2003-11-22 Rogier van Dalen <R.C.van.Dalen@umail.leidenuniv.nl>
+
+ * src/truetype/ttinterp.c (CUR_Func_move_orig): New macro.
+ (Direct_Move_Orig, Direct_Move_Orig_X, Direct_Move_Orig_Y): New
+ functions. Similar to Direct_Move, Direct_Move_X, and
+ Direct_Move_Y but without touching.
+ (Compute_Funcs): Use new functions.
+
+ (Round_None, Round_To_Grid, Round_To_Half_Grid, Round_Down_To_Grid,
+ Round_Up_To_Grid, Round_To_Double_Grid, Round_Super,
+ Round_Super_45): Fix rounding of value zero.
+
+ (DO_DIV): Don't use TT_MULDIV.
+
+ (Ins_SHC): This instruction actually touches the points.
+ (Ins_MSIRP): Fix undocumented behaviour.
+
+ * src/truetype/ttinterp.h (TT_ExecContextRec): Updated.
+
+2003-11-22 Werner Lemberg <wl@gnu.org>
+
+ * docs/VERSION.DLL, docs/CHANGES: Updated.
+
+ * src/base/ftobjs.c (FT_Set_Char_Size): Make metrics->x_scale and
+ metrics->y_scale really precise.
+
+ (FT_Load_Glyph): Update computation of linearHoriAdvance and
+ linearVertAdvance.
+
+ * src/truetype/ttinterp.c (Update_Max): Use FT_REALLOC.
+
+2003-11-22 David Turner <david@freetype.org>
+
+ * src/autofit/*: More updates.
+
+ * include/freetype/freetype.h (FREETYPE_PATCH): Set to 8.
+ * builds/unix/configure.ac (version_info): Set to 9:6:3.
+ * README: Updated.
+
+2003-11-13 John A. Boyd Jr. <jaboydjr@netwalk.com>
+
+ * src/bdf/bdfdrivr.c (bdf_interpret_style), src/pcf/pcfread.c
+ (pcf_interpret_style): Replace spaces with dashes in properties
+ SETWIDTH_NAME and ADD_STYLE_NAME to simplify parsing.
+
+2003-11-11 Werner Lemberg <wl@gnu.org>
+
+ * docs/CHANGES: Updated.
+
+2003-11-11 John A. Boyd Jr. <jaboydjr@netwalk.com>
+
+ Handle SETWIDTH_NAME and ADD_STYLE_NAME properties for BDF and PCF
+ fonts.
+
+ * src/bdf/bdfdrivr.c (bdf_interpret_style): New auxiliary function.
+ (BDF_Face_Init): Don't handle style properties but call
+ bdf_interpret_style.
+
+ * src/pcf/pcfread.c (pcf_interpret_style): New auxiliary function.
+ (pcf_load_font): Don't handle style properties but call
+ pcf_interpret_style.
+
+2003-11-07 Werner Lemberg <wl@gnu.org>
+
+
+ * Version 2.1.7 released.
+ =========================
+
+
+ * include/freetype/freetype.h (FREETYPE_PATCH): Set to 7.
+
+ * builds/unix/ft2unix.h: Fix comments.
+
+ * builds/unix/ftconfig.in: Synchronized with ANSI version.
+ Use `#undef' in templates as recommended in the autoconf
+ documentation.
+ Since real `#undef' lines don't survive during configuration, use
+ `/undef' instead; the postprocessing facility of the
+ AC_CONFIG_HEADERS autoconf macro converts them to `#undef'.
+
+ * builds/unix/install.mk (install): Install Unix version of
+ `ftconfig.h'.
+
+ * builds/unix/unix-cc.in (CFLAGS): Set FT_CONFIG_CONFIG_H macro
+ to include the correct `ftconfig.h' file.
+
+ * builds/unix/ft-munmap.m4 (FT_MUNMAP_DECL): Removed.
+ (FT_MUNMAP_PARAM): Updated syntax to autoconf 2.59.
+
+ * builds/unix/freetype2.m4: Updated syntax to autoconf 2.59.
+
+ * builds/unix/configure.ac: Use AC_CONFIG_HEADERS instead of
+ AC_CONFIG_HEADER to create ftconfig.h, and use second argument
+ to replace `/undef' with `#undef'.
+ Don't use FT_MUNMAP_DECL but AC_CHECK_DECLS to check for munmap.
+ Use AS_HELP_STRING in AC_ARG_WITH.
+ Update syntax to autoconf 2.59.
+
+ * builds/unix/ltmain.sh: Regenerated with `libtoolize --force
+ --copy' from libtool 1.5.
+ * builds/unix/aclocal.m4: Regenerated with `aclocal -I .' from
+ automake 1.7.8.
+ * builds/unix/configure: Regenerated with autoconf 2.59.
+ * builds/unix/config.guess, builds/unix/config.sub: Updated from
+ `config' CVS module at subversions.gnu.org
+ * builds/unix/install-sh, builds/unix/mkinstalldirs: Updated from
+ `texinfo' CVS module at subversions.gnu.org.
+
+ * builds/vms/ftconfig.h: Synchronized with ANSI version.
+
+ * docs/CUSTOMIZE: Fix documentation error.
+ * docs/CHANGES, docs/VERSION.DLL, docs/release: Updated.
+
+ * builds/freetype.mk (refdoc): Updated --title.
+
+2003-11-07 David Turner <david@freetype.org>
+
+
+ * Version 2.1.6 released.
+ =========================
+
+
+ * install: Removed. Obsolete.
+
+2003-11-04 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/sfdriver.c: Include FT_SERVICE_SFNT_H.
+ (sfnt_service_sfnt_table): New service.
+ (sfnt_services): Updated.
+
+ * docs/license.txt: Reworded.
+
+2003-11-03 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/*: Add a guard to all public header files which
+ load FT_FREETYPE_H to reject freetype.h from FreeType 1.
+
+2003-11-02 Patrick Welche <prlw1@newn.cam.ac.uk>
+
+ * builds/unix/freetype2.m4, builds/unix/ft-munmap.m4: Protect
+ first argument of AC_DEFUN with brackets to avoid possible
+ expansion.
+
+2003-11-02 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/cache/ftcglyph.h: Don't include stddef.h.
+
+ * include/freetype/freetype.h: Fix check for ft2build.h.
+
+2003-11-01 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/freetype.h: Check that ft2build.h has been
+ loaded first.
+
+ * src/base/fttype1.c (FT_Get_PS_Font_Info): Fix incorrectly applied
+ patch.
+
+2003-10-31 Detlef Würkner <TetiSoft@apg.lahn.de>
+
+ * src/base/fttype1.c (FT_Get_PS_Font_Info, FT_Has_PS_Glyph_Names):
+ Fix parameter order in calls to FT_FACE_FIND_SERVICE.
+
+2003-10-31 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/internal/ftserv.h
+ (FT_SERVICE_POSTSCRIPT_NAMES_H): Removed. Unused.
+
+ * src/type42/t42drivr.c (t42_services): Updated.
+
+2003-10-29 David Turner <david@freetype.org>
+
+ * include/freetype/internal/bdftypes.h: Removed. Obsolete.
+ * src/base/ftbdf.c: Updated.
+
+ * include/freetype/internal/cfftypes.h: Moved to...
+ * src/cff/cfftypes.h: This place since no other module needs to
+ know about those types.
+
+ * include/freetype/internal/t42types.h: Moved to...
+ * src/type42/t42types.h: This place since no other module needs to
+ know about those types.
+
+ * include/freetype/internal/services/svbdf.h: Include FT_BDF_H.
+
+ * include/freetype/internal/services/svpsname.h: Renamed to...
+ * include/freetype/internal/services/svpscmap.h: This.
+ Updated `FT_Service_PsNames' -> `FT_Service_PsCMaps' and
+ `POSTSCRIPT_NAMES' -> `POSTSCRIPT_CMAPS' everywhere.
+
+ * include/freetype/internal/services/svpsinfo.h: New file, providing
+ PostScript info service.
+
+ * include/freetype/internal/ftserv.h (FT_SERVICE_POSTSCRIPT_CMAPS_H,
+ FT_SERVICE_POSTSCRIPT_INFO_H): New macros for svpscmap.h and
+ svpsinfo.h.
+ * include/freetype/internal/internal.h (FT_INTERNAL_TYPE42_TYPES_H,
+ FT_INTERNAL_CFF_TYPES_H, FT_INTERNAL_BDF_TYPES_H): Removed.
+
+ * src/base/fttype1.c: Don't include FT_INTERNAL_TYPE1_TYPES_H and
+ FT_INTERNAL_TYPE42_TYPES_H but FT_INTERNAL_SERVICE_H and
+ FT_SERVICE_POSTSCRIPT_INFO_H.
+ (FT_Get_PS_Font_Info, FT_Has_PS_Glyph_Names): Use new
+ POSTSCRIPT_INFO service.
+
+ * src/cff/cffdrivr.c: Include FT_SERVICE_POSTSCRIPT_INFO_H.
+ (cff_ps_has_glyph_names): New function.
+ (cff_service_ps_info): New service.
+ (cff_services): Updated.
+
+ * src/cff/cffload.h, src/cff/cffobjs.h, src/cff/cffparse.h: Don't
+ include FT_INTERNAL_CFF_TYPES_H but cfftypes.h directly.
+
+ * src/cif/cidriver.c: Include FT_SERVICE_POSTSCRIPT_INFO_H.
+ (cid_ps_get_font_info): New function.
+ (cid_service_ps_info): New service.
+ (cid_services): Updated.
+
+ * src/type1/t1driver.c: Include FT_SERVICE_POSTSCRIPT_INFO_H.
+ (t1_ps_get_font_info, t1_ps_has_glyph_names): New functions.
+ (t1_service_ps_info): New service.
+ (t1_services): Updated.
+
+ * src/type42/t42drivr.c: Include FT_SERVICE_POSTSCRIPT_INFO_H.
+ (t42_ps_get_font_info, t42_ps_has_glyph_names): New functions.
+ (t42_service_ps_info): New service.
+
+ * src/type42/t42objs.h: Don't include FT_INTERNAL_TYPE42_TYPES_H
+ but t42types.h directly.
+
+ * src/psnames/psmodule.c (psnames_interface, psnames_services):
+ Renamed to...
+ (pscmaps_interface, pscmaps_services): This.
+ Updated all users.
+
+
+ * src/gzip/infblock.c (inflate_blocks): Remove compiler warning.
+
+2003-10-22 Werner Lemberg <wl@gnu.org>
+
+ * src/type1/t1load.c (parse_encoding): Handle `/Encoding [ ... ]'.
+
+ * src/type1/t1parse.c (T1_Get_Private_Dict): Test whether `eexec'
+ is real.
+
+ * src/type42/t42parse.c (t42_parse_encoding): Improve boundary
+ checking while parsing.
+
+ * docs/CHANGES: Updated.
+
+2003-10-21 Josselin Mouette <joss@debian.org>
+
+ * include/freetype/internal/t1types.h (T1_FontRec): `paint_type'
+ and `stroke_width' aren't pointers.
+
+ * src/type42/t42objs.c (T42_Face_Done), src/type1/t1objs.c
+ (T1_Face_Done): Don't free `paint_type' and `stroke_width'.
+
+2003-10-20 Graham Asher <graham.asher@btinternet.com>
+
+ * src/winfonts/winfnt.c (fnt_cmap_class): Fix position of `const'.
+
+2003-10-19 Werner Lemberg <wl@gnu.org>
+
+ * src/autohint/ahhint.c (ah_hinter_load_glyph): Patch from
+ 2003-08-18 introduced a severe bug (FT_Render_Glyph was called
+ twice under some circumstances, causing strange results). This
+ is fixed now by clearing the FT_LOAD_RENDER bit of `load_flags'.
+
+ * src/base/ftpfr.c (FT_Get_PFR_Metrics): Initialize `error'.
+ * src/psaux/psobjs.c (ps_tobytes): Initialize `n'.
+ * src/type42/t42parse.c (t42_parse_sfnts): Initialize `string_size'.
+
+2003-10-16 Werner Lemberg <wl@gnu.org>
+
+ Completely revised Type 42 parser. It now handles both fonts
+ produced with ttftot42 (tested version 0.3.1) and
+ TrueTypeToType42.ps (tested version May 2001; it is necessary to
+ fix the broken header comment to be `%!PS-TrueTypeFont...').
+
+ * src/type42/t42objs.c (T42_GlyphSlot_Load): Change fourth
+ parameter to `FT_UInt'.
+ * src/type42/t42objs.h: Updated.
+
+ * src/type42/t42parse.h (T42_ParserRec): Change type of `in_memory'
+ to FT_Bool.
+ (T42_Loader): Change type of `num_chars' and `num_glyphs' to
+ FT_UInt.
+ Add `swap_table' element.
+ * src/type42/t42parse.c (T42_KEYWORD_COUNT, T1_ToFixed,
+ T1_ToCoordArray, T1_ToTokenArray): Removed.
+ (T1_ToBytes): New macro.
+ (t42_is_alpha, t42_hexval): Removed.
+ (t42_is_space): Handle `\0'.
+ (t42_parse_encoding): Updated to use new PostScript parser routines
+ from psaux.
+ Handle `/Encoding [ ... ]' also.
+ (T42_Load_Status): New enumeration.
+ (t42_parse_sfnts): Updated to use new PostScript parser routines
+ from psaux.
+ (t42_parse_charstrings): Updated to use new PostScript parser
+ routines from psaux.
+ Handle `/CharStrings << ... >>' also.
+ Don't expect that /.notdef is the first element in dictionary. Copy
+ code from type1 module to handle this.
+ (t42_parse_dict): Updated to use new PostScript parser routines
+ from psaux.
+ Remove code for synthetic fonts (which can't occur in Type 42
+ fonts).
+ (t42_loader_done): Release `swap_table'.
+
+ * src/psaux/psobjs.c (skip_string): Increase `cur' properly.
+
+ * src/type1/t1load.c (parse_charstrings): Make test for `.notdef'
+ faster.
+
+2003-10-15 Graham Asher <graham.asher@btinternet.com>
+
+ * src/autohint/ahglobal.c (blue_chars), src/winfonts/winfnt.c
+ (fnt_cmap_class_rec, fnt_cmap_class), src/bdf/bdflib.c (empty,
+ _num_bdf_properties), src/gzip/infutil.c (inflate_mask),
+ src/gzip/inffixed.h (fixed_bl, fixed_bd, fixed_tl, fixed_td),
+ src/gzip/inftrees.h (inflate_trees_fixed), srf/gzip/inftrees.c
+ (inflate_trees_fixed): Decorate with more `const' to avoid
+ writable global variables which are disallowed on ARM.
+
+2003-10-08 Werner Lemberg <wl@gnu.org>
+
+ * src/type1/t1load.c (parse_font_matrix, parse_charstrings): Remove
+ code specially for synthetic fonts; this is handled elsewhere.
+ (parse_encoding): Remove code specially for synthetic fonts; this is
+ handled elsewhere.
+ Improve boundary checking while parsing.
+ (parse_dict): Improve boundary checking while parsing.
+ Use ft_memcmp to simplify code.
+
+2003-10-07 Werner Lemberg <wl@gnu.org>
+
+ * src/type1/t1load.c (parse_subrs, parse_dict): Handle synthetic
+ fonts properly.
+ (parse_charstrings): Copy correct number of characters into
+ `name_table'.
+
+2003-10-06 Werner Lemberg <wl@gnu.org>
+
+ Heavy modification of the PS parser to handle comments and strings
+ correctly. This doesn't slow down the loading of PS fonts
+ significantly since charstrings aren't affected.
+
+ * include/freetype/config/ftstdlib.h (ft_xdigit): Renamed to...
+ (ft_isxdigit): This. Updated all callers.
+ (ft_isdigit): New alias to `isdigit'.
+
+ * include/freetype/internal/psaux.h (PS_Parser_FuncsRec): Renamed
+ `skip_alpha' to `skip_PS_token'.
+ Add parameter to `to_bytes' and change some argument types.
+
+ * src/psaux/psauxmod.c (ps_parser_funcs): Updated.
+ * src/psaux/psobjs.c (ft_char_table): New array to map character
+ codes (ASCII and EBCDIC) of digits to numbers.
+ (OP): New auxiliary macro holding either `>=' or `<' depending on
+ the character encoding.
+ (skip_comment): New function.
+ (skip_spaces): Use it.
+ (skip_alpha): Removed.
+ (skip_literal_string, skip_string): New functions.
+ (ps_parser_skip_PS_token): New function. This is a better
+ replacement of...
+ (ps_parser_skip_alpha): Removed.
+ (ps_parser_to_token, ps_parser_to_token_array): Updated.
+ (T1Radix): Rewritten, using `ft_char_table'.
+ (t1_toint): Renamed to...
+ (ps_toint): This. Update all callers.
+ Use `ft_char_table'.
+ (ps_tobytes): Add parameter to handle delimiters and change some
+ argument types.
+ Use `ft_char_table'.
+ (t1_tofixed): Renamed to...
+ (ps_tofixed): This. Update all callers.
+ Use `ft_char_table'.
+ (t1_tocoordarray): Renamed and updated to...
+ (ps_tocoordarray): This. Update all callers.
+ (t1_tofixedarray): Renamed and updated to...
+ (ps_tofixedarray): This. Update all callers.
+ (t1_tobool): Renamed to...
+ (ps_tobool): This. Update all callers.
+ (ps_parser_load_field): Updated.
+ (ps_parser_load_field_table): Use `T1_MAX_TABLE_ELEMENTS'
+ everywhere.
+ (ps_parser_to_int, ps_parser_to_fixed, ps_parser_to_coord_array,
+ ps_parser_to_fixed_array): Skip spaces. Updated.
+ (ps_parser_to_bytes): Add parameter to handle delimiters and change
+ some argument types. Updated.
+ * src/psaux/psobjs.h: Updated.
+
+ * src/cid/cidload.c (cid_parse_dict): Updated.
+ * src/cid/cidparse.c (cid_parser_new): Check whether the `StartData'
+ token was really found.
+ * src/cid/cidparse.h (cid_parser_skip_alpha): Updated and renamed
+ to...
+ (cid_parser_skip_PS_token): This.
+
+ * src/type1/t1parse.h (T1_ParserRec): Use `FT_Bool' for boolean
+ fields.
+ (T1_Skip_Alpha): Replaced with...
+ (T1_Skip_PS_Token): This new macro.
+ * src/type1/t1parse.c (hexa_value): Removed.
+ (T1_Get_Private_Dict): Use `ft_isxdigit' and
+ `psaux->ps_parser_funcs_to_bytes' for handling ASCII hexadecimal
+ encoding.
+ After decrypting, replace the four random bytes at the beginning
+ with whitespace.
+ * src/type1/t1load.c (t1_allocate_blend): Use proper error values.
+ (parser_blend_design_positions, parse_blend_design_map,
+ parse_weight_vector): Updated.
+ (is_space): Handle `\f' also.
+ (is_name_char): Removed.
+ (read_binary_data): Updated.
+ (parse_encoding): Use `ft_isdigit'.
+ Updated.
+ (parse_subrs): Updated.
+ (TABLE_EXTEND): New macro.
+ (parse_charstrings): Updated.
+ Provide a workaround for buggy fonts which have more entries in the
+ /CharStrings dictionary then expected; the function now adds some
+ slots and skips entries which still exceed the new limit.
+ (parse_dict): Updated.
+ Terminate on the token `closefile'.
+
+ * src/type42/t42parse.c (T1_Skip_Alpha): Replaced with...
+ (T1_Skip_PS_Token): This new macro. Updated all callers.
+ (t42_parse_encoding): Use `ft_isdigit'.
+
+
+ * src/base/ftmm.c (ft_face_get_mm_service): Return FT_Err_OK if
+ success.
+
+2003-10-05 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/ftmodule.h: Renamed to...
+ * include/freetype/ftmodapi.h: This to avoid duplicate file names.
+ * include/freetype/config/ftheader.h (FT_MODULE_H): Updated.
+
+2003-10-04 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftoutln.c (FT_OrientationExtremumRec,
+ FT_Outline_Get_Orientation): Trivial typo fixes to make it compile.
+
+2003-10-02 Markus F.X.J. Oberhumer <markus@oberhumer.com>
+
+ * src/winfonts/winfnt.c (FT_WinFNT_HeaderRec): `color_table_offset'
+ has four bytes, not two.
+ Fix all users.
+ (fnt_font_load, FNT_Load_Glyph): Add more font validity tests.
+
+2003-10-01 David Turner <david@freetype.org>
+
+ * src/autofit/*: Adding first source files of the new multi-script
+ `auto-fitter'.
+
+ * include/freetype/ftoutln.h (FT_Orientation): New enumeration.
+ (FT_Outline_Get_Orientation): New declaration.
+
+ * src/base/ftoutln.c (FT_OrientationExtremumRec): New structure.
+ (ft_orientation_extremum_compute): New auxiliary function.
+ (FT_Outline_Get_Orientation): New function to compute the fill
+ orientation of a given glyph outline.
+
+ * include/freetype/internal/ftserv.h (FT_FACE_LOOKUP_SERVICE): Fixed
+ trivial bug which could crash the font engine when a cached service
+ pointer was retrieved.
+
+2003-09-30 Werner Lemberg <wl@gnu.org>
+
+ * src/cid/cidload.c (cid_parse_dict): Skip token if no keyword is
+ found.
+
+ * src/type1/t1parse.c (IS_T1_WHITESPACE, IS_T1_LINESPACE,
+ IS_T1_SPACE): Removed.
+ (PFB_Tag): Removed.
+ (read_pfb_tag): Don't use PFB_Tag.
+
+ * src/type42/t42parse.c (t42_is_space): Handle `\f' also.
+ (t42_parse_encoding): Handle synthetic fonts.
+
+2003-09-29 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/internal/t1types.h: Don't include
+ FT_INTERNAL_OBJECTS_H but FT_INTERNAL_SERVICE_H.
+ * src/truetype/ttobjs.c: Don't include
+ FT_SERVICE_POSTSCRIPT_NAMES_H.
+
+2003-09-29 David Turner <david@freetype.org>
+
+ Added new service to handle glyph name dictionaries, replacing the
+ old internal header named `psnames.h' by `services/svpsname.h'.
+ Note that this is different from `services/svpostnm.h' which only
+ handles the retrieval of PostScript font names for a given face.
+ (Should we merge these two services into a single header?)
+
+ * include/freetype/internal/psnames.h: Removed. Most of its
+ contents is moved to...
+ * include/freetype/internal/services/svpsname.h: New file.
+
+ * include/freetype/internal/services/svpostnm.h
+ (FT_SERVICE_ID_POSTSCRIPT_NAME): Replaced with...
+ (FT_SERVICE_ID_POSTSCRIPT_FONT_NAME): New macro.
+ (PsName): Service named changed to...
+ (PsFontName): This.
+ Updated `FT_Service_PsName' -> `FT_Service_PsFontName' and
+ `POSTSCRIPT_NAME' -> `POSTSCRIPT_FONT_NAME' everywhere.
+
+ * include/freetype/internal/internal.h
+ (FT_INTERNAL_POSTSCRIPT_NAMES_H): Removed.
+ * include/freetype/internal/psaux.h: Include
+ FT_SERVICE_POSTSCRIPT_NAMES_H.
+ (T1_DecoderRec): Updated type of `psnames'.
+ * include/freetype/internal/t1types.h: Don't include
+ FT_INTERNAL_POSTSCRIPT_NAMES_H but FT_SERVICE_POSTSCRIPT_NAMES_H.
+ Include FT_INTERNAL_OBJECTS_H.
+ * include/freetype/internal/t42types.h: Don't include
+ FT_INTERNAL_POSTSCRIPT_NAMES_H.
+ * include/freetype/internal/tttypes.h (TT_FaceRec): Updated.
+
+ * include/freetype/internal/ftserv.h (FT_FACE_FIND_SERVICE): Changed
+ order of parameters. All callers updated.
+ (FT_FACE_FIND_GLOBAL_SERVICE): New macro to look up a service
+ globally, checking all modules.
+ (FT_ServiceCacheRec): Updated.
+ (FT_SERVICE_POSTSCRIPT_NAMES_H): New macro for accessing
+ `svpsname.h'.
+
+ * include/freetype/internal/ftobjs.h, src/base/ftobjs.c
+ (ft_module_get_service): New function.
+
+ * src/cff/cffdrivr.c: Don't include FT_INTERNAL_POSTSCRIPT_NAMES_H
+ but FT_SERVICE_POSTSCRIPT_NAMES_H.
+ (cff_get_glyph_name, cff_get_name_index): Use new POSTSCRIPT_NAMES
+ service.
+ * src/cff/cffcmap.c (cff_cmap_unicode_init): Updated.
+ * src/cff/cffload.c, src/cff/cffload.h: Don't include
+ FT_INTERNAL_POSTSCRIPT_NAMES_H but FT_SERVICE_POSTSCRIPT_NAMES_H.
+ (cff_index_get_sid_string): Updated.
+ * src/cff/cffobjs.c: Don't include FT_INTERNAL_POSTSCRIPT_NAMES_H
+ but FT_SERVICE_POSTSCRIPT_NAMES_H.
+ (cff_face_init): Use new POSTSCRIPT_NAMES service.
+ * src/cff/cffobjs.h: Don't include FT_INTERNAL_POSTSCRIPT_NAMES_H
+ but FT_SERVICE_POSTSCRIPT_NAMES_H.
+
+ * src/cid/cidobjs.c: Don't include FT_INTERNAL_POSTSCRIPT_NAMES_H
+ but FT_SERVICE_POSTSCRIPT_NAMES_H.
+ (cid_face_init): Use new POSTSCRIPT_NAMES service.
+ * src/cid/cidriver.c: Don't include FT_INTERNAL_POSTSCRIPT_NAMES_H.
+
+ * src/psaux/t1cmap.c (t1_cmap_std_init, t1_cmap_unicode_init): Use
+ new POSTSCRIPT_NAMES service.
+ * src/psaux/t1decode.h (t1_lookup_glyph_by_stdcharcode,
+ t1_decode_init): Use new POSTSCRIPT_NAMES service.
+ * src/psaux/t1cmap.h, src/psaux/t1decode.h: Dont' include
+ FT_INTERNAL_POSTSCRIPT_NAMES_H.
+
+ * src/psnames/psmodule.c: Don't include
+ FT_INTERNAL_POSTSCRIPT_NAMES_H but FT_SERVICE_POSTSCRIPT_NAMES_H.
+ (ps_build_unicode_table): Renamed to...
+ (ps_unicodes_init): This.
+ (ps_lookup_unicode): Renamed to...
+ (ps_unicodes_char_index): This.
+ (ps_next_unicode): Renamed to...
+ (ps_unicodes_char_next): This.
+ (psnames_interface): Updated.
+ (psnames_services): New services list.
+ (psnames_get_service): New function.
+ (psnames_module_class): Updated.
+
+ * src/sfnt/sfobjs.c: Don't include FT_INTERNAL_POSTSCRIPT_NAMES_H
+ but FT_SERVICE_POSTSCRIPT_NAMES_H.
+ (sfnt_init_face): Use new POSTSCRIPT_NAMES service.
+ * src/sfnt/ttpost.c: Don't include FT_INTERNAL_POSTSCRIPT_NAMES_H
+ but FT_SERVICE_POSTSCRIPT_NAMES_H.
+ (tt_face_get_ps_name): Updated.
+
+ * src/truetype/ttobjs.c: Don't include
+ FT_INTERNAL_POSTSCRIPT_NAMES_H but FT_SERVICE_POSTSCRIPT_NAMES_H.
+
+ * src/type1/t1driver.c: Don't include
+ FT_INTERNAL_POSTSCRIPT_NAMES_H but FT_SERVICE_POSTSCRIPT_NAMES_H.
+ * src/type1/t1objs.c: Don't include
+ FT_INTERNAL_POSTSCRIPT_NAMES_H but FT_SERVICE_POSTSCRIPT_NAMES_H.
+ (T1_Face_Init): Use new POSTSCRIPT_NAMES service.
+
+ * src/type42/t42drivr.c (t42_get_ps_name): Renamed to...
+ (t42_get_ps_font_name): This.
+ (t42_service_ps_name): Renamed to...
+ (t42_service_ps_font_name): This.
+ (t42_services): Updated.
+ * src/type42/t42objs.c (T42_Face_Init): Use new POSTSCRIPT_NAMES
+ service.
+ * src/type42/t42objs.h: Don't include
+ FT_INTERNAL_POSTSCRIPT_NAMES_H but FT_SERVICE_POSTSCRIPT_NAMES_H.
+
+
+ * src/base/ftglyph.c (FT_Get_Glyph): Don't access `slot' before
+ testing its validity. Reported by Henry Maddocks
+ <maddocks@metservice.com>.
+
+2003-09-21 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/internal/ftserv.h (FT_FACE_FIND_SERVICE):
+ Fix compilation warning (s/pptr/Pptr/).
+
+ * include/freetype/internal/internal.h (FT_INTERNAL_PFR_H,
+ FT_INTERNAL_FNT_TYPES_H): Removed.
+
+2003-09-21 David Turner <david@freetype.org>
+
+ Migrating the PFR and WINFNT drivers to the new service-based
+ internal API.
+
+ * include/freetype/internal/fnttypes.h: Removed. Most of its data
+ are moved to winfnt.h and...
+ * include/freetype/internal/services/svwinfnt.h: New file.
+
+ * include/freetype/internal/pfr.h: Removed. Most of its data are
+ moved to...
+ * include/freetype/internal/services/svpfr.h: New file.
+
+ * include/freetype/internal/ftserv.h (FT_FACE_FIND_SERVICE,
+ FT_FACE_LOOKUP_SERVICE): Simplify fix of 2003-09-16 by removing
+ pointer type argument.
+ Updated all callers.
+ Update macro names of services header files.
+
+ * src/base/ftobjs.c (FT_Get_Name_Index): Simplified code.
+
+ * src/base/ftpfr.c: Include FT_SERVICE_PFR_H instead of
+ FT_INTERNAL_PFR_H.
+ (ft_pfr_check, FT_Get_PFR_Metrics, FT_Get_PFR_Kerning,
+ FT_Get_PFR_Advance): Use services provided in `PFR_METRICS'.
+
+ * src/base/ftwinfnt.c: Include FT_SERVICE_WINFNT_H instead of
+ FT_INTERNAL_FNT_TYPES_H.
+ (FT_Get_WinFNT_Header): Use service provided in `WINFNT'.
+
+ * src/pfr/pfrdrivr.c: Include FT_SERVICE_PFR_H and
+ FT_SERVICE_XFREE86_NAME_H instead of FT_INTERNAL_PFR_H.
+ (pfr_service_bdf): Updated.
+ (pfr_services): New services list.
+ (pfr_get_service): New function.
+ (pfr_driver_class): Updated.
+
+ * src/winfonts/winfnt.c: Include FT_SERVICE_WINFNT_H and
+ FT_SERVICE_XFREE86_NAME_H instead of FT_INTERNAL_FNT_TYPES_H.
+ (winfnt_get_header, winfnt_get_service): New functions.
+ (winfnt_service_rec): New structure providing WINFNT services.
+ (winfnt_services): New services list.
+ (winfnt_driver_class): Updated.
+ * src/winfonts/winfnt.h: Add most of the removed fnttypes.h data.
+
+ * src/sfnt/sfdriver.c (sfnt_service_ps_name): Fix typo.
+
+ * src/type1/t1driver.c (t1_service_ps_name): Fix typo.
+
+ * src/cff/cffobjs.c, src/cid/cidobjs.c, src/pfr/pfrsbit.c,
+ src/psaux/psobjs.c, src/sfnt/sfobjs.c, src/truetype/ttobjs.c,
+ src/type1/t1objs.c, src/type42/t42objs.c: Removing various compiler
+ warnings.
+
+2003-09-19 David Bevan <dbevan@emtex.com>
+
+ * src/type1/t1parse.c (pfb_tag_fields): Removed.
+ (read_pfb_tag): Fix code so that it doesn't fail on end-of-file
+ indicator (0x8003).
+ * docs/CHANGES: Updated.
+
+2003-09-16 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/internal/ftserv.h (FT_FACE_FIND_SERVICE,
+ FT_FACE_LOOKUP_SERVICE): Add parameter to pass pointer type.
+ Ugly, I know, but this is needed for compilation with C++ --
+ maybe someone knows a better solution?
+ Updated all callers.
+
+ * src/base/ftobjs.c (FT_Get_Name_Index, FT_Get_Glyph_Name): Remove
+ C++ compiler warnings.
+
+ * src/base/ftbdf.c (FT_Get_BDF_Charset_ID, FT_Get_BDF_Property):
+ Fix order of arguments passed to FT_FACE_FIND_SERVICE.
+
+2003-09-15 Werner Lemberg <wl@gnu.org>
+
+ Avoid header files with identical names.
+
+ * include/freetype/internal/services/bdf.h: Renamed to...
+ * include/freetype/internal/services/svbdf.h: This.
+ Add copyright notice.
+ * include/freetype/internal/services/glyfdict.h: Renamed to...
+ * include/freetype/internal/services/svgldict.h: This.
+ Add copyright notice.
+ * include/freetype/internal/services/multmast.h: Renamed to...
+ * include/freetype/internal/services/svmm.h: This.
+ Add copyright notice.
+ Add FT_BEGIN_HEADER and FT_END_HEADER.
+ * include/freetype/internal/services/sfnt.h: Renamed to...
+ * include/freetype/internal/services/svsfnt.h: This.
+ Add copyright notice.
+ * include/freetype/internal/services/postname.h: Renamed to...
+ * include/freetype/internal/services/svpostnm.h: This.
+ Add copyright notice.
+ * include/freetype/internal/services/xf86name.h: Renamed to...
+ * include/freetype/internal/services/svxf86nm.h: This.
+ Add copyright notice.
+
+ * include/freetype/internal/ftserv.h: Add FT_BEGIN_HEADER and
+ FT_END_HEADER.
+ Add copyright notice.
+ Update macro names of services header files.
+
+ * builds/freetype.mk (SERVICES_DIR): New variable.
+ (BASE_H): Add services header files.
+
+2003-09-11 Werner Lemberg <wl@gnu.org>
+
+ * builds/toplevel.mk (distclean): Remove `builds/unix/freetype2.pc'.
+
+ * src/cff/cffdrivr.c: Don't load headers twice.
+
+ * include/freetype/internal/ftserv.h (FT_SERVICE_SFNT_H): New macro.
+ * src/base/ftobjs.c: Include FT_SERVICE_SFNT_H.
+
+ * src/cff/cffcmap.c: Include `cfferrs.h'.
+ * src/pfr/pfrdrivr.c: Include `pfrerror.h'.
+ * src/sfnt/sfdriver.c: Include `sferrors.h'.
+ * src/psaux/psobjs.h: Add declaration for `ps_parser_to_bytes'.
+
+2003-09-11 David Turner <david@freetype.org>
+
+ Introducing the concept of `module services'. This is the first
+ step towards a massive simplification of the engine's internals, in
+ order to get rid of various numbers of hacks.
+
+ Note that these changes will break source & binary compatibility for
+ authors of external font drivers.
+
+ * include/freetype/config/ftconfig.h (FT_BEGIN_STMNT, FT_END_STMNT,
+ FT_DUMMY_STMNT): New macros.
+
+ * include/freetype/internal/ftserv.h: New file, containing the new
+ structures and macros to provide `services'.
+
+ * include/freetype/internal/internal.h (FT_INTERNAL_EXTENSION_H,
+ FT_INTERNAL_EXTEND_H, FT_INTERNAL_HASH_H, FT_INTERNAL_OBJECT_H):
+ Removed, obsolete.
+ (FT_INTERNAL_SERVICE_H): New macro for `ftserv.h'.
+
+ * include/freetype/internal/services/bdf.h,
+ include/freetype/internal/services/glyfdict.h,
+ include/freetype/internal/services/postname.h,
+ include/freetype/internal/services/xf86name.h: New files.
+
+ * include/freetype/ftmm.h (FT_Get_MM_Func, FT_Set_MM_Design_Func,
+ FT_Set_MM_Blend_Func): Function pointers moved (in modified form)
+ to...
+ * include/freetype/internal/services/multmast.h: New file.
+
+ * include/freetype/internal/sfnt.h (SFNT_Interface): `get_interface'
+ is now of type `FT_Module_Requester'.
+ (SFNT_Get_Interface_Func, SFNT_Load_Table_Func): Function pointers
+ moved (in modified form) to...
+ * include/freetype/internal/services/sfnt.h: New file.
+
+ * include/freetype/tttables.h (FT_Get_Sfnt_Table_Func): Function
+ pointer moved (in modified form) to `services/sfnt.h'.
+
+ * include/freetype/ftmodule.h (FT_Module_Interface): Make it a
+ a typedef to `FT_Pointer'.
+
+ * include/freetype/internal/tttypes.h (TT_FaceRec): Add
+ `postscript_name'.
+ * include/freetype/internal/ftobjs.h (FT_Face_InternalRec): Remove
+ `postscript_name'.
+ Add `services' element.
+ (FT_LibraryRec): Remove `meta_class'.
+
+ * src/base/ftbdf.c: Include FT_SERVICE_BDF_H.
+ (test_font_type): Removed.
+ (FT_Get_BDF_Charset_ID, FT_Get_BDF_Property): Use services
+ provided in `FT_SERVICE_ID_BDF'.
+
+ * src/base/ftmm.c: Include FT_SERVICE_MULTIPLE_MASTERS_H.
+ (ft_face_get_mm_service): New auxiliary function to get services
+ from `FT_SERVICE_ID_MULTI_MASTERS'.
+ (FT_Get_Multi_Master, FT_Set_MM_Design_Coordinates,
+ FT_Set_MM_Blend_Coordinates): Use `ft_face_get_mm_service'.
+
+ * src/base/ftobjs.c: Include FT_SERVICE_POSTSCRIPT_NAME_H and
+ FT_SERVICE_GLYPH_DICT_H.
+ (ft_service_list_lookup): New function to get a specific service.
+ (destroy_face): Updated.
+ (Mac_Read_POST_Resource): Simplify some code.
+ (IsMacResource): Fix warnings.
+ (FT_Get_Name_Index, FT_Get_Glyph_Name): Use services provided in
+ `FT_SERVICE_ID_GLYPH_DICT'.
+ (FT_Get_Postscript_Name): Use service provided in
+ `FT_SERVICE_ID_POSTSCRIPT_NAME'.
+ (FT_Get_Sfnt_Table, FT_Load_Sfnt_Table): Use services provided in
+ `FT_SERVICE_ID_SFNT_TABLE'.
+
+ * src/base/ftxf86.c: Include FT_SERVICE_XFREE86_NAME_H.
+ (FT_Get_X11_Font_Format): Use service provided in
+ `FT_SERVICE_ID_XF86_NAME'.
+
+ * src/bdf/bdfdrivr.c: Include FT_SERVICE_BDF_H and
+ FT_SERVICE_XFREE86_NAME_H.
+ (bdf_get_charset_id): New function.
+ (bdf_service_bdf): New structure providing BDF services.
+ (bdf_services): New services list.
+ (bdf_driver_requester): Use `ft_service_list_lookup'.
+
+ * src/cff/cffdrivr.c: Include FT_SERVICE_XFREE86_NAME_H and
+ FT_SERVICE_GLYPH_DICT_H.
+ (cff_service_glyph_dict): New structure providing CFF services.
+ (cff_services): New services list.
+ (cff_get_interface): Use `ft_service_list_lookup'.
+
+ * src/cid/cidriver.c: Include FT_SERVICE_POSTSCRIPT_NAME_H and
+ FT_SERVICE_XFREE86_NAME_H.
+ (cid_service_ps_name): New structure providing CID services.
+ (cid_services): New services list.
+ (cid_get_interface): Use `ft_service_list_lookup'.
+
+ * src/pcf/pcfdrivr.c: Include FT_SERVICE_BDF_H and
+ FT_SERVICE_XFREE86_NAME_H.
+ (pcf_service_bdf): New structure providing PCF services.
+ (pcf_services): New services list.
+ (pcf_driver_requester): Use `ft_service_list_lookup'.
+
+ * src/sfnt/sfdriver.c: Include FT_SERVICE_GLYPH_DICT_H and
+ FT_SERVICE_POSTSCRIPT_NAME_H.
+ (get_sfnt_glyph_name): Renamed to...
+ (sfnt_get_glyph_name): This.
+ (get_sfnt_postscript_name): Renamed to...
+ (sfnt_get_ps_name): This.
+ Updated.
+ (sfnt_service_glyph_dict, sfnt_service_ps_name): New structures
+ providing services.
+ (sfnt_services): New services list.
+ (sfnt_get_interface): Use `ft_service_list_lookup'.
+
+ * src/truetype/ttdriver.c: Include FT_SERVICE_XFREE86_NAME_H.
+ (tt_services): New services list.
+ (tt_get_interface): Use `ft_service_list_lookup'.
+
+ * src/type1/t1driver.c: Include FT_SERVICE_MULTIPLE_MASTERS_H,
+ FT_SERVICE_GLYPH_DICT_H, FT_SERVICE_XFREE86_NAME_H, and
+ FT_SERVICE_POSTSCRIPT_NAME_H.
+ (t1_service_glyph_dict, t1_service_ps_name,
+ t1_service_multi_masters): New structures providing Type 1 services.
+ (t1_services): New services list.
+ (Get_Interface): Use `ft_service_list_lookup'.
+
+ * src/type42/t42drivr.c: Include FT_SERVICE_XFREE86_NAME_H,
+ FT_SERVICE_GLYPH_DICT_H, and FT_SERVICE_POSTSCRIPT_NAME_H.
+ (t42_service_glyph_dict, t42_service_ps_name): New strucures
+ providing Type 42 services.
+ (t42_services): New services list.
+ (T42_Get_Interface): Use `ft_service_list_lookup'.
+
+
+ * README, docs/CHANGES: Updating version numbers for 2.1.6, and
+ removing obsolete warnings in the documentation.
+ * include/freetype/freetype.h (FREETYPE_PATCH): Set to 6.
+ * builds/unix/configure.ac (version_info): Set to 9:5:3.
+ * builds/unix/configure: Regenerated.
+
+ * include/freetype/internal/ftcore.h,
+ include/freetype/internal/ftexcept.h,
+ include/freetype/internal/fthash.h,
+ include/freetype/internal/ftobject.h: Removed. Obsolete.
+
+2003-09-09 David Turner <david@freetype.org>
+
+ Fixing PFR kerning support. The tables within the font file contain
+ (charcode,charcode) kerning pairs, we need to convert them to
+ (gindex,gindex).
+
+ * src/base/ftpfr.c (ft_pfr_check): Fix serious typo.
+ * src/pfr/prfload.c: Remove dead code.
+ (pfr_get_gindex, pfr_compare_kern_pairs, pfr_sort_kerning_pairs):
+ New functions.
+ (pfr_phy_font_done): Free `kern_pairs'.
+ (pfr_phy_font_load): Call `pfr_sort_kerning_pairs'.
+ * src/pfr/pfrobjs.c (pfr_face_get_kerning): Fix kerning extraction.
+ * src/pfr/pfrtypes.h (PFR_KERN_PAIR_INDEX): New macro.
+ (PFR_KernPairRec): Make `kerning' an FT_Int.
+ (PFR_PhyFontRec): New element `kern_pairs'.
+ (PFR_KernFlags): Values of PFR_KERN_2BYTE_CHAR and
+ PFR_KERN_2BYTE_ADJ were erroneously reversed.
+
+ * include/freetype/ftoption.h: Commenting out the macro
+ TT_CONFIG_OPTION_BYTECODE_INTERPRETER.
+
+2003-09-02 David Turner <david@freetype.org>
+
+
+ * Version 2.1.5 released.
+ =========================
+
+
+2003-08-31 Manish Singh <yosh@gimp.org>
+
+ * src/bdf/bdflib.c (_bdf_readstream): Don't use FT_MEM_COPY but
+ FT_MEM_MOVE.
+
+2003-08-30 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/freetype.h (FT_ENCODING_SJIS, FT_ENCODING_GB2312,
+ FT_ENCODING_BIG5, FT_ENCODING_WANSUNG, FT_ENCODING_JOHAB): New
+ enumerations of FT_Encoding. The FT_ENCODING_MS_* variants except
+ FT_ENCODING_MS_SYMBOL are now deprecated.
+ Updated all users.
+ * docs/CHANGES: Document it.
+
+2003-08-27 Werner Lemberg <wl@gnu.org>
+
+ * src/bdf/bdfdrivr.c (BDF_Face_Init): Accept lowercase characters
+ for spacing.
+
+2003-08-27 Mike FABIAN <mfabian@suse.de>
+
+ * src/pcf/pcfread.c (pcf_load_font), src/bdf/bdfdrivr.c
+ (BDF_Face_Init): Accept lowercase characters for slant and weight.
+
+2003-08-18 David Turner <david@freetype.org>
+
+ * include/freetype/config/ftoption.h: Disabling TrueType bytecode
+ interpreter until the UNPATENTED_HINTING works as advertised.
+
+ * src/autohint/ahhint.c (ah_hinter_load_glyph): Use `|' for
+ setting `load_flags'.
+
+ * Jamfile: Adding the `refdoc' target to the Jamfile in order to
+ build the API Reference in `docs/reference' automatically.
+
+ * include/freetype/t1tables.h (PS_FontInfoRec), src/cid/cidtoken.h,
+ src/type1/t1tokens.h, src/type42/t42parse.c: Resetting the types of
+ `italic_angle', `underline_position', and `underline_thickness' to
+ their previous values (i.e., long, short, and ushort) in order to
+ avoid breaking binary compatibility.
+
+ * include/freetype/ttunpat.h: Fixing documentation comment.
+
+ * include/freetype/config/ftoption.h, devel/ftoption.h
+ (TT_CONFIG_OPTION_OPTION_COMPILE_UNPATENTED_HINTING): Replaced
+ with...
+ (TT_CONFIG_OPTION_UNPATENTED_HINTING): This. Updated all users.
+ (TT_CONFIG_OPTION_FORCE_UNPATENTED_HINTING): Removed.
+
+ * include/freetype/internal/ftobjs.h (FT_DEBUG_HOOK_TYPE1): Removed.
+ (FT_DEBUG_HOOK_UNPATENTED_HINTING): New macro. Use this with
+ `FT_Set_Debug_Hook' to get the same effect as the removed
+ TT_CONFIG_OPTION_FORCE_UNPATENTED_HINTING.
+
+ * src/truetype/ttobjs.c (tt_face_init): Use
+ `FT_DEBUG_HOOK_UNPATENTED_HINTING'.
+
+2003-08-06 Werner Lemberg <wl@gnu.org>
+
+ * src/type1/t1gload.c (T1_Load_Glyph), src/cff/cffgload.c
+ (cff_slot_load), src/cid/cidgload.c (cid_slot_load_glyph): Fix
+ previous change.
+
+2003-08-05 Werner Lemberg <wl@gnu.org>
+
+ * src/type1/t1gload.c (T1_Load_Glyph), src/cff/cffgload.c
+ (cff_slot_load), src/cid/cidgload.c (cid_slot_load_glyph): Apply
+ font matrix to advance width also.
+ * docs/CHANGES: Updated.
+
+2003-07-26 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/configure.ac (version_info): Set to 9:4:3.
+ * builds/unix/configure: Updated.
+ * docs/CHANGES, docs/VERSION.DLL: Updated.
+
+ * include/freetype/freetype.h (FT_GlyphSlot): Change 2003-06-16
+ also breaks binary compatibility. Reintroduce an unsigned integer
+ at the old position of `flags' called `reserved'.
+
+2003-07-25 Werner Lemberg <wl@gnu.org>
+
+ Make API reference valid HTML 4.01 transitional.
+
+ * src/tools/docmaker/tohtml.py (html_header_1): Add doctype
+ and charset.
+ (html_header_2): Fix style elements and add some more.
+ Fix syntax.
+ (block_header, block_footer, description_header, description_footer,
+ marker_header, marker_footer, source_header, source_footer,
+ chapter_header): Don't use <center>...</center> but `align=center'
+ table attribute.
+ (chapter_inter, chapter_footer): Add <li> and use special <ul>
+ class.
+ Use double quotes around table widths given in percent.
+ (keyword_prefix, keyword_suffix): Don't change font colour directly
+ but use a new <span> class.
+ (section_synopsis_header, section_synopsis_footer): Don't change
+ colour.
+ (code_header, code_footer): Don't change font colour directly but
+ use a special <pre> class.
+ (print_html_field): <tr> gets the `valign' attribute, not <table>.
+ (print_html_field_list): Ditto.
+ (index_exit): Don't use <center>...</center> but `align=center'
+ table attribute.
+ (section_enter): Ditto.
+ (toc_exit): Don't emit </table>.
+ (block_enter): Use <h4><a>, not <a><h4>.
+ (__init__): Fix tag order in self.html_footer.
+
+2003-07-25 David Turner <david@freetype.org>
+
+ This change reimplements fix from 2003-05-30 without breaking
+ binary compatibility.
+
+ * include/freetype/t1tables.h (PS_FontInfoRec): `italic_angle',
+ `is_fixed_pitch', `underline_position', `underline_thickness' are
+ reverted to be normal values.
+
+ * include/freetype/internal/psaux.h (T1_FieldType): Remove
+ `T1_FIELD_TYPE_BOOL_P', `T1_FIELD_TYPE_INTEGER_P',
+ `T1_FIELD_TYPE_FIXED_P', `T1_FIELD_TYPE_FIXED_1000_P'.
+ (T1_FIELD_TYPE_BOOL_P, T1_FIELD_NUM_P, T1_FIELD_FIXED_P,
+ T1_FIELD_FIXED_1000_P): Removed.
+ (T1_FIELD_TYPE_BOOL): Renamed to...
+ (T1_FIELD_BOOL): New macro. Updated all callers.
+
+ * src/type42/t42parse.c: `italic_angle', `is_fixed_pitch',
+ `underline_position', `underline_thickness', `paint_type',
+ `stroke_width' are reverted to be normal values.
+ (T42_KEYWORD_COUNT): New macro.
+ (t42_parse_dict): New array `keyword_flags' to mark that a value has
+ already been assigned to a dictionary entry.
+ * src/type42/t42objs.c (T42_Face_Init, T42_Face_Done): Updated.
+
+ * src/cid/cidtoken.h: `italic_angle', `is_fixed_pitch',
+ `underline_position', `underline_thickness' are reverted to be
+ normal values.
+ * src/cid/cidobjs.c (cid_face_done, cid_face_init): Updated.
+
+ * src/psaux/psobjs.c (ps_parser_load_field): Updated.
+
+ * src/type1/t1tokens.h: `italic_angle', `is_fixed_pitch',
+ `underline_position', `underline_thickness', `paint_type',
+ `stroke_width' are reverted to be normal values.
+ * src/type1/t1objs.c (T1_Face_Done, T1_Face_Init): Updated.
+ * src/type1/t1load.c (T1_FIELD_COUNT): New macro.
+ (parse_dict): Add parameter for keyword flags.
+ Record only first instance of a field.
+ (T1_Open_Face): New array `keyword_flags'.
+
+2003-07-24 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/freetype.h (FREETYPE_PATCH): Set to 5.
+ * builds/unix/configure.ac (version_info): Set to 10:0:3.
+ * builds/unix/configure: Updated.
+ * builds/freetype.mk (refdoc): Fix --title.
+
+ * docs/CHANGES, docs/VERSION.DLL, README: Updated.
+
+ * src/tools/docmaker/sources.py (re_crossref): Fix regular
+ expression to handle trailing punctuation characters.
+ * src/tools/docmaker/tohtml.py (make_html_word): Updated.
+
+ * docs/release: New file.
+
+2003-07-23 YAMANO-UCHI Hidetoshi <mer@din.or.jp>
+
+ * include/freetype/internal/psaux.h (PS_Parser_FuncsRec): New
+ member function `to_bytes'.
+
+ * src/psaux/psauxmod.c (ps_parser_funcs): New member
+ `ps_parser_to_bytes'.
+ (psaux_module_class): Increase version to 0x20000L.
+
+ * src/psaux/psobjs.c (IS_T1_LINESPACE): Add \f.
+ (IS_T1_NULLSPACE): New macro.
+ (IS_T1_SPACE): Add it.
+ (skip_spaces, skip_alpha): New functions.
+ (ps_parser_skip_spaces, ps_parser_skip_alpha): Use them.
+ (ps_tobytes, ps_parser_to_bytes): New functions.
+
+2003-07-07 Werner Lemberg <wl@gnu.org>
+
+ * builds/freetype.mk (DOC_DIR): New variable.
+ (refdoc): Use *_DIR variables.
+ (distclean): Remove documentation files.
+
+ * builds/detect.mk (std_setup, dos_setup): Mention `make refdoc'.
+
+ * configure: Set DOC_DIR variable.
+
+2003-07-07 Patrik Hägglund <patrik.hagglund@bredband.net>
+
+ * builds/freetype.mk (refdoc): New target to build the
+ documentation.
+ (.PHONY): Updated.
+
+ * include/freetype/freetype.h: Improve documentation of FT_CharMap.
+ * include/freetype/ftimage,h: Fix documentation of FT_OUTLINE_FLAGS.
+ * include/freetype/tttables.h: Document FT_Sfnt_Tag.
+
+2003-07-06 Werner Lemberg <wl@gnu.org>
+
+ * src/bdf/bdfdrivr.c (BDF_Face_Init), src/pcf/pcfread.c
+ (pcf_load_font): Fix computation of height if PIXEL_SIZE property is
+ missing.
+
+2003-07-01 Werner Lemberg <wl@gnu.org>
+
+ * src/cache/ftcsbits.c (ftc_sbit_node_compare): Only add `size' if
+ there is no error. Reported by Knut St. Osmundsen
+ <bird-freetype@anduin.net>.
+
+2003-06-30 Werner Lemberg <wl@gnu.org>
+
+ A new try to synchronize bitmap font access.
+
+ * include/freetype/freetype.h (FT_Bitmap_Size): `height' is now
+ defined to return the baseline-to-baseline distance. This was
+ already the value returned by the BDF and PCF drivers.
+
+ The `width' field now gives the average width. I wasn't able to
+ find something better. It should be taken as informative only.
+
+ New fields `size', `x_ppem', and `y_ppem'.
+
+ * src/pcf/pcfread.c (pcf_load_font): Updated to properly fill
+ FT_Bitmap_Size.
+ Do proper rounding and conversion from 72.27 to 72 points.
+
+ * src/bdf/bdfdrivr.c (BDF_Face_Init): Updated to properly fill
+ FT_Bitmap_Size.
+ Do proper rounding and conversion from 72.27 to 72 points.
+
+ * src/sfnt/sfobjs.c (sfnt_load_face): Updated to properly fill
+ FT_Bitmap_Size.
+
+ * src/winfonts/winfnt.c (FNT_Face_Init): Updated to properly fill
+ FT_Bitmap_Size.
+
+2003-06-29 Werner Lemberg <wl@gnu.org>
+
+ Redesigning the FNT driver to return multiple faces, not multiple
+ strikes. At least one font (app850.fon from WinME) contains
+ different FNT charmaps for its subfonts. Consequently, the previous
+ design of having multiple bitmap strikes in a single font face fails
+ since we have only one charmap per face.
+
+ * include/freetype/internal/fnttypes.h (FNT_Size_Rec): Removed.
+ (FNT_FaceRec): Remove `num_fonts' field and replace `fonts' with
+ `font'.
+
+ * src/base/ftwinfnt.c (FT_Get_WinFNT_Header): Updated.
+
+ * src/winfonts/winfnt.c (fnt_font_load): Don't set pixel_width equal
+ to pixel_height.
+ (fnt_face_done_fonts): Removed.
+ (fnt_face_get_dll_fonts): Renamed to...
+ (fnt_face_get_dll_font): This. Add second function argument to
+ select face index.
+ Updated to load just one subfont.
+ (fnt_font_done, FNT_Face_Done): Updated.
+ (FNT_Face_Init): Handle `face_index'.
+ Updated.
+ (FNT_Size_Set_Pixels): Simplified; similar to BDF and PCF, the
+ bitmap width is now ignored.
+ (FNT_Load_Glyph): Updated.
+ Fix glyph index computation.
+ (winfnt_driver_class): Updated.
+
+2003-06-25 Owen Taylor <otaylor@redhat.com>
+
+ * src/sfnt/ttload.c (tt_face_load_hdmx): Don't assign
+ num_records until we actually decide to load the table,
+ otherwise, we'll segfault in tt_face_free_hdmx.
+
+2003-06-24 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cffdrivr.c (cff_get_glyph_name): Protect against zero
+ glyph name pointer. Reported by Mikey Anbary <manbary@vizrt.com>.
+
+2003-06-23 Werner Lemberg <wl@gnu.org>
+
+ * src/tools/glnames.py: Updated to AGL 2.0.
+ * src/psnames/pstables.h: Regenerated.
+
+2003-06-22 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/cache/ftcglyph.h, include/freetype/ttnameid.h,
+ src/base/ftcalc.c, src/base/fttrigon.c, src/cff/cffgload.c,
+ src/otlayout/otlgsub.c, src/pshinter/pshrec.c,
+ src/psnames/psmodule.c, src/sfnt/sfobjs.c, src/truetype/ttdriver.c:
+ Decorate constants with `U' and `L' if appropriate.
+
+ * include/freetype/ftmoderr.h: Updated to include recent module
+ additions.
+
+ * src/pshinter/pshnterr.h (FT_ERR_BASE): Define as
+ `FT_Mod_Err_PShinter'.
+ * src/type42/t42error.h (FT_ERR_BASE): Define as
+ `FT_Mod_Err_Type42'.
+
+ * src/pshinter/pshrec.h (PS_HINTS_MAGIC): Removed. Not used.
+
+ * include/freetype/config/ftconfig.h [__MWERKS__]: Define FT_LONG64
+ and FT_INT64.
+
+2003-06-21 Werner Lemberg <wl@gnu.org>
+
+ * src/winfonts/winfnt.c (FNT_Load_Glyph): Use first_char in
+ computation of glyph_index.
+ (FNT_Size_Set_Pixels): To find a strike, first check pixel_height
+ only, then try to find a better hit by comparing pixel_width also.
+ Without this fix it isn't possible to access all strikes.
+ Also compute metrics.max_advance to be in sync with other bitmap
+ drivers.
+
+ * src/base/ftobjs.c (FT_Set_Char_Size): Remove redundant code.
+ (FT_Set_Pixel_Size): Assign value to `metrics' after validation of
+ arguments.
+
+2003-06-20 Werner Lemberg <wl@gnu.org>
+
+ Synchronize computation of height and width for bitmap strikes. The
+ `width' field in the FT_Bitmap_Size structure is now only useful to
+ enumerate different strikes. The `max_advance' field of the
+ FT_Size_Metrics structure should be used to get the (maximum) width
+ of a strike.
+
+ * src/bdf/bdfdrivr.c (BDF_Face_Init): Don't use AVERAGE_WIDTH for
+ computing `available_sizes->width' but make it always equal to
+ `available_sizes->height'.
+
+ * src/pcf/pcfread.c (pcf_load_font): Don't use RESOLUTION_X for
+ computing `available_sizes->width' but make it always equal to
+ `available_sizes->height'.
+
+ * src/truetype/ttdriver.c (Set_Pixel_Sizes): Pass only single
+ argument to function.
+
+ * src/psnames/psmodule.c (ps_unicode_value): Handle `.' after
+ `uniXXXX' and `uXXXX[X[X]]'.
+
+2003-06-19 Werner Lemberg <wl@gnu.org>
+
+ * src/bdf/bdfdrivr.c: s/FT_Err_/BDF_Err/.
+ * src/cache/ftccache.c, src/cache/ftcsbits.c, src/cache/ftlru.c:
+ s/FT_Err_/FTC_Err_/.
+ * src/cff/cffcmap.c: s/FT_Err_/CFF_Err_/.
+ * src/pcf/pcfdrivr.c: s/FT_Err_/PCF_Err_/.
+ * src/psaux/t1cmap.c: Include psauxerr.h.
+ s/FT_Err_/PSaux_Err_/.
+ * src/pshinter/pshnterr.h: New file.
+ * src/pshinter/rules.mk: Updated.
+ * src/pshinter/pshalgo.c, src/pshinter/pshrec.c: Include pshnterr.h.
+ s/FT_Err_/PSH_Err_/.
+ * src/pfr/pfrdrivr.c, src/pfr/pfrobjs.c, src/pfr/pfrsbit.c:
+ s/FT_Err_/PFR_Err_/.
+ * src/sfnt/sfdriver.c, src/sfnt/sfobjs.c, src/sfnt/ttcmap0.c,
+ src/sfnt/ttload.c: s/FT_Err_/SFNT_Err_/.
+ * src/truetype/ttgload.c: s/FT_Err_/TT_Err_/.
+ * src/gzip/ftgzip.c: Load FT_MODULE_ERRORS_H and define
+ FT_ERR_PREFIX and FT_ERR_BASE.
+ s/FT_Err_/Gzip_Err_/.
+
+2003-06-19 Dirck Blaskey <listtarget@danbala.com>
+
+ * src/cff/cffload (cff_encoding_load): `nleft' must be FT_UInt,
+ otherwise adding 1 might wrap the result.
+
+2003-06-18 Werner Lemberg <wl@gnu.org>
+
+ * src/psnames/psmodule.c (ps_unicode_value): Add support to
+ recognize `uXXXX[X[X]]' glyph names.
+ Don't handle glyph names starting with `uni' which have more than
+ four digits.
+
+2003-06-16 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/freetype.h (FT_Open_Flags): Replaced with
+ #defines for the constants.
+ (FT_Open_Args): Change type of `flags' to FT_UInt.
+ (FT_GlyphSlot): Move `flags' to FT_Slot_Internal.
+
+ * include/freetype/ftimage.h (FT_Outline_Flags, FT_Raster_Flag):
+ Replaced with #defines for the constants.
+
+ * include/freetype/internal/ftobjs.h (FT_Slot_Internal): New
+ field `flags' (from FT_GlyphSlot).
+ Updated all affected source files.
+ (FT_GLYPH_OWN_BITMAP): New macro (from ftgloadr.h).
+
+ * include/freetype/internal/ftgloadr.h (FT_GLYPH_OWN_BITMAP): Moved
+ to ftobjs.h.
+
+ * src/base/ftglyph.c (FT_Glyph_To_Bitmap): Use dummy
+ FT_GlyphSlot_Internal object.
+
+2003-06-15 Werner Lemberg <wl@gnu.org>
+
+ * builds/compiler/gcc.mk, builds/compiler/gcc-dev.mk (CFLAGS):
+ Add -fno-strict-aliasing to get rid of zillion warnings from gcc
+ version 3.3.
+
+2003-06-14 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/ftglyph.h (ft_glyph_bbox_unscaled,
+ ft_glyph_bbox_subpixels, ft_glyph_bbox_gridfit,
+ ft_glyph_bbox_truncate, ft_glyph_bbox_pixels): Replaced with
+ FT_GLYPH_BBOX_UNSCALED, FT_GLYPH_BBOX_SUBPIXELS,
+ FT_GLYPH_BBIX_GRIDFIT, FT_GLYPH_BBOX_TRUNCATE, FT_GLYPH_BBOX_PIXELS.
+ The lowercase variants are now (deprecated aliases) to the uppercase
+ versions.
+ Updated all other files.
+
+ * include/freetype/ftmodule.h (ft_module_font_driver,
+ ft_module_renderer, ft_module_hinter, ft_module_styler,
+ ft_module_driver_scalable, ft_module_driver_no_outlines,
+ ft_module_driver_has_hinter): Replaced with FT_MODULE_FONT_DRIVER,
+ FT_MODULE_RENDERER, FT_MODULE_HINTER, FT_MODULE_STYLER,
+ FT_MODULE_DRIVER_SCALABLE, FT_MODULE_DRIVER_NO_OUTLINES,
+ FT_MODULE_DRIVER_HAS_HINTER.
+ The lowercase variants are now (deprecated aliases) to the uppercase
+ versions.
+ Updated all other files.
+
+ * src/base/ftglyph.c (FT_Glyph_Get_CBox): Handle bbox_mode better
+ as enumeration.
+
+ * src/pcf/pcfdrivr.c (pcf_driver_class), src/winfonts/winfnt.c
+ (winfnt_driver_class), src/bdf/bdfdrivr.c (bdf_driver_class): Add
+ the FT_MODULE_DRIVER_NO_OUTLINES flag.
+
+2003-06-13 Detlef Würkner <TetiSoft@apg.lahn.de>
+
+ * src/pfr/pfrobjs.c (pfr_slot_load): Apply font matrix.
+
+2003-06-13 Werner Lemberg <wl@gnu.org>
+
+ * builds/dos/detect.mk: Test not only for `Dos' but for `DOS' also.
+
+ * builds/dos/dos-emx.mk, builds/compiler/emx.mk: New files for
+ EMX gcc compiler.
+ * builds/dos/detect.mk: Add target `emx'.
+
+ * builds/compiler/watcom.mk (LINK_LIBRARY): GNU Make for DOS doesn't
+ like a trailing semicolon; add a dummy command.
+
+ * src/cid/cidload.c: Remove parse_font_bbox code (already enclosed
+ with #if 0 ... #endif).
+
+ * src/type1/t1tokens.h: Handle /FontName.
+ * src/type1/t1load.c (parse_font_name): Removed.
+ Remove parse_font_bbox code (already enclosed with #if 0 ...
+ #endif).
+
+ * src/type42/t42parse.c (t42_parse_font_name): Removed.
+ Remove t42_parse_font_bbox code (already enclosed with #if 0 ...
+ #endif).
+ (t42_keywords): Handle /FontName with T1_FIELD_KEY.
+
+2003-06-12 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/internal/psaux.h (T1_FieldType): Add
+ T1_FIELD_TYPE_KEY.
+ (T1_FIELD_KEY): New macro.
+ * src/psaux/psobjs.c (ps_parser_load_field): Handle
+ T1_FIELD_TYPE_KEY.
+
+ * src/cid/cidtoken.h: Use T1_FIELD_KEY for /CIDFontName.
+
+2003-06-11 Alexander Malmberg <alexander@malmberg.org>
+
+ * src/cache/ftlru.c (FT_LruList_Remove_Selection): Decrease
+ number of nodes.
+ (FT_LruList_Lookup): Fix assertion for out-of-memory case.
+
+2003-06-11 Werner Lemberg <wl@gnu.org>
+
+ * src/cid/cidload.c (cid_decrypt): Removed.
+ (cid_read_subrs): Use t1_decrypt from psaux module.
+ * src/cid/cidload.h: Updated.
+ * src/cid/cidgload.c (cid_load_glyph): Use t1_decrypt from psaux
+ module.
+
+2003-06-10 Werner Lemberg <wl@gnu.org>
+
+ * src/cid/cidobjs.c: Apply change 2003-05-31 from <Ron.Dev@gmx.de>.
+ Compute style flags.
+ Fix computation of root->height.
+ * src/cid/cidtoken.h: Handle FontBBox.
+ * src/cid/cidload.c (cid_load_keyword): Handle
+ T1_FIELD_LOCATION_BBOX.
+ (parse_font_bbox): Commented out.
+ (cid_field_record): Comment out element for parsing FontBBox.
+
+ * src/type42/t42parse.c (t42_parse_font_bbox): Commented out.
+ (t42_keywords): Handle FontBBox with T1_FIELD_BBOX, not with
+ T1_FIELD_CALLBACK.
+ (t42_parse_font_bbox): Commented out.
+ (t42_load_keyword): Handle T1_FIELD_LOCATION_BBOX.
+ * src/type42/t42objs.c (T42_Face_Init): Apply change 2003-05-31
+ from <Ron.Dev@gmx.de>.
+
+2003-06-09 George Williams <gww@silcom.com>
+
+ * src/truetype/ttinterp.c (SetSuperRound) <0x30>: Follow Apple's
+ TrueType specification.
+ (Ins_MDRP, Ins_MIRP): Fix single width cut-in test.
+
+2003-06-09 Detlef Würkner <TetiSoft@apg.lahn.de>
+
+ * src/gzip/ftgzip.c: (inflate_mask): Replaced with...
+ (NO_INFLATE_MASK): This.
+ * src/gzip/infutil.h: Declare `inflate_mask' conditionally by
+ NO_INFLATE_MASK.
+
+2003-06-09 Alexis S. L. Carvalho <alexis@cecm.usp.br>
+
+ * src/gzip/ftgzip.c (ft_gzip_file_fill_output): Handle Z_STREAM_END
+ correctly.
+
+2003-06-09 Wolfgang Domröse <porthos.domroese@harz.de>
+
+ * src/pshinter/pshglob.c (psh_globals_new): Change calculation of
+ dim->stdw.count to avoid compiler problem.
+
+ * src/truetype/ttgload.c (TT_Load_Simple_Glyph): Move the block
+ variables to the beginning of the function to avoid compiler
+ problems.
+ Add casts necessary for 16bit compilers.
+
+2003-06-09 Werner Lemberg <wl@gnu.org>
+
+ * src/pfr/rules.mk (PFR_DRV_SRC): Add pfrsbit.c.
+ (PFR_DRV_H): Add pfrtypes.h.
+
+ * include/freetype/config/ftconfig.h: s/__MWKS__/__MWERKS__/.
+
+2003-06-08 Karl Schultz <kschultz@rsinc.com>
+
+ * src/pfr/pfrsbit.c (pfr_bitwriter_init): Change type of third
+ argument to FT_Bool.
+ (pfr_lookup_bitmap_data): Change type of third and fourth argument
+ to FT_UInt. Updated caller.
+ (pfr_load_bitmap_bits): Change type of fourth argument to FT_Bool.
+
+2003-06-08 Werner Lemberg <wl@gnu.org>
+
+ Completely revised FreeType's make management.
+
+ . In all makefiles `/' is used as the path separator. The
+ conversion to the real path separators is done as late as
+ possible using $(subst ...).
+
+ . $(HOSTSEP) no longer exists. Now, $(SEP) gives the path separator
+ for the operating system, and the new $(COMPILER_SEP) the path
+ separator for the compiler tools.
+
+ . $(BUILD) has been renamed to $(BUILD_DIR). In general, all
+ directory variables end with `_DIR'. The variants ending in `_'
+ (like `BASE_' have been removed).
+
+ The following ChangeLog entries only describe changes which are
+ not related to the redesign.
+
+ * builds/beos/beos-def.mk (BUILD_DIR): Fix typo.
+ * builds/compiler/watcom.mk (LINK_LIBRARY): Fix linker call to avoid
+ overlong arguments as suggested by J. Ali Harlow
+ <ali@avrc.city.ac.uk>.
+ * builds/dos/dos-wat.mk: New file.
+ * builds/freetype.mk (FREETYPE_H): Include header files from the
+ `devel' subdirectory.
+
+ * builds/os2/os2-dev.mk, builds/unix/unixddef.mk,
+ builds/unix/unixddef.mk, builds/win32/w32-bccd.mk,
+ builds/win32/w32-dev.mk (BUILD_DIR): Fix path.
+
+ * builds/unix/configure.ac, builds/unix/configure: Updated.
+ * builds/unix/unix-def.in (DISTCLEAN): Add `freetype2.pc'.
+
+2003-06-07 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftmac.c (FT_New_Face_From_SFNT): s/rlen/sfnt_size/ to
+ make it compile.
+
+ * devel/ftoption.h: Updated.
+
+2003-06-07 Detlef Würkner <TetiSoft@apg.lahn.de>
+
+ * include/freetype/internal/psaux.h, src/truetype/ttgload.h:
+ s/index/idx/ to fix compiler warnings.
+
+ * src/sfnt/ttcmap0.c (tt_face_build_cmaps): Use more `volatile' to
+ fix compiler warning.
+
+ * src/gzip/ftgzip.c (BUILDFIXED): Removed.
+ * src/gzip/inftrees.c (inflate_trees_fixed) [!BUILDFIXED]: Use
+ FT_UNUSED to remove compiler warning.
+
+2003-06-06 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/ftstroker.h: Renamed to...
+ * include/freetype/ftstroke.h: This.
+
+ * src/base/ftstroker.c: Renamed to...
+ * src/base/ftstroke.c: This.
+
+ * include/freetype/config/ftheader.h (FT_STROKER_H): Updated.
+
+ * src/base/descrip.mms, src/base/Jamfile, src/base/rules.mk:
+ Updated.
+
+ * src/pcf/pcfdriver.c: Renamed to...
+ * src/pcf/pcfdrivr.c: This.
+ * src/pcf/pcfdriver.h: Renamed to...
+ * src/pcf/pcfdrivr.h: This.
+
+ * src/pcf/Jamfile, src/pcf/rules.mk: Updated.
+
+2003-06-05 Wenlin Institute (Tom Bishop) <wenlin@wenlin.com>
+
+ * src/base/ftmac.c (file_spec_from_path) [TARGET_API_MAC_CARBON]:
+ Add `#if !defined(__MWERKS__)'.
+
+2003-06-05 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/internal/psaux.h (T1_FieldType): Add
+ T1_FIELD_TYPE_FIXED_1000 and T1_FIELD_TYPE_FIXED_1000_P.
+ (T1_FIELD_FIXED_1000, T1_FIELD_FIXED_1000_P): New macros.
+ * src/psaux/psobjs.c (ps_parser_load_field): Handle
+ T1_FIELD_TYPE_FIXED_1000 and T1_FIELD_TYPE_FIXED_1000_P.
+
+ * src/cff/cffparse.c (cff_kind_fixed_thousand): New enumeration.
+ (CFF_FIELD_FIXED_1000): New macro.
+ (cff_parser_run): Handle cff_kind_fixed_thousand.
+ * src/cff/cfftoken.h: Use CFF_FIELD_FIXED_1000 for blue_scale.
+ * src/cff/cffload (cff_subfont_load): Fix default values of
+ expansion_factor and blue_scale.
+
+ * src/cif/cidtoken.h, src/type1/t1tokens.h: Use T1_FIELD_FIXED_1000
+ for blue_scale.
+
+ * src/pshinter/pshglob.c (psh_globals_new): Fix default value of
+ blue_scale.
+
+2003-06-04 Wolfgang Domröse <porthos.domroese@harz.de>
+
+ * include/freetype/internal/ftdriver.h,
+ include/freetype/internal/ftobjs.h,
+ include/freetype/internal/psaux.h, src/cid/cidgload.c,
+ src/psaux/psobjs.c, src/psaux/t1decode.c, src/psaux/psobjs.h,
+ src/pshinter/pshrec.c, src/pshinter/pshalgo.c,
+ src/psnames/psmodule.c, src/raster/ftraster.c, src/sfnt/sfobjs.c,
+ src/smooth/ftgrays.c, src/smooth/ftsmooth.c, src/truetype/ttobjs.c,
+ src/truetype/ttdriver.c, src/truetype/ttgload.c, src/type1/t1afm.c,
+ src/type1/t1gload.c, src/type1/t1gload.h, src/type1/t1load.c,
+ src/type1/t1objs.c, src/type42/t42parse.c, src/type42/t42parse.h:
+ Many casts and slight argument type changes to make it work with
+ a 16bit compiler.
+
+2003-06-04 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/config/ftoption.h: Defining
+ TT_CONFIG_OPTION_FORCE_UNPATENTED_HINTING by default is a bad idea
+ since some fonts (e.g. Arial) produce worse results than without
+ hinting. Reverted.
+
+2003-06-04 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttgload.c (load_truetype_glyph)
+ [TT_CONFIG_OPTION_BYTECODE_INTERPRETER]: Call
+ FT_GlyphLoader_CheckPoints before adding phantom points. This fixes
+ a segfault bug with fonts (e.g. htst3.ttf) which have nested
+ subglyphs more than one level deep. Reported by Anthony Fok.
+
+ * include/freetype/config/ftoption.h: Define
+ TT_CONFIG_OPTION_BYTECODE_INTERPRETER,
+ TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING, and
+ TT_CONFIG_OPTION_FORCE_UNPATENTED_HINTING to make it the new
+ default.
+
+2003-06-03 Werner Lemberg <wl@gnu.org>
+
+ * src/autohint/ahhint.c (ah_hinter_hint_edges): Removed. Just a
+ wrapper for ah_hint_edges.
+ (ah_hint_edges): Renamed to...
+ (ah_hinter_hint_edges): This.
+
+ * src/base/ftobjs.c (FT_Set_Hint_Flags): Removed. Unused.
+
+ * include/freetype/internal/ftobjs.h (FT_Face_InternalRec),
+ include/freetype/internal/psaux.h (T1_DecoderRec),
+ src/cff/cffgload.h (CFF_Builder): Remove `hint_flags' field.
+ Unused.
+
+ * src/cff/cffgload.c (cff_builder_init): Updated.
+ (cff_decoder_parse_charstrings) <cff_op_endchar>: Call hinter->apply
+ with decoder->hint_mode instead of builder->hint_flags.
+ * src/psaux/t1decode.c (t1_decoder_init): Updated.
+
+ * src/base/ftstroker.c (ft_stroke_border_export): s/index/idx/.
+
+ * src/sfnt/sfobjs.c (sfnt_load_face): Commented out code which
+ increased root->height by 15% if the line gap was zero. There exist
+ fonts (containing e.g. form drawing characters) which intentionally
+ have a zero line gap value.
+
+ * src/truetype/ttinterp.c (Free_Project, CUR_Func_freeProj):
+ Removed. Unused.
+ Updated all callers.
+
+2003-06-02 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cffobjs.c (cff_face_init): Use symbolic names for
+ Adobe specific encoding IDs (there was a wrong EID value for custom
+ encoding).
+
+ * src/cff/cffcmap.h (CFF_CMapStdRec): Remove `count'.
+ * src/cff/cffcmap.c (cff_cmap_encoding_init,
+ cff_cmap_encoding_done): Updated.
+ (cff_cmap_encoding_char_index, cff_cmap_encoding_char_next): Use
+ 256 as limit for character code.
+
+2003-06-01 Werner Lemberg <wl@gnu.org>
+
+ * src/winfonts/winfnt.c (FNT_Load_Glyph): Revert change from
+ 2003-03-20.
+
+2003-05-31 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/fttrigon.h (FT_Vector_Normalize): Removed.
+
+2003-05-31 <Ron.Dev@gmx.de>
+
+ * src/type1/t1objs.c (T1_Face_Init): Improve algorithm for guessing
+ the font style by ignoring spaces and hyphens.
+
+ * builds/unix/freetype2.in: Fix `Version' field.
+
+2003-05-30 Werner Lemberg <wl@gnu.org>
+
+ Avoid overwriting of numeric font dictionary entries for synthetic
+ fonts. Additionally, some entries were handled as `integer' instead
+ of `number'.
+
+ * include/freetype/internal/psaux.h (T1_FieldType): Add
+ T1_FIELD_TYPE_BOOL_P, T1_FIELD_TYPE_INTEGER_P, and
+ T1_FIELD_TYPE_FIXED_P.
+ (T1_FIELD_BOOL_P, T1_FIELD_NUM_P, T1_FIELD_FIXED_P): New macros.
+ * src/psaux/psobjs.c (ps_parser_load_field): Handle new field types.
+
+ * include/freetype/internal/cfftypes.h (CFF_FontRecDict),
+ src/cff/cfftoken.h: Change type of underline_position and
+ underline_thickness to FT_Fixed.
+ * src/cff/cffload.c (cff_subfont_load): Fix default values of
+ underline_position and underline_thickness.
+ * src/cff/cffobjs.c (cff_face_init): Set underline_position
+ and underline_thickness in `root'.
+
+ * include/freetype/internal/t1types.h (T1_Font): Change point_type
+ and stroke_width to pointers.
+ * include/freetype/t1tables.h (PS_FontInfo): Change italic_angle,
+ is_fixed_pitch, underline_position, and underline_thickness to
+ pointers.
+ * src/type1/t1tokens.h: Change italic_angle, is_fixed_pitch,
+ underline_position, and underline_thickness to pointers. Change
+ the type of the latter two to `fixed'.
+ Change type of stroke_width to `fixed' and make it a pointer.
+ Change paint_type to pointer.
+ * src/type1/t1objs.c (T1_Face_Done): Updated.
+ (T1_Face_Init): Updated.
+ Fix assignment of underline_position and underline_thickness.
+
+ * src/cid/cidtoken.h: Change italic_angle, is_fixed_pitch,
+ underline_position, and underline_thickness to pointers. Change
+ the type of the latter two to `fixed'.
+ Change type of stroke_width to `fixed'.
+ * src/cid/cidobjs.c (cid_face_done): Updated.
+ (cid_face_init): Updated.
+ Fix assignment of underline_position and underline_thickness.
+
+ * src/type42/t42parse.c: Change italic_angle, is_fixed_pitch,
+ underline_position, and underline_thickness to pointers. Change the
+ type of the latter two to `fixed'.
+ Change type of stroke_width to `fixed' and make it a pointer.
+ Change paint_type to pointer.
+ * src/type42/t42objs.c (T42_Face_Init): Updated.
+ Fix assignment of underline_position and underline_thickness.
+ (T42_Face_Done): Updated.
+
+ * src/base/ftobjs.c (open_face_from_buffer): Fix compiler warning.
+ * src/pshinter/pshglob.c, src/pshinter/pshglob.h
+ (psh_globals_set_scale): Make it a local function.
+
+ * test/gview.c: Fix renaming ps3->ps typo.
+ Formatting.
+
+2003-05-29 Werner Lemberg <wl@gnu.org>
+
+ * src/pshinter/pshalgo1.[ch], src/pshinter/pshalgo2.[ch]: Removed.
+ * src/pshinter/pshalgo.h: Removed.
+
+ * src/pshinter/pshalgo3.[ch]: Renamed to...
+ * src/pshinter/pshalgo.[ch]: New files.
+ s/PSH3/PSH/.
+ s/psh3/psh/.
+ s/ps3/ps/.
+
+ * src/pshinter/pshrec.c, src/pshinter/pshinter.c: Updated.
+ * src/pshinter/rules.mk, src/pshinter/Jamfile: Updated.
+
+ * src/pshinter/pshglob.[ch] (psh_dimension_snap_width): Commented
+ out.
+
+ * tests/gview.c: Remove code for pshalgo1 and pshalgo2.
+ Updated.
+
+2003-05-28 Martin Zinser <zinser@decus.de>
+
+ * vms_make.com: Reworked support for shareable images on VMS. The
+ first version was kind of a hack; the current implementation of the
+ procedure to extract the required symbols is much cleaner.
+
+ Reworked creation of MMS files, avoiding a number of temporary files
+ which were created in the previous version.
+
+ Further work on creating descrip.mms files on the fly.
+
+ * builds/vms/descrip.mms, src/autohint/descrip.mms,
+ src/type1/descrip.mms: Removed.
+
+2003-05-28 Werner Lemberg <wl@gnu.org>
+
+ * src/pshinter/pshalgo3.c (psh3_glyph_compute_extrema): Skip
+ contours with only a single point to avoid segfault.
+
+ * src/base/ftglyph.c (FT_Glyph_To_Bitmap): Activate code for
+ handling `origin'.
+
+2003-05-24 Werner Lemberg <wl@gnu.org>
+
+ * src/autohint/ahtypes.h (AH_OPTION_NO_STRONG_INTERPOLATION):
+ Removed since unused.
+
+2003-05-21 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/config/ftstdlib.h (ft_strcat): New wrapper macro
+ for strcat.
+
+ * src/base/ftmac.c (create_lwfn_name): s/isupper/ft_isupper/.
+ (parse_font): s/memcpy/ft_memcpy/.
+ (is_dfont) [TARGET_API_MAC_CARBON]: s/memcmp/ft_memcmp/.
+ * src/base/ftobjs.c (load_mac_face) [FT_MACINTOSH]:
+ s/strlen/ft_strlen/.
+ s/strcat/ft_strcat/.
+ s/strcpy/ft_strcpy/.
+ * src/gzip/zutil.h: s/memset/ft_memset/.
+ s/memcmp/ft_memcmp/.
+
+ * src/bdf/bdfdrivr.c (BDF_Face_Init), src/pcf/pcfdriver.c
+ (PCF_Face_Init): Test for charset registry case-insensitively.
+
+ * src/gzip/ftgzip.c (ft_gzip_fil_io): Revert change from yesterday;
+ it has already been fixed differently.
+
+ * src/truetype/ttinterp.c (DO_SFVTL): Add missing braces around
+ if-clause.
+
+2003-05-21 Martin Zinser <zinser@decus.de>
+
+ * t1load.c (parse_blend_axis_types): Fix compiler warning.
+
+ * descrip.mms: Removed. Now created by...
+
+ * vms_make.com: New file.
+
+2003-05-21 Weiqi Gao <weiqigao@networkusa.net>
+
+ * src/gzip/ftgzip.c (ft_gzip_file_io): Avoid zero value of `delta'
+ to prevent infinite loop.
+
+2003-05-21 Lars Clausen <lrclause@cs.uiuc.edu>
+
+ * docs/VERSION.DLL: Provide better autoconf snippet to check
+ FreeType version.
+
+2003-05-21 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftobjs.c (open_face): Free `internal' not
+ `face->internal' in case of error to avoid possible segfault.
+
+ * src/pshinter/pshalgo3.c (ps3_hints_apply): Check whether we
+ actually have an outline.
+
+2003-05-20 David Chester <davidchester@qmx.net>
+
+ * src/pshinter/pshalgo3.c (ps3_hints_apply): Try to optimize
+ y_scale so that the top of non-capital letters is aligned on a pixel
+ boundary whenever possible.
+
+ * src/autohint/ahhint.c (ah_hint_edges): Make sure that lowercase
+ m's maintain their symmetry.
+
+2003-05-20 Werner Lemberg <wl@gnu.org>
+
+ * src/autohint/ahhint.c (ah_hinter_load_glyph): Oops! David's
+ patch from yesterday has been resolved already in a different
+ way. Reverted.
+
+2003-05-19 David Chester <davidchester@qmx.net>
+
+ * src/autohint/ahhint.c (ah_hinter_load_glyph): Don't scale
+ y_scale locally but face->size->metrics.y_scale.
+
+2003-05-19 David Turner <david@freetype.org>
+
+ * src/sfnt/ttcmap0.c (tt_cmap4_char_next): Select proper start
+ value for `hi' to avoid infinite loop.
+
+2003-05-18 Yong Sun <sunyong@njstar.com>
+
+ * src/raster/ftraster.c (Insert_Y_Turn): Fix overflow test.
+
+2003-05-18 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/config/ftoption.h [FT_CONFIG_OPTION_MAC_FONTS]:
+ New macro.
+ * src/base/ftobjs.c: Use it to control mac font support on non-mac
+ platforms.
+
+2003-05-17 George Williams <gww@silcom.com>
+
+ Implement partial support of Mac fonts on non-Mac platforms.
+
+ * src/base/ftobjs.c (memory_stream_close, new_memory_stream,
+ open_face_from_buffer, Mac_Read_POST_Resource,
+ Mac_Read_sfnt_Resource, IsMacResource, IsMacBinary, load_mac_face)
+ [!FT_MACINTOSH]: New functions.
+ (FT_Open_Face) [!FT_MACINTOSH]: Use load_mac_face.
+
+2003-05-17 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftobjs.c (FT_Load_Glyph): Scale linear advance width only
+ if FT_FACE_FLAG_SCALABLE is set (otherwise we have a division by
+ zero since FNT and friends don't define `face->units_per_EM').
+
+2003-05-15 David Turner <david@freetype.org>
+
+ * src/base/fttrigon.c (FT_Vector_Rotate): Avoid rounding errors
+ for small values.
+
+2003-05-15 Werner Lemberg <wl@gnu.org>
+
+ * src/autohint/ahtypes.h (AH_PointRec): Remove unused `in_angle'
+ and `out_angle' fields.
+
+2003-05-14 George Williams <gww@silcom.com>
+
+ * src/base/ftmac.c (FT_New_Face_From_SFNT): Handle CFF files also.
+
+2003-05-14 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/freetype.h: Fix typo in comment
+ (FT_HAS_FIXED_SIZES).
+
+2003-05-10 Dan Williams <dan@bigw.org>
+
+ * builds/unix/aclocal.m4: Comment out definition of
+ `allow_undefined_flag' for Darwin 1.3.
+ * builds/unix/configure.ac: Add option --with-old-mac-fonts.
+ * builds/unix/ltmain.sh: Fix version numbering for Darwin 1.3.
+ * builds/unix/configure: Regenerated.
+
+ * include/freetype/config/ftconfig.h: Fix conditions for defining
+ `FT_MACINTOSH'.
+ * src/base/ftbase.c: Include `ftmac.c' conditionally.
+ * src/base/ftmac.c: Handle __GNUC__.
+
+2003-05-07 YAMANO-UCHI Hidetoshi <mer@din.or.jp>
+
+ * src/cid/cidload.c (is_alpha): Removed.
+ (cid_parse_dict): Use `cid_parser_skip_alpha' instead of `is_alpha'.
+
+2003-05-07 Werner Lemberg <wl@gnu.org>
+
+ * src/autohint/ahoptim.c, src/autohint/ahoptim.h: Obsolete, removed.
+
+2003-05-07 David Turner <david@freetype.org>
+
+ * src/autohint/ahglyph.c (ah_setup_uv): Exchange `for' loop and
+ `switch' statement to make it run faster.
+ (ah_outline_compute_segments): Reset `segment->score' and
+ `segment->link'.
+ (ah_outline_link_segments): Provide alternative code which does
+ the same but runs much faster.
+ Handle major direction also.
+ (ah_outline_compute_edges): Scale `edge_distance_threshold' down
+ after rounding instead of scaling comparison value in loop.
+
+ * src/autohint/ahhint.c (ah_hinter_align_stong_points): Provide
+ alternative code which runs faster.
+ Handle `before->scale == 0'.
+
+ * src/autohint/ahtypes.h (AH_SegmentRec): Move some fields down.
+ (AH_EdgeRec): Move some fields in structure.
+ New field `scale'.
+
+ * src/sfnt/ttcmap0.c (tt_cmap4_char_next): Use binary search.
+
+2003-05-02 Werner Lemberg <wl@gnu.org>
+
+ * src/autohint/ahoptim.c (LOG): Renamed to...
+ (AH_OPTIM_LOG): This.
+ (AH_Dump_Springs): Fix log message format.
+
+ * src/autohint/ahhint.c (ah_hint_edges_3): Renamed to...
+ (ah_hint_edges): This.
+
+2002-05-02 Keith Packard <keithp@keithp.com>
+
+ * src/bdf/bdfdrivr.c (BDF_Set_Pixel_Size): Initialize `max_advance'.
+
+2003-05-01 Werner Lemberg <wl@gnu.org>
+
+ * src/autohint/ahglyph.c (ah_test_extrema): Renamed to...
+ (ah_test_extremum): This.
+
+2003-04-28 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/configure.ac: Generate `freetype.pc' from
+ `freetype.in'.
+ * builds/unix/configure: Regenerated.
+ * builds/unix/install.mk (install, uninstall): Handle `freetype.pc'.
+
+2003-04-28 Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
+
+ * builds/unix/freetype2.in: New file. Contains building information
+ for the `pkg-config' package.
+
+2003-04-28 David Turner <david@freetype.org>
+
+ * src/base/ftobjs.c (FT_Load_Glyph): Fix boundary check for
+ `glyph_index'.
+
+2003-04-25: Graham Asher <graham.asher@btinternet.com>
+
+ Added the optional unpatented hinting system for TrueType. It
+ allows typefaces which need hinting to produce correct glyph forms
+ (e.g., Chinese typefaces from Dynalab) to work acceptably without
+ infringing Apple patents. This system is compiled only if
+ TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING is defined in
+ ftoption.h.
+
+ * include/freetype/ttunpat.h: New file. Defines
+ FT_PARAM_TAG_UNPATENTED_HINTING.
+
+ * include/freetype/config/ftheader.h (FT_TRUETYPE_UNPATENTED_H): New
+ macro to use when including ttunpat.h.
+
+ * include/freetype/config/ftoption.h
+ (TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING,
+ TT_CONFIG_OPTION_FORCE_UNPATENTED_HINTING): New configuration macros
+ (not defined, but in comments) for the unpatented hinting system.
+
+ * include/freetype/internal/tttypes.h (TT_FaceRec)
+ [TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING]: New element `FT_Bool
+ unpatented_hinting'.
+
+ * src/truetype/ttinterp.c (NO_APPLE_PATENT, APPLE_THRESHOLD):
+ Removed.
+ (GUESS_VECTOR): New macro.
+ (TT_Run_Context) [TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING]:
+ Set `both_x_axis'.
+ (tt_default_graphics_state)
+ [TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING]: Updated.
+ (Current_Ratio) [TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING]:
+ Handle `unpatented_hinting'.
+ (Direct_Move) [NO_APPLE_PATENT]: Removed.
+ [TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING]: Insert assertion.
+ (Project, FreeProject)
+ [TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING]: Insert assertion.
+ (Compute_Funcs) [TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING]:
+ Implement unpatented hinting.
+ (DO_SPVTCA, DO_SFVTCA, DO_SPVTL, DO_SFVTL, DO_SPVFS, DO_SFVFS,
+ Ins_SDPVTL): Call `GUESS_VECTOR'.
+ (DO_GPV, DO_GFV) [TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING]:
+ Handle `unpatented_hinting'.
+ (Compute_Point_Displacement) [NO_APPLE_PATENT]: Removed.
+ [TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING]: Implement unpatented
+ hinting.
+ (Move_Zp2_Point, Ins_SHPIX, Ins_DELTAP, Ins_DELTAC)
+ [TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING]: Implement unpatented
+ hinting.
+ (TT_RunIns): Updated.
+
+ * src/truetype/ttobjs.c
+ [TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING]: Include
+ FT_TRUETYPE_UNPATENTED_H.
+ (tt_face_init) [TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING,
+ TT_CONFIG_OPTION_FORCE_UNPATENTED_HINTING]: Check
+ FT_PARAM_TAG_UNPATENTED_HINTING.
+
+ * src/truetype/ttobjs.h (TT_GraphicsState)
+ [TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING]: Add `both_x_axis'.
+
+2003-04-25 Werner Lemberg <wl@gnu.org>
+
+ * src/bdf/bdflib.c (hash_bucket, hash_lookup): Use `const' for first
+ argument.
+ (bdf_get_font_property): Use `const' for third argument.
+ Updated all callers.
+ * src/bdf/bdfdrivr.c (BDF_Face_Init): Set pixel width and height
+ similar to the PCF driver.
+ * src/bdf/bdf.h (_hashnode): Use `const' for `key'.
+ Updated.
+
+ * src/gzip/ftgzip.c: C++ doesn't like that the array `inflate_mask'
+ is declared twice. It is perhaps better to modify the zlib source
+ files directly instead of this hack.
+ (zcalloc, zfree, ft_gzip_stream_close, ft_gzip_stream_io): Add casts
+ to make build with g++ successful.
+
+2003-04-24 Manish Singh <yosh@gimp.org>
+
+ * src/cid/cidobjs.c (cid_face_init), src/type1/t1objs.c
+ (T1_Face_Init), src/type42/t42objs.c (T42_Face_Init): Split on `-'
+ also for searching the style name.
+
+2003-04-24 David Turner <david@freetype.org>
+
+ * src/pcf/pcfread.c (pcf_load_font): Fixed the computation of
+ face->num_glyphs. We must increase the value by 1 to respect the
+ convention that glyph index 0 always corresponds to the `missing
+ glyph'.
+
+2003-04-24 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/unix-cc.in (CFLAGS): Add @CPPFLAGS@.
+
+2003-04-24 Dieter Baron <dillo@netbsd.org>
+
+ * builds/unix/freetype-config.in (cflags): Emit FreeType 2's include
+ files first. Otherwise there are conflicts with FreeType 1
+ installed simultaneously.
+
+2003-04-23 Werner Lemberg <wl@gnu.org>
+
+ Fixing bugs reported by Nelson Beebe.
+
+ * src/base/ftstroker.c (FT_Stroker_ParseOutline): Remove unused
+ variable `in_path'.
+
+ * src/base/ftobjs (ft_glyphslot_set_bitmap): Change type of
+ second argument to `FT_Byte*'.
+ * include/freetype/internal/ftobjs.h: Updated.
+
+ * src/bdf/bdflib.c (_bdf_readstream): Remove unused variable `res'.
+ (_bdf_parse_glyphs): Remove unused variable `next'.
+ Mark `call_data' as unused.
+
+ * src/cache/ftlru.c (FT_LruList_Lookup): Remove unused variable
+ `plast'.
+
+ * src/pcf/pcfread.c (pcf_seek_to_table_type): Slight recoding to
+ actually use `error'.
+ (pcf_load_font): Remove unused variable `avgw'.
+
+ * src/pfr/pfrobjs.c (pfr_face_get_kerning): Change return type
+ to `void'.
+ Mark `error' as unused.
+ * src/pfr/pfrobjs.h: Updated.
+ * src/pfr/pfrdrivr.c (pfr_get_kerning): Updated.
+
+ * src/sfnt/ttload.c (sfnt_dir_check): Remove unused variable
+ `format_tag'.
+
+ * src/sfnt/ttcmap0.c (tt_cmap6_validate, tt_cmap10_validate): Remove
+ unused variable `start'.
+ (tt_cmap10_char_next): Remove unused variable `result'
+
+ * src/sfnt/sfobjs.c (tt_face_get_name): Mark `error' as unused.
+
+ * src/sfnt/sfdriver.c (get_sfnt_postscript_name): Mark `error' as
+ unused.
+
+ * src/type1/t1objs.c (T1_Face_Init): Remove unused variable
+ `pshinter'.
+
+ * src/type1/t1gload.c (T1_Load_Glyph): Use `glyph_data_loaded'
+ only for FT_CONFIG_OPTION_INCREMENTAL.
+
+2003-04-23 Akito Hirai <akito@kde.gr.jp>
+
+ * src/sfnt/ttcmap0.c (tt_cmap4_validate): Provide a weak variant
+ of the glyph ID bounding check if FT_VALIDATE_TIGHT is not active.
+ Without this change, many CJK fonts from Dynalab are rejected.
+
+2003-04-23 Joe Marcus Clarke <marcus@FreeBSD.org>
+
+ * src/base/ftbdf.c (FT_Get_BDF_Property): Check for valid
+ `get_interface'.
+
+2003-04-23 Paul Miller <paulm@profoundeffects.com>
+
+ * src/base/ftmac.c (parse_fond): Fix handling of style names.
+
+2003-04-23 Werner Lemberg <wl@gnu.org>
+
+ * src/pfr/pfrload.c (pfr_extra_item_load_font_id): Use FT_PtrDist
+ instead of FT_Uint for `len'.
+
+2003-04-22 Werner Lemberg <wl@gnu.org>
+
+ * src/gzip/ftgzip.c (zcalloc) [!FT_CONFIG_OPTION_SYSTEM_ZLIB]:
+ Convert K&R format to modern C usage.
+ (FT_Stream_OpenGzip): Use long constant.
+
+2003-04-21 Werner Lemberg <wl@gnu.org>
+
+ * src/cache/ftccache.c (ftc_cache_lookup): Remove shadow declaration
+ of `manager'.
+
+2003-04-20 Werner Lemberg <wl@gnu.org>
+
+ * doc/INSTALL.UNX: Cleaned up.
+
+2003-04-09 Torrey Lyons <torrey@mrcla.com>
+
+ * src/base/ftmac.c (open_face_from_buffer): Removed a double-free
+ bug that had nasty consequences when trying to open an `invalid'
+ font on a Mac.
+
+2003-04-09 Mike Fabian <mfabian@suse.de>
+
+ * src/bdf/bdfdrivr.h (BDF_encoding_el), src/pcf/pcf.h
+ (PCF_EncodingRec): Changed FT_Short to FT_UShort in order to be able
+ to access more than 32768 glyphs in fonts.
+
+2003-04-08 David Turner <david@freetype.org>
+
+
+ * Version 2.1.4 released.
+ =========================
+
+
+2003-04-03 Martin Muskens <mmuskens@aurelon.com>
+
+ * src/type1/t1load.c (T1_Open_Face): Fixed the code to make it
+ handle special cases where a font only contains a `.notdef' glyph
+ (happens in PDF-embedded fonts). Otherwise, FT_Panic was called.
+
+2003-03-27 David Turner <david@freetype.org>
+
+ * README: Udpated.
+
+ * README.UNX: Removed (now replaced by docs/INSTALL.UNX).
+
+ * src/pshinter/pshalgo3.c: The hinter now performs as in 2.1.3 and
+ will ignore stem quantization only when FT_LOAD_TARGET_SMOOTH is
+ used.
+ (psh3_dimension_quantize_len): Enabled.
+ (psh3_hint_align): Enable commented code.
+ (psh3_hint_align_light): Commented out.
+
+ * src/base/ftobjs.c (FT_Set_Char_Size): Changed the default
+ computations to include rounding in all cases; this is required to
+ provide accurate kerning data when native TrueType hinting is
+ enabled.
+
+ * src/type1/t1load.c (is_name_char): The Type 1 loader now accepts
+ more general names according to the PostScript specification (the
+ previous one was too restrictive).
+ (parse_font_name, parse_encoding, parse_charstrings, parse_dict):
+ Use `is_name_char'.
+ (parse_subrs): Handle empty arrays.
+
+2003-03-20 David Turner <david@freetype.org>
+
+ Serious rewriting of the documentation.
+
+ * docs/BUGS, docs/BUILD: Removed.
+ * docs/DEBUG.TXT: Renamed to...
+ * docs/DEBUG: This.
+ * docs/CUSTOMIZE, docs/TRUETYPE, docs/UPGRADE.UNX: New files.
+ * docs/INSTALL.ANY, docs/INSTALL.UNX, docs/INSTALL.GNU New files,
+ containing platform specific information previously in INSTALL.
+ * docs/readme.vms: Renamed to...
+ * docs/INSTALL.VMS: This.
+
+ * docs/*: Updated.
+
+ Introduced three new functions to deal with glyph bitmaps within
+ FT_GlyphSlot objects:
+
+ ft_glyphslot_free_bitmap
+ ft_glyphslot_alloc_bitmap
+ ft_glyphslot_set_bitmap
+
+ These functions are much more convenient to use than managing the
+ FT_GLYPH_OWN_BITMAP flag manually.
+
+ * include/freetype/internal/ftobjs.h (ft_glyphslot_free_bitmap,
+ ft_glyphslot_alloc_bitmap, ft_glyphslot_set_bitmap): New functions.
+ * src/base/ftobjs.c: Implement them.
+ (ft_glyphslot_done): Use ft_glyphslot_free_bitmap.
+
+ * src/bdf/bdfdrivr.c (BDF_Glyph_Load), src/pcf/pcfdriver.c
+ (PCF_Glyph_Load): Remove unused variable `memory'.
+ Use `ft_glyphslot_*' functions.
+ Don't set `FT_GLYPH_OWN_BITMAP'.
+
+ * src/pfr/pfrsbit.c (pfr_slot_load_bitmap): Use
+ `ft_glyphslot_alloc_bitmap'.
+
+ * src/sfnt/ttsbit.c (Load_SBit_Image): Change 5th argument to type
+ `FT_GlyphSlot'.
+ Adding argument `depth' to handle recursive calls.
+ Use `ft_glyphslot_alloc_bitmap'.
+ (tt_face_load_sbit_image): Remove unused variable `memory'.
+ Don't handle `FT_GLYPH_OWN_BITMAP'.
+ Update call to Load_SBit_Image.
+
+ * src/type42/t42objs.c (ft_glyphslot_clear): Renamed to...
+ (t42_glyphslot_clear): This. Updated caller.
+ Call `ft_glyphslot_free_bitmap'.
+
+ * src/winfonts/winfnt.c (FNT_Load_Glyph): Use
+ `ft_glyphslot_set_bitmap'.
+ Don't handle `FT_GLYPH_OWN_BITMAP'.
+
+ * src/cache/ftlru.c (FT_LruList_Lookup): Fixed an invalid assertion
+ check.
+
+ * src/autohint/ahglyph.c (ah_outline_load): Add two scaling
+ arguments.
+ * src/autohint/ahglyph.h: Updated.
+ * src/autohint/ahhint.c (ah_hinter_load): Updated.
+ * src/autohint/ahglobal.c (ah_hinter_compute_widths): Updated.
+
+ * src/cache/ftccache.c (ftc_family_done): Fixed small bug that could
+ crash the cache in rare circumstances (mostly with broken fonts).
+
+2003-03-15 David Turner <david@freetype.org>
+
+ * src/truetype/ttdriver.c (Set_Char_Sizes): Fixed a small rounding
+ bug. Actually, it seems that previous versions of FreeType didn't
+ perform TrueType rounding exactly as appropriate.
+
+2003-03-14 David Turner <david@freetype.org>
+
+ * src/truetype/ttdriver.c (Set_Char_Sizes): Fixing the small
+ TrueType native rendering glitches; they came from a small rounding
+ error.
+
+2003-03-13 David Turner <david@freetype.org>
+
+ Added new environment variables to control memory debugging with
+ FreeType. See the description of `FT2_DEBUG_MEMORY',
+ `FT2_ALLOC_TOTAL_MAX' and `FT2_ALLOC_COUNT_MAX' in DEBUG.TXT.
+
+ * src/base/ftdbgmem.c (FT_MemTableRec): Add `alloc_count',
+ `bound_total', `alloc_total_max', `bound_count', `alloc_count_max'.
+ (ft_mem_debug_alloc): Handle new variables.
+ (ft_mem_debug_init): s/FT_DEBUG_MEMORY/FT2_DEBUG_MEMORY/.
+ Handle new environment variables.
+ * docs/DEBUG.TXT: Updated.
+
+ Fixed the cache sub-system to correctly deal with out-of-memory
+ conditions.
+
+ * src/cache/ftccache.c (ftc_node_destroy): Comment out generic
+ check.
+ (ftc_cache_lookup): Implement loop.
+ * src/cache/ftccmap.c: Define FT_COMPONENT.
+ * src/cache/ftcsbits.c (ftc_sbit_node_load): Handle
+ FT_Err_Out_Of_Memory.
+ * src/cache/ftlru.c: Include FT_INTERNAL_DEBUG_H.
+ (FT_LruList_Lookup): Implement loop.
+
+ * src/pfr/pfrobjs.c (pfr_face_done): Fix memory leak.
+ (pfr_face_init): Fixing compiler warnings.
+
+ * src/psaux/psobjs.c (reallocate_t1_table): Fixed a bug (memory
+ leak) that only happened when a try to resize an array would end in
+ an out-of-memory condition.
+
+ * src/smooth/ftgrays.c (gray_convert_glyph): Removed compiler
+ warnings / volatile bug.
+
+ * src/truetype/ttobjs.c (tt_glyphzone_done): Removed segmentation
+ fault that happened in tight memory environments.
+
+2003-02-28 Pixel <pixel@mandrakesoft.com>
+
+ * src/gzip/ftgzip.c (ft_gzip_file_done): Fixed memory leak: The ZLib
+ stream was not properly finalized.
+
+2003-02-25 Anthony Fok <anthony@thizlinux.com>
+
+ * src/cache/ftccmap.c: Include FT_TRUETYPE_IDS_H.
+ (ftc_cmap_family_init): The cmap cache now
+ supports UCS-4 charmaps when available in Asian fonts.
+
+ * src/sfnt/ttload.c, src/base/ftobjs.c: Changed `asian' to `Asian'
+ in comments.
+
+2003-02-25 David Turner <david@freetype.org>
+
+ * src/gzip/ftgzip.c (ft_gzip_file_fill_output): Fixed a bug that
+ caused FreeType to loop endlessly when trying to read certain
+ compressed gzip files. The following test reveals the bug:
+
+ touch 0123456789 ; gzip 0123456789 ; ftdump 0123456789.gz
+
+ Several fixes to the PFR font driver:
+
+ - The list of available embedded bitmaps was not correctly set in
+ the root FT_FaceRec structure describing the face.
+
+ - The glyph loader always tried to load the outlines when
+ FT_LOAD_SBITS_ONLY was specified.
+
+ - The table loaded now scans for *undocumented* elements of a
+ physical font's auxiliary data record. This is necessary to
+ retrieve the `real' family and style names.
+
+ NOTE THAT THESE CHANGES THE FAMILY NAME OF MANY PFR FONTS!
+
+ * src/pfr/pfrload.c (pfr_aux_name_load): New function.
+ (pfr_phy_font_done): Free `family_name' and `style_name' also.
+ Remove unused variables.
+ (pfr_phy_font_load): Extract useful information from the auxiliary
+ bytes.
+
+ * src/pfr/pfrobjs.c (pfr_face_done): Set pointers to NULL.
+ (pfr_face_init): Provide fallback values for `family_name' and
+ `style_name'.
+ Handle strikes.
+ (pfr_slot_load): Handle FT_LOAD_SBITS_ONLY.
+ * src/pfr/pfrtypes.h (PFR_PhyFontRec): Add fields `ascent',
+ `descent', `leading', `family_name', and `style_name'.
+
+ * src/truetype/ttdriver.c (Set_Char_Sizes): Fixed a rounding bug
+ when computing the scale factors for a given character size in
+ points with resolution.
+
+ * devel/ft2build.h, devel/ftoption.h: New files (in a new directory)
+ which are special development versions of include/ft2build.h and
+ include/freetype/config/ftoption.h, respectively.
+
+2003-02-18 David Turner <david@freetype.org>
+
+ Fixing the slight distortion problem that occurred due to the latest
+ auto-hinter changes.
+
+ * src/base/ftobjs.c (ft_recompute_scaled_metrics): Fix rounding.
+
+ * src/truetype/ttdriver.c (Set_Char_Sizes): New variable `metrics2'.
+ [!TT_CONFIG_OPTION_BYTECODE_INTERPRETER]: Removed.
+
+ * src/truetype/ttobjs.h (TT_SizeRec): New field `metrics'.
+ * src/truetype/ttobjs.c (Reset_Outline_Size): Fix initialization of
+ `metrics'.
+ [FT_CONFIG_CHESTER_ASCENDER]: Code removed.
+ (Reset_SBit_Size): Fix initialization of `metrics'.
+
+ * src/truetype/ttinterp.c (TT_Load_Context): Fix initialization of
+ `exec->metrics'.
+
+ * src/autohint/ahhint.c (ah_hinter_load): Disabled the advance width
+ `correction' which seemed to provide more trouble than benefits.
+
+2003-02-13 Graham Asher <graham.asher@btinternet.com>
+
+ Changed the incremental loading interface in a way that makes it
+ simpler and allows glyph metrics to be changed (e.g., by adding a
+ constant, as required by CFF fonts) rather than just overridden.
+ This was required to make the GhostScript-to-FreeType bridge work.
+
+ * src/cff/cffgload.c (cff_slot_load) [FT_CONFIG_OPTION_INCREMENTAL]:
+ Allow metrics to be overridden.
+ * src/cid/cidgload.c (cid_load_glyph) [FT_CONFIG_OPTION_INCREMENTAL]:
+ Ditto.
+
+ * src/truetype/ttgload.c (load_truetype_glyph)
+ [FT_CONFIG_OPTION_INCREMENTAL]: Simplify.
+ (compute_glyph_metrics) [FT_CONFIG_OPTION_INCREMENTAL]: Code block
+ moved down.
+
+ * src/type1/t1gload.c (T1_Parse_Glyph_And_Get_Char_String)
+ [FT_CONFIG_OPTION_INCREMENTAL]: Updated.
+
+ * include/freetype/ftincrem.h: Updated.
+
+2003-01-31 David Turner <david@freetype.org>
+
+ * docs/CHANGES, docs/VERSION.DLL, docs/TODO: Updating documentation
+ for the 2.1.4 release.
+
+ * builds/win32/visualc/freetype.dsp,
+ builds/win32/visualc/index.html: Updating the project file for
+ 2.1.4.
+
+ * src/gzip/adler32.c, src/gzip/ftgzip.c, src/gzip/infblock.c,
+ src/gzip/infcodes.c, src/gzip/inflate.c, src/gzip/inftrees.c,
+ src/gzip/infutil.c: Removed old-style (K&R)function definitions.
+ This avoids warnings with Visual C++ at its most pedantic mode.
+
+ * src/pfr/pfrsbit.c: Removed compiler warnings.
+
+ * src/cache/ftccmap.c (ftc_cmap_family_init): Changed an FT_ERROR
+ into an FT_TRACE1 since it caused `ftview' and others to dump too
+ much junk when trying to display a waterfall with a font without a
+ Unicode charmap (e.g. SYMBOL.TTF).
+
+ Implemented FT_CONFIG_CHESTER_BLUE_SCALE, corresponding to the last
+ patch from David Chester, but with a much simpler (and saner)
+ implementation.
+
+ * src/autohint/ahhint.c (ah_hinter_load_glyph)
+ [FT_CONFIG_CHESTER_BLUE_SCALE]: Try to optimize the y_scale so that
+ the top of non-capital letters is aligned on a pixel boundary
+ whenever possible.
+
+ * src/base/ftobjs.c (FT_Set_Char_Size)
+ [FT_CONFIG_CHESTER_BLUE_SCALE]: Round differently.
+ * src/truetype/ttdriver.c (Set_Char_Sizes)
+ [TT_CONFIG_OPTION_BYTECODE_INTERPRETER]: Do some rounding only
+ if this macro is defined.
+
+ * src/truetype/ttobjs.c (Reset_Outline_Size)
+ [FT_CONFIG_CHESTER_ASCENDER]: Round differently.
+
+ * src/pshinter/pshalgo3.c: Improved the Postscript hinter. Getting
+ rid of stem snapping seems to work well here (though the stems are
+ still slightly moved to increase contrast).
+ (psh3_dimension_quantize_len): Commented out.
+ (psh3_hint_align_light): New function.
+ (psh3_hint_align): Comment out some code.
+
+ THIS IMPROVES ANTI-ALIASED RENDERING, BUT MONOCHROME AND LCD MODES
+ STILL SUCK.
+
+2003-01-22 David Chester <davidchester@qmx.net>
+
+ * src/autohint/ahhint.c (ah_compute_stem_width): Small fix to the
+ stem width optimization.
+
+2003-01-22 David Turner <david@freetype.org>
+
+ Adding a new API `FT_Get_BDF_Property' to retrieve the BDF
+ properties of a given PCF or BDF font.
+
+ * include/freetype/ftbdf.h (FT_PropertyType): New enumeration.
+ (BDF_Property, BDF_PropertyRec): New structure.
+ FT_Get_BDF_Property): New function.
+ * include/freetype/internal/bdftypes.h: Include FT_BDF_H.
+ (BDF_GetPropertyFunc): New function pointer.
+
+ * src/base/ftbdf.c (test_font_type): New helper function.
+ (FT_Get_BDF_Charset_ID): Use `test_font_type'.
+ (FT_Get_BDF_Property): New function.
+
+ * src/bdf/bdfdrivr.c: Include FT_BDF_H.
+ (bdf_get_bdf_property, bdf_driver_requester): New functions.
+ (bdf_driver_class): Use `bdf_driver_requester'.
+
+ * src/pcf/pcfdrivr.c: Include FT_BDF_H.
+ (pcf_get_bdf_property, pdc_driver_requester): New functions
+ (pcf_driver_class): Use `pcf_driver_requester'.
+
+ * src/pcf/pcfread.c: Include `pcfread.h'.
+ (pcf_find_property): Decorate it with FT_LOCAL_DEF.
+ * src/pcf/pcfread.h: New file, providing `pcf_find_property'.
+
+ * src/sfnt/ttload.c (sfnt_dir_check): Relaxed the `head' table size
+ verification to accept a few broken fonts who pad the size
+ incorrectly (the table should be padded, but its `size' field
+ shouldn't according to the specification).
+
+2003-01-18 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/ltmain.sh: Regenerated with `libtoolize --force
+ --copy' from libtool 1.4.3.
+ * builds/unix/aclocal.m4: Regenerated with `aclocal -I .' from
+ automake 1.7.1.
+ * builds/unix/configure: Regenerated with autoconf 2.54.
+ * builds/unix/config.guess, builds/unix/config.sub: Updated from
+ `config' CVS module at subversions.gnu.org.
+ * builds/unix/install-sh, builds/unix/mkinstalldirs: Updated from
+ `automake' CVS module at subversions.gnu.org.
+
+2003-01-15 David Turner <david@freetype.org>
+
+ * include/freetype/freetype.h: Fixed documentation for
+ FT_Size_Metrics.
+
+2003-01-15 James Su <suzhe@turbolinux.com.cn>
+
+ * src/gzip/ftgzip.c (ft_gzip_check_header): Bugfix: couldn't read
+ certain gzip-ed font files (typo: `&&' -> `&').
+
+2003-01-15 Huw D M Davies <h.davies1@physics.ox.ac.uk>
+
+ Added a Windows .FNT specific API (mostly for Wine). Also fixed a
+ nasty bug in the header loader which would cause invalid memory
+ overwrites.
+
+ * include/freetype/config/ftheader.h (FT_WINFONTS_H): New macro
+ for ftwinfnt.h.
+ * include/freetype/internal/fnttypes.h: Include FT_WINFONTS_H.
+ (FNT_FontRec): Updated.
+ Move Windows FNT definition to...
+ * include/freetype/ftwinfnt.h: This new file.
+ (FT_WinFNT_HeaderRec): Rename `reserved2' to `reserved1'.
+ * src/base/ftwinfnt.c: New file, providing `FT_Get_WinFNT_Header'.
+ * src/winfonts/winfnt.c (winfnt_header_fields): Updated.
+ Rename `reserved2' to `reserved1'.
+ (fnt_font_load): Updated.
+
+ * src/base/Jamfile, src/base/descrip.mms, src/base/rules.mk:
+ Updated.
+
+2003-01-14 Graham Asher <graham.asher@btinternet.com>
+
+ * include/freetype/ftglyph.h, src/base/ftglyph.c: Added `const' to
+ the type of the first argument to FT_Matrix_Multiply, which isn't
+ changed -- this adds documentation and convenience.
+
+2003-01-13 Graham Asher <graham.asher@btinternet.com>
+
+ * src/sfnt/ttload.c (tt_face_load_metrics)
+ [FT_CONFIG_OPTION_INCREMENTAL]: TrueType typefaces without
+ horizontal metrics (without the `hmtx' table) are now tolerated if
+ an incremental interface has been specified that has a
+ get_glyph_metrics function, implying that metrics will be supplied
+ from outside. This happens for certain Type 42 fonts passed from
+ GhostScript.
+
+2003-01-11 David Chester <davidchester@qmx.net>
+
+ Patches to the auto-hinter in order to slightly improve the output.
+ Note that everything is controlled through the new
+ FT_CONFIG_OPTION_CHESTER_HINTS defined in `ftoption.h'. There are
+ also individual FT_CONFIG_CHESTER_XXX macros to control individual
+ `features'.
+
+ Note that all improvements are enabled by default, but can be
+ tweaked for optimization and testing purposes. The configuration
+ macros will most likely disappear in the short future.
+
+ * include/freetype/config/ftoption.h
+ (FT_CONFIG_OPTION_CHESTER_HINTS): New macro.
+ (FT_CONFIG_CHESTER_{SMALL_F,ASCENDER,SERIF,STEM,BLUE_SCALE})
+ [FT_CONFIG_OPTION_CHESTER_HINTS]: New macros to control individual
+ features.
+
+ * src/autohint/ahglobal.c (blue_chars) [FT_CONFIG_CHESTER_SMALL_F]:
+ Add blue zone for `fijkdbh'.
+ * src/autohint/ahglobal.h (AH_IS_TOP_BLUE)
+ [FT_CONFIG_CHESTER_SMALL_F]: Use `AH_BLUE_SMALL_F_TOP'.
+ * src/autohint/ahglyph.c (ah_outline_compute_edges)
+ [FT_CONFIG_CHESTER_SERIF]: Use `AH_EDGE_SERIF'.
+ (ah_outline_compute_blue_edges) [FT_CONFIG_CHESTER_SMALL_F]:
+ Increase threshold for `best_dist'.
+ * src/autohint/ahhint.c (ah_compute_stem_width)
+ [FT_CONFIG_CHESTER_SERIF]: Provide new version for improved serif
+ handling.
+ (ah_align_linked_edge) [FT_CONFIG_CHESTER_SERIF]: Use special
+ version of `ah_compute_stem_width'.
+ (ah_hint_edges_3) [FT_CONFIG_CHESTER_STEM]: A new algorithm for stem
+ alignment when stem widths are less than 1.5 pixels wide centers the
+ stem slightly off-center of the center of a pixel (this increases
+ sharpness and consistency).
+ [FT_CONFIG_CHESTER_SERIF]: Use special version of
+ `ah_compute_stem_width'.
+ * src/autohint/ahtypes.h [FT_CONFIG_CHESTER_SMALL_F]: Add
+ `AH_BLUE_SMALL_F_TOP'.
+
+2003-01-11 David Turner <david@freetype.org>
+
+ * include/freetype/internal/fnttypes.h (WinFNT_HeaderRec): Increase
+ size of `reserved2' to avoid memory overwrites.
+
+2003-01-08 Huw Davies <huw@codeweavers.com>
+
+ * src/winfonts/winfnt.c (winfnt_header_fields): Read 16 bytes into
+ `reserved2', not `reserved'.
+
+ * src/base/ftobjs.c (find_unicode_charmap): Fixed the error code
+ returned when the font doesn't contain a Unicode charmap. This
+ allows FT2 to load `symbol.ttf' and a few others correctly since the
+ last release.
+ (open_face): Fix return value.
+
+2003-01-08 Owen Taylor <owen@redhat.com>
+
+ Implemented the FT_RENDER_MODE_LIGHT hinting mode in the auto and
+ postscript hinters.
+
+ * src/autohint/ahtypes.h (AH_HinterRec): Add `do_stem_adjust'.
+ * src/autohint/ahhint.c (ah_compute_stem_width): Handle
+ hinter->do_stem_adjust.
+ (ah_hinter_load_glyph): Set hinter->do_stem_adjust.
+
+ * src/pshinter/pshalgo3.h (PSH3_GlyphRec): Add `do_stem_adjust'.
+ * src/pshinter/pshalgo3.c (psh3_hint_align): Use `do_stem_adjust'.
+ (ps3_hints_apply): Handle FT_RENDER_MODE_LIGHT.
+
+ * include/freetype/freetype.h (FT_Render_Mode): Add
+ FT_RENDER_MODE_LIGHT.
+
+ * src/truetype/ttgload.c: Fixing the TrueType loader to handle
+ invalid composites correctly by limiting the recursion depth.
+ (TT_MAX_COMPOSITE_RECURSE): New macro.
+ (load_truetype_glyph): Add argument `recurse_count'.
+ Load a composite only if the numbers of contours is -1, emit error
+ otherwise.
+ (TT_Load_Glyph): Updated.
+
+2003-01-08 David Turner <david@freetype.org>
+
+ * Jamrules, Jamfile, Jamfile.in, src/*/Jamfile: Small changes to
+ support the compilation of FreeType 2 as part of larger projects
+ with their own configuration options (only with Jam).
+
+2003-01-07 David Turner <david@freetype.org>
+
+ * src/base/ftstroker.c: Probably the last bug-fixes to the stroker;
+ the API is likely to change, however.
+ (ft_stroke_border_close): Don't record empty paths.
+ (ft_stroke_border_get_counts): Increase `num_points' also in for loop.
+ (ft_stroke_border_export): Don't increase `write' twice in for loops.
+ (ft_stroker_outside): Handle `phi' together with `theta'.
+ (FT_Stroker_ParseOutline): New function.
+
+ * src/base/fttrigon.c (FT_Angle_Diff): Fixing function: It returned
+ invalid values for large negative angle differences (resulting in
+ incorrect stroker computations, among other things).
+
+ * src/cache/ftccache.c (ftc_node_hash_unlink): Removing incorrect
+ assertion, and changing code to avoid hash table size contraction.
+
+ * src/base/Jamfile, src/base/rules.mk, src/base/descrip.mms: Adding
+ `ftstroker' to default build, as optional component.
+
+2002-12-26 David Turner <david@freetype.org>
+
+ * src/gzip/adler32.c, src/gzip/infblock.c, src/gzip/inflate.c,
+ src/gzip/inftrees.c, src/gzip/zconf.h, src/gzip/zlib.h,
+ src/gzip/zutil.h: Updates to allow compilation without compiler
+ warnings with LCC-Win32.
+
+ * include/freetype/freetype.h (FREETYPE_PATCH): Set to 4.
+ * builds/unix/configure.ac (version_info): Increased to 9:3:3.
+ * builds/unix/configure: Regenerated.
+ * docs/VERSION.DLL: Updated.
+
+2002-12-23 Anthony Fok <anthony@thizlinux.com>
+
+ * builds/unix/configure.ac, builds/unix/unix-cc.in (LINK_LIBRARY),
+ builds/unix/unix-def.in (SYSTEM_ZLIB): Small fix to configure
+ sub-system on Unix to allow other programs to correctly link with
+ zlib when needed.
+
+2002-12-19 David Turner <david@freetype.org>
+
+ * include/freetype/internal/sfnt.h (SFNT_Load_Table_Func): New
+ function pointer.
+
+ * include/freetype/tttables.h (FT_Load_Sfnt_Table): New function.
+ * src/base/ftobjs.c: Implement it.
+
+ * src/sfnt/sfdriver.c (sfnt_get_interface): Handle `load_sfnt'
+ module request.
+
+2002-12-17 David Turner <david@freetype.org>
+
+ * src/base/ftobjs.c (find_unicode_charmap): Added some comments to
+ better explain what's happening there.
+ (open_face): Included Graham Asher's fix to prevent faces without
+ Unicode charmaps from loading.
+
+ * src/winfonts/winfnt.c: Included George Williams's fix to support
+ version 2 fonts correctly.
+ (winfnt_header_fields): Updated.
+ (fnt_font_load): Handle version 2 fonts.
+ (FNT_Load_Glyph): Updated.
+
+2002-12-16 David Turner <david@freetype.org>
+
+ * docs/VERSION.DLL: Updating document to better explain the
+ differences between the three version numbers being used on Unix, as
+ well as providing an autoconf fragment provided by Lars Clausen.
+
+ * src/smooth/ftgrays.c (gray_render_conic): Fixed small bug that
+ prevented Bézier arcs with negative vertical coordinates to be
+ rendered appropriately.
+
+2002-12-02 Antoine Leca <Antoine-Freetype@Leca-Marti.org>
+
+ * src/base/ftobjs.c: Modified the logic to get Unicode charmaps.
+ Now it loads UCS-4 charmaps when there is one.
+ (find_unicode_charmap): New function.
+ (open_face): Refer to the above one.
+ (FT_Select_Charmap): Idem.
+
+2002-11-29 Antoine Leca <Antoine-Freetype@Leca-Marti.org>
+
+ * include/freetype/ftgzip.h: Correct the name of the controlling
+ macro (was __FTXF86_H__ ...).
+
+2002-11-27 Vincent Caron <v.caron@zerodeux.net>
+
+ * builds/unix/unix-def.in, builds/unix/freetype-config.in,
+ builds/unix/configure.ac, src/gzip/rules.mk, src/gzip/ftgzip.c
+ [FT_CONFIG_OPTION_SYSTEM_ZLIB]: Adding support for system zlib
+ installations if available on the target platform (Unix only).
+
+2002-11-23 David Turner <david@freetype.org>
+
+ * src/cff/cffload.c (cff_charset_load, cff_encoding_load): Modified
+ charset loader to accept pre-defined charsets, even when the font
+ contains fewer glyphs. Also enforced more checks to ensure that we
+ never overflow the character codes array in the encoding.
+
+2002-11-22 Antoine Leca <Antoine-Freetype@Leca-Marti.org>
+
+ * include/freetype/ttnameid.h: Updated to latest OpenType
+ specification.
+
+2002-11-18 David Turner <david@freetype.org>
+
+
+ * Version 2.1.3 released.
+ =========================
+
+
+2002-11-07 David Turner <david@freetype.org>
+
+ * src/cache/ftcsbit.c (ftc_sbit_node_load): Fixed a small bug that
+ caused problems with embedded bitmaps.
+
+ * src/otlayout/otlayout.h, src/otlyaout/otlconf.h,
+ src/otlayout/otlgsub.c, src/otlayout/otlgsub.h,
+ src/otlayout/otlparse.c, src/otlayout/otlparse.h,
+ src/otlayout/otlutils.h: Updating the OpenType Layout code, adding
+ support for the first GSUB lookups. Nothing that really compiles
+ for now though.
+
+ * src/autohint/ahhint.c (ah_align_serif_edge): Disabled serif stem
+ width quantization. It produces slightly better shapes though this
+ is not distinguishable with many fonts.
+ Remove other dead code.
+
+ * src/Jamfile, src/*/Jamfile: Simplified.
+ Use $(FT2_SRC_DIR).
+
+2002-11-06 David Turner <david@freetype.org>
+
+ * include/freetype/freetype.h (FT_LOAD_TARGET_LIGHT): New macro.
+ (FT_LOAD_TARGET, FT_LOAD_TARGET_MODE): Use `& 15' instead of `& 7'.
+
+2002-11-05 David Turner <david@freetype.org>
+
+ * include/freetype/config/ftoption.h, src/gzip/ftgzip.c: Added
+ support for the FT_CONFIG_OPTION_SYSTEM_ZLIB option, used to specify
+ the use of system-wide zlib.
+
+ Note that this macro, as well as
+ TT_CONFIG_OPTION_BYTECODE_INTERPRETER, is not #undef-ed anymore.
+ This allows the build system to define them depending on the
+ configuration (typically by adding -D flags at compile time).
+
+ * src/sfnt/ttcmap0.c (tt_face_build_cmaps): Removed compiler
+ warnings in optimized mode relative to the `volatile' local
+ variables. This was not a compiler bug after all, but the fact that
+ a pointer to a volatile variable is not the same as a volatile
+ pointer to a variable :-)
+
+ The fix was to change
+ `volatile FT_Byte* p'
+ into
+ `FT_Byte* volatile p'.
+
+ * src/pfr/pfrload.c (pfr_phy_font_load), src/pfr/pfrdrivr.c
+ (pfr_get_metrics), src/gzip/inftrees.c: Removed compiler warnings in
+ optimized modes.
+
+ * src/gzip/*.[hc]: Modified our zlib copy in order to prevent
+ exporting any zlib function names outside of the component. This
+ prevents linking problems on some platforms, when applications want
+ to link FreeType _and_ zlib together.
+
+2002-11-05 Juliusz <jch@pps.jussieu.fr>
+
+ * src/psaux/psobjs.c (ps_table_add): Modified increment loop in
+ order to implement exponential behaviour.
+
+2002-11-01 David Turner <david@freetype.org>
+
+ Added PFR-specific public API. Fixed the kerning retrievel routine
+ (it returned invalid values when the outline and metrics resolution
+ differ).
+
+ * include/freetype/ftpfr.h, include/freetype/internal/pfr.h: New
+ files.
+
+ * include/freetype/internal/internal.h (FT_INTERNAL_PFR_H): New
+ macro for pfr.h.
+
+ * src/base/ftpfr.c: New file.
+ * src/base/Jamfile, src/base/descrip.mms: Updated.
+
+ * src/pfr/pfrdrivr.c: Include FT_INTERNAL_PFR_H.
+ (pfr_get_kerning, pfr_get_advance, pfr_get_metrics): New functions.
+ (pfr_service_rec): New format interface.
+ (pfr_driver_class): Use `pfr_service_rec'.
+ Replace `pfr_face_get_kerning' with `pfr_get_kerning'.
+ * src/pfr/pfrobjs.c: Remove dead code.
+
+ * src/base/ftobjs.c (ft_glyphslot_clear): Small internal fix to
+ better support bitmap-based font formats.
+
+ * src/base/ftsynth.c (FT_GlyphSlot_Embolden): Fix handling of
+ `scale'.
+ Fix arguments to `FT_Vector_From_Polar'.
+
+2002-10-31 David Turner <david@freetype.org>
+
+ Add support for automatic handling of gzip-compressed PCF files.
+
+ * src/gzip/*: New files, taken from the zlib package (except
+ ftgzip.c).
+
+ * include/freetype/ftgzip.h, src/gzip/ftgzip.c: New files.
+ * include/freetype/config/ftheader.h (FT_GZIP_H): New macro for
+ `ftgzip.h'.
+
+ * src/pcf/pcfdriver.c: Include FT_GZIP_H and FT_ERRORS_H.
+ (PCF_Face_Init): If normal open fails, try to open gzip stream.
+ (PCF_Face_Done): Close gzip stream.
+
+ * include/freetype/internal/pcftypes.h (PCF_Public_FaceRec),
+ src/pcf/pcf.h (PCF_FaceRec): Add `gzip_stream' and `gzip_source'.
+
+ * include/freetype/config/ftoption.h (FT_CONFIG_OPTION_USE_ZLIB):
+ New macro.
+ (T1_CONFIG_OPTION_DISABLE_HINTER, FT_CONFIG_OPTION_USE_CMAPS
+ FT_CONFIG_OPTION_NO_CONVENIENCE_FUNCS,
+ FT_CONFIG_OPTION_ALTERNATE_GLYPH_FORMATS): Removed.
+
+ (FT_EXPORT, FT_EXPORT_DEF, FT_DEBUG_LEVEL_ERROR,
+ FT_DEBUG_LEVEL_TRACE, FT_DEBUG_MEMORY): Comment out definitions so
+ that platform specific configuration file can override.
+
+ * include/freetype/internal/ftstream.h: Include FT_SYSTEM_H.
+
+2002-10-30 David Turner <david@freetype.org>
+
+ * FreeType 2.1.3rc3 released.
+
+2002-10-25 David Turner <david@freetype.org>
+
+ * include/freetype/ftcache.h (FT_POINTER_TO_ULONG): New macro.
+ (FTC_FACE_ID_HASH): Rewritten, using FT_POINTER_TO_ULONG.
+
+2002-10-22 Giuseppe Ghibò <ghibo@mandrakesoft.com>
+
+ * include/freetype/freetype.h (FT_Encoding): Fix entry for latin-2.
+
+2002-10-07 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/freetype.h (FT_Open_Face): Use `const' for `args'
+ (suggested by Graham).
+ * src/base/ftobjs.c (FT_Open_Face): Updated.
+ (ft_input_stream_new): Ditto.
+
+2002-10-05 David Turner <david@freetype.org>
+
+ Adding support for embedded bitmaps to the PFR driver, and rewriting
+ its kerning loader/handler to use all kerning pairs in a physical
+ font (and not just the first item).
+
+ * src/pfr/pfr.c: Include `pfrsbit.c'.
+ * src/pfr/pfrgload.c: Include `pfrsbit.h'.
+ * src/pfr/pfrload.c (pfr_extra_item_load_kerning_pairs): Rewritten.
+ (pfr_phy_font_done, pfr_phy_font_load): Updated.
+ * src/pfr/pfrobks.c: Include `pfrsbit.h'.
+ (pfr_face_init): Handle kerning and embedded bitmaps.
+ (pfr_slot_load): Load embedded bitmaps.
+ (PFR_KERN_INDEX): Removed.
+ (pfr_face_get_kerning): Rewritten.
+ * src/pfr/pfrsbit.c, src/pfr/pfrsbit.h: New files.
+ * src/pfr/pfrtypes.h (PFR_KernItemRec): New structure.
+ (PFR_KERN_INDEX): New macro.
+ (PFR_PhyFontRec): Add items for kerning and embedded bitmaps.
+ * src/pfr/Jamfile (_sources) [FT2_MULTI]: Add `pfrsbit'.
+
+ * src/base/ftobjs.c (FT_Load_Glyph): Don't load bitmap fonts if
+ FT_LOAD_NO_RECURSE is set.
+ Load embedded bitmaps only if FT_LOAD_NO_BITMAP isn't set.
+
+ * src/tools/docmaker/content.py, src/tools/docmaker/sources.py,
+ src/tools/docmaker/tohtml.py: Fixing a few nasty bugs.
+
+ * src/sfnt/ttcmap0.c (tt_cmap4_validate): The validator for format 4
+ sub-tables is now capable of dealing with invalid `length' fields at
+ the start of the sub-table. This allows fonts like `mg______.ttf'
+ (i.e. Marriage) to return accurate charmaps.
+
+ * docs/CHANGES: Updated.
+
+2002-10-05 Werner Lemberg <wl@gnu.org>
+
+ * src/smooth/ftgrays.c (SUBPIXELS): Add cast to `TPos'.
+ Update all callers.
+ (TRUNC): Add cast to `TCoord'.
+ Update all callers.
+ (TRaster): Use `TPos' for min_ex, max_ex, min_ey, max_ey, and
+ last_ey.
+ Update all casts.
+ (gray_render_line): Fix casts for `p' and `first'.
+
+2002-10-02 Detlef Würkner <TetiSoft@apg.lahn.de>
+
+ * src/bdf/bdflib.c (bdf_load_font): Allocate the _bdf_parse_t
+ structure with FT_ALLOC instead of using the stack.
+
+2002-09-27 Werner Lemberg <wl@gnu.org>
+
+ * src/include/freetype/internal/tttypes.h (num_sbit_strikes,
+ num_sbit_scales): Use `FT_ULong'.
+ * src/sfnt/sfobjs.c (sfnt_load_face): Updated accordingly.
+ * src/sfnt/ttsbit.c (tt_face_set_sbit_strike): Ditto.
+ (find_sbit_image): Remove cast.
+ * src/raster/ftrend1.c (ft_raster1_render): Fix cast.
+
+2002-09-27 Wolfgang Domröse <porthos.domroese@harz.de>
+
+ * src/sfnt/ttload.c (tt_face_load_names): Use cast.
+ * src/sfnt/ttcmap.c (code_to_next2): Use long constant.
+ (code_to_index4): Use cast.
+ (code_to_index8_12): Fix cast.
+ * src/sfnt/ttcmap0.c (tt_cmap4_char_next, tt_cmap8_char_index,
+ tt_cmap12_char_index): Use cast for `result'.
+ (tt_face_build_cmaps): Use cast.
+ * src/sfnt/sfobjs.c (tt_name_entry_ascii_from_ucs4): Use cast for
+ `code'.
+ (sfnt_load_face): Use FT_Int32 for `flags'.
+
+ * src/smooth/ftgrays.c (gray_render_scanline, gray_render_line,
+ gray_compute_cbox, gray_convert_glyph, gray_raster_reset): Add casts
+ to `TCoord' and `int'.
+ More 16bit fixes.
+ s/FT_Pos/TPos/.
+ * src/smooth/ftsmooth.c (ft_smooth_render_generic): Add casts.
+
+2002-09-26 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/ttpost.c (load_post_names, tt_face_free_ps_names,
+ tt_face_get_ps_name): Replace switch statement with if clauses to
+ make it more portable.
+
+ * src/cff/cffobjs.c (cff_face_init): Ditto.
+
+ * include/freetype/ftmodule.h (FT_Module_Class): Use `FT_Long' for
+ `module_size'.
+ * include/freetype/ftrender.h (FT_Glyph_Class_): Use `FT_Long' for
+ `glyph_size'.
+
+ * src/base/ftobjs.c (FT_Render_Glyph): Change second parameter to
+ `FT_Render_Mode'.
+ (FT_Render_Glyph_Internal): Change third parameter to
+ `FT_Render_Mode'.
+ * src/base/ftglyph.c (FT_Glyph_To_Bitmap): Change second parameter
+ to `FT_Render_Mode'.
+
+ * src/raster/ftrend1.c (ft_raster1_render): Change third parameter
+ to `FT_Render_Mode'.
+ * src/smooth/ftsmooth.c (ft_smooth_render, ft_smooth_render_lcd,
+ ft_smooth_render_lcd_v): Ditto.
+ (ft_smooth_render_generic): Change third and fifth parameter to
+ `FT_Render_Mode'.
+
+ * include/freetype/freetype.h, include/freetype/internal/ftobjs.h,
+ include/freetype/ftglyph.h: Updated.
+
+ * src/cff/cffdrivr.c (Load_Glyph), src/pcf/pcfdriver.c
+ (PCF_Glyph_Load), src/pfr/pfrobjs.c (pfr_slot_load),
+ src/winfonts/winfnt.c (FNT_Load_Glyph), src/t42/t42objs.c
+ (T42_GlyphSlot_Load), src/bdf/bdfdrivr.c (BDF_Glyph_Load): Change
+ fourth parameter to `FT_Int32'.
+
+ * src/pfr/pfrobjs.c (pfr_face_init): Add two missing parameters
+ and declare them as unused.
+
+ * src/cid/cidparse.h (CID_Parser): Use FT_Long for `postscript_len'.
+
+ * src/psnames/psnames.h (PS_Unicode_Value_Func): Change return
+ value to FT_UInt32.
+ * src/psnames/psmodule.c (ps_unicode_value, ps_build_unicode_table):
+ Updated accordingly.
+
+2002-09-26 Wolfgang Domröse <porthos.domroese@harz.de>
+
+ * src/cff/cffdrivr.c (Get_Kerning): Use FT_Long for `middle'.
+ (cff_get_glyph_name): Use cast for result of ft_strlen.
+ * src/cff/cffparse.c (cff_parse_real): User cast for assigning
+ `exp'.
+ * src/cff/cffload.c (cff_index_get_pointers): Use FT_ULong for
+ some local variables.
+ (cff_charset_load, cff_encoding_load): Use casts to FT_UInt for some
+ switch statements.
+ (cff_font_load): Use cast in call to CFF_Load_FD_Select.
+ * src/cff/cffobjs.c (cff_size_init): Use more casts.
+ (cff_face_init): Use FT_Int32 for `flags'.
+ * src/cff/cffgload.c (cff_operator_seac): Use cast for assigning
+ `adx' and `ady'.
+ (cff_decoder_parse_charstrings): Use FT_ULong for third parameter.
+ Use more casts.
+ * src/cff/cffcmap.c (cff_cmap_unicode_init): Use cast for `count'.
+
+ * src/cid/cidload.c (cid_read_subrs): Use FT_ULong for `len'.
+ * src/cid/cidgload.c (cid_load_glyph): Add missing cast for
+ `cid_get_offset'.
+
+ * src/psaux/t1decode.c (t1_decoder_parse_charstrings) <18>: Use
+ cast for `num_points'.
+ (t1_decoder_init): Use cast for assigning `decoder->num_glyphs'.
+
+ * src/base/ftdebug.c (ft_debug_init): Use FT_Int.
+ * include/freetype/internal/ftdriver.h (FT_Slot_LoadFunc): Use
+ `FT_Int32' for fourth parameter.
+ * src/base/ftobjs.c (open_face): Use cast for calling
+ clazz->init_face.
+
+ * src/raster/ftraster.c (Set_High_Precision): Use `1' instead of
+ `1L'.
+ (Finalize_Profile_Table, Line_Up, ft_black_init): Use casts.
+ * src/raster/ftrend1.c (ft_raster1_render): Ditto.
+
+ * src/sfnt/sfnt_dir_check: Compare `magic' with unsigned long
+ constant.
+
+2002-09-26 Detlef Würkner <TetiSoft@apg.lahn.de>
+
+ * builds/amiga/include/freetype/config/ftmodule.h: Updated.
+
+2002-09-25 David Turner <david@freetype.org>
+
+ * src/autohint/ahtypes.h (AH_HINT_METRICS): Disabling metrics
+ hinting in the auto-hinter. This produces much better anti-aliased
+ text.
+
+ * docs/CHANGES: Updating the changes documentation.
+
+2002-09-25 Anthony Fok <anthony@thizlinux.com>
+
+ * src/sfnt/ttcmap0.c (tt_cmap4_validate, tt_cmap4_char_index,
+ tt_cmap4_char_next): Added support for opens___.ttf (it contains a
+ charmap that uses offset=0xFFFFU instead of 0x0000 to indicate a
+ missing glyph).
+
+2002-09-21 Wolfgang Domröse <porthos.domroese@harz.de>
+
+ * src/truetype/ttdriver.c (Load_Glyph): Fourth parameter must be
+ FT_Int32.
+ * src/truetype/ttgload.c, src/truetype/ttgload.h (TT_Load_Glyph):
+ Ditto.
+
+2002-09-19 Wolfgang Domröse <porthos.domroese@harz.de>
+
+ More 16bit fixes.
+
+ * src/autohint/ahglobal.c (sort_values): Use FT_Pos for `swap'.
+ (ah_hinter_compute_widths): Use FT_Pos for `dist'.
+ Use AH_MAX_WIDTHS.
+ * src/autohint/ahglyph.c (ah_outline_scale_blue_edges): Use FT_Pos
+ for `delta'.
+ (ah_outline_compute_edges): Replace some ints with FT_Int and
+ FT_Pos.
+ (ah_test_extrema): Clean up code.
+ (ah_get_orientation): Use 4 FT_Int variables instead of FT_BBox to
+ hold indices.
+ * src/autohint/ahtypes.h (AH_SegmentRec): Change type of `score'
+ to FT_Pos.
+
+2002-09-19 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/config.guess, builds/unix/config.sub: Updated to
+ recent versions.
+
+2002-09-18 David Turner <david@freetype.org>
+
+ * src/base/ftobjs.c (FT_Library_Version): Bugfix.
+
+ * FreeType 2.1.3rc2 (release candidate 2) is released!
+
+2002-09-17 David Turner <david@freetype.org>
+
+ * include/freetype/freetype.h, include/freetype/ftimage.h,
+ include/freetype/ftstroker.h, include/freetype/ftsysio.h,
+ include/freetype/ftsysmem.h, include/freetype/ttnameid.h: Updating
+ the in-source documentation.
+
+ * src/tools/docmaker/tohtml.py: Updating the HTML formatter in the
+ DocMaker tool.
+
+ * src/tools/docmaker.py: Removed.
+
+2002-09-17 Werner Lemberg <wl@gnu.org>
+
+ More 16bit fixes.
+
+ * src/psaux/psobjs.c (reallocate_t1_table): Use FT_Long for
+ second parameter.
+
+2002-09-16 Werner Lemberg <wl@gnu.org>
+
+ 16bit fixes from Wolfgang Domröse.
+
+ * src/type1/t1parse.h (T1_ParserRec): Change type of `base_len'
+ and `private_len' to FT_Long.
+ * src/type1/t1parse.c (T1_Get_Private_Dict): Remove cast for
+ `private_len'.
+ * src/type1/t1load.c: Use FT_Int cast for most calls of T1_ToInt.
+ Use FT_PtrDist where appropriate.
+ (parse_encoding): Use FT_Long for `count' and `n'.
+ (read_binary_data): Use FT_Long* for second parameter.
+ * src/type1/t1afm.c (afm_atoindex): Use FT_PtrDist.
+
+ * src/cache/ftcsbits.c (ftc_sbit_node_load): Remove unused label.
+ * src/pshinter/pshalgo3.c (psh3_hint_align): Remove unused variable.
+
+2002-09-14 Werner Lemberg <wl@gnu.org>
+
+ Making ftgrays.c compile stand-alone again.
+
+ * include/freetype/ftimage.h: Include ft2build.h only if _STANDALONE_
+ isn't defined.
+ * src/smooth/ftgrays.c [_STANDALONE_]: Define ft_memset,
+ FT_BEGIN_HEADER, FT_END_HEADER.
+ (FT_MEM_ZERO): Define.
+ (TRaster) [GRAYS_USE_GAMMA]: Use `unsigned char' instead of FT_Byte.
+ (gray_render_span, gray_init_gamma): Don't use `FT_UInt'.
+ Don't cast with `FT_Byte'.
+ (grays_init_gamma): Don't use `FT_UInt'.
+
+2002-09-14 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftinit.c (FT_Add_Default_Modules): Improve error message.
+ * src/pcf/pcfdriver.c (PCF_Face_Done): Improve tracing message.
+ * include/freetype/config/ftoption.h (FT_MAX_MODULES): Increased
+ to 32.
+
+2002-09-10 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/configure.ac (version_info): Set to 9:2:3.
+ * builds/unix/configure: Regenerated.
+ * docs/VERSION.DLL: Updated.
+
+2002-09-09 David Turner <david@freetype.org>
+
+ * src/pshinter/pshalgo2.c (psh2_glyph_find_strong_points),
+ src/pshinter/pshalgo3.c (psh3_glyph_find_strong_points): Adding fix
+ to prevent seg fault when hints are provided in an empty glyph.
+
+ * src/cache/ftccache.i (GEN_CACHE_LOOKUP) [FT_DEBUG_LEVEL_ERROR]:
+ Removed conditional code. This fixes a bug that prevented
+ compilation in debug mode of template instantiation.
+
+ * include/freetype/ftimage.h: Removed incorrect `zft_' definitions
+ and updated constants documentation comments.
+
+ * src/cff/cffparse.c (cff_parser_run): Fixed the CFF table loader.
+ It didn't accept empty arrays, and this prevented the loading of
+ certain fonts.
+
+ * include/freetype/freetype.h (FT_FaceRec): Updating documentation
+ comment. The `descender' value is always *negative*, not positive.
+
+2002-09-09 Owen Taylor <owen@redhat.com>
+
+ * src/pcf/pcfdriver.c (PCF_Glyph_Load): Fixing incorrect computation
+ of bitmap metrics.
+
+2002-09-08 David Turner <david@freetype.org>
+
+ Various updates to correctly support sub-pixel rendering.
+
+ * include/freetype/config/ftmodule.h: Add two renderers for LCD.
+
+ * src/base/ftobjs.c (FT_Load_Glyph): Updated.
+
+ * src/smooth/ftsmooth.c (ft_smooth_render_lcd,
+ ft_smooth_render_lcd_v): Set FT_PIXEL_MODE_LCD and
+ FT_PIXEL_MODE_LCD_V, respectively.
+
+ * include/freetype/cache/ftcimage.h (FTC_ImageTypeRec): New
+ structure.
+ Updated all users.
+ (FTC_ImageDesc): Removed.
+ (FTC_ImageCache_Lookup): Second parameter is now of type
+ `FTC_ImageType'.
+ Updated all users.
+ (FTC_IMAGE_DESC_COMPARE): Updated and renamed to...
+ (FTC_IMAGE_TYPE_COMPARE): This.
+ (FTC_IMAGE_DESC_HASH): Updated and renamed to...
+ (FTC_IMAGE_TYPE_HASH): This.
+
+ * include/freetype/cache/ftcsbits.h (FTC_SBitRec): Field `num_grays'
+ replaced with `max_grays'.
+ `pitch' is now FT_Short.
+ (FTC_SBitCache_Lookup): Second parameter is now of type
+ `FTC_ImageType'.
+ Updated all users.
+
+ * src/cache/ftcimage.c (FTC_ImageQueryRec, FTC_ImageFamilyRec):
+ Updated.
+ (ftc_image_node_init): Updated.
+ Moved code to convert type flags to load flags to...
+ (FTC_Image_Cache_Lookup): This function.
+ (ftc_image_family_init): Updated.
+
+ * src/cache/ftcsbit.c (FTC_SBitQueryRec, FTC_SBitFamilyRec):
+ Updated.
+ (ftc_sbit_node_load): Updated.
+ Moved code to convert type flags to load flags to...
+ (FTC_SBitCache_Lookup): This function.
+
+ * src/autohint/ahtypes.h (AH_HinterRec): Replace `no_*_hints' with
+ `do_*_snapping'.
+ Update all users (with negation).
+ * src/autohint/ahhint.c (ah_compute_stem_width): Fix threshold for
+ `dist' for `delta' < 40.
+
+ * src/pshinter/pshalgo3.h (PSH3_GlyphRec): Replace `no_*_hints' with
+ `do_*_snapping'.
+ Update all users (with negation).
+ * src/pshinter/pshalgo3.c (psh3_dimension_quantize_len): New
+ function.
+ (psh3_hint_align): Use it.
+ Improve hinting code.
+ [STRONGER]: Removed.
+ (STRONGER): Removed.
+
+ * include/freetype/freetype.h (FT_Set_Hint_Flags, FT_HINT_*):
+ Removed.
+
+2002-09-05 Werner Lemberg <wl@gnu.org>
+
+ * src/cid/cidobjs.c (CID_Size_Init): Renamed to...
+ (cid_size_init): This.
+ * src/psaux/psobjs.c (T1_Builder_Add_Point1): Renamed to...
+ (t1_builder_add_point1): This.
+
+ Updated all affected code.
+
+ * src/pshinter/pshalgo3.c (psh3_hint_align): Fix compiler warnings.
+ * src/type1/t1gload.c (T1_Compute_Max_Advance): Ditto.
+
+2002-09-04 David Turner <david@freetype.org>
+
+ * include/freetype/freetype.h: Corrected the definition of
+ ft_encoding_symbol to be FT_ENCODING_MS_SYMBOL (instead of
+ the erroneous FT_ENCODING_SYMBOL).
+
+ * builds/unix/unix-def.in (datadir): Initialize it (thanks to
+ Anthony Fok).
+
+2002-08-29 David Turner <david@freetype.org>
+
+ Slight modification to the Postscript hinter to slightly increase
+ the contrast of smooth hinting. This is very similar to what the
+ auto-hinter does when it comes to stem width computations. However,
+ it produces better results with well-hinted fonts.
+
+ * include/freetype/internal/psaux.h (T1_Decoder_FuncsRec): Add hint
+ mode to `init' member function.
+ (T1_DecoderRec): Add hint mode.
+ * include/freetype/internal/pshints (T1_Hints_ApplyFunc,
+ T2_Hints_ApplyFunc): Pass `hint_mode', not `hint_flags'.
+ * src/psaux/t1decode.c (t1_decoder_init): Add hint mode argument.
+ * src/pshinter/pshalgo1.c (ps1_hints_apply): Pass hint mode, not
+ hint flags.
+ * src/pshinter/pshalgo2.c (ps2_hints_apply): Ditto.
+ * src/pshinter/pshalgo3.c (ps3_hints_apply): Ditto.
+ (STRONGER): New macro.
+ (psh3_hint_align, psh3_hint_table_align_hints): Pass `glyph' instead
+ of `hint_flags'.
+ Implement announced changes.
+ * src/pshinter/pshalgo3.h (PSH3_GlyphRec): Add flags to control
+ vertical and horizontal hints and snapping.
+
+ * README, docs/CHANGES: Updating for the 2.1.3 release.
+
+2002-08-27 David Turner <david@freetype.org>
+
+ * Massive re-formatting changes to many, many source files. I don't
+ want to list them all here. The operations performed were all
+ logical transformations of the sources:
+
+ - trying to convert all enums and constants to CAPITALIZED_STYLE,
+ #with define definitions like
+
+ #define my_old_constants MY_NEW_CONSTANT
+
+ - big, big update of the documentation comments
+
+ * include/freetype/freetype.h, src/base/ftobjs.c,
+ src/smooth/ftsmooth.c, include/freetype/ftimage.h: Adding support
+ for LCD-optimized rendering though the new constants/enums:
+
+ FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
+ FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
+
+ This is still work in progress, don't expect everything to work
+ correctly though most of the features have been implemented.
+
+ * Adding new FT_LOAD_XXX flags, used to specify both hinting and
+ rendering targets:
+
+ FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
+ FT_LOAD_TARGET_MONO :: monochrome bitmaps
+ FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated
+ hinting & rendering
+ FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated
+ hinting & rendering
+
+ Note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
+ behaviour of the font engine is _unchanged_.
+
+ * include/freetype/ftimage.h
+ (FT_Outline_{Move,Line,Conic,Cubic}To_Func): Renamed to...
+ (FT_Outline_{Move,Line,Conic,Cubic}ToFunc): This.
+ (FT_Raster_Span_Func): Renamed to ...
+ (FT_SpanFunc): This.
+ (FT_Raster_{New,Done,Reset,Set_Mode,Render}_Func): Renamed to ...
+ (FT_Raster_{New,Done,Reset,SetMode,Render}Func}: This.
+
+ Updated all affected code.
+
+ * include/freetype/ftrender.h
+ (FT_Glyph_{Init,Done,Transform,BBox,Copy,Prepare}_Func): Renamed
+ to ...
+ (FT_Glyph_{Init,Done,Transform,GetBBox,Copy,Prepare}Func): This.
+ (FTRenderer_{render,transform,getCBox,setMode}): Renamed to ...
+ (FT_Renderer_{RenderFunc,TransformFunc,GetCBoxFunc,SeteModeFunc}):
+ This.
+
+ Updated all affected code.
+
+ * src/autohint/ahtypes.h (AH_Point, AH_Segment, AH_Edge, AH_Globals,
+ AH_Face_Globals, AH_Outline, AH_Hinter): These typedefs are now
+ pointers to the corresponding `*Rec' structures. All source files
+ have been updated accordingly.
+
+ * src/cff/cffgload.c (cff_decoder_init): Add hint mode as parameter.
+ * src/cff/cffgload.h (CFF_Decoder): Add `hint_mode' element.
+
+ * src/cid/cidgload.c (CID_Compute_Max_Advance): Renamed to...
+ (cid_face_compute_max_advance): This.
+ (CID_Load_Glyph): Renamed to...
+ (cid_slot_load_glyph): This.
+ * src/cid/cidload.c (CID_Open_Face): Renamed to...
+ (cid_face_open): This.
+ * src/cid/cidobjs.c (CID_GlyphSlot_{Done,Init}): Renamed to...
+ (cid_slot_{done,init}): This.
+ (CID_Size_{Get_Globals_Funcs,Done,Reset): Renamed to...
+ (cid_size_{get_globals_funcs,done,reset): This.
+ (CID_Face_{Done,Init}): Renamed to...
+ (cid_face_{done,init}): This.
+ (CID_Driver_{Done,Init}: Renamed to...
+ (cid_driver_{done,init}: This.
+ * src/cid/cidparse.c (CID_{New,Done}_Parser): Renamed to...
+ (cid_parser_{new,done}): This.
+ * src/cid/cidparse.h (CID_Skip_{Spaces,Alpha}): Renamed to...
+ (cid_parser_skip_{spaces,alpha}): This.
+ (CID_To{Int,Fixed,CoordArray,FixedArray,Token,TokenArray}): Renamed
+ to...
+ (cid_parser_to_{int,fixed,coord_array,fixed_array,token,token_array}):
+ This.
+ (CID_Load_{Field,Field_Table): Renamed to...
+ (cid_parser_load_{field,field_table}): This.
+ * src/cid/cidriver.c (CID_Get_Interface): Renamed to...
+ (cid_get_interface): This.
+
+ Updated all affected code.
+
+ * src/psaux/psobjs.c (PS_Table_*): Renamed to...
+ (ps_table_*): This.
+ (T1_Builder_*): Renamed to...
+ (t1_builder_*): This.
+ * src/psaux/t1decode.c (T1_Decoder_*): Renamed to...
+ (t1_decoder_*): This.
+
+ * src/psnames/psmodule.c (PS_*): Renamed to...
+ (ps_*): This.
+
+ Updated all affected code.
+
+ * src/sfnt/sfdriver (SFNT_Get_Interface): Renamed to...
+ (sfnt_get_interface): This.
+ * src/sfnt/sfobjs.c (SFNT_*): Renamed to...
+ (sfnt_*): This.
+ * src/sfnt/ttcmap.c (TT_CharMap_{Load,Free}): Renamed to...
+ (tt_face_{load,free}_charmap): This.
+ * src/sfnt/ttcmap0.c (TT_Build_CMaps): Renamed to...
+ (tt_face_build_cmaps): This.
+ * src/sfnt/ttload.c (TT_*): Renamed to...
+ (tt_face_*): This.
+ * src/sfnt/ttpost.c (TT_Post_Default_Names): Renamed to...
+ (tt_post_default_names): This.
+ (Load_*): Renamed to...
+ (load_*): This.
+ (TT_*): Renamed to...
+ (tt_face_*): This.
+ * src/sfnt/ttsbit.c (TT_*): Renamed to...
+ (tt_face_*): This.
+ ({Find,Load,Crop}_*): Renamed to...
+ ({find,load,crop}_*): This.
+
+ Updated all affected code.
+
+ * src/smooth/ftsmooth.c (ft_smooth_render): Renamed to...
+ (ft_smooth_render_generic): This.
+ Make function more generic by adding vertical and horizontal scaling
+ factors.
+ (ft_smooth_render, ft_smooth_render_lcd, ft_smooth_render_lcd_v):
+ New functions.
+
+ (ft_smooth_locd_renderer_class, ft_smooth_lcdv_renderer_class): New
+ classes.
+
+ * src/truetype/ttobjs.c (TT_{Done,New}_GlyphZone): Renamed to...
+ (tt_glyphzone_{done,new}): This.
+ (TT_{Face,Size,Driver}_*): Renamed to...
+ (tt_{face,size,driver}_*): This.
+ * src/truetype/ttpload.c (TT_Load_Locations): Renamed to...
+ (tt_face_load_loca): This.
+ (TT_Load_Programs): Renamed to...
+ (tt_face_load_fpgm): This.
+ (TT_*): Renamed to...
+ (tt_face_*): This.
+
+2002-08-27 Werner Lemberg <wl@gnu.org>
+
+ * docs/VERSION.DLL: New file.
+
+2002-08-23 Graham Asher <graham.asher@btinternet.com>
+
+ * src/cff/cffgload.c (cff_operator_seac)
+ [FT_CONFIG_OPTION_INCREMENTAL]: Incremental fonts (actually not
+ incremental in the case of CFF but just using callbacks to get glyph
+ recipes) pass the character code, not the glyph index, to the
+ get_glyph_data function; they have no valid charset table.
+
+ * src/cff/cffload.c (cff_font_load): Removed special cases for
+ FT_CONFIG_OPTION_INCREMENTAL, which are no longer necessary; CFF
+ fonts provided via the incremental interface now have to conform
+ more closely to the CFF font format.
+
+ * src/cff/cffload.h (cff_font_load): Removed argument now unneeded.
+
+ * src/cff/cffobjs.c (cff_face_init): Changed call to cff_font_load
+ to conform with new signature.
+
+2002-08-22 David Turner <david@freetype.org>
+
+ * src/base/ftobject.c, src/base/ftsynth.c, src/base/ftstroker.c,
+ src/bdf/bdfdrivr.c: Removed compiler warnings.
+
+2002-08-21 Werner Lemberg <wl@gnu.org>
+
+ * src/pshinter/pshalgo3.c (psh3_glyph_compute_inflections,
+ psh3_glyph_compute_extrema, psh3_hint_table_find_strong_point): Fix
+ compiler warnings and resolve shadowing of local variables.
+
+2002-08-21 David Turner <david@freetype.org>
+
+ The automatic and Postscript hinter now automatically detect
+ inflection points in glyph outlines and treats them specially. This
+ is very useful to prevent nasty effect like the disappearing
+ diagonals of `S' and `s' in many, many fonts.
+
+ * src/autohint/ahtypes.h (ah_flag_inflection): New macro.
+ * src/autohint/ahangles.c (ah_angle_diff): New function.
+ * src/autohint/ahangles.h: Updated.
+ * src/autohint/ahglyph.c (ah_outline_compute_inflections): New
+ function.
+ (ah_outline_detect_features): Use it.
+ * src/autohint/ahhint.c (ah_hinter_align_strong_points)
+ [!AH_OPTION_NO_WEAK_INTERPOLATION]: Handle inflection.
+
+ * src/tools/docmaker/docmaker.py, src/tools/docmaker/utils.py,
+ src/tools/docmaker/tohtml.py: Updating the DocMaker tool.
+
+ * include/freetype/freetype.h: Changing the type of the `load_flags'
+ parameter from `FT_Int' to `FT_Int32', this in order to support more
+ options. This should only break binary and/or source compatibility
+ on 16-bit platforms (Atari?).
+ (FT_LOAD_NO_AUTOHINT): New macro.
+
+ * src/base/ftobjs.c (FT_Load_Glyph): Updated.
+ Handle FT_LOAD_NO_AUTOHINT.
+ (FT_Load_Char): Updated.
+
+ * src/pshinter/pshalgo3.c, src/base/ftobjs.c, src/base/ftobject.c,
+ src/autohint/ahglyph.c, include/freetype/freetype.h: Fixing typos
+ and removing compiler warnings.
+
+2002-08-20 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttgload.c (TT_Get_Metrics): Add guard for k = 0.
+
+2002-08-20 David Turner <david@freetype.org>
+
+ * src/pshinter/pshalgo1.c, src/pshinter/pshalgo2.c,
+ src/pshinter/pshglob.c, src/pshinter/pshrec.c,
+ src/autohint/ahmodule.c [DEBUG_HINTER]: Removing compiler warnings
+ (only used in development builds anyway).
+
+ Improve support of local extrema and stem edge points.
+
+ * src/pshinter/pshalgo3.h (PSH3_Hint_TableRec): Use PSH3_ZoneRec
+ for `zones'.
+ (PSH3_DIR_UP, PSH3_DIR_DOWN): Exchange values.
+ (PSH3_DIR_HORIZONTAL, PSH3_DIR_VERTICAL): New macros.
+ (PSH3_DIR_COMPARE, PSH3_DIR_IS_HORIZONTAL, PSH3_IS_VERTICAL): New
+ macros.
+ (PSH3_POINT_INFLEX): New enum.
+ (psh3_point_{is,set}_{off,inflex}): New macros.
+ (PSH3_POINT_{EXTREMUM,POSITIVE,NEGATIVE,EDGE_MIN,EDGE_MAX): New
+ enum values.
+ (psh3_point_{is,set}_{extremum,positive,negative,edge_min,edge_max}):
+ New macros.
+ (PSH3_PointRec): New members `flags2' and `org_v'.
+ (PSH3_POINT_EQUAL_ARG, PSH3_POINT_ANGLE): New macros.
+
+ * src/pshinter/pshalgo3.c [DEBUG_HINTER]: Removing compiler
+ warnings.
+ (COMPUTE_INFLEXS): New macro.
+ (psh3_hint_align): Simplify some basic arithmetic computations.
+ (psh3_point_is_extremum): Removed.
+ (psh3_glyph_compute_inflections) [COMPUTE_INFLEXS]: New function.
+ (psh3_glyph_init) [COMPUTE_INFLEXS]: Use it.
+ (psh3_glyph_compute_extrema): New function.
+ (PSH3_STRONG_THRESHOLD): Increased to 30.
+ (psh3_hint_table_find_strong_point): Improved.
+ (psh3_glyph_find_strong_points,
+ psh3_glyph_interpolate_strong_points): Updated.
+ (psh3_hints_apply): Use psh3_glyph_compute_extrema.
+
+ * test/gview.c (draw_ps3_hint, ps3_draw_control_points): New
+ functions.
+ Other small updates.
+
+ * Jamfile: Small updates.
+
+2002-08-18 Arkadiusz Miskiewicz <misiek@pld.ORG.PL>
+
+ * builds/unix/install.mk (install, uninstall): Add $(DESTDIR) to
+ make life easier for package maintainers.
+
+2002-08-18 Werner Lemberg <wl@gnu.org>
+
+ * src/pcf/pcfdriver.c (PCF_Glyph_Load): Fix computation of
+ horiBearingX.
+ * src/bdf/bdfdrivr.c (BDF_GlyphLoad): Fix computation of
+ horiBearingY.
+
+2002-08-16 George Williams <gww@silcom.com>
+
+ Add support for Apple composite glyphs.
+
+ * include/freetype/config/ftoption.h
+ (TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED): New macro.
+
+ * src/truetype/ttgload.c (OVERLAP_COMPOUND, SCALED_COMPONENT_OFFSET,
+ UNSCALED_COMPONENT_OFFSET): New macros for additional OpenType
+ glyph loading flags.
+ (load_truetype_glyph): Implement it.
+
+2002-08-16 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cffgload.c (cff_free_glyph_data),
+ src/cff/cffload.c (cff_font_load): Use FT_UNUSED.
+
+2002-08-15 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftglyph.c (FT_Glyph_To_Bitmap): Initialize `error'.
+ * src/sfnt/sfobjs.c (SFNT_Load_Face): Fix compiler warning.
+
+2002-08-15 Graham Asher <graham.asher@btinternet.com>
+
+ Implemented the incremental font loading system for the CFF driver.
+ Tested using the GhostScript-to-FreeType bridge (under development).
+
+ * src/cff/cffgload.c (cff_get_glyph_data, cff_free_glyph_data): New
+ functions.
+ (cff_operator_seac, cff_compute_max_advance, cff_slot_load): Use
+ them.
+ * src/cff/cffload.c (cff_font_load): Add `face' parameter.
+ Load charset and encoding only if there are glyphs.
+ [FT_CONFIG_OPTION_INCREMENTAL]: Incremental fonts don't need
+ character recipes.
+ * src/cff/cffload.h, src/cff/cffobjs.c: Updated.
+
+ * src/cid/cidgload.c (cid_load_glyph)
+ [FT_CONFIG_OPTION_INCREMENTAL]: Corrected the incremental font
+ loading implementation to use the new system introduced on
+ 2002-08-01.
+
+2002-08-06 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cffcmap.c: Remove compiler warnings.
+ * src/cache/ftccache.c, src/cache/ftccache.i,
+ src/pfr/pfrload.c, src/pfr/pfrgload.c: s/index/idx/.
+ * src/cff/cffload.c: s/select/fdselect/.
+ * src/raster/ftraster.c: s/wait/waiting/.
+
+2002-08-01 Graham Asher <graham.asher@btinternet.com>
+
+ * src/type1/t1load.c (T1_Open_Face): Tolerate a face with no
+ charstrings if there is an incremental loading interface. Type 1
+ faces supplied by PostScript interpreters like GhostScript will
+ typically not provide any charstrings at load time, so this is
+ essential if they are to work.
+
+2002-08-01 Graham Asher <graham.asher@btinternet.com>
+
+ Modified incremental loading interface to be closer to David's
+ preferences. The header freetype.h is not now affected, the
+ interface is specified via an FT_Parameter, the pointer to the
+ interface is hidden in an internal part of the face record, and all
+ the definitions are in ftincrem.h.
+
+ * include/freetype/freetype.h [FT_CONFIG_OPTION_INCREMENTAL]:
+ Removed.
+ * include/freetype/internal/ftobjs.h [FT_CONFIG_OPTION_INCREMENTAL]:
+ Include FT_INCREMENTAL_H.
+ (FT_Face_InternalRec) [FT_CONFIG_OPTION_INCREMENTAL]: Add
+ `incremental_interface'.
+
+ * src/base/ftobjs.c (open_face, FT_Open_Face)
+ [FT_CONFIG_OPTION_INCREMENTAL]: Updated.
+ * src/sfnt/sfobjs.c (SFNT_Load_Face) [FT_CONFIG_OPTION_INCREMENTAL]:
+ Updated.
+
+ * src/truetype/ttgload.c (load_truetype_glyph)
+ [FT_CONFIG_OPTION_INCREMENTAL]: Updated.
+ Free loaded glyph data properly.
+ (compute_glyph_metrics, TT_Load_Glyph)
+ [FT_CONFIG_OPTION_INCREMENTAL]: Updated.
+ * src/truetype/ttobjs.c (TT_Face_Init)
+ [FT_CONFIG_OPTION_INCREMENTAL]: Updated.
+
+ * src/type1/t1gload.c (T1_Parse_Glyph_And_Get_Char_String)
+ [FT_CONFIG_OPTION_INCREMENTAL]: Updated.
+ (T1_Parse_Glyph) [FT_CONFIG_OPTION_INCREMENTAL]: Updated.
+ Free loaded glyph data properly.
+ (T1_Load_Glyph): Updated.
+ [FT_CONFIG_OPTION_INCREMENTAL]: Free loaded glyph data properly.
+
+2002-07-30 David Turner <david@freetype.org>
+
+ * include/freetype/ftincrem.h: Adding new experimental header file
+ to demonstrate a `cleaner' API to support incremental font loading.
+
+ * include/freetype/config/ftheader.h (FT_INCREMENTAL_H): New macro.
+
+ * src/tools/docmaker/*: Adding new (more advanced) version of
+ the DocMaker tool, using Python's sophisticated regexps.
+
+2002-07-28 Werner Lemberg <wl@gnu.org>
+
+ s/ft_memset/FT_MEM_SET/.
+ s/FT_MEM_SET/FT_MEM_ZERO/ where appropriate.
+
+2002-07-27 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/ttload.c (sfnt_dir_check): Make it work with TTCs.
+
+2002-07-26 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttgload.c (load_truetype_glyph)
+ [FT_CONFIG_OPTION_INCREMENTAL]: s/memset/ft_memset/.
+
+ * src/autohint/ahhint.c (ah_hint_edges_3): Fix compiler warning.
+ * src/cff/cffload.c (cff_encoding_load): Remove `memory' variable.
+ * src/cff/cffcmap.c (cff_cmap_encoding_init): Remove `psnames'
+ variable.
+ * src/truetype/ttgload.c (load_truetype_glyph): Remove statement
+ without effect.
+ * src/truetype/ttdriver (Get_Char_Index, Get_Next_Char): Removed.
+
+ * src/pshinter/pshalgo3.c (psh3_hint_table_record,
+ psh3_hint_table_init, psh3_hint_table_activate_mask): Fix error
+ message.
+
+2002-07-24 Graham Asher <graham.asher@btinternet.com>
+
+ * src/truetype/ttobjs.c: Fix for bug reported by Sven Neumann
+ [sven@gimp.org] on the FreeType development forum: `If
+ FT_CONFIG_OPTION_INCREMENTAL is undefined (this is the default), the
+ TrueType loader crashes in line 852 of src/truetype/ttgload.c when
+ it tries to access face->glyph_locations.'
+
+2002-07-18 Graham Asher <graham.asher@btinternet.com>
+
+ Added types and structures to support incremental typeface loading.
+ The FT_Incremental_Interface structure, defined in freetype.h, is
+ designed to be passed to FT_Open_Face to provide callback functions
+ to obtain glyph recipes and metrics, for fonts like those passed
+ from PostScript that do not necessarily provide all, or any, glyph
+ information, when first opened.
+
+ * include/freetype/config/ftoption.h (FT_CONFIG_OPTION_INCREMENTAL):
+ New configuration macro to enable incremental face loading. By
+ default it is not defined.
+
+ * include/freetype/freetype.h (FT_Basic_Glyph_Metrics,
+ FT_Get_Glyph_Data_Func, FT_Get_Glyph_Metrics_Func,
+ FT_Incremental_Interface_Funcs, FT_Incremental_Interface)
+ [FT_CONFIG_OPTION_INCREMENTAL]: New.
+ (FT_Open_Args, FT_FaceRec) [FT_CONFIG_OPTION_INCREMENTAL]: New field
+ `incremental_interface'.
+ (FT_Open_Flags) [FT_CONFIG_OPTION_INCREMENTAL]: New enum
+ `ft_open_incremental'.
+
+ * include/freetype/fttypes.h: Include FT_CONFIG_CONFIG_H.
+ (FT_Data): New structure to represent binary data.
+
+ * src/base/ftobjs.c (open_face) [FT_CONFIG_OPTION_INCREMENTAL]:
+ Add parameter for incremental loading.
+ (FT_Open_Face) [FT_CONFIG_OPTION_INCREMENTAL]: Use incremental
+ interface.
+
+ * src/truetype/ttgload.c (load_truetype_glyph)
+ [FT_CONFIG_OPTION_INCREMENTAL]: Added the incremental loading system
+ for the TrueType driver.
+ (compute_glyph_metrics): Return FT_Error.
+ [FT_CONFIG_OPTION_INCREMENTAL]: Check for overriding metrics.
+ (TT_Load_Glyph) [FT_CONFIG_OPTION_INCREMENTAL]: Don't look for
+ the glyph table while handling an incremental font.
+ Get glyph offset.
+
+ * src/truetype/ttobjs.c (TT_Face_Init)
+ [FT_CONFIG_OPTION_INCOREMENTAL]: Added the incremental loading
+ system for the TrueType driver.
+
+ * src/cid/cidgload.c (cid_load_glyph)
+ [FT_CONFIG_OPTION_INCREMENTAL]: Added the incremental loading system
+ for the CID driver.
+
+ * src/sfnt/sfobjs.c (SFNT_Load_Face) [FT_CONFIG_OPTION_INCREMENTAL]:
+ Changes to support incremental Type 42 fonts: Assume a font has
+ glyphs if it has an incremental interface object.
+
+ * src/type1/t1gload.c (T1_Parse_Glyph): Renamed to...
+ (T1_Parse_Glyph_And_Get_Char_String): This.
+ [FT_CONFIG_OPTION_INCREMENTAL]: Added support for incrementally
+ loaded Type 1 faces.
+ (T1_Parse_Glyph): New function.
+ (T1_Load_Glyph): Updated.
+
+2002-07-17 David Turner <david@freetype.org>
+
+ Cleaning up the cache sub-system code; linear hashing is now the
+ default.
+
+ * include/freetype/cache/ftccache.h, src/cache/ftccache.i,
+ src/cache/ftccache.c [!FTC_CACHE_USE_LINEAR_HASHING]: Removed.
+ (FTC_CACHE_USE_LINEAR_HASHING: Removed also.
+
+ FT_CONFIG_OPTION_USE_CMAPS is now the default.
+
+ * include/freetype/internal/ftdriver.h (FT_Driver_ClassRec): Remove
+ `get_char_index' and `get_next_char'.
+
+ * include/freetype/config/ftoption.h,
+ include/freetype/internal/tttypes.h, src/base/ftobjs.c,
+ src/bdf/bdfdrivr.c, src/cff/cffobjs.c, src/pcf/pcfdrivr.c,
+ src/pfr/pfrdrivr.c, src/sfnt/sfobjs.c, src/sfnt/ttcmap0.c,
+ src/sfnt/ttcmap0.h, src/sfnt/ttload.c, src/type1/t1objs.c,
+ src/type42/t42objs.c, src/winfonts/winfnt.c
+ [!FT_CONFIG_OPTION_USE_CMAPS]: Removed. The new cmap code is now
+ the default.
+
+ * src/type42/t42objs.c (T42_CMap_CharIndex, T42_CMap_CharNext):
+ Removed.
+ * src/type42/t42objs.h: Updated.
+
+ * src/cid/cidriver.c (Cid_Get_Char_Index, Cid_Get_Next_Char):
+ Removed.
+ (t1_cid_driver_class): Updated.
+ * src/truetype/ttdriver.c (tt_driver_class): Updated.
+ * src/type1/t1driver.c (Get_Char_Index, Get_Next_Char): Removed
+ (t1_driver_class): Updated.
+ * src/type42/t42drivr.c (t42_driver_class): Updated.
+
+ * src/base/ftobjs.c (open_face): Select Unicode cmap by default.
+
+ * src/sfnt/ttload.c (TT_Load_SFNT_Header): Fixed a recent bug that
+ prevented OpenType fonts to be recognized by FreeType.
+
+2002-07-11 David Turner <david@freetype.org>
+
+ Changing the SFNT loader to check for SFNT-based font files
+ differently. We now ignore the range `helper' fields and check the
+ `head' table's magic number instead.
+
+ * include/freetype/internal/tttypes.h (SFNT_HeaderRec): Add `offset'
+ field.
+
+ * src/sfnt/ttload.c (sfnt_dir_check): New function.
+ (TT_Load_SFNT_HeaderRec): Renamed to...
+ (TT_Load_SFNT_Header): This.
+ Implement new functionality.
+ * src/sfnt/ttload.h: Updated.
+ * src/sfnt/sfdriver.c (sfnt_interface): Updated.
+
+ * src/base/ftobject.c, src/base/fthash.c: Updated object sub-system
+ and dynamic hash table implementation (still experimental, don't
+ use).
+ * include/freetype/internal/fthash.h: Updated.
+ * include/freetype/internal/ftobjs.h (FT_LibraryRec): New member
+ `meta_class'.
+
+ Fixing a bug in the Type 1 loader that prevented valid font bounding
+ boxes to be loaded from multiple master fonts.
+
+ * include/freetype/t1tables.h (PS_BlendRec): Add `bboxes' field.
+
+ * include/freetype/internal/psaux.h (T1_FieldType): Add
+ `T1_FIELD_TYPE_BBOX'.
+ (T1_FieldLocation): Add `T1_FIELD_LOCATION_BBOX'.
+ (T1_FIELD_BBOX): New macro.
+
+ * src/psaux/psobjs.c (PS_Parser_LoadField): Handle T1_FIELD_TYPE_BBOX.
+ * src/type1/t1load.c (t1_allocate_blend): Create blend->bboxes.
+ (T1_Done_Blend): Free blend->bboxes.
+ (t1_load_keyword): Handle T1_FIELD_LOCATION_BBOX.
+ (parse_font_bbox): Commented out.
+ (t1_keywords): Comment out `parse_font_bbox'.
+ * src/type1/t1tokens.h: Define `FontBBox' field.
+
+2002-07-10 David Turner <david@freetype.org>
+
+ * src/cff/cffobjs.c: Small fix to select the Unicode charmap by
+ default when needed.
+ Small fix to allow OpenType fonts to support Adobe charmaps when
+ needed.
+
+ * src/cff/cffcmap.c, src/cff/cffcmap.h: New files to support
+ charmaps for CFF fonts.
+
+ * src/cff/cff.c, src/cff/Jamfile, src/cff/rules.mk: Updated.
+
+ * include/freetype/internal/cfftypes.h (CFF_EncodingRec): Use
+ fixed-length arrays for `sids' and `codes'. Add `count' member.
+ (CFF_FontRec): Add `psnames' member.
+
+ * src/cff/cffdrivr.c, src/cff/cffload.c, src/cff/cffload.h,
+ src/cff/cffobjs.c, src/cff/cffobjs.h, src/cff/cffparse.c,
+ src/cffparse.h, src/cff/cffgload.c, src/cff/cffgload.h: Adding
+ support for CFF charmaps, reformatting the sources, and removing
+ some bugs in the Encoding and Charset loaders.
+ Many fonts renamed to use lowercase only:
+
+ CFF_Builder_Init -> cff_builder_init
+ CFF_Builder_Done -> cff_builder_done
+ CFF_Init_Decoder -> cff_decoder_init
+ CFF_Parse_CharStrings -> cff_decoder_parse_charstrings
+ CFF_Load_Glyph -> cff_slot_load
+ CFF_Init_Decoder -> cff_decoder_init
+ CFF_Prepare_Decoder -> cff_decoder_prepare
+ CFF_Get_Standard_Encoding -> cff_get_standard_encoding
+ CFF_Access_Element -> cff_index_access_element
+ CFF_Forget_Element -> cff_index_forget_element
+ CFF_Get_Name -> cff_index_get_name
+ CFF_Get_String -> cff_index_get_sid_string
+ CFF_Get_FD -> cff_fd_select_get
+ CFF_Done_Charset -> cff_charset_done
+ CFF_Load_Charset -> cff_charset_load
+ CFF_Done_Encoding -> cff_encoding_done
+ CFF_Load_Encoding -> cff_encoding_load
+ CFF_Done_SubFont -> cff_subfont_done
+ CFF_Load_Font -> cff_font_load
+ CFF_Done_Font -> cff_font_done
+ CFF_Size_Get_Global_Funcs -> cff_size_get_global_funcs
+ CFF_Size_Done -> cff_size_done
+ CFF_Size_Init -> cff_size_init
+ CFF_Size_Reset -> cff_size_reset
+ CFF_GlyphSlot_Done -> cff_slot_done
+ CFF_GlyphSlot_Init -> cff_slot_init
+ CFF_StrCopy -> cff_strcpy
+ CFF_Face_Init -> cff_face_init
+ CFF_Face_Done -> cff_face_done
+ CFF_Driver_Init -> cff_driver_init
+ CFF_Driver_Done -> cff_driver_done
+ CFF_Parser_Init -> cff_parser_init
+ CFF_Parser_Run -> cff_parser_run
+
+ add_point -> cff_builder_add_point
+ add_point1 -> cff_builder_add_point1
+ add_contour -> cff_builder_add_contour
+ close_contour -> cff_builder_close_contour
+ cff_explicit_index -> cff_index_get_pointers
+
+2002-07-09 Owen Taylor <owen@redhat.com>
+
+ * src/pshinter/pshglob.c (psh_globals_new): Fixed a bug that
+ prevented the hinter from using correct standard width and height
+ values, resulting in hinting bugs with certain fonts (e.g. Utopia).
+
+2002-07-07 David Turner <david@freetype.org>
+
+ * src/base/ftglyph.c (FT_Glyph_To_Bitmap): Added code to return
+ successfully when the function is called with a bitmap glyph (the
+ previous code simply returned with an error).
+
+ * docs/DEBUG.TXT: Adding debugging support documentation.
+
+ * src/base/ftdebug.c (ft_debug_init), builds/win32/ftdebug.c
+ (ft_debug_init), builds/amiga/src/ftdebug.c (ft_debug_init): Changed
+ the syntax of the FT2_DEBUG environment variable used to control
+ debugging output (i.e. logging and error messages). It must now
+ look like:
+
+ any:6 memory:4 io:3 or
+ any:6,memory:4,io:3 or
+ any:6;memory:4;io:3
+
+2002-07-07 Owen Taylor <owen@redhat.com>
+
+ * src/pshinter/pshglob.c (psh_blues_snap_stem): Adding support for
+ blue fuzz.
+ * src/pshinter/pshglob.h (PSH_BluesRec): Add `blue_fuzz' field.
+ * src/type1/t1load.c (T1_Open_Face): Initialize `blue_fuzz'.
+
+ Adding support for hinter-specific bit flags, and the new
+ FT_Set_Hint_Flags high-level API.
+
+ * include/freetype/freetype.h (FT_Set_Hint_Flags): New function.
+ (FT_HINT_NO_INTEGER_STEM, FT_HINT_NO_HSTEM_ALIGN,
+ FT_HINT_NO_VSTEM_ALIGN): New macros.
+
+ * include/freetype/internal/ftobjs.h (FT_Face_InternalRec): Add
+ `hint_flags' member.
+
+ * src/base/ftobjs.c (FT_Set_Hint_Flags): New function.
+
+ * include/freetype/internal/psaux.h (T1_DecoderRec): Add `hint_flags'
+ member.
+
+ * include/freetype/internal/pshints.h (T1_Hints_ApplyFunc,
+ T2_Hints_ApplyFunc): Add parameter to pass hint flags.
+
+ * src/psaux/t1decode.c (T1_Decoder_Parse_Charstrings,
+ T1_Decoder_Init): Use decoder->hint_flags.
+ * src/cff/cffgload.h (CFF_Builder): Add `hint_flags' field.
+ * src/cff/cffgload.c (CFF_Builder_Init): Set builder->hint_flags.
+ (CFF_Parse_CharStrings): Updated.
+ * src/pshinter/pshalgo1.c (ps1_hints_apply): Add parameter to handle
+ hint flags (unused).
+ * src/pshinter/pshalgo1.h: Updated.
+ * src/pshinter/pshalgo2.c (ps2_hints_apply): Add parameter to handle
+ hint flags (unused).
+ * src/pshinter/pshalgo2.h: Updated.
+ * src/pshinter/pshalgo3.c (ps3_hints_apply): Add parameter to handle
+ hint flags.
+ * src/pshinter/pshalgo3.h: Updated.
+
+2002-07-04 David Turner <david@freetype.org>
+
+ * src/pfr/pfrobjs.c (pfr_slot_load): Fixed a small bug that returned
+ incorrect advances when the outline resolution was different from
+ the metrics resolution.
+
+ * src/autohint/ahhint.c: Removing compiler warnings.
+
+ * src/autohint/ahglyph.c: s/FT_MEM_SET/FT_ZERO/ where appropriate.
+ (ah_outline_link_segments): Slight improvements to the serif
+ detection code. More work is needed though.
+
+2002-07-03 David Turner <david@freetype.org>
+
+ Small improvements to the automatic hinter. Uneven stem-widths have
+ now disappeared and everything looks much better, even if there are
+ still issues with serifed fonts.
+
+ * src/autohint/ahtypes.h (AH_Globals): Added `stds' array.
+ * src/autohint/ahhint.c (OPTIM_STEM_SNAP): New #define.
+ (ah_snap_width): Commented out.
+ (ah_align_linked_edge): Renamed to...
+ (ah_compute_stem_width): This.
+ Don't allow uneven stem-widths.
+ (ah_align_linked_edge): New function.
+ (ah_align_serifed_edge): Don't strengthen serifs.
+ (ah_hint_edges_3, ah_hinter_scale_globals): Updated.
+
+2002-07-03 Owen Taylor <owen@redhat.com>
+
+ Adding new algorithm based on Owen Taylor's recent work.
+
+ * src/pshinter/pshalgo3.c, src/pshinter/pshalgo3.h: New files.
+ * src/pshinter/pshalgo.h: Updated.
+ Use pshalgo3 by default.
+ * src/pshinter/pshinter.c: Include pshalgo3.c.
+
+ * src/pshinter/Jamfile, src/pshinter/rules.mk: Updated.
+
+2002-07-01 Owen Taylor <owen@redhat.com>
+
+ * src/pshinter/pshalgo2.c (psh2_glyph_find_strong_points): Fix a bug
+ where, if a glyph has more than hint mask, the second mask gets
+ applied to points that should have been covered by the first mask.
+
+2002-07-01 Keith Packard <keithp@keithp.com>
+
+ * src/sfnt/ttcmap0.c (tt_cmap8_char_next, tt_cmap12_char_next):
+ Fixing the cmap 8 and 12 parsing routines.
+
+2002-07-01 David Turner <david@freetype.org>
+
+ * src/base/ftsynth.c: Include FT_TRIGONOMETRY_H.
+ (FT_Outline_Embolden): Renamed to...
+ (FT_GlyphSlot_Embolden): This.
+ Updated to new trigonometric functions.
+ (FT_Outline_Oblique): Renamed to...
+ (FT_GlyphSlot_Oblique): This.
+ (ft_norm): Removed.
+ * include/freetype/ftsynth.h: Updated.
+
+2002-06-26 David Turner <david@freetype.org>
+
+ * include/freetype/internal/ftobject.h: Updating the object
+ sub-system definitions (still experimental).
+
+ * src/base/fthash.c (ft_hash_remove): Fixing a small reallocation
+ bug.
+
+ * src/base/fttrigon.c (FT_Vector_From_Polar, FT_Angle_Diff): New
+ functions.
+ * include/freetype/fttrigon.h: Updated.
+
+
+ Adding path stroker component (work in progress).
+
+ * include/freetype/ftstroker.h, src/base/ftstroker.c: New files.
+ * src/base/Jamfile: Updated.
+
+ * include/freetype/config/ftheader.h (FT_STROKER_H): New macro.
+
+
+ * src/truetype/ttgload.c (TT_Load_Composite_Glyph),
+ src/base/ftoutln.c (FT_Vector_Transform): Fixed Werner's latest fix.
+ FT_Vector_Transform wasn't buggy, the TrueType composite loader was.
+
+2002-06-24 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/freetype.h (FREETYPE_PATCH): Set to 3.
+
+2002-06-21 David Turner <david@freetype.org>
+
+
+ * Version 2.1.2 released.
+ =========================
+
+
+2002-06-21 Roberto Alameda <ojancano@geekmail.de>.
+
+ * include/freetype/internal/t42types.h (T42_Font): Removed since
+ it is already in t42objs.h.
+ (T42_Face): Use T1_FontRec.
+
+ * src/base/fttype1.c (FT_Get_PS_Font_Info): Updated.
+ (FT_Has_PS_Glyph_Names): Check for type42 driver name also.
+ * src/type42/t42objs.h: Include FT_INTERNAL_TYPE42_TYPES_H.
+ (T42_Face): Removed since it is already in t42types.h.
+
+2002-06-21 Detlef Würkner <TetiSoft@apg.lahn.de>
+
+ * src/pfrgload.c (pfr_glyph_load_compound): Fix loading of composite
+ glyphs.
+
+2002-06-21 Sven Neumann <sven@convergence.de>
+
+ * src/prf/pfrtypes.h (PFR_KernPair): New structure.
+ (PFR_PhyFont): Use it.
+ (PFR_KernFlags): New enumeration.
+ * src/pfr/pfrload.c (pfr_extra_item_load_kerning_pairs): New
+ function.
+ (pfr_phy_font_extra_items): Use it.
+ (pfr_phy_font_done): Updated.
+ * src/pfr/pfrobjs.c (pfr_face_init): Set kerning flag conditionally.
+ (pfr_face_get_kerning): New function.
+ * src/pfr/pfrobjs.h: Updated.
+ * src/pfr/pfrdrivr.c (pfr_driver_class): Updated.
+
+2002-06-21 David Turner <david@freetype.org>
+
+ * README, docs/CHANGES: Preparing the 2.1.2 release.
+
+2002-06-19 Detlef Würkner <TetiSoft@apg.lahn.de>
+
+ * src/base/fttype1.c: Include FT_INTERNAL_TYPE42_TYPES_H.
+ (t1_face_check_cast): Removed.
+ (FT_Get_PS_Font_Info): Make it work with CID and Type 42 drivers
+ also.
+
+2002-06-19 Sebastien BARRE <http://barre.nom.fr/contact.html#email>
+
+ * src/type42/t42parse.c (t42_parse_sfnts): Fix compiler warning.
+
+2002-06-19 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftoutln.c (FT_Vector_Transform): Fix serious typo
+ (xy <-> yx).
+ * src/truetype/ttgload.c (load_truetype_glyph): Replace `|' with
+ `||' to make code easier to read.
+
+2002-06-18 Roberto Alameda <ojancano@geekmail.de>.
+
+ * src/type42/t42objs.c (t42_check_size_change): Removed.
+ (T42_Size_SetChars, T42_Size_SetPixels): Use FT_Activate_Size
+ instead.
+ (T42_GlyphSlot_Load): Remove call to t42_check_size_change.
+
+2002-06-18 Detlef Würkner <TetiSoft@apg.lahn.de>
+
+ * src/psaux/t1cmap.c (t1_cmap_custom_char_index,
+ t1_cmap_custom_char_next): Fix index computation -- indices start
+ with 0 and not with cmap->first.
+
+ Provide default charmaps.
+
+ * src/bdf/bdfdrivr.c (BDF_Face_Init), src/pcf/pcfdriver.c
+ (PCF_Face_Init), src/pfr/pfrobjs.c (pfr_face_init),
+ src/type1/t1objs (T1_Face_Init), src/winfonts/winfnt.c
+ (FNT_Face_Init): Implement it.
+
+2002-06-17 Sven Neumann <sven@gimp.org>
+
+ * src/pfr/pfrobjs.c (pfr_face_init): Fix typo.
+
+2002-06-16 Leonard Rosenthol <leonardr@lazerware.com>
+
+ Updated Win32/VC++ projects to include the new PFR driver.
+
+ * builds/win32/visualc/freetype.dsp: Updated.
+
+2002-06-16 Anthony Fok <fok@debian.org>
+
+ Install freetype2.m4.
+
+ * builds/unix/install.mk (install, uninstall): Handle it.
+
+2002-06-16 Detlef Würkner <TetiSoft@apg.lahn.de>
+
+ Same fix for PFR driver.
+
+ * src/pfr/pfrcmap.c (pfr_cmap_char_index, pfr_cmap_char_next):
+ Increase return value by 1.
+ * src/pfr/pfrobjs.c (pfr_slot_load): Decrease index by 1.
+
+2002-06-15 Detlef Würkner <TetiSoft@apg.lahn.de>
+
+ Fix glyph indices to make index zero always the undefined glyph.
+
+ * src/bdf/bdfdrivr.c (bdf_cmap_init): Don't decrease
+ cmap->num_encodings.
+ (bdf_cmap_char_index, bdf_cmap_char_next, BDF_Get_Char_Index):
+ Increase result by 1 for normal cases.
+ (BDF_Glyph_Load): Decrease index by 1.
+
+ * src/pcf/pcfdriver.c (pcf_cmap_char_index, pcf_cmap_char_next,
+ PCF_Char_Get_Index): Increase result by 1 for normal cases.
+ (PCF_Glyph_Load): Decrease index by 1.
+ * src/pcf/pcfread.c (pcf_get_encodings): Don't decrease j for
+ allocating `encoding'.
+
+ * src/base/ftobjs.c (FT_Load_Glyph, FT_Get_Glyph_Name): Fix
+ bounding tests.
+
+2002-06-14 Detlef Würkner <TetiSoft@apg.lahn.de>
+
+ Add new cmap support to BDF driver.
+
+ * src/bdf/bdfdrivr.c (BDF_CMapRec) [FT_CONFIG_OPTION_USE_CMAPS]:
+ New structure.
+ (bdf_cmap_init, bdf_cmap_done, bdf_cmap_char_index,
+ bdf_cmap_char_next) [FT_CONFIG_OPTION_USE_CMAPS]: New functions.
+ (BDF_Get_Char_Index) [!FT_CONFIG_OPTION_USE_CMAPS]: Use only
+ conditionally.
+ (BDF_Face_Init): Handle `AVERAGE_WIDTH' and `POINT_SIZE' keywords.
+ Implement new cmap handling.
+ (bdf_driver_class): Updated.
+
+2002-06-14 Werner Lemberg <wl@gnu.org>
+
+ * Makefile, configure, */*.mk, builds/unix/unix-def.in,
+ docs/CHANGES, docs/INSTALL: s/TOP/TOP_DIR/.
+
+2002-06-12 Werner Lemberg <wl@gnu.org>
+
+ * src/bdf/bdflib.c: s/FT_Short/short/ for consistency.
+
+2002-06-11 David Turner <david@freetype.org>
+
+ * builds/win32/ftdebug.c: Added a missing #endif.
+
+ * src/sfnt/ttload.c, src/bdf/bdflib.c: Removing compiler warnings.
+
+ Removed the bug in Type 42 driver that prevented un-hinted outlines
+ to be loaded.
+
+ * src/type42/t42objs.c (T42_Face_Init): Call FT_Done_Size.
+ (T42_Size_Init): Call FT_Activate_Size.
+ (t42_check_size_change): New function.
+ (T42_Size_SetChars, T42_Size_SetPixels): Use it.
+ (ft_glyphslot_clear): Replace FT_MEM_SET with FT_ZERO.
+ (T42_GlyphSlot_Load): Use t42_check_size_change.
+ Initialize more fields of `glyph'.
+
+ * builds/win32/visualc/freetype.dsp: Updated.
+
+2002-06-09 David Turner <david@freetype.org>
+
+
+ * Version 2.1.1 released.
+ =========================
+
+
+2002-06-08 Juliusz Chroboczek <jch@pps.jussieu.fr>
+
+ * include/freetype/internal/ftobjs.h, src/autohint/ahglyph.c,
+ src/base/ftobjs.c, src/sfnt/ttcmap0.c, src/smooth/ftgrays.c: Don't
+ use `setjmp', `longjmp', and `jmp_buf' but `ft_setjmp', `ft_longjmp',
+ and `ft_jmp_buf'.
+ Removed direct references to <stdio.h> and <setjmp.h> when
+ appropriate, to eventually replace them with a
+ FT_CONFIG_STANDARD_LIBRARY_H. Useful for the XFree86 Font Server
+ backend based on FT2.
+
+ * src/base/fttype1.c (FT_Has_PS_Glyph_Names): Fix return value.
+
+2002-06-08 David Turner <david@freetype.org>
+
+ * src/pcf/pcfdriver.c (pcf_cmap_char_next): Fixed a bug that caused
+ the function to return invalid values.
+
+ * src/cache/ftccache.i: Removing a typo that prevented
+ the source's compilation.
+
+ * src/cache/ftccache.c (ftc_node_hash_unlink): Fixed a
+ bug that caused nasty memory overwrites. The hash table's
+ buckets array wasn't correctly resized when shrunk.
+
+2002-06-08 Detlef Würkner <TetiSoft@apg.lahn.de>
+
+ * builds/amiga/smakefile, builds/amiga/makefile: Updated.
+
+2002-06-08 Werner Lemberg <wl@gnu.org>
+
+ * src/cache/ftccache.c (ftc_node_hash_unlink, ftc_node_hash_link)
+ [FTC_CACHE_USE_LINEAR_HASHING]: Fix returned error code.
+ Fix debugging messages.
+ * src/cache/ftccache.i (GEN_CACHE_LOOKUP): Move declaration of
+ `family' and `hash' up to make it compilable with g++.
+
+ * src/type42/t42error.h: New file.
+ * src/type42/t42drivr.c, src/type42/t42objs.c,
+ src/type42/t42parse.c: Use t42 error codes.
+ * src/type42/rules.mk: Updated.
+
+ * src/base/ftnames.c: Include FT_INTERNAL_STREAM_H.
+
+2002-06-08 David Turner <david@freetype.org>
+
+ * src/cache/ftccmap.c: GEN_CACHE_FAMILY_COMPARE,
+ GEN_CACHE_NODE_COMPARE, GEN_CACHE_LOOKUP) [FTC_CACHE_USE_INLINE]:
+ New macros.
+ (ftc_cmap_cache_lookup) [!FTC_CACHE_USE_INLINE]: Typedef to
+ ftc_cache_lookup.
+ (FTC_CMapCache_Lookup): Updated.
+
+ Adding various experimental optimizations to the cache manager.
+
+ * include/freetype/cache/ftccache.h (FTC_CACHE_USE_INLINE,
+ FTC_CACHE_USE_LINEAR_HASHING): New options.
+ (FTC_CacheRec) [FTC_CACHE_USE_LINEAR_HASHING]: New elements `p',
+ `mask', and `slack'.
+
+ * src/cache/ftccache.c (FTC_HASH_MAX_LOAD, FTC_HASH_MIN_LOAD,
+ FTC_HASH_SUB_LOAD) [FTC_CACHE_USE_LINEAR_HASHING,
+ FTC_HASH_INITIAL_SIZE]: New macros.
+ (ftc_node_mru_link, ftc_node_mru_up): Optimized.
+ (ftc_node_hash_unlink, ftc_node_hash_link)
+ [FTC_CACHE_USE_LINEAR_HASHING]: New variants.
+ (FTC_PRIMES_MIN, FTC_PRIMES_MAX, ftc_primes, ftc_prime_closest,
+ FTC_CACHE_RESIZE_TEST, ftc_cache_resize)
+ [!FTC_CACHE_USE_LINEAR_HASHING]: Define it conditionally.
+ (ftc_cache_init, ftc_cache_clear) [FTC_CACHE_USE_LINEAR_HASHING]:
+ Updated.
+ (ftc_cache_lookup) [FTC_CACHE_USE_LINEAR_HASHING]: Implement it.
+
+ * src/cache/ftccache.i: New file.
+
+ * src/cache/ftcsbits.c (GEN_CACHE_FAMILY_COMPARE,
+ GEN_CACHE_NODE_COMPARE, GEN_CACHE_LOOKUP) [FTC_CACHE_USE_INLINE]:
+ New macros.
+ (ftc_sbit_cache_lookup) [!FTC_CACHE_USE_INLINE]: Typedef to
+ ftc_cache_lookup.
+ (FTC_SBitCache_Lookup): Updated.
+
+ * src/type42/t42parse.c: Removing duplicate function.
+
+2002-06-07 Graham Asher <graham.asher@btinternet.com>
+
+ * src/base/ftobjs.c (FT_Render_Glyph_Internal): Changed definition
+ from FT_EXPORT_DEF to FT_BASE_DEF.
+
+2002-06-07 David Turner <david@freetype.org>
+
+ Fixed the bug that prevented the correct display of fonts with
+ `ftview'.
+
+ * src/type42/t42drivr.c: Split into...
+ * src/type42/t42drivr.h, src/type42/t42parse.c,
+ src/type42/t42parse.h, src/type42/t42objs.h, src/type42/t42objs.c,
+ src/type42/type42.c: New files.
+
+ (t42_get_glyph_name, t42_get_ps_name, t42_get_name_index): Use
+ `face->type1'.
+
+ (Get_Interface): Renamed to...
+ (T42_Get_Interface): This.
+ Updated.
+ (T42_Open_Face, T42_Face_Done): Updated.
+ (T42_Face_Init): Add new cmap support.
+ Updated.
+ (T42_Driver_Init, T42_Driver_Done, T42_Size_Init, T42_Size_Done,
+ T42_GlyphSlot_Init, T42_GlyphSlot_Done): Updated.
+ (Get_Char_Index, Get_Next_Char): Renamed to...
+ (T42_CMap_CharIndex, T42_CMap_CharNext): This.
+ Updated.
+ (T42_Char_Size, T42_Pixel_Size): Renamed to...
+ (T42_Size_SetChars, T42_Size_SetPixels): This.
+ (T42_Load_Glyph): Renamed to...
+ (T42_GlyphSlot_Load): This.
+
+ (t42_init_loader, t42_done_loader): Renamed to...
+ (t42_loader_init, t42_loader_done): This.
+ (T42_New_Parser, T42_Finalize_Parser): Renamed to...
+ (t42_parser_init, t42_parser_done): This.
+ (parse_dict): Renamed to...
+ (t42_parse_dict): This.
+ (is_alpha, is_space, hexval): Renamed to...
+ (t42_is_alpha, t42_is_space, t42_hexval): This.
+ (parse_font_name, parse_font_bbox, parse_font_matrix,
+ parse_encoding, parse_sfnts, parse_charstrings, parse_dict):
+ Renamed to...
+ (t42_parse_font_name, t42_parse_font_bbox, t42_parse_font_matrix,
+ t42_parse_encoding, t42_parse_sfnts, t42_parse_charstrings,
+ t42_parse_dict): This.
+ Updated.
+
+ (t42_keywords): Updated.
+
+ * src/type42/Jamfile, src/type42/descrip.mms: Updated.
+
+2002-06-03 Werner Lemberg <wl@gnu.org>
+
+ Add 8bpp support to BDF driver.
+
+ * src/bdf/bdflib.c (_bdf_parse_start): Handle 8bpp.
+ * src/bdf/bdfdrivr.c (BDF_Glyph_Load): Ditto.
+ * src/bdf/README: Updated.
+
+2002-06-02 Detlef Würkner <TetiSoft@apg.lahn.de>
+
+ * src/pfr/pfrload.c (pfr_phy_font_done): Free `blue_values' array.
+
+2002-05-29 Detlef Würkner <TetiSoft@apg.lahn.de>
+
+ * src/bdf/bdflib.c (_bdf_readstream): Allocate `buf' dynamically.
+ (_bdf_parse_glyphs): Use correct size for allocating
+ `font->unencoded'.
+ (bdf_load_font): Free array conditionally.
+ Return proper error code in case of failure.
+ * src/bdf/bdfdrivr.c (BDF_Face_Init): Make it more robust against
+ unusual fonts.
+
+2002-05-29 Werner Lemberg <wl@gnu.org>
+
+ * src/bdf/descrip.mms, src/type42/descrip.mms: New files.
+ * descrip.mms (all): Updated.
+
+ * src/bdf/bdflib.c (_bdf_parse_glyphs): Fix typo which prevented
+ compilation.
+ * src/pshglob.c (psh_blues_scale_zones): Fix compiler warning.
+
+2002-05-28 Detlef Würkner <TetiSoft@apg.lahn.de>
+
+ * builds/amiga/makefile, builds/amiga/smakefile,
+ amiga/include/freetype/config/ftmodule.h: Updated to include
+ support for BDF and Type42 drivers.
+
+ * docs/modules.txt: Updated.
+
+2005-05-28 David Turner <david@freetype.org>
+
+ * docs/CHANGES: Updating file for next release (2.1.1).
+
+ * src/bdf/bdflib.c: Removing compiler warnings.
+
+ * include/freetype/ftxf86.h, src/base/ftxf86.c: New files.
+ They provide a new API (FT_Get_X11_Font_Format) to retrieve an
+ X11-compatible string describing the font format of a given face.
+ This was put in a new optional base source file, corresponding to a
+ new public header (named FT_XFREE86_H since this function should
+ only be used within the XFree86 font server IMO).
+
+ * include/freetype/config/ftheader.h (FT_XFREE86_H): New macro (not
+ documented yet).
+
+ * src/base/fttype1.c: New file, providing two new API functions
+ (FT_Get_PS_Font_Info and FT_Has_PS_Glyph_Names).
+ * include/freetype/t1tables.h: Updated.
+
+ * src/base/Jamfile, src/base/rules.mk, src/base/descrip.mms:
+ Updating build control files for the new files `ftxf86.c' and
+ `fttype1.c' in src/base.
+
+ * src/pshinter/pshglob.c (psh_blues_scale_zones): Fixed a bug that
+ prevented family blue zones substitution from hapenning correctly.
+
+ * include/freetype/ftbdf.h FT_Get_BDF_Charset_ID): Adding
+ documentation comment.
+
+2002-05-28 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftnames.c (FT_Get_Sfnt_Name): Don't use FT_STREAM_READ_AT
+ but FT_STREAM_READ.
+ Declare `stream' variable.
+
+ * src/bdf/bdflib.c (_bdf_parse_glyphs): Replace floating point math
+ with calls to `FT_MulDiv'.
+
+2002-05-28 David Turner <david@freetype.org>
+
+ Fixing the SFNT name table loader to support various buggy fonts.
+ It now ignores empty name entries, entries with invalid pointer
+ Offsets and certain fonts containing tables with broken
+ `storageOffset' fields.
+
+ Name strings are now loaded on demand, which reduces the memory
+ requirements for a given FT_Face tremendously (for example, the name
+ table of Arial.ttf is about 10Kb and contains 70 names).
+
+ This is a temporary fix. The whole name table loader and interface
+ will be rewritten in a much more cleanly way shortly, once CSEH have
+ been introduced in the sources.
+
+ * include/freetype/internal/tttypes.h (TT_NameEntryRec): Change
+ type of `stringOffset' to FT_ULong.
+ (TT_NameTableRec): Change type of `numNameRecords' and
+ `storageOffset' to FT_UInt.
+ Replace `storage' with `stream'.
+ * src/base/ftnames.c (FT_Get_Sfnt_Name): Load name on demand.
+ * src/sfnt/sfdriver.c (get_sfnt_postscript_name): Ditto.
+ Make code more robust.
+ * src/sfnt/sfobjs.c (TT_NameEntry_ConvertFunc): New typedef.
+ (tt_face_get_name): Use it.
+ Make code more robust.
+ * src/sfnt/ttload.c (TT_Load_Names): Use `static' for arrays.
+ Handle invalid `storageOffset' data better.
+ Set length fields to zero for invalid or ignored data.
+ Remove code within FT_DEBUG_LEVEL_TRACE.
+ (TT_Free_Names): Updated.
+
+2002-05-24 Tim Mooney <enchanter@users.sourceforge.net>
+
+ * builds/unix/ft-munmap.m4: New file, extracted FT_MUNMAP_DECL and
+ FT_MUNMAP_PARAM from aclocal.m4 into here, so aclocal.m4 can be
+ rebuilt from sources. Set macro serial to 1, and use third argument
+ to AC_DEFINE for our two custom symbols, so ftconfig.in could one day
+ be rebuilt with autoheader (not recommended now, ftconfig.in is a
+ custom source file)
+
+2002-05-22 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/config/ftheader.h (FT_BEZIER_H): Removed.
+ (FT_BDF_H): New macro for accessing `ftbdf.h'.
+
+ * src/type42/t42drivr.c (hexval): Fix typo.
+
+2002-05-21 Martin Muskens <mmuskens@aurelon.com>
+
+ * src/psaux/psobjs.c (T1Radix): New function.
+ (t1_toint): Use it to handle numbers in radix format.
+
+ * src/psaux/t1decode.c (T1_Decoder_Parse_Charstrings): Add dummy
+ for undocumented, obsolete opcode 15.
+
+2002-05-21 David Turner <david@freetype.org>
+
+ * src/bdf/bdflib.c: Removed compiler warning, and changed all tables
+ to the `static const' storage specifier (instead of simply
+ `static').
+
+ * src/type42/t42drivr.c (hexval): Use more efficient code.
+ Removing compiler warnings.
+ * src/bdf/bdfdrivr.c: Removing compiler warnings.
+
+ * include/freetype/internal/ftbdf.h, src/base/ftbdf.c,
+ src/base/descrip.mms, src/base/Jamfile, src/base/rules.mk
+ (FT_Get_BDF_Charset_ID): New API to retrieve BDF-specific strings
+ from a face. This is much cleaner than accessing the internal types
+ `BDF_Public_Face' defined in FT_INTERNAL_BDF_TYPES_H.
+
+2002-05-21 Werner Lemberg <wl@gnu.org>
+
+ * src/bdf/README: Mention Microsoft's SBIT tool.
+
+ * src/cff/cffdrivr.c, src/cid/cidriver.c, src/pcf/pcfdriver.c,
+ src/truetype/ttdriver.c, src/type1/t1driver.c,
+ src/winfonts/winfnt.c, src/type42/t42drivr.c, src/bdf/bdfdrivr.c
+ [FT_CONFIG_OPTION_DYNAMIC_DRIVERS]: Completely removed. It has
+ been never used.
+
+2002-05-21 Roberto Alameda <ojancano@geekmail.de>.
+
+ * src/type42/t42drivr.c: s/T42_ENCODING_TYPE_/T1_ENCODING_TYPE_/.
+ (parse_font_matrix): Remove unnecessary code.
+ (parse_sfnts): Initialize some variables.
+ (t42_driver_class) [TT_CONFIG_OPTION_BYTECODE_INTERPRETER]: Use
+ ft_module_driver_has_hinter conditionally.
+ Moved some type 42 specific structure definitions to...
+ * include/freetype/internal/t42types.h: New file.
+ * include/freetype/internal/internal.h (FT_INTERNAL_T42_TYPES_H):
+ New macro.
+
+2002-05-20 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/cache/ftcsbits.h (FTC_SBit): Added a new field
+ `num_grays' for specifying the number of used gray levels.
+ * src/cache/ftcsbits.c (ftc_sbit_node_load): Initialize it.
+
+2002-05-19 Werner Lemberg <wl@gnu.org>
+
+ Adding a driver for BDF fonts written by Francesco Zappa Nardelli
+ <Francesco.Zappa.Nardelli@ens.fr>. Heavily modified by me to
+ better adapt it to FreeType, removing unneeded stuff. Additionally,
+ it now supports Mark Leisher's BDF extension for anti-aliased
+ bitmap glyphs with 2 and 4 bpp.
+
+ * src/bdf/*: New driver.
+ * include/freetype/internal/bdftypes.h: New file.
+ * include/freetype/internal/fttrace.h: Added BDF driver components.
+ * include/freetype/fterrdef.h: Added error codes for BDF driver.
+ * include/freetype/config/ftmodule.h, src/Jamfile: Updated.
+ * include/freetype/internal/internal.h (FT_INTERNAL_BDF_TYPES_H):
+ New macro.
+
+ * include/freetype/config/ftstdlib.h (ft_sprintf): New alias for
+ sprintf.
+
+2002-05-18 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/internal/fttrace.h: Added Type 42 driver
+ component.
+ * src/type42/t42drivr.c: Use it.
+
+ * include/freetype/internal/internal.h (FT_INTERNAL_PCF_TYPES_H):
+ New macro.
+
+2002-05-17 Werner Lemberg <wl@gnu.org>
+
+ * src/type42/Jamfile: New file.
+
+2002-05-14 Werner Lemberg <wl@gnu.org>
+
+ Adding a driver for Type42 fonts written by Roberto Alameda
+ <ojancano@geekmail.de>.
+
+ * src/type42/*: New driver.
+ * include/freetype/config/ftmodule.h, src/Jamfile: Updated.
+ * include/freetype/config/ftstdlib.h (ft_xdigit, ft_memcmp,
+ ft_atoi): New aliases for xdigit, memcmp, and atoi, respectively.
+
+2002-05-12 Owen Taylor <otaylor@redhat.com>
+
+ * src/sfnt/ttload.c (TT_LookUp_Table): Protect against tables
+ with a zero length value.
+
+2002-05-12 Michael Pfeiffer <michael.pfeiffer@utanet.at>
+
+ * builds/beos/beos.mk: Include `link-std.mk'.
+
+2002-05-12 Werner Lemberg <wl@gnu.org>
+
+ * src/type1/t1load.h (T1_Loader): Renamed to...
+ (T1_LoaderRec): This.
+ (T1_Loader): Now pointer to T1_LoaderRec.
+ * src/type1/t1load.c: Updated.
+
+ * include/freetype/internal/t1types.h, src/type1/t1load.c,
+ src/type1/t1objs.c:
+ s/T1_ENCODING_TYPE_EXPORT/T1_ENCODING_TYPE_EXPERT/.
+
+2002-05-06 Werner Lemberg <wl@gnu.org>
+
+ * README: Add a note regarding libttf vs. libfreetype.
+
+2002-05-05 Werner Lemberg <wl@gnu.org>
+
+ FreeType 2 can now be built in an external directory with the
+ configure script also.
+
+ * builds/freetype.mk (INCLUDES): Add `OBJ_DIR'.
+
+ * builds/unix/detect.mk (have_mk): New variable to test for
+ external build.
+ (unix-def.mk): Defined according to value of `have_mk'.
+ * builds/unix/unix.mk (have_mk): New variable to test for
+ external build.
+ Select include paths for unix-def.mk and unix-cc.mk according
+ to value of `have_mk'.
+ * builds/unix/unix-def.in (OBJ_BUILD): New variable.
+ (DISTCLEAN): Use it.
+ * builds/unix/unix-cc.in (LIBTOOL): Define default value only
+ if not yet defined.
+ * builds/unix/install.mk (install): Use `OBJ_BUILD' for installing
+ freetype-config.
+
+ * configure: Don't depend on bash features.
+ (ft2_dir, abs_curr_dir, abs_ft2_dir): New variables (code
+ partially taken from Autoconf).
+ Build a dummy Makefile if not building in source tree.
+
+ * docs/INSTALL: Document it.
+
+2002-05-04 David Turner <david@freetype.org>
+
+ * src/truetype/ttgload.c (TT_Load_Glyph): Finally fixing the last
+ bug that prevented FreeType 2.x and FreeType 1.x to produce
+ bit-by-bit identical monochrome glyph bitmaps with native TrueType
+ hinting. The culprit was a single-bit flag that wasn't set
+ correctly by the TrueType glyph loader.
+
+ * src/otlayout/otlayout.h, src/otlayout/otlbase.c,
+ src/otlayout/otlbase.h, src/otlayout/otlconf.h,
+ src/otlayout/otlgdef.c, src/otlayout/otlgdef.h,
+ src/otlayout/otlgpos.c, src/otlayout/otlgpos.h,
+ src/otlayout/otlgsub.c, src/otlayout/otlgsub.h,
+ src/otlayout/otljstf.c, src/otlayout/otljstf.h,
+ src/otlayout/otltable.c, src/otlayout/otltable.h,
+ src/otlayout/otltags.h: New OpenType Layout source files. The
+ module is still incomplete.
+
+2002-05-02 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/ttcmap0.c (tt_cmap4_char_index): Fix serious typo
+ (0xFFFU -> 0xFFFFU).
+
+2002-05-01 Werner Lemberg <wl@gnu.org>
+
+ * docs/INSTALL: Fix URL of makepp.
+
+2002-05-01 David Turner <david@freetype.org>
+
+ * src/sfnt/sfobjs.c (tt_face_get_name): Fixing a bug that caused
+ FreeType to crash when certain broken fonts (e.g. `hya6gb.ttf')
+ were opened.
+
+ * src/sfnt/ttload.c (TT_Load_Names): Applied a small work-around to
+ manage fonts containing a broken name table (e.g. `hya6gb.ttf').
+
+ * src/sfnt/ttcmap0.c (tt_cmap4_validate): Fixed over-restrictive
+ validation test. The charmap validator now accepts overlapping
+ ranges in format 4 charmaps.
+
+ * src/sfnt/ttcmap0.c (tt_cmap4_char_index): Switched to a binary
+ search algorithm. Certain fonts contain more than 170 distinct
+ segments!
+
+ * include/freetype/config/ftstdlib.h: Adding an alias for the `exit'
+ function. This will be used in the near future to panic in case of
+ unexpected exception (which shouldn't happen in theory).
+
+ * include/freetype/internal/fthash.h, src/base/fthash.c: New files.
+ This is generic implementation of dynamic hash tables using a linear
+ algorithm (to get rid of `stalls' during resizes). In the future
+ this will be used in at least three parts of the library: the cache
+ sub-system, the object sub-system, and the memory debugger.
+
+ * src/base/Jamfile: Updated.
+
+ * include/freetype/internal/internal.h (FT_INTERNAL_HASH_H,
+ FT_INTERNAL_OBJECT_H): New macros.
+
+ * include/freetype/internal/ftcore.h: New file to group all new
+ definitions related to exception handling and memory management. It
+ is very likely that this file will disappear or be renamed in the
+ future.
+
+ * include/freetype/internal/ftobject.h, include/freetype/ftsysmem.h:
+ Adding comments to better explain the object sub-system as well as
+ the new memory manager interface.
+
+2002-04-30 Wenlin Institute (Tom Bishop) <wenlin@wenlin.com>
+
+ * src/base/ftmac.c (p2c_str): Removed.
+ (file_spec_from_path) [TARGET_API_MAC_CARBON]: Added support for
+ OS X.
+ (is_dfont) [TARGET_API_MAC_CARBON]: Define only for OS X.
+ Handle `nameLen' <= 6 also.
+ (parse_fond): Remove unused variable `name_table'.
+ Use functionality of old p2c_str directly.
+ Add safety checks.
+ (read_lwfn): Initialize `size_p'.
+ Check for size_p == NULL.
+ (new_memory_stream, open_face_from_buffer): Updated to FreeType 2.1.
+ (FT_New_Face_From_LWFN): Remove unused variable `memory'.
+ Remove some dead code.
+ (FT_New_Face_From_SFNT): Remove unused variable `stream'.
+ (FT_New_Face_From_dfont) [TARGET_API_MAC_CARBON]: Define only for
+ OS X.
+ (FT_New_Face_From_FOND): Remove unused variable `error'.
+ (ResourceForkSize): New function.
+ (FT_New_Face): Use it.
+ Handle empty resource forks.
+ Conditionalize some code for OS X.
+ Add code to call normal loader as a fallback.
+
+2002-04-30 Werner Lemberg <wl@gnu.org>
+
+ `interface' is reserved on the Mac.
+
+ * include/freetype/ftoutln.h, include/freetype/internal/sfnt.h,
+ src/base/ftoutln.c: s/interface/func_interface/.
+ * src/base/ftbbox.c (FT_Outline_Get_BBox):
+ s/interface/bbox_interface/.
+ * src/cff/cffdrivr.c: s/interface/module_interface/.
+ * src/cff/cffload.c, src/cff/cffload.h:
+ s/interface/psnames_interface/.
+ * src/cid/cidriver.c: s/interface/cid_interface/.
+ * src/sfnt/sfdriver.c: s/interface/module_interface/.
+ * src/smooth/ftgrays.c: s/interface/func_interface/.
+ * src/truetype/ttdriver.c: s/interface/tt_interface/.
+ * src/type1/t1driver.c: s/interface/t1_interface/.
+
+ Some more variable renames to avoid troubles on the Mac.
+
+ * src/raster/ftraster.c:
+ s/Unknown|Ascending|Descending|Flat/\1_State/.
+ * src/smooth/ftgrays.c: s/TScan/TCoord/.
+
+ Other changes for the Mac.
+
+ * include/freetype/config/ftconfig.h: Define FT_MACINTOSH for
+ Mac platforms.
+ * src/base/ftobjs.c: s/macintosh/FT_MACINTOSH/.
+
+ * src/raster/ftrend1.c (ft_raster1_render): Make `pitch' always
+ an even number.
+
+2002-04-29 Jouk Jansen <joukj@hrem.stm.tudelft.nl>
+
+ * descrip.mms (all): Add pfr driver.
+
+2002-04-28 Werner Lemberg <wl@gnu.org>
+
+ * src/pfr/pfrerror.h: New file.
+ * include/freetype/ftmoderr.h: Add PFR error codes.
+ * src/pfr/pfrgload.c: Include pfrerror.h.
+ Use PCF error codes.
+ (pfr_extra_item_load_stem_snaps): Fix debug message.
+ * src/pfr/pfrgload.c: Include pfrerror.h.
+ Use PCF error codes.
+ (pfr_extra_item_load_bitmap_info, pfr_glyph_load_simple,
+ pfr_glyph_load_compound): Fix debug message.
+ * src/pfr/pfrobjs.c: Include pfrerror.h.
+ Use PCF error codes.
+ (pfr_face_init): Return PFR_Err_Unknown_File_Format.
+ * src/pfr/rules.mk (PFR_DRV_H): Include pfrerror.h.
+
+ * src/pcf/pcfdriver.c (PCF_Face_Init) [!FT_CONFIG_OPTION_USE_CMAPS]:
+ `root' -> `face->root'.
+ * src/sfnt/ttcmap0.c (TT_Build_CMaps) [!FT_CONFIG_OPTION_USE_CMAPS]:
+ Removed.
+ * src/sfnt/ttcmap0.c: Declare TT_Build_CMaps only for
+ FT_CONFIG_OPTION_USE_CMAPS.
+
+2002-04-27 Werner Lemberg <wl@gnu.org>
+
+ * src/cache/ftccache.c (ftc_cache_lookup),
+ src/cache/ftccmap.c (ftc_cmap_family_init),
+ src/cache/ftcmanag.c (ftc_family_table_alloc),
+ src/cache/ftcsbits.c (FTC_SBit_Cache_Lookup): Use FTC_Err_*.
+ src/cache/ftcimage.c (FTC_Image_Cache_Lookup): Use FTC_Err_*.
+ (FTC_ImageCache_Lookup): Fix handling of invalid arguments.
+
+2002-04-22 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/configure.ac: Set `version_info' to 9:1:3 (FT2
+ version 2.0.9 has 9:0:3).
+ * builds/unix/configure: Regenerated (using autoconf 2.53).
+
+2002-04-19 Werner Lemberg <wl@gnu.org>
+
+ * src/pfr/pfrload.c (pfr_extra_items_farse): Fix debug message.
+ (pfr_phy_font_load): s/size/Size/ for local variable to avoid
+ compiler warning.
+ * src/pfr/pfrobjs.c (pfr_face_init): Fix debug message.
+ (pfr_slot_load): Remove redundant local variable.
+
+2002-04-19 David Turner <david@freetype.org>
+
+ Adding a PFR font driver to the FreeType sources. Note that it
+ doesn't support embedded bitmaps or kerning tables yet.
+
+ src/pfr/*: New files.
+
+ * include/freetype/config/ftmodule.h,
+ include/freetype/internal/fttrace.h, src/Jamefile: Updated.
+
+ * src/type1/t1gload.h (T1_Load_Glyph), src/type1/t1gload.c
+ (T1_Load_Glyph): Fixed incorrect parameter sign-ness in callback
+ function.
+
+ * include/freetype/internal/ftmemory.h (FT_MEM_ZERO, FT_ZERO): New
+ macros.
+
+ * include/freetype/internal/ftstream.h (FT_NEXT_OFF3, FT_NEXT_UOFF3,
+ FT_NEXT_OFF3_LE, FT_NEXT_UOFF3_LE): New macros to parse in-memory
+ 24-bit integers.
+
+2002-04-18 David Turner <david@freetype.org>
+
+ * src/base/ftobjs.c, builds/win32/ftdebug.c,
+ builds/amiga/src/base/ftdebug.c: Version 2.1.0 couldn't be linked
+ against applications in Win32 and Amiga builds due to changes to
+ `src/base/ftdebug.c' that were not properly propagated to
+ `builds/win32' and `builds/amiga'. This has been fixed.
+
+ * include/freetype/internal/ftobject.h,
+ include/freetype/internal/ftexcept.h, include/freetype/ftsysmem.h,
+ include/freetype/ftsysio.h, src/base/ftsysmem.c, src/base/ftsysio.c:
+ New experimental files.
+
+2002-04-17 David Turner <david@freetype.org>
+
+
+ * Version 2.1.0 released.
+ =========================
+
+
+2002-04-17 Michael Jansson <mjan@em2-solutions.com>
+
+ * src/type1/t1gload.c (T1_Compute_Max_Advance): Fixed a small bug
+ that prevented the function to return the correct value.
+
+2002-04-16 Francesco Zappa Nardelli <Francesco.Zappa.Nardelli@ens.fr>
+
+ * src/pcf/pcfread (pcf_get_accell): Fix parsing of accelerator
+ tables.
+
+2002-04-15 David Turner <david@freetype.org>
+
+ * docs/FTL.txt: Formatting.
+
+ * include/freetype/config/ftoption.h: Reduce the size of the
+ render pool from 32kByte to 16kByte.
+
+ * src/pcf/pcfread.c (pcf_seek_to_table_type): Remove compiler
+ warning.
+
+ * include/freetype/config/ftoption.h (FT_MAX_EXTENSIONS): Removed.
+
+ * docs/CHANGES: Preparing 2.1.0 release.
+
+2002-04-13 Werner LEMBERG <wl@gnu.org>
+
+ * src/cff/cffgload.c (CFF_Parse_CharStrings): s/rand/Rand/ to avoid
+ compiler warning.
+
+2002-04-12 David Turner <david@freetype.org>
+
+ * README.UNX: Updated the Unix-specific quick-compilation guide to
+ warn about the GNU Make requirement at compile time.
+
+ * include/freetype/config/ftstdlib.h,
+ include/freetype/config/ftconfig.h,
+ include/freetype/config/ftheader.h,
+ include/freetype/internal/ftmemory.h,
+ include/freetype/internal/ftobjs.h,
+
+ src/autohint/ahoptim.c,
+
+ src/base/ftdbgmem.c, src/base/ftdebug.c, src/base/ftmac.c,
+ src/base/ftobjs.c, src/base/ftsystem.c,
+
+ src/cache/ftcimage.c, src/cache/ftcsbits.c,
+
+ src/cff/cffdriver.c, src/cff/cffload.c, src/cff/cffobjs.c,
+
+ src/cid/cidload.c, src/cid/cidparse.c, src/cid/cidriver.c,
+
+ src/pcf/pcfdriver.c, src/pcf/pcfread.c,
+
+ src/psaux/t1cmap.c, src/psaux/t1decode.c,
+
+ src/pshinter/pshalgo1.c, src/pshinter/pshalgo2.c,
+ src/pshinter/pshrec.c,
+
+ src/psnames/psmodule.c,
+
+ src/raster/ftraster.c,
+
+ src/sfnt/sfdriver.c, src/sfnt/ttload.c,
+
+ src/smooth/ftgrays.c,
+
+ src/type1/t1afm.c, src/type1/t1driver.c, src/type1/t1gload.c,
+ src/type1/t1load.c, src/type1/t1objs.c, src/type1/t1parse.c,
+
+ builds/unix/ftconfig.in, builds/vms/ftconfig.h,
+
+ builds/amiga/src/base/ftdebug.c:
+
+ Added the new configuration file `ftstdlib.h' used to define
+ aliases for all ISO C library functions used by the engine
+ (e.g. strlen, qsort, setjmp, etc.).
+
+ This eases the porting of FreeType 2 to environments like
+ XFree86 modules/extensions.
+
+ Also removed many #include <string.h>, #include <stdlib.h>, etc.
+ from the engine's sources where they are not needed.
+
+ * src/sfnt/ttpost.c: Use macro name for psnames.h.
+
+2002-04-12 Vincent Caron <v.caron@zerodeux.net>
+
+ * configure, builds/detect.mk: Updated the build system to print
+ a warning message in case GNU Make isn't used to build the library.
+
+2002-04-11 David Turner <david@freetype.org>
+
+ * README, docs/CHANGES, Jamfile.in: Updates for the 2.1.0 release.
+
+ * docs/FTL.txt: Updated license text to provide a preferred
+ disclaimer and adjust copyright dates/extents.
+
+ * include/freetype/cache/ftcglyph.h: Removing obsolete (and
+ confusing) comment.
+
+ * Jamfile.in: New file.
+
+2002-04-11 Maxim Shemanarev <mcseemagg@yahoo.com>
+
+ * src/smooth/ftgrays.c (gray_hline): Minor optimization.
+
+2002-04-02 Werner Lemberg <wl@gnu.org>
+
+ Fixes from the stable branch:
+
+ * include/freetype/config/ftoption.h (FT_CONFIG_OPTION_OLD_CALCS):
+ Removed.
+ [FT_CONFIG_OPTION_OLD_CALCS]: Removed.
+ * include/freetype/internal/ftcalc.h, src/base/ftcalc.c
+ [FT_CONFIG_OPTION_OLD_CALCS]: Removed.
+
+ * src/base/fttrigon.c (FT_Vector_Length): Change algorithm to match
+ output of FreeType 1.
+
+ * src/pshinter/pshglob.c (psh_globals_scale_widths): Fixed a small
+ bug that created un-even stem widths when hinting Postscript fonts.
+
+ * src/type1/t1driver.c, src/type1/t1parse.c: 16bit fixes.
+
+2002-04-01 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttgload.c: 16bit fixes.
+ (TT_Load_Simple_Glyph): Improve debug messages.
+ (load_truetype_glyph): Remove dead code.
+ * src/truetype/ttinterp.c: 16bit fixes.
+ * src/truetype/ttobjs.c: Ditto.
+
+ * include/freetype/ftsnames.h, include/freetype/internal/sfnt.h,
+ src/cff/cffload.h, src/psaux/psobjs.h, src/truetype/ttinterp.[ch],
+ src/sfnt/ttpost.h: s/index/idx/.
+
+2002-03-31 Yao Zhang <yaoz@vidar.niaaa.nih.gov>
+
+ * src/truetype/ttobjs.c (TT_Size_Init): Fix typo.
+
+2002-03-31 Werner Lemberg <wl@gnu.org>
+
+ * src/otlayout/otlcommn.c, src/otlayout/otlcommn.h: s/index/idx/.
+ * src/psaux/t1cmap.c: Ditto.
+ * src/sfnt/ttcmap0.c: Ditto.
+
+ * include/freetype/internal/tttypes.h,
+ include/freetype/internal/sfnt.h (TT_Goto_Table_Func): Renamed to ...
+ (TT_Loader_GotoTableFunc): This.
+ * src/psaux/t1decode.c (T1_Decoder_Parse_Charstrings): Fix debug
+ messages.
+ * src/psnames/psmodule.c (psnames_interface)
+ [!FT_CONFIG_OPTION_ADOBE_GLYPH_LIST]: Fix typo.
+ * src/sfnt/sfdriver.c (get_sfnt_table): 16bit fix.
+ * src/sfnt/ttcmap.c: 16bit fixes (0xFFFF -> 0xFFFFU).
+ * src/sfnt/ttcmap0.c: 16bit fixes.
+ (TT_Build_CMaps): Simplify debug messages.
+ (tt_cmap12_char_next): Fix offset.
+ * src/sfnt/ttload.c (TT_Load_Names, TT_Load_CMap): Fix debug
+ messages.
+ (TT_Load_OS2): 16bit fix.
+
+2002-03-30 David Turner <david@freetype.org>
+
+ * include/freetype/internal/tttypes.h: Adding comments to some of
+ the TT_FaceRec fields.
+
+ * src/sfnt/ttcmap0.c (TT_Build_CMaps): Removed compiler warnings.
+
+ * src/sfnt/sfobjs.c (tt_name_entry_ascii_from_{utf16,ucs4,other}:
+ New functions.
+ (tt_face_get_name): Use them to properly extract an ascii font name.
+
+2002-03-30 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/t1tables.h (t1_blend_max): Fix typo.
+ * src/base/ftstream.c: Simplify FT_ERROR calls.
+ * src/cff/cffdrivr.c (cff_get_glyph_name): Fix debug message.
+
+ * src/cff/cffobjs.c (CFF_Driver_Init, CFF_Driver_Done)
+ [TT_CONFIG_OPTION_EXTEND_ENGINE]: Removed.
+ * src/cff/sfobjs.c (SFNT_Load_Face)
+ [TT_CONFIG_OPTION_EXTEND_ENGINE]: Ditto.
+ * src/truetype/ttobjs.c (TT_Init_Driver, TT_Done_Driver)
+ [TT_CONFIG_OPTION_EXTEND_ENGINE]: Ditto.
+
+ * src/truetype/ttdriver.c, src/truetype/ttobjs.c,
+ src/truetype/ttobjs.h: Renaming driver functions to the
+ FT_<Subject>_<Action> scheme:
+
+ TT_Init_Driver => TT_Driver_Init
+ TT_Done_Driver => TT_Driver_Done
+ TT_Init_Face => TT_Face_Init
+ TT_Done_Face => TT_Face_Done
+ TT_Init_Size => TT_Size_Init
+ TT_Done_Size => TT_Size_Done
+ TT_Reset_Size => TT_Size_Reset
+
+2002-03-29 Werner Lemberg <wl@gnu.org>
+
+ * builds/vms/ftconfig.h: Rename LOCAL_DEF and LOCAL_FUNC to
+ FT_LOCAL and FT_LOCAL_DEF, respectively, as with other ftconfig.h
+ files.
+ * builds/unix/ftconfig.in: Add argument to FT_LOCAL and
+ FT_LOCAL_DEF.
+ * src/truetype/ttinterp.c: s/FT_Assert/FT_ASSERT/.
+ * builds/unix/configure.ac: Temporarily deactivate creation of
+ ../../Jamfile.
+ * builds/unix/configure: Updated.
+
+2002-03-28 KUSANO Takayuki <AE5T-KSN@asahi-net.or.jp>
+
+ * src/sfnt/sfdriver.c (get_sfnt_postscript_name): Fix serious typos.
+
+2002-03-28 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/internal/psaux.h (PSAux_ServiceRec): Fix
+ compiler warnings.
+ * include/freetype/internal/t1types.h (T1_FaceRec): Use `const' for
+ some members.
+ * src/base/ftapi.c (FT_New_Memory_Stream): Fix typos.
+ * src/psaux/t1cmap.c (t1_cmap_std_init, t1_cmap_unicode_init): Add
+ cast.
+ (t1_cmap_{standard,expert,custom,unicode}_class_rec): Use
+ `FT_CALLBACK_TABLE_DEF'.
+ * src/psaux/t1cmap.h: Updated.
+ * src/sfnt/ttcmap0.c (TT_Build_CMaps): Use `ft_encoding_none'
+ instead of zero.
+ * src/type1/t1objs.c (T1_Face_Init): Use casts.
+
+2002-03-26 David Turner <david@freetype.org>
+
+ * src/sfnt/sfdriver.c, src/sfnt/sfobjs.c, src/sfnt/ttcmap0.c:
+ Fixed a small bug in the FT_CMaps support code.
+
+2002-03-25 David Turner <david@freetype.org>
+
+ * src/truetype/ttinterp.c (Norm): Replaced with...
+ (TT_VecLen): This.
+ (TT_MulFix14, TT_DotFix14): New functions.
+ (Project, Dual_Project, Free_Project, Compute_Point_Displacement,
+ Ins_SHPIX, Ins_MIAP, Ins_MIRP): Use them.
+ [FT_CONFIG_OPTION_OLD_CALCS]: Removed all code.
+
+2002-03-22 David Turner <david@freetype.org>
+
+ * src/base/ftobjs.c, src/sfnt/ttcmap0.c, src/type1/t1objs.c:
+ Various fixes to make the FT_CMaps support work correctly (more
+ tests are still needed).
+
+ * include/freetype/internal/ftobjs.h, src/sfnt/Jamfile,
+ src/sfnt/rules.mk, src/sfnt/sfnt.c, src/sfnt/sfobjs.c,
+ src/sfnt/ttload.c, src/sfnt/ttcmap0.c, src/sfnt/ttcmap0.h: Updated
+ the SFNT charmap support to use FT_CMaps.
+
+ * include/freetype/fterrdef.h: New file.
+ * include/freetype/fterrors.h: Include it. It contains all error
+ codes.
+ * include/freetype/config/ftheader.h (FT_ERROR_DEFINITIONS_H): New
+ macro.
+
+ * include/freetype/internal/ftmemory.h, and a lot of other files:
+ Changed the names of memory macros. Examples:
+
+ MEM_Set => FT_MEM_SET
+ MEM_Copy => FT_MEM_COPY
+ MEM_Move => FT_MEM_MOVE
+
+ ALLOC => FT_ALLOC
+ FREE => FT_FREE
+ REALLOC = >FT_REALLOC
+
+ FT_NEW was introduced to allocate a new object from a _typed_
+ pointer.
+
+ Note that ALLOC_ARRAY and REALLOC_ARRAY have been replaced by
+ FT_NEW_ARRAY and FT_RENEW_ARRAY which take _typed_ pointer
+ arguments.
+
+ This results in _lots_ of sources being changed, but makes the code
+ more generic and less error-prone.
+
+ * include/freetype/internal/ftstream.h, src/base/ftstream.c,
+ src/cff/cffload.c, src/pcf/pcfread.c, src/sfnt/ttcmap.c,
+ src/sfnt/ttcmap0.c, src/sfnt/ttload.c, src/sfnt/ttpost.c,
+ src/sfnt/ttsbit.c, src/truetype/ttgload.c, src/truetype/ttpload.c,
+ src/winfonts/winfnt.c: Changed the definitions of stream macros.
+ Examples:
+
+ NEXT_Byte => FT_NEXT_BYTE
+ NEXT_Short => FT_NEXT_SHORT
+ NEXT_UShortLE => FT_NEXT_USHORT_LE
+ READ_Short => FT_READ_SHORT
+ GET_Long => FT_GET_LONG
+ etc.
+
+ Also introduced the FT_PEEK_XXXX functions.
+
+ * src/cff/cffobjs.c (CFF_Build_Unicode_Charmap): Removed commented
+ out function.
+ (find_encoding): Removed.
+ (CFF_Face_Init): Remove charmap support.
+
+ * include/freetype/config/ftoption.h (FT_CONFIG_OPTION_USE_CMAPS,
+ TT_CONFIG_CMAP_FORMAT{0,2,4,6,8,10,12}): New macros to fine-tune
+ support of cmaps.
+
+2002-03-21 David Turner <david@freetype.org>
+
+ * src/base/ftobjs.c, src/pcf/pcfdriver.c, src/pcf/pcfread.c: Updated
+ to new FT_CMap definitions.
+
+ * src/psaux/t1cmap.h, src/psaux/t1cmap.c, src/type1/t1cmap.h,
+ src/type1/t1cmap.c: Updating and moving the Type 1 FT_CMap support
+ from `src/type1' to `src/psaux' since it is going to be shared by
+ the Type 1 and CID font drivers.
+
+ * src/psaux/Jamfile, src/psaux/psaux.c, src/psaux/psauxmod.c,
+ src/psaux/rules.mk, include/freetype/internal/psaux.h: Added support
+ for Type 1 FT_CMaps.
+
+2002-03-20 David Turner <david@freetype.org>
+
+ * src/base/ftgloadr.c (FT_GlyphLoader_CheckSubGlyphs): Fixed a
+ memory allocation bug that was due to un-careful renaming of the
+ FT_SubGlyph type.
+
+ * src/base/ftdbgmem.c (ft_mem_table_destroy): Fixed a small bug that
+ caused the library to crash with Electric Fence when memory
+ debugging is used.
+
+ * Renaming stream macros. Examples:
+
+ FILE_Skip => FT_STREAM_SKIP
+ FILE_Read => FT_STREAM_READ
+ ACCESS_Frame => FT_FRAME_ENTER
+ FORGET_Frame => FT_FRAME_EXIT
+ etc.
+
+ * src/sfnt/sfdriver.c (get_sfnt_postscript_name): Fixed memory leak.
+
+ * include/freetype/internal/ftobjs.h: Changing the definition of
+ FT_CMap_CharNextFunc slightly.
+
+ * src/cff/*.c: Updating CFF type definitions.
+
+2002-03-14 David Turner <david@freetype.org>
+
+ * include/freetype/internal/autohint.h, src/autohint/ahmodule.c,
+ src/base/ftapi.c, src/base/ftobjs.c: Updating the type definitions
+ for the auto-hinter module.
+
+ FT_AutoHinter_Interface => FT_AutoHinter_ServiceRec
+ FT_AutoHinter_Interface* => FT_AutoHinter_Service
+ etc.
+
+ FT_AutoHinter_Get_Global_Func => FT_AutoHinter_GlobalGetFunc
+ FT_AutoHinter_Done_Global_Func => FT_AutoHinter_GlobalDoneFunc
+ etc.
+
+ * ahloader.h [_STANDALONE_]: Removed all conditional code.
+
+ * include/freetype/internal/cfftypes.h, src/cff/*.c: Updating the
+ type definitions of the CFF font driver.
+
+ CFF_Font => CFF_FontRec
+ CFF_Font* => CFF_Font
+ etc.
+
+ * include/freetype/internal/fnttypes.h, src/winfonts/*.c: Updating
+ type definitions of the Windows FNT font driver.
+
+ * include/freetype/internal/ftdriver.h,
+ include/freetype/internal/ftobjs.h, src/base/ftapi.c,
+ src/base/ftobjs.c, src/cff/cffdrivr.c, src/cff/cffdrivr.h,
+ src/cid/cidriver.c, src/cid/cidriver.h, src/pcf/pcfdriver.c,
+ src/pcf/pcfdriver.h, src/truetype/ttdriver.c,
+ src/truetype/ttdriver.h, src/type1/t1driver.c, src/type1/t1driver.h,
+ src/winfonts/winfnt.c, src/winfonts/winfnt.h: Updating type
+ definitions for font drivers.
+
+ FTDriver_initFace => FT_Face_InitFunc
+ FTDriver_initGlyphSlot => FT_Slot_InitFunc
+ etc.
+
+ * src/cid/cidobjs.c (CID_Face_Init): Remove dead code.
+
+ * include/freetype/internal/ftobjs.h, src/base/ftobjs.c: Updated a
+ few face method definitions:
+
+ FT_PSName_Requester => FT_Face_GetPostscriptNameFunc
+ FT_Glyph_Name_Requester => FT_Face_GetGlyphNameFunc
+ FT_Name_Index_Requester => FT_Face_GetGlyphNameIndexFunc
+
+ * src/base/ftapi.c: New file. It contains backwards compatibility
+ functions.
+
+ * include/freetype/internal/psaux.h, src/cid/cidload.c,
+ src/cidtoken.h, src/psaux/psobjs.c, src/psaux/psobjs.h,
+ src/psaux/t1decode.c, stc/type1/t1load.c, src/type1/t1tokens.h:
+ Updated common PostScript type definitions.
+ Renamed all enumeration values like to uppercase variants:
+
+ t1_token_any => T1_TOKEN_TYPE_ANY
+ t1_field_cid_info => T1_FIELD_LOCATION_CID_INFO
+ etc.
+
+ * include/freetype/internal/psglobals.h: Removed.
+ * include/freetype/internal/pshints.h, src/pshinter/pshglob.h:
+ Updated.
+
+ * include/freetype/internal/tttypes.h,
+ include/freetype/internal/sfnt.h, src/base/ftnames.c,
+ src/cff/cffdrivr.c, src/sfnt/*.c, src/truetype/*.c: Updated
+ SFNT/TrueType type definitions.
+
+ * include/freetype/freetype.h, include/freetype/internal/ftgloadr.h:
+ Updating type definitions for the glyph loader.
+
+2002-03-13 Antoine Leca <antoine@oriolnet.com>
+
+ * include/freetype/config/ftoption.h: Changed the automatic
+ detection of Microsoft C compilers to automatically support 64-bit
+ integers only since revision 9.00 (i.e. >= Visual C++ 2.0).
+
+2002-03-08 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftutil.c (FT_Realloc): Use MEM_Set instead of memset.
+
+2002-03-07 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftdbgmem.c (ft_mem_table_resize, ft_mem_table_new,
+ ft_mem_table_set, ft_mem_debug_alloc, ft_mem_debug_free,
+ ft_mem_debug_realloc, ft_mem_debug_done, FT_Alloc_Debug,
+ FT_Realloc_Debug, FT_Free_Debug): Fix compiler warnings.
+ * src/base/ftcalc.c (FT_MulFix): Ditto.
+ * src/cff/cffdrivr.c (cff_get_name_index): Ditto.
+ * src/cff/cffobjs.c (CFF_Size_Get_Global_Funcs, CFF_Size_Init,
+ CFF_GlyphSlot_Init): Ditto.
+ * src/cid/cidobjs.c (CID_GlyphSlot_Init,
+ CID_Size_Get_Globals_Funcs): Ditto.
+ * src/type1/t1objs.c (T1_Size_Get_Globals_Funcs, T1_GlyphSlot_Init):
+ Ditto.
+ * src/pshinter/pshmod.c (pshinter_interface): Use `static const'.
+ * src/winfonts/winfnt.c (FNT_Get_Next_Char): Remove unused
+ variables.
+
+ * include/freetype/internal/psaux.h (T1_Builder_Funcs): Renamed
+ to...
+ (T1_Builder_FuncsRec): This.
+ (T1_Builder_Funcs): New typedef.
+ (PSAux_Interface): Remove compiler warnings.
+ * src/psaux/psauxmod.c (t1_builder_funcs), src/psaux/psobjs.h
+ (t1_builder_funcs): Updated.
+
+ * src/pshinter/pshglob.h (PSH_Blue_Align): Replaced with ...
+ (PSH_BLUE_ALIGN_{NONE,TOP,BOT}): New defines.
+ (PSH_AlignmentRec): Updated.
+
+ * include/freetype/internal/ftstream.h (GET_Char, GET_Byte): Fix
+ typo.
+ * include/freetype/internal/ftgloadr.h (FT_SubGlyph): Ditto.
+ * src/base/ftstream (FT_Get_Char): Rename to...
+ (FT_Stream_Get_Char): This.
+
+ * src/base/ftnames.c (FT_Get_Sfnt_Name): s/index/idx/ -- `index' is
+ a built-in function in gcc, causing warning messages with gcc 3.0.
+ * src/autohint/ahglyph.c (ah_outline_load): Ditto.
+ * src/autohint/ahglobal.c (ah_hinter_compute_blues): Ditto.
+ * src/cache/ftcmanag.c (ftc_family_table_alloc,
+ ftc_family_table_free, FTC_Manager_Done, FTC_Manager_Register_Cache):
+ Ditto.
+ * src/cff/cffload.c (cff_new_index, cff_done_index,
+ cff_explicit_index, CFF_Access_Element, CFF_Forget_Element,
+ CFF_Get_Name, CFF_Get_String, CFF_Load_SubFont, CFF_Load_Font,
+ CFF_Done_Font): Ditto.
+ * src/psaux/psobjs.c (PS_Table_Add, PS_Parser_LoadField): Ditto.
+ * src/psaux/t1decode.c (T1_Decoder_Parse_Charstrings): Ditto.
+ * src/pshinter/pshrec.c (ps_mask_test_bit, ps_mask_clear_bit,
+ ps_mask_set_bit, ps_dimension_add_t1stem, ps_hints_t1stem3,
+ * src/pshinter/pshalgo1.c (psh1_hint_table_record,
+ psh1_hint_table_record_mask, psh1_hint_table_activate_mask): Ditto.
+ * src/pshinter/pshalgo2.c (psh2_hint_table_record,
+ psh2_hint_table_record_mask, psh2_hint_table_activate_mask): Ditto.
+ * src/sfnt/ttpost.c (Load_Format_20, Load_Format_25,
+ TT_Get_PS_Name): Ditto.
+ * src/truetype/ttgload.c (TT_Get_Metrics, Get_HMetrics,
+ load_truetype_glyph): Ditto.
+ * src/type1/t1load.c (parse_subrs, T1_Open_Face): Ditto.
+ * src/type1/t1afm.c (T1_Get_Kerning): Ditto.
+ * include/freetype/cache/ftcmanag.h (ftc_family_table_free): Ditto.
+
+2002-03-06 David Turner <david@freetype.org>
+
+ * src/type1/t1objs.c (T1_Face_Init), src/cid/cidobjs.c
+ (CID_Face_Init): Fixed another bug related to the
+ ascender/descender/text height of Postscript fonts.
+
+ * src/pshinter/pshalgo2.c (print_zone): Renamed to ...
+ (psh2_print_zone): This.
+ * src/pshinter/pshalgo1.c (print_zone): Renamed to ...
+ (psh1_print_zone): This.
+
+ * include/freetype/freetype.h, include/freetype/internal/ftobjs.h,
+ src/base/ftobjs.c: Adding the new FT_Library_Version API to return
+ the library's current version in dynamic links.
+ * src/base/ftinit.c (FT_Init_FreeType): Updated.
+
+2002-03-06 Werner Lemberg <wl@gnu.org>
+
+ * src/pshinter/pshglob.h (PSH_DimensionRec): s/std/stdw/.
+ * src/pshinter/pshglob.c (psh_global_scale_widths,
+ psh_dimension_snap_width, psh_globals_destroy, psh_globals_new):
+ Ditto.
+
+2002-03-05 David Turner <david@freetype.org>
+
+ * src/type1/t1objs.c (T1_Face_Init), src/cff/cffobjs.c
+ (CFF_Face_Init), src/cid/cidobjs.c (CID_Face_Init): Removing the bug
+ that returned global BBox values in 16.16 fixed format (instead of
+ integer font units).
+
+ * src/cid/cidriver.c (cid_get_postscript_name): Fixed a bug that
+ caused the CID driver to return Postscript font names with a leading
+ slash (`/') as in `/MOEKai-Regular'.
+
+ * src/sfnt/ttload.c (TT_Load_Names), src/sfnt/sfobjs.c (Get_Name),
+ src/sfnt/sfdriver.c (get_sfnt_postscript_name): Fixed the loader so
+ that it accepts broken fonts like `foxjump.ttf', which made FreeType
+ crash when trying to load them.
+
+ Also improved the name table parser to be able to load
+ Windows-encoded entries before Macintosh or Unicode ones, since it
+ seems some fonts don't have reliable values here anyway.
+
+ * include/freetype/internal/psnames.h: Add typedef for
+ `PSNames_Service'.
+
+2002-03-05 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/aclocal.m4, builds/unix/ltmain.sh: Update to libtool
+ 1.4.2.
+ Apply a small patch for AIX to make shared libraries work (this
+ patch is already in the CVS version of libtool).
+
+ * builds/unix/config.sub, builds/unix/config.guess: Updated to
+ recent versions.
+
+ * builds/unix/configure.ac: Fix typo
+ (AC_CONFIG_FILE->AC_CONFIG_FILES).
+
+ * builds/unix/configure: Regenerated.
+
+2002-02-28 David Turner <david@freetype.org>
+
+ * include/freetype/ftconfig.h: Changed `FT_LOCAL xxxx' to
+ `FT_LOCAL( xxxx )' everywhere in the source. The same goes for
+ `FT_LOCAL_DEF xxxx' which is translated to `FT_LOCAL_DEF( xxxxx )'.
+
+ * include/freetype/freetype.h (FREETYPE_MINOR, FREETYPE_PATCH):
+ Changing version to 2.1.0 to indicate an unstable branch.
+ Added the declarations of FT_Get_First_Char and FT_Get_Next_Char.
+
+ * src/base/ftobjs.c: Implement FT_Get_First_Char and
+ FT_Get_Next_Char.
+
+ * include/freetype/t1tables.h: Renaming structure types. This
+
+ typedef T1_Struct_
+ {
+ } T1_Struct;
+
+ becomes
+
+ typedef PS_StructRec_
+ {
+ } PS_StructRec, *PS_Struct;
+
+ typedef PS_StructRec T1_Struct; /* backwards-compatibility */
+
+ Hence, we increase the coherency of the source code by effectively
+ using the `Rec' prefix for structure types.
+
+2002-02-27 David Turner <david@freetype.org>
+
+ * src/sfnt/ttload.c (TT_Load_Names): Simplifying and securing the
+ names table loader. Invalid individual name entries are now handled
+ correctly. This allows the loading of very buggy fonts like
+ `foxjump.ttf' without allocating tons of memory and causing crashes.
+
+ * src/otlayout/otlcommon.h, src/otlayout/otlcommon.c: Adding (still
+ experimental) code for OpenType Layout tables validation and
+ parsing.
+
+ * src/type1/t1cmap.h, src/type1/t1cmap.c: Adding (still
+ experimental) code for Type 1 charmap processing.
+
+ * src/sfnt/ttcmap0.c: New file. It contains a new, still
+ experimental SFNT charmap processing support.
+
+ * include/freetype/internal/ftobjs.h: Adding validation support as
+ well as internal charmap object definitions (FT_CMap != FT_CharMap).
+
+2002-02-24 David Turner <david@freetype.org>
+
+ * Renaming stream functions to the FT_<Subject>_<Action> scheme:
+
+ FT_Seek_Stream => FT_Stream_Seek
+ FT_Skip_Stream => FT_Stream_Skip
+ FT_Read_Stream => FT_Stream_Read
+ FT_Read_Stream_At => FT_Stream_Read_At
+ FT_Access_Frame => FT_Stream_Enter_Frame
+ FT_Forget_Frame => FT_Stream_Exit_Frame
+ FT_Extract_Frame => FT_Stream_Extract_Frame
+ FT_Release_Frame => FT_Stream_Release_Frame
+ FT_Get_XXXX => FT_Stream_Get_XXXX
+ FT_Read_XXXX => FT_Stream_Read_XXXX
+
+ FT_New_Stream( filename, stream ) =>
+ FT_Stream_Open( stream, filename )
+
+ (The function doesn't create the FT_Stream structure, it simply
+ initializes it for reading.)
+
+ FT_New_Memory_Stream( library, FT_Byte* base, size, stream ) =>
+ FT_Stream_Open_Memory( stream, const FT_Byte* base, size )
+
+ FT_Done_Stream => FT_Stream_Close
+ FT_Stream_IO => FT_Stream_IOFunc
+ FT_Stream_Close => FT_Stream_CloseFunc
+
+ ft_close_stream => ft_ansi_stream_close (in base/ftsystem.c only)
+ ft_io_stream => ft_ansi_stream_io (in base/ftsystem.c only)
+
+ * src/base/ftutil.c: New file. Contains all memory and list
+ management code (previously in `ftobjs.c' and `ftlist.c',
+ respectively).
+
+ * include/freetype/internal/ftobjs.h: Moving all code related to
+ glyph loaders to ...
+ * include/freetype/internal/ftgloadr.h: This new file.
+ `FT_GlyphLoader' is now a pointer to the structure
+ `FT_GlyphLoaderRec'.
+ (ft_glyph_own_bitmap): Renamed to ...
+ (FT_GLYPH_OWN_BITMAP): This.
+ * src/base/ftobjs.c: Moving all code related to glyph loaders
+ to ...
+ * src/base/ftgloadr.c: This new file.
+
+2002-02-22 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/internal/ftdebug.h (FT_Trace): Remove comma in
+ enum to avoid compiler warnings.
+
+2002-02-21 David Turner <david@freetype.org>
+
+ Modified the debug sub-system initialization. Trace levels can now
+ be specified within the `FT2_DEBUG' environment variable. See the
+ comments within `ftdebug.c' for more details.
+
+ * src/base/ftdebug.c: (FT_SetTraceLevel): Removed.
+ (ft_debug_init): New function.
+ (ft_debug_dummy): Removed.
+ Updated to changes in ftdebug.h
+
+ * include/freetype/internal/ftdebug.h: Always define
+ FT_DEBUG_LEVEL_ERROR if FT_DEBUG_LEVEL_TRACE is defined.
+ (FT_Assert): Renamed to ...
+ (FT_ASSERT): This.
+ Some stuff from ftdebug.h has been moved to ...
+
+ * include/freetype/internal/fttrace.h: New file, to define the trace
+ levels used for debugging. It is used both to define enums and
+ toggle names for FT2_DEBUG.
+
+ * include/freetype/internal/internal.h: Updated.
+
+ * src/base/ftobjs.c, src/base/ftstream.c: Updated.
+
+ * include/freetype/internal/ftextend.h, src/base/ftextend.c:
+ Removed. Both files are now completely obsolete.
+ * src/base/Jamfile, src/base/rules.mk: Updated.
+
+ * include/freetype/fterrors.h: Adding `#undef FT_ERR_CAT' and
+ `#undef FT_ERR_XCAT' to avoid warnings with certain compilers (like
+ LCC).
+
+ * src/pshinter/pshalgo2.c (print_zone): Renamed to ...
+ (psh2_print_zone): This to avoid errors during compilation of debug
+ library.
+
+ * src/smooth/ftgrays.c (FT_COMPONENT): Change definition to as
+ `trace_smooth'.
+
+2002-02-20 David Turner <david@freetype.org>
+
+ * README: Adding `devel@freetype.org' address for bug reports.
+
+2002-02-20 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/install.mk (check): New dummy target.
+ (.PHONY): Add it.
+
+2002-02-19 Werner Lemberg <wl@gnu.org>
+
+ * builds/freetype.mk (FT_CFLAGS): Use $(INCLUDE_FLAGS) first.
+
+ * src/cache/ftccache.c (ftc_cache_resize): Mark `error' as unused
+ to avoid compiler warning.
+ * src/cff/cffload.c (CFF_Get_String): Ditto.
+ * src/cff/cffobjs.c (CFF_StrCopy): Ditto.
+ * src/psaux/psobjs.c (PS_Table_Done): Ditto.
+ * src/pcf/pcfread.c (pcf_seek_to_table_type): Ditto.
+ * src/sfnt/sfdriver.c (get_sfnt_postscript_name): Ditto.
+ (pcf_get_bitmaps): The same for `sizebitmaps'.
+ * src/psaux/t1decode.c (T1_Decode_Parse_Charstrings): The same for
+ `orig_y'.
+ (t1operator_seac): Comment out more dead code.
+ * src/pshinter/pshalgo2.c (ps2_hints_apply): Add `DEBUG_HINTER'
+ conditional.
+ * src/truetype/ttgload.c (TT_Process_Simple_Glyph,
+ load_truetype_glyph): Add `TT_CONFIG_OPTION_BYTECODE_INTERPRETER'
+ conditional.
+
+2002-02-18 Werner Lemberg <wl@gnu.org>
+
+ * src/autohint/ahglyph.c (ah_outline_link_segments): Remove unused
+ variables.
+ * src/autohint/ahhint.c (ah_align_serif_edge): Use FT_UNUSED instead
+ of UNUSED.
+ * src/autohint/ahmodule.c (ft_autohinter_reset): Ditto.
+ * src/pshinter/pshrec.c (ps_mask_table_merge): Fix typo in variable
+ swapping code.
+ * src/pshinter/pshglob.h (PSH_Blue_Align): Add PSH_BLUE_ALIGN_NONE.
+ * src/pshinter/pshglob.c (psh_blues_snap_stem): Use it.
+ * src/pshinter/pshalgo1.c (psh1_hint_table_optimize): Ditto.
+ * src/pshinter/pshalgo2.c (psh2_hint_align): Ditto.
+ * include/freetype/internal/ftobjs.h (UNUSED): Removed.
+
+2002-02-10 Roberto Alameda <ojancano@geekmail.de>
+
+ Add support for ISOLatin1 PS encoding.
+
+ * include/freetype/freetype.h (ft_encoding_latin_1): New tag
+ (`lat1').
+ * include/freetype/internal/t1types.h (T1_Encoding_Type): Add
+ `t1_encoding_isolatin1'.
+ * src/type1/t1driver.c (Get_Char_Index, Get_Next_Char): Handle
+ ft_encoding_latin_1.
+ * src/type1/t1load.c (parse_encoding): Handle `ISOLatin1Encoding'.
+ * src/type1/t1objs.c (T1_Face_Init): Handle `t1_encoding_isolatin1'.
+
+----------------------------------------------------------------------------
+
+Copyright 2002, 2003, 2004, 2005, 2007 by
+David Turner, Robert Wilhelm, and Werner Lemberg.
+
+This file is part of the FreeType project, and may only be used, modified,
+and distributed under the terms of the FreeType project license,
+LICENSE.TXT. By continuing to use, modify, or distribute this file you
+indicate that you have read the license and understand and accept it
+fully.
+
+
+Local Variables:
+version-control: never
+coding: utf-8
+End:
diff --git a/src/3rdparty/freetype/ChangeLog.22 b/src/3rdparty/freetype/ChangeLog.22
new file mode 100644
index 0000000..c042f21
--- /dev/null
+++ b/src/3rdparty/freetype/ChangeLog.22
@@ -0,0 +1,2837 @@
+2006-05-12 Werner Lemberg <wl@gnu.org>
+
+
+ * Version 2.2.1 released.
+ =========================
+
+
+ Tag sources with `VER-2-2-1'.
+
+2006-05-12 Werner Lemberg <wl@gnu.org>
+
+ * src/tools/docmaker/sources.py (re_source_keywords): Add word
+ boundary markers.
+ * src/tools/docmaker/content.py (re_field): Allow `.' in field names
+ (but not at the beginning or end).
+ * src/tools/docmaker/tohtml.py (html_header_1): Use `utf-8' charset.
+ (block_footer): Split into...
+ (block_footer_start, block_footer_middle, block_footer_end): This to
+ add navigation buttons.
+ (HtmlFormatter::block_exit): Updated.
+
+ * include/freetype/*: Many minor documentation improvements (adding
+ links, spelling errors, etc.).
+
+2006-05-11 Werner Lemberg <wl@gnu.org>
+
+ * README: Minor updates.
+
+ * include/freetype/*: s/scale/scaling value/ where appropriate.
+ Many other minor documentation improvements.
+
+ * src/tools/docmaker/sources.py (re_italic, re_bold): Handle
+ trailing punctuation.
+ * src/tools/docmaker/tohtml.py (HtmlFormatter::make_html_word): Add
+ warning message for undefined cross references.
+ Update handling of re_italic and re_bold.
+
+2006-05-11 Masatake YAMATO <jet@gyve.org>
+
+ * builds/unix/ftsystem.c (FT_Stream_Open): Check errno only if
+ read system call returns -1.
+ Remove a redundant parenthesis.
+
+2006-05-10 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/ftsystem.c (FT_Stream_Open): Avoid infinite loop if
+ given an empty, un-mmap()able file. Reported and suggested fix in
+ Savannah bug #16555.
+
+ * builds/freetype.mk (refdoc): Write-protect the `docmaker'
+ directory to suppress generation of .pyc files. According to the
+ Python docs there isn't a more elegant solution (currently).
+
+ * builds/toplevel.mk (dist): New target which builds .tar.gz,
+ .tar.bz2, and .zip files. Note that the version number is still
+ hard-coded.
+ (do-dist): Sub-target of `dist'.
+ (CONFIG_GUESS, CONFIG_SUB): New variables.
+ (.PHONY): Updated.
+
+2006-05-09 Rajeev Pahuja <rpahuja@esri.com>
+
+ * builds/win32/visualc/freetype.sln,
+ builds/win32/visualc/freetype.vcproj: Upgraded to VS.NET 2005 from
+ VS.NET 2003
+ Added files ftbbox.c, fttype1.c, ftwinfnt.c, ftsynth.c.
+
+ * builds/win32/visualc/index.html: Updated.
+
+2006-05-07 Werner Lemberg <wl@gnu.org>
+
+ Put version information into the configure script. Reported by Paul
+ Watson <pwatson@redlinepy.com>.
+
+ * builds/unix/configure.ac: Renamed to...
+ * builds/unix/configure.raw: This which now serves (with appropriate
+ modifications) as a template for configure.ac.
+
+ * version.sed: New script.
+
+ * autogen.sh: Generate configure.ac from configure.raw, using
+ FREETYPE_MAJOR, FREETYPE_MINOR, and FREETYPE_PATCH from freetype.h.
+
+2006-05-06 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/freetype.h (FREETYPE_PATCH): Set to 1.
+
+ * builds/unix/configure.ac (version_info): Set to 9:10:3.
+
+ * builds/win32/visualc/index.html,
+ builds/win32/visualc/freetype.dsp,
+ builds/win32/visualc/freetype.vcproj, builds/freetype.mk (refdoc),
+ Jamfile (RefDoc), README: s/220/221/, s/2.2.0/2.2.1/.
+ Minor updates.
+
+ * docs/CHANGES, docs/VERSION.DLL, docs/PROBLEMS, README.CVS:
+ Updated.
+
+ * builds/unix/install-sh: Updated from `texinfo' CVS module at
+ savannah.gnu.org.
+
+ * devel/ftoption.h: Synchronize with
+ include/freetype/config/ftoption.h.
+
+2006-05-04 Werner Lemberg <wl@gnu.org>
+
+ * src/lzw/ftlzw2.c: Renamed to...
+ * src/lzw/ftlzw.c: This.
+
+ * src/lzw/Jamfile, src/lzw/rules.mk: Updated.
+
+ * builds/mac/FreeType.m68k_cfm.make.txt,
+ builds/mac/FreeType.m68k_far.make.txt,
+ builds/mac/FreeType.ppc_carbon.make.txt,
+ builds/mac/FreeType.ppc_classic.make.txt: Updated.
+
+2006-05-03 David Turner <david@freetype.org>
+
+ Allow compilation again with C++ compilers.
+
+ * include/freetype/internal/ftmemory.h (FT_ASSIGNP,
+ FT_ASSIGNP_INNER): New macros which do the actual assignment, and
+ which exist in two variants (for C and C++).
+ Update callers accordingly.
+
+2006-05-03 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/config/ftoption.h (FT_STRICT_ALIASING): Removed.
+
+2006-05-02 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/internal/ftmemory.h: s/new/newsz/ (for C++).
+ (FT_ALLOC): Remove redundant redefinition.
+
+ * builds/compiler/gcc-dev.mk (CFLAGS) [g++]: Don't use
+ `-Wstrict-prototypes'.
+
+ * src/base/ftstream.c (FT_Stream_EnterFrame): Add cast.
+
+ * include/freetype/config/ftconfig.h (FT_BASE_DEF) [__cplusplus]:
+ Remove `extern'.
+
+2006-05-02 David Turner <david@freetype.org>
+
+ Update the memory management functions and macros to safely deal
+ with array size buffer overflows. This corresponds to attempts to
+ allocate arrays that are too large. For an example, consider the
+ following code:
+
+ count = read_uint32_from_file(); array = malloc( sizeof ( Item ) *
+ count ); for ( nn = 0; nn < count; nn++ )
+ array[nn] = read_item_from_file();
+
+ If `count' is larger than `FT_UINT_MAX/sizeof(Item)', the
+ multiplication overflows, and the array allocated os smaller than
+ the data read from the file. In this case, the heap will be
+ trashed, and this can be used as a denial-of-service attack, or make
+ the engine crash later.
+
+ The FT_ARRAY_NEW and FT_ARRAY_RENEW macros now ensure that the new
+ count is no larger than `FT_INT_MAX/item_size', otherwise a new
+ error code `FT_Err_Array_Too_Large' will be returned.
+
+ Note that the memory debugger now works again when FT_DEBUG_MEMORY
+ is defined. FT_STRICT_ALIASING has disappeared; the corresponding
+ code is now the default.
+
+
+ * include/freetype/config/ftconfig.h (FT_BASE_DEF) [!__cplusplus]:
+ Don't use `extern'.
+
+ * include/freetype/fterrdef.h (FT_Err_Array_Too_Large): New error
+ code.
+
+ * include/freetype/internal/ftmemory.h (FT_DEBUG_INNER)
+ [FT_DEBUG_MEMORY]: New macro.
+ (ft_mem_realloc, ft_mem_qrealloc): Pass new object size count also.
+ (ft_mem_alloc_debug, ft_mem_qalloc_debug, ft_mem_realloc_debug,
+ ft_mem_qrealloc_debug, ft_mem_free_debug): Removed.
+ (FT_MEM_ALLOC, FT_MEM_REALLOC, FT_MEM_QALLOC, FT_MEM_QREALLOC,
+ FT_MEM_FREE): Redefine.
+ (FT_MEM_NEW_ARRAY, FT_MEM_RENEW_ARRAY, FT_MEM_QNEW_ARRAY,
+ FT_MEM_QRENEW_ARRAY): Redefine.
+ (FT_ALLOC_MULT, FT_REALLOC_MULT, FT_MEM_QALLOC_MULT,
+ FT_MEM_QREALLOC_MULT): New macros. Update callers where
+ appropriate.
+ (FT_MEM_SET_ERROR): Slightly redefine.
+
+
+ * src/base/ftdbgmem.c (_ft_debug_file, _ft_debug_lineno)
+ [FT_DEBUG_MEMORY]: New global variables, replacing...
+ (FT_MemTable_Rec) [FT_DEBUG_MEMORY]: Remove `filename' and
+ `line_no'. Update all callers.
+ (ft_mem_debug_alloc) [FT_DEBUG_MEMORY]: Avoid possible integer
+ overflow.
+ (ft_mem_alloc_debug, ft_mem_realloc_debug, ft_mem_qalloc_debug,
+ ft_mem_qrealloc_debug, ft_mem_free_debug): Removed.
+
+ * src/base/ftmac.c (read_lwfn): Catch integer overflow.
+ * src/base/ftrfork.c (raccess_guess_darwin_hfsplus): Ditto.
+ * src/base/ftutil.c: Remove special code for FT_STRICT_ALIASING.
+ (ft_mem_alloc. ft_mem_realloc, ft_mem_qrealloc): Rewrite.
+
+
+ * include/freetype/ftstream.h (FT_FRAME_ENTER, FT_FRAME_EXIT,
+ FT_FRAME_EXTRACT, FT_FRAME_RELEASE): Use FT_DEBUG_INNER to report the
+ place where the frames were entered, extracted, exited or released
+ in the memory debugger.
+
+ * src/base/ftstream.c (FT_Stream_ReleaseFrame) [FT_DEBUG_MEMORY]:
+ Call ft_mem_free.
+ (FT_Stream_EnterFrame) [FT_DEBUG_MEMORY]: Use ft_mem_qalloc.
+ (FT_Stream_ExitFrame) [FT_DEBUG_MEMORY]: Use ft_mem_free.
+
+2006-04-30 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * src/base/ftobjs.c (Mac_Read_POST_Resource): Correct pfb_pos
+ initialization, remove extra cast to copy to pfb_lenpos. This fixes
+ parsing of PFB fonts with MacOS resource fork (bug introduced
+ 2003-09-11). Patch provided by Huib-Jan Imbens <ft@imbens.nl>.
+
+2006-04-29 Werner Lemberg <wl@gnu.org>
+
+ Further C library abstraction. Based on a patch from
+ msn2@bidyut.com.
+
+ * include/freetype/config/ftstdlib.h (FT_CHAR_BIT, FT_FILE,
+ ft_fopen, ft_fclose, ft_fseek, ft_ftell, ft_fread, ft_smalloc,
+ ft_scalloc, ft_srealloc, ft_sfree, ft_labs): New wrapper macros for
+ C library functions. Update all users accordingly (and catch some
+ other places where the C library function was used instead of the
+ wrapper functions).
+
+ * src/base/ftsystem.c: Don't include stdio.h and stdlib.h.
+ * src/gzip/zutil.h [MSDOS && !(__TURBOC__ || __BORLANDC__)]: Don't
+ include malloc.h.
+
+
+ * builds/unix/unix-def.in (datarootdir): Define, for autoconf 2.59c
+ and forthcoming versions.
+
+2006-04-28 Werner Lemberg <wl@gnu.org>
+
+ * src/lzw/ftlzw.c, src/lzw/zopen.c, src/lzw/zopen.h: Removed,
+ obsolete.
+
+2006-04-27 yi luo <luoyi.ly@gmail.com>
+
+ * builds/win32/visualc/freetype.vcproj: Updated.
+
+2006-04-26 David Turner <david@freetype.org>
+
+
+ * Version 2.2 released.
+ =======================
+
+
+ Tag sources with `VER-2-2-0'.
+
+2006-04-26 Werner Lemberg <wl@gnu.org>
+
+ * src/psaux/psobjs.c (shift_elements): Don't use FT_Long but
+ FT_PtrDiff for `delta'. Reported by Céline PILLET
+ <Celine.Pillet@Tagginfo.com>.
+
+2006-04-21 David Turner <david@freetype.org>
+
+ * include/freetype/ftincrem.h: Documentation updates.
+ (FT_Incremental_Interface): New typedef.
+
+ * include/freetype/ftmodapi.h, include/freetype/ftglyph.h:
+ Documentation updates.
+
+ * include/freetype/freetype.h: Documentation update.
+ (FT_HAS_FAST_GLYPHS): Always set to 0.
+
+ * include/freetype/ftstroke.h, src/base/ftstroke.c (FT_Stroker_New):
+ Take an FT_Library argument instead of FT_Memory.
+
+ * src/sfnt/ttcmap.c: Remove compiler warnings (gcc-4.0.2).
+
+2006-04-13 David Turner <david@freetype.org>
+
+ * src/autofit/afloader.c (af_loader_init, af_loader_load_g): Remove
+ superfluous code in the auto-fitter's loader.
+
+2006-04-05 Detlef Würkner <TetiSoft@apg.lahn.de>
+
+ * builds/amiga/makefile, builds/amiga/makefile.os4,
+ builds/amiga/smakefile: Added FT2_BUILD_LIBRARY define.
+
+2006-04-03 luoyi <luoyi.ly@gmail.com>
+
+ * builds/compiler/intelc.mk (TE): New variable.
+ (ANSIFLAGS): Updated.
+
+2006-04-03 Werner Lemberg <wl@gnu.org>
+
+ * builds/exports.mk (clean_symbols_list, clean_apinames): Removed.
+ (CLEAN): Add $(EXPORTS_LIST) and $(APINAMES_EXE).
+ (.PHONY): Updated.
+
+ * configure.ac: Minor fixes to improve --help output.
+
+
+ * docs/PROBLEMS: New file.
+
+2006-04-01 David Turner <david@freetype.org>
+
+ * docs/CHANGES: Updated.
+
+ * include/freetype/ftcache.h, include/freetype/config/ftheader.h:
+ Update documentation comments.
+
+2006-04-01 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/install.mk (uninstall): Don't handle `cache'
+ directory which no longer exists.
+
+2006-03-29 Detlef Würkner <TetiSoft@apg.lahn.de>
+
+ * src/psaux/psconv.c: Changed some variables which are expected to
+ hold negative values from `char' to `FT_Char' to allow building with
+ a compiler where `char' is unsigned by default.
+
+2006-03-27 David Turner <david@freetype.org>
+
+ * src/sfnt/ttkern.c (tt_face_get_kerning): Fix a serious bug that
+ causes some programs to go into an infinite loop when dealing with
+ fonts that don't have a properly sorted kerning sub-table.
+
+2006-03-26 Werner Lemberg <wl@gnu.org>
+
+ * src/bdf/bdflib.c (ERRMSG4): New macro.
+ (_bdf_parse_glyphs): Handle invalid BBX values.
+
+ * include/freetype/fterrdef.h (FT_Err_Bbx_Too_Big): New error
+ macro.
+
+2006-03-23 Werner Lemberg <wl@gnu.org>
+
+ * docs/CHANGES: Updated.
+
+
+ * src/tools/docmaker/tohtml.py (html_header_2): Add horizontal
+ padding between table elements.
+ (html_header_1): The `DOCTYPE' comment must be in uppercase.
+ (make_html_para): Convert `...' quotations into real left and
+ right single quotes.
+ Use `para_header' and `para_footer'.
+
+ * src/tools/docmaker/sources.py (re_bold, re_italic): Accept "'"
+ also.
+
+2006-03-23 David Turner <david@freetype.org>
+
+ Add FT_Get_SubGlyph_Info API to retrieve subglyph data. Note that
+ we do not expose the FT_SubGlyphRec structure.
+
+ * include/freetype/internal/ftgloadr.h (FT_SUBGLYPH_FLAGS_*): Moved
+ to...
+ * include/freetype/freetype.h (FT_SUBGLYPH_FLAGS_*): Here.
+ (FT_Get_SybGlyph_Info): New declaration.
+
+ * src/base/ftobjs.c (FT_Get_SubGlyph_Info): New function.
+
+
+ * src/autofit/afloader.c (af_loader_load_g): Compute lsb_delta and
+ rsb_delta correctly in edge cases.
+
+2006-03-22 Werner Lemberg <wl@gnu.org>
+
+ * src/cache/ftccache.c, (ftc_node_mru_up, FTC_Cache_Lookup)
+ [!FTC_INLINE]: Compile conditionally.
+ * src/cache/ftccache.h: Updated.
+
+ * src/cache/ftcglyph.c (FTC_GNode_Init, FTC_GNode_UnselectFamily,
+ FTC_GNode_Done, FTC_GNode_Compare, FTC_Family_Init, FTC_GCache_New):
+ s/FT_EXPORT/FT_LOCAL/.
+ (FTC_GCache_Init, FTC_GCache_Done): Commented out.
+ (FTC_GCache_Lookup) [!FTC_INLINE]: Compile conditionally.
+ s/FT_EXPORT/FT_LOCAL/.
+ * src/cache/ftcglyph.h: Updated.
+
+ * src/cache/ftcimage.c (FTC_INode_Free, FTC_INode_New):
+ s/FT_EXPORT/FT_LOCAL/.
+ (FTC_INode_Weight): Commented out.
+ * src/cache/ftcimage.h: Updated.
+
+ * src/cache/ftmanag.c (FTC_Manager_Compress,
+ FTC_Manager_RegisterCache, FTC_Manager_FlushN):
+ s/FT_EXPORT/FT_LOCAL/.
+ * src/cache/ftmanag.h: Updated.
+
+ * src/cache/ftcsbits.c (FTC_SNode_Free, FTC_SNode_New,
+ FTC_SNode_Compare): s/FT_EXPORT/FT_LOCAL/.
+ (FTC_SNode_Weight): Commented out.
+ * src/cache/ftcsbits.h: Updated.
+
+2006-03-22 Werner Lemberg <wl@gnu.org>
+
+ * src/cache/ftccache.c, src/cache/ftccache.h (FTC_Node_Destroy):
+ Remove, unused.
+
+ * src/cache/ftccmap.h: Remove, unused.
+
+ * src/cache/rules.mk (CACHE_DRV_H): Remove ftccmap.h.
+
+2006-03-21 Zhe Su <james.su@gmail.com>
+
+ * src/base/ftoutln.c (FT_Outline_Get_Orientation): Improve
+ algorithm.
+
+2006-03-21 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cfftypes.h (CFF_CharsetRec): Add `max_cid' member.
+
+ * src/cff/cffload.c (cff_charset_load): Set `charset->max_cid'.
+
+ * src/cff/cffgload.c (cff_slot_load): Change type of third parameter
+ to `FT_UInt'.
+ Check range of `glyph_index'.
+ * src/cff/cffgload.h: Updated.
+
+
+ * src/sfnt/ttcmap.c (tt_face_build_cmaps): Handle invalid offset
+ correctly.
+
+
+ * builds/freetype.mk (refdoc), docs/CHANGES, Jamfile (RefDoc),
+ README: s/2.1.10/2.2/.
+
+2006-03-21 David Turner <david@freetype.org>
+
+ * src/autofit/aflatin.c (af_latin_metrics_scale): Fix small bug
+ that crashes the auto-hinter (introduced by previous patch).
+
+2006-03-20 Werner Lemberg <wl@gnu.org>
+
+ * builds/freetype.mk (CACHE_DIR, CACHE_H): Remove.
+ (FREETYPE_H): Updated.
+
+ * src/cache/rules.mk (CACHE_H_DIR): Remove.
+ (CACHE_DRV_H): Updated.
+
+2006-03-20 David Turner <david@freetype.org>
+
+ * include/freetype/cache/ftccache.h,
+ include/freetype/cache/ftccmap.h, include/freetype/cache/ftcglyph.h
+ include/freetype/cache/ftcimage.h include/freetype/cache/ftcmanag.h
+ include/freetype/cache/ftcmru.h include/freetype/cache/ftcsbits.h:
+ Move to...
+
+ * src/cache/ftccache.h, src/cache/ftcglyph.h, src/cache/ftcimage.h,
+ src/cache/ftcsbits.h, src/cache/ftcmanag.h, src/cache/ftccmap.h,
+ src/cache/ftcmru.h: This new location.
+ Update declarations according to the changes in the corresponding
+ source files.
+
+ Note that these files are not used by FreeType clients; all public
+ APIs of the cache module have been already moved to
+ `include/freetype/ftcache.h', and all FT_CACHE_INTERNAL_XXXX_H
+ macros resolve to it.
+
+ Reason for the move is to allow modifications of the internals
+ without interferences with rogue clients. Note that there are no
+ known clients that access the cache internals at the moment.
+
+ * builds/unix/install.mk (install): Don't install headers from
+ $(CACHE_H).
+ Remove `freetype/cache' from the target directory.
+
+ * include/freetype/config/ftheader.h (FT_CACHE_MANAGER_H,
+ FT_CACHE_INTERNAL_MRU_H, FT_CACHE_INTERNAL_MANAGER_H,
+ FT_CACHE_INTERNAL_CACHE_H, FT_CACHE_INTERNAL_GLYPH_H,
+ FT_CACHE_INTERNAL_IMAGE_H, FT_CACHE_INTERNAL_SBITS_H): Point to
+ FT_CACHE_H.
+
+ * src/cache/ftcbasic.c, src/cache/ftccache.h, src/cache/ftccback.h,
+ src/cache/ftccmap.c, src/cache/ftcglyph.c, src/cache/ftcglyph.h,
+ src/cache/ftcimage.c, src/cache/ftcimage.h, src/cache/ftcmanag.c,
+ src/cache/ftcmanag.h, src/cache/ftcmru.h, src/cache/ftcsbits.c,
+ src/cache/ftcsbits.h: Don't use the FT_CACHE_INTERNAL_XXX_H macros
+ but include the headers directly (which are now in `src/cache').
+
+ * src/cache/ftccache.c: Don't use the FT_CACHE_INTERNAL_XXX_H
+ macros but include the headers directly.
+ (FTC_Cache_Init, FTC_Cache_Done, FTC_Cache_NewNode,
+ FTC_Cache_Lookup, FTC_Cache_RemoveFaceID): Declare as FT_LOCAL_DEF.
+
+ * src/cache/ftccache.c: Don't use the FT_CACHE_INTERNAL_XXX_H
+ macros but include the headers directly.
+ (FTC_MruNode_Prepend, FTC_MruNode_Up, FTC_MruNode_Remove,
+ FTC_MruList_Init, FTC_MruList_Reset, FTC_MruList_Done,
+ FTC_MruList_New, FTC_MruList_Remove, FTC_MruList_RemoveSelection):
+ Declare as FT_LOCAL_DEF.
+ (FTC_MruListFind, FTC_MruList_Lookup) [!FTC_INLINE]: Compile
+ conditionally.
+ Declare as FT_LOCAL_DEF.
+
+
+ * builds/win32/visualc/freetype.dsp: Update project file, add
+ missing base source files (ftstroke.c, ftxf86.c, etc.).
+
+
+ * src/autofit/afcjk.c, src/autofit/aflatin.c, src/base/ftobjs.c,
+ src/cff/cffobjs.c, src/cid/cidobjs.c, src/pfr/pfrobjs.c,
+ src/sfnt/sfobjs.c, src/sfnt/ttmtx.c, src/type1/t1afm.c,
+ src/type1/t1objs.c: Remove compiler warnings when building with
+ Visual C++ 6 and /W4.
+
+ * src/autofit/aflatin.c (af_latin_hints_init): Disable horizontal
+ hinting for italic/oblique fonts.
+
+
+
+ * src/truetype/ttpload.c, src/truetype/ttpload.h
+ (tt_face_get_device_metrics): Change second argument to `FT_UInt'.
+
+2006-03-06 David Turner <david@freetype.org>
+
+ * src/cache/ftcmanag.c (FTC_Manager_Lookup_Size): Prevent crashes in
+ Mozilla/FireFox print preview in Ubuntu Hoary.
+
+2006-02-28 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ * src/base/ftutil.c (ft_mem_qalloc) [FT_STRICT_ALIASING]: Do not
+ return error when size == 0.
+
+2006-02-28 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ * src/base/ftobjs.c (FT_Done_Library): Remove modules in reverse
+ order so that type42 module is removed before truetype module. This
+ avoids double free in some occasions.
+
+2006-02-28 David Turner <david@freetype.org>
+
+ * Release candidate VER-2-2-0-RC4.
+ ----------------------------------
+
+ * docs/CHANGES: Documentation updates.
+
+2006-02-28 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * modules.cfg (BASE_EXTENSIONS): Compile in ftgxval.c by default to
+ build ftvalid in ft2demos. It works as dummy ABI if gxvalid is not
+ built.
+
+2006-02-27 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/cache/ftccache.h
+ [FT_CONFIG_OPTION_OLD_INTERNALS]: Remove declaration of
+ ftc_node_done.
+
+ * src/cache/ftccache.c (ftc_node_destroy)
+ [!FT_CONFIG_OPTION_OLD_INTERNALS]: Mark as FT_LOCAL_DEF. This
+ should now fix all possible compilation options.
+
+2006-02-27 David Turner <david@freetype.org>
+
+ * src/base/ftutil.c (ft_mem_alloc, ft_mem_qalloc, ft_mem_realloc,
+ ft_mem_qrealloc): Return an error if a negative size is passed in
+ parameters.
+
+ * src/cache/ftccache.c (ftc_node_destroy): Mark as FT_BASE_DEF since
+ it needs to be exported for rogue clients.
+
+ * src/pshinter/pshglob.c (psh_blues_set_zones_0): Prevent problems
+ with malformed fonts which have an odd number of blue values (these
+ are broken according to the specs).
+
+ * src/cff/cffload.c (cff_subfont_load), src/type1/t1load.c
+ (T1_Open_Face): Modify the loaders to force even-ness of
+ `num_blue_values'.
+
+ (cff_index_access_element): Ignore invalid entries in index files.
+
+2006-02-27 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ * src/base/ftobjs.c (FT_Set_Char_Size): Check the case where width
+ or height is 0.
+
+2006-02-27 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * builds/mac/FreeType.m68k_cfm.make.txt,
+ builds/mac/FreeType.m68k_far.make.txt,
+ builds/mac/FreeType.ppc_carbon.make.txt,
+ builds/mac/FreeType.ppc_classic.make.txt: Update to new header
+ inclusion introduced on 2006-02-16.
+
+2006-02-27 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ * src/base/ftobjs.c (GRID_FIT_METRICS): New macro.
+ (ft_glyphslot_grid_fit_metrics, FT_Load_Glyph) [GRID_FIT_METRICS]:
+ Re-enable glyph metrics grid-fitting. It is now done in the base
+ layer.
+ (FT_Set_Char_Size, FT_Set_Pixel_Sizes): Make sure the width and
+ height are not too small or too large, just like we were doing in
+ 2.1.10.
+
+ * src/autofit/afloader.c (af_loader_load_g): The vertical metrics
+ are not scaled.
+
+2006-02-26 Werner Lemberg <wl@gnu.org>
+
+ * docs/release: Minor additions and clarifications.
+
+ * docs/CHANGES: Updated to reflect many fixes for backwards
+ compatibility. Still incomplete.
+
+2006-02-26 David Turner <david@freetype.org>
+
+ * src/base/ftobjs.c (ft_recompute_scaled_metrics): Re-enable
+ conservative rounding of metrics to avoid breaking clients like
+ Pango (see http://bugzilla.gnome.org/show_bug.cgi?id=327852).
+
+2006-02-25 Werner Lemberg <wl@gnu.org>
+
+ * devel/ftoption.h: Synchronize with
+ include/freetype/config/ftoption.h.
+
+ * src/cache/ftccache.c (ftc_node_destroy): Use FT_LOCAL_DEF (again).
+
+2006-02-25 David Turner <david@freetype.org>
+
+ Fix compiler warnings as well as C++ compilation problems.
+ Add missing prototypes.
+
+ * src/autofit/afcjk.c, src/base/ftobjs.c, src/base/ftutil.c,
+ src/bdf/bdfdrivr.c, src/cff/cffcmap.c, src/cff/cffobjs.c,
+ src/psaux/afmparse.c,, src/psaux/t1cmap.c, src/smooth/ftgrays.c
+ src/tools/apinames.c, src/truetype/ttdriver.c: Add various casts,
+ initialize variables, and decorate functions with FT_CALLBACK_DEF,
+ etc., to fix compiler warnings (and C++ compiling errors).
+
+ * src/cache/ftcbasic.c: Fix `-Wmissing-prototypes' warnings with
+ gcc.
+
+ * builds/unix/ftsystem.c: Don't include FT_INTERNAL_OBJECTS_H but
+ FT_INTERNAL_STREAM_H.
+
+ * src/base/ftsystem.c: Include FT_INTERNAL_STREAM_H.
+
+ * include/freetype/config/ftheader.h (FT_PFR_H): New macro.
+
+ * include/freetype/config/ftoption.h (FT_STRICT_ALIASING): Don't
+ define for C++.
+
+ * include/freetype/internal/services/svotval.h: Don't include
+ FT_OPENTYPE_VALIDATE_H but FT_INTERNAL_VALIDATE_H.
+
+ * include/freetype/internal/services/svpfr.h: Include FT_PFR_H.
+
+ * src/gzip/ftgzip.c: Include FT_GZIP_H.
+
+ * src/lzw/ftlzw.c, src/lzw/ftlzw2.c: Include FT_LZW_H.
+
+ * src/sfnt/ttbdf.c (tt_face_load_bdf_props): Rearrange code.
+
+2006-02-24 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ * src/base/ftoutln.c (FT_OUTLINE_GET_CONTOUR, ft_contour_has,
+ ft_contour_enclosed, ft_outline_get_orientation): Commented out. We
+ have to wait until `FT_GlyphSlot_Own_Bitmap' is stabilized.
+ (FT_Outline_Embolden): Use `FT_Outline_Get_Orientation'.
+
+2006-02-24 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ * include/freetype/ftbitmap.h (FT_Bitmap_Embolden): Update
+ documentation.
+
+ * include/freetype/ftsynth.h (FT_GlyphSlot_Own_Bitmap),
+ src/base/ftsynth.c (FT_GlyphSlot_Own_Bitmap): New function to make
+ sure a glyph slot owns its bitmap. It is also marked experimental
+ and due to change.
+ (FT_GlyphSlot_Embolden): Undo the last change. It turns out that
+ rendering the outline confuses some applications.
+
+2006-02-24 David Turner <david@freetype.org>
+
+ * Release candidate VER-2-2-0-RC3.
+ ----------------------------------
+
+ * src/cache/ftcbasic.c: Correct compatibility hack bug.
+
+2006-02-24 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ * include/freetype/freetype.h (FT_Size_RequestRec): Change the type
+ of `width' and `height' to `FT_Long'.
+ (enum FT_Size_Request_Type), src/base/ftobjs.c (FT_Request_Metrics):
+ New request type `FT_SIZE_REQUEST_TYPE_SCALES' to specify the scales
+ directly.
+
+2006-02-23 David Turner <david@freetype.org>
+
+ Two BDF patches from Debian libfreetype6 for 2.1.10.
+
+ * src/bdf/bdflib.c (_bdf_parse_glyphs): Fix a bug with zero-width
+ glyphs.
+ Fix a problem with large encodings.
+
+
+ Fix binary compatibility issues for gnustep-back (GNUstep backend
+ module) which still crashes under Sarge.
+
+ * src/cache/ftccmap.c (FTC_OldCMapType, FTC_OldCMapIdRec,
+ FTC_OldCMapDesc) [FT_CONFIG_OPTION_OLD_INTERNALS]: New data
+ structures and enumerations.
+ (FTC_CMapCache_Lookup) [FT_CONFIG_OPTION_OLD_INTERNALS]: New
+ compatibility code.
+
+ * src/cache/ftcbasic.c: Fix a silly bug that prevented our `hack' to
+ support rogue clients compiled against 2.1.7 to work correctly.
+ This probably explains the GNUstep crashes with the second release
+ candidate.
+
+2006-02-23 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ * include/freetype/ftoutln.h (enum FT_Orientation): New value
+ `FT_ORIENTATION_NONE'.
+
+ * src/base/ftoutln.c (FT_OUTLINE_GET_CONTOUR, ft_contour_has,
+ ft_contour_enclosed, ft_outline_get_orientation): Another version of
+ `FT_Outline_Get_Orientation'. This version differs from the public
+ one in that each part (contour not enclosed in another contour) of the
+ outline is checked for orientation.
+ (FT_Outline_Embolden): Use `ft_outline_get_orientation'.
+
+ * src/base/ftsynth.c (FT_GlyphSlot_Embolden): Render the outline and
+ use bitmap's embolden routine when the outline one failed.
+
+2006-02-22 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ * modules.cfg: Compile in ftotval.c and ftxf86.c by default for ABI
+ compatibility.
+
+ * src/sfnt/sfobjs.c (sfnt_done_face): Fix a memory leak.
+
+ * src/sfnt/ttsbit0.c (tt_sbit_decoder_load_bit_aligned,
+ tt_sbit_decoder_load_byte_aligned) [FT_OPTIMIZE_MEMORY]: Fix sbit
+ loading. (Only tested with bit aligned sbit with x_pos == 0.)
+
+ * src/truetype/ttpload.c (tt_face_load_hdmx,
+ tt_face_get_device_metrics) [FT_OPTIMIZE_MEMORY]: `hdmx' is not
+ actually used.
+
+2006-02-21 David Turner <david@freetype.org>
+
+ Add a new API named FT_Get_TrueType_Engine_Type to determine whether
+ we have a patented, unpatented, or unimplemented TrueType bytecode
+ interpreter.
+
+ The FT_Get_Module_Flags API was removed consequently.
+
+ * include/freetype/ftmodapi.h (FT_Module_Get_Flags): Removed.
+ Replaced with...
+ (FT_Get_TrueType_Engine_Type): This.
+ (FT_TrueTypeEngineType): New enumeration.
+
+ * include/freetype/internal/ftserv.h (FT_SERVICE_TRUETYPE_ENGINE_H):
+ New macro.
+
+ * src/base/ftobjs.c: Include FT_SERVICE_TRUETYPE_ENGINE_H.
+ (FT_Module_Get_Flags): Removed. Replaced with...
+ (FT_Get_TrueType_Engine_Type): This.
+
+ * src/truetype/ttdriver.c: Include FT_SERVICE_TRUETYPE_ENGINE_H.
+ (tt_service_truetype_engine): New service structure.
+ (tt_services): Register it.
+
+ * include/freetype/internal/services/svtteng.h: New file.
+
+
+ * src/sfnt/sfobjs.c (sfnt_load_face): Fix silly bug that prevented
+ embedded bitmaps from being correctly listed and used.
+
+
+ * src/sfnt/ttmtx.c (tt_face_load_hmtx): Disable memory optimization
+ if FT_CONFIG_OPTION_OLD_INTERNALS is used. The is necessary because
+ libXfont is directly accessing the HMTX data, unfortunately.
+ Fix some compiler warnings.
+ (tt_face_get_metrics): Ditto.
+
+
+ * src/pfr/pfrsbit.c (pfr_slot_load_bitmap): Fix handling of
+ character advances.
+
+2006-02-20 David Turner <david@freetype.org>
+
+ Support binary compatibility with the X.Org server's Xfont library.
+ Note that this change unfortunately prevents memory optimizations
+ for the embedded bitmap loader.
+
+ * include/freetype/internal/sfnt.h (SFNT_Interface): Move
+ `set_sbit_strike' and `load_sbit_metrics' fields to the location of
+ version 2.1.8.
+
+ * src/sfnt/sfdriver.c (tt_face_set_sbit_strike_stub): Call
+ FT_Size_Request.
+ (sfnt_interface): Updated.
+
+ * src/sfnt/ttsbit.c [FT_CONFIG_OPTION_OLD_INTERNALS]: Don't load
+ ttsbit0.c.
+ (tt_load_sbit_metrics): Make `sbit_small_metrics_fields' static.
+
+ * src/sfnt/ttsbit.h: Updated.
+
+2006-02-17 David Turner <david@freetype.org>
+
+ * builds/unix/unix-cc.in (LINK_LIBRARY): Don't filter out exported
+ functions anymore. This ensures that all FT_BASE internal functions
+ are available for dynamic linking.
+
+ * include/freetype/ftcache.h (FTC_IMAGE_TYPE_COMPARE,
+ FTC_IMAGE_TYPE_HASH), src/cache/ftcbasic.c (FTC_OldFontRec,
+ FTC_OldImageDescRec, FTC_ImageCache_Lookup, FTC_Image_Cache_New,
+ FTC_OldImage_Desc, FTC_OLD_IMAGE_FORMAT, ftc_old_image_xxx,
+ ftc_image_type_from_old_desc, FTC_Image_Cache_Lookup,
+ FTC_SBitCache_Lookup, FTC_SBit_Cache_New, FTC_SBit_Cache_Lookup)
+ [FT_CONFIG_OPTION_OLD_INTERNALS]: Try to revive old functions of the
+ cache sub-system. We try to recognize old legacy signatures with a
+ gross hack (hope it works).
+
+2006-02-17 Werner Lemberg <wl@gnu.org>
+
+ * devel/ftoption.h: Synchronize with
+ include/freetype/config/ftoption.h.
+
+2006-02-16 David Turner <david@freetype.org>
+
+ Massive changes to the internals to respect the internal object
+ layouts and exported functions of FreeType 2.1.7. Note that the
+ cache sub-system cannot be fully retrofitted, unfortunately.
+
+ * include/freetype/config/ftoption.h
+ (FT_CONFIG_OPTION_OLD_INTERNALS): New macro.
+
+ * include/freetype/ftcache.h, include/freetype/cache/ftccache.h,
+ include/freetype/cache/ftccmap.h,
+ include/freetype/internal/ftcalc.h,
+ include/freetype/internal/ftdriver.h,
+ include/freetype/internal/ftmemory.h,
+ include/freetype/internal/ftobjs.h,
+ include/freetype/internal/psaux.h, include/freetype/internal/sfnt.h,
+ include/freetype/internal/t1types.h,
+ include/freetype/internal/tttypes.h, src/base/ftcalc.c,
+ src/base/ftdbgmem.c, src/base/ftobjs.c, src/base/ftutil.c,
+ src/bdf/bdfdrivr.c, src/cache/ftccache.c, src/cache/ftccback.h,
+ src/cache/ftcmanag.c, src/cff/cffdrivr.c, src/cid/cidriver.c,
+ src/pcf/pcfdrivr.c, src/pfr/pfrdrivr.c, src/psaux/psauxmod.c,
+ src/sfnt/sfdriver.c, src/truetype/ttdriver.c, src/type1/t1driver.c,
+ src/type1/t1objs.c, src/type42/t42drivr.c, src/winfonts/winfnt.c:
+ Use FT_CONFIG_OPTION_OLD_INTERNALS to revive old functions and data
+ structures.
+
+ Move newly added structure elements to the end of the affected
+ structure and add stub fields (if FT_CONFIG_OPTION_OLD_INTERNALS is
+ defined) to assure binary compatibility with older FreeType
+ versions.
+ Use FT_CONFIG_OPTION_OLD_INTERNALS to add function stubs for old
+ functions:
+
+ ft_stub_set_char_sizes
+ ft_stub_set_pixel_sizes
+
+ Rename the following internal functions to provide the old function
+ names as stubs:
+
+ FT_Alloc -> ft_mem_alloc
+ FT_QAlloc -> ft_mem_qalloc
+ FT_Realloc -> ft_mem_realloc
+ FT_QRealloc -> ft_mem_qrealloc
+ FT_Free -> ft_mem_free
+ FT_Alloc_Debug -> ft_mem_alloc_debug
+ FT_QAlloc_Debug -> ft_mem_qalloc_debug
+ FT_Realloc_Debug -> ft_mem_realloc_debug
+ FT_QRealloc_Debug -> ft_mem_qrealloc_debug
+ FT_Free_Debug -> ft_mem_free_debug
+
+2006-02-15 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ * include/freetype/internal/ftobjs.h (FT_Face_InternalRec): Remove
+ unused `max_points' and `max_contours'.
+
+ * src/cid/cidobjs.c (cid_face_init), src/type1/t1objs.c
+ (T1_Face_Init), src/type42/t42objs.c (T42_Face_Init): Update.
+
+ * include/freetype/internal/tttypes.h (TT_FaceRec): Remove unused
+ `max_components'.
+
+ * src/truetype/ttinterp.h (TT_ExecContextRec): Remove unused
+ `loadSize' and `loadStack'.
+
+ * src/truetype/ttinterp.c (TT_Done_Context, TT_Load_Context),
+ src/sfnt/ttload.c (tt_face_load_maxp): Update.
+
+ * src/cff/cffobjs.h (cff_size_select), src/sfnt/sfdriver.c
+ (sfnt_interface), src/truetype/ttdriver.c (tt_size_request): Fix
+ compiler errors/warnings when TT_CONFIG_OPTION_EMBEDDED_BITMAPS is not
+ defined.
+
+ * src/sfnt/ttmtx.c (tt_face_load_hmtx, tt_face_get_metrics): Fix
+ possible segment faults for the non-FT_OPTIMIZE_MEMORY'ed versions.
+ (finally!)
+
+
+ For most OpenType tables, `tt_face_load_xxxx' simply loads the table
+ and `face->root' is set later in `sfnt_load_face'. Here, we try to
+ make this work for _all_ tables. Also improve tracing messages.
+
+ * src/sfnt/ttsbit.c, src/sfnt/ttsbit0.c, src/sfnt/ttload.c,
+ src/sfnt/ttmtx.c: all `tt_face_load_xxxx' should load the table and
+ then exit. Error handling or setting face->root is done later in
+ `sfnt_load_face'.
+
+ * src/sfnt/sfobjs.c (sfnt_load_face): Work harder.
+ Mac bitmap-only fonts are not scalable.
+ Check that `face->header.Units_Per_EM' is not zero.
+ (LOAD_, LOADM_): Emit pretty trace messages.
+
+ * src/sfnt/ttsbit0.c (tt_face_load_strike_metrics): Read metrics
+ from `eblc'.
+
+ * src/sfnt/ttcmap.c (tt_face_build_cmaps), src/sfnt/ttpost.c
+ (load_format_20, load_format_25, tt_face_get_ps_name): Use
+ face->max_profile.numGlyphs, instead of face->root.num_glyphs.
+
+2006-02-14 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/ftoutln.h (FT_Outline_Embolden): Mention in
+ documentation that negative strength values are possible.
+ Give an example call.
+
+ * include/freetype/freetype.h (FT_GlyphSlotRec): Improve
+ documentation of `outline' field.
+
+ * src/sfnt/sfobjc.s: Inckude FT_INTERNAL_DEBUG_H.
+ * src/sfnt/sfdriver.c: Include ttmtx.h.
+
+ * src/autofit/afcjk.c: Include aftypes.h and aflatin.h.
+
+2006-02-14 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ * src/sfnt/ttmtx.c (tt_face_get_metrics): Typo.
+
+2006-02-14 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ * src/sfnt/ttmtx.c (tt_face_load_hhea, tt_face_load_hmtx): Simply
+ return error if table is missing.
+ Check table length in non-FT_OPTIMIZE_MEMORY'ed `tt_face_load_hmtx'.
+
+ * src/sfnt/sfobjs.c (sfnt_load_face): Take care of missing metrics
+ tables. The last change makes Mac bitmap-only font not load and
+ this fixes it.
+
+ * src/truetype/ttgload.c (load_truetype_glyph): Fix compilation
+ error when FT_CONFIG_OPTION_INCREMENTAL is defined.
+
+2006-02-13 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ Clean up the SFNT_Interface. In this final pass, `load_hmtx' is
+ split from `load_hhea'.
+
+ * include/freetype/internal/sfnt.h, src/sfnt/sfdriver.c,
+ src/sfnt/ttmtx.c, src/sfnt/ttmtx.h: Split `hmtx' from `hhea'.
+
+ * src/sfnt/sfobjs.c (sfnt_load_face): Update.
+
+2006-02-13 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ * src/sfnt/ttmtx.h, src/sfnt/ttmtx.c: Why are there two copies of
+ code...
+
+2006-02-13 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ Clean up the SFNT_Interface. In this pass, we want to treat the
+ font directory (offset table and table directory) as a normal table
+ like the others. This also means that TTCs are no longer recognized
+ there but in `init_face'.
+
+ * include/freetype/internal/sfnt.h (SFNT_Interface),
+ src/sfnt/sfdriver.c: `load_sfnt_header' and `load_directory' are
+ combined and renamed to `load_font_dir'.
+
+ * src/sfnt/ttload.h, src/sfnt/ttload.c:
+ s/sfnt_dir_check/check_table_dir/.
+ `sfnt_init' is moved to sfobjs.c and renamed to `sfnt_open_font'.
+ `tt_face_load_sfnt_header' and `tt_face_load_directory' are combined
+ and renamed to `tt_face_load_font_dir'.
+
+ * src/sfnt/sfobjs.c (sfnt_init_face): Recognize TTC here.
+
+2006-02-13 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ Clean up the SFNT_Interface. Table loading functions are now named
+ after the tables' tags; `hdmx' is TrueType-specific and thus the
+ code is moved to the truetype module; `get_metrics' is moved here
+ from the truetype module so that the code can be shared with the cff
+ module.
+
+ This pass involves no real changes. That is, the code is moved
+ verbatim mostly. The only exception is the return value of
+ `tt_face_get_metrics'.
+
+ * include/freetype/internal/sfnt.h, src/sfnt/rules.mk,
+ src/sfnt/sfdriver.c, src/sfnt/sfnt.c, src/sfnt/sfobjs.c,
+ src/sfnt/ttload.c, src/sfnt/ttload.h, src/sfnt/ttsbit.c,
+ src/sfnt/ttsbit.h, src/sfnt/ttsbit0.c: Clean up the SFNT_Interface.
+
+ * src/sfnt/ttmtx.c, src/sfnt/ttmtx.h: New files. Metrics-related
+ tables' loading and parsing code is moved to here.
+ Move `tt_face_get_metrics' here from the truetype module. The
+ return value is changed from `void' to `FT_Error'.
+
+ * include/freetype/internal/fttrace.h: New trace: ttmtx.
+
+ * src/truetype/ttpload.c, src/truetype/ttpload.h: `hdmx' loading and
+ parsing code is moved here.
+ New function `tt_face_load_prep' split from `tt_face_load_fpgm'.
+ `tt_face_load_fpgm' returns `FT_Err_Ok' if `fpgm' doesn't exist.
+
+ * src/cff/cffgload.c, src/cff/cffobjs.c: Update.
+
+ * src/truetype/ttgload.c, src/truetype/ttobjs.c: Update.
+
+2006-02-11 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ * src/autofit/afcjk.c (af_cjk_metrics_init): Fix a stupid bug...
+
+ * src/autofit/aflatin.c (af_latin_metrics_init_widths): Use
+ AF_LatinMetricsRec as the dummy metrics because we cast the metrics
+ to it later in `af_latin_hints_link_segments'.
+
+2006-02-11 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ * include/freetype/config/ftoption.h (AF_CONFIG_OPTION_CJK): #define
+ to enable autofit CJK script support. (#define'd by default.)
+
+ * src/autofit/aflatin.h (AF_LATIN_CONSTANT): New macro.
+
+ * src/autofit/aflatin.c (af_latin_metrics_init_widths): Make sure
+ that `edge_distance_threshold' is always set.
+ (af_latin_hints_link_segments): Potential divide-by-zero bug.
+ Use latin constant in the scoring formula.
+
+ * src/autofit/afcjk.c: Minor updates due to the above three changes.
+
+ * docs/TODO, docs/CHANGES: Updated.
+
+2006-02-09 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ Introduce experimental autofit CJK module based on akito's autohint
+ patch. You need to #define AF_MOD_CJK in afcjk.c to enable it.
+
+ * src/autofit/afglobal.c, src/autofit/afcjk.h, src/autofit/afcjk.c,
+ src/autofit/rules.mk, src/autofit/autofit.c, src/autofit/aftypes.h:
+ Add CJK module based on akito's autohint patch.
+
+ * src/autofit/afhints.h (AF_SegmentRec): New field `len' for the
+ overlap length of the segments.
+ (AF_SEGMENT_LEN, AF_SEGMENT_DIST): New macros.
+
+ * src/autofit/aflatin.h (af_latin_metrics_init_widths),
+ src/autofit/aflatin.c (af_latin_metrics_init_widths): Made
+ `FT_LOCAL'.
+ Use the character given by the caller.
+ (af_latin_metrics_init_widths, af_latin_hints_link_segments): Scale
+ the thresholds.
+
+ * src/autofit/afloader.c (af_loader_load_g): Respect
+ AF_SCALER_FLAG_NO_ADVANCE.
+
+2006-02-09 Werner Lemberg <wl@gnu.org>
+
+ * src/cid/cidparse.c (cid_parse_new): Remove shadowing variable.
+
+2006-02-09 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * src/cid/cidparse.c (cid_parse_new): Fix for abnormally short or
+ broken CIDFont. Reported by Taek Kwan(TK) Lee (see ft-devel
+ 2005-11-02).
+
+2006-02-08 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * builds/unix/configure.ac: Fix bug for `--with-old-mac-fonts'
+ option on UNIX platform. It has been broken since 2006-01-11.
+
+2006-02-01 Werner Lemberg <wl@gnu.org>
+
+ * src/otvalid/module.mk: s/otvalid_module_class/otv_module_class/.
+ * src/gxvalid/module.mk: s/gxvalid_module_class/gxv_module_class/.
+
+ * builds/unix/unixddef.mk: Actually do define PLATFORM (fixing
+ change from 2006-01-31).
+ (TOP_DIR, OBJ_DIR): Update.
+
+ * builds/unix/install.mk (install): Fix path for ftmodule.h.
+
+ * Makefile, *.mk, builds/unix/unix-cc.in, builds/unix-def.in: Use
+ `?=' where appropriate.
+
+ * builds/detect.mk (TOP_DIR), builds/os2/os2-dev.mk (TOP_DIR),
+ builds/win32/w32-dev.mk (TOP_DIR): Removed. Defined elsewhere.
+
+2006-01-31 Werner Lemberg <wl@gnu.org>
+
+ Implement new, simplified module selection. With GNU make it is now
+ sufficient to modify a single file, `modules.cfg', to control the
+ inclusion of modules and base extension files.
+
+ This change also fixes the creation of ftmodule.h; it now depends on
+ `modules.cfg' and thus is rebuilt only if necessary.
+
+ Finally, a version of `ftoption.h' in OBJ_DIR is preferred over the
+ default location.
+
+ * modules.cfg: New file.
+
+ * builds/freetype.mk: Don't include `modules.mk'.
+ Include all `rules.mk' files as specified in `modules.cfg'.
+ (FTOPTION_FLAG, FTOPTION_H): New variables.
+ (FT_CFLAGS): Add macro definition for FT_CONFIG_MODULES_H.
+ Add FTOPTION_FLAG.
+ ($(FT_INIT_OBJ)): Don't use FT_MODULE_LIST.
+ (CONFIG_H): Add FTMODULE_H and FTOPTION_H.
+ (INCLUDES): Add DEVEL_DIR.
+ (INCLUDE_FLAGS, FTSYS_SRC, FTSYS_OBJ, FTDEBUG_SRC, FTDEBUG_OBJ,
+ OBJ_M, OBJ_S): Use `:=', not `='.
+ (remove_ftmodule_h): New phony target to delete `ftmodule.h'.
+ (distclean): Add remove_ftmodule_h.
+
+ * builds/modules.mk: (MODULE_LIST): Removed.
+ (make_module_list, clean_module_list): Replace targets
+ with...
+ (FTMODULE_H_INIT, FTMODULE_H_CREATE, FTMODULE_H_DONE): New
+ variables. Reason for the change is that it is not possible to have
+ a phony prerequisite which is run only if the target file must be
+ rebuilt (phony prerequisites act like subroutines and are *always*
+ executed). We only want to rebuild `ftmodule.h' if `module.cfg' is
+ changed.
+ Update all callers.
+ ($FTMODULE_H)): Rule to create `ftmodule.h', depending on
+ `modules.cfg'.
+
+ * builds/toplevel.mk: Rewrite and simplify module handling.
+ (MODULES_CFG, FTMODULE_H): New variables.
+ Include MODULES_CFG.
+ (MODULES): New variable to include all `module.mk' and `rules.mk'
+ files. We no longer use make's `wildcard' function for this.
+
+ * Makefile (USE_MODULES): Remove. Update all users.
+ (OBJ_DIR): Define it here.
+
+ * src/*/module.mk: Change
+
+ make_module_list: foo
+ foo: ...
+
+ to
+
+ FTMODULE_H_COMMANDS += FOO
+ define FOO
+ ...
+ endef
+
+ in all files. `FTMODULE_H_COMMANDS' is used in `FTMODULE_H_CREATE'.
+
+ * src/base/rules.mk (BASE_EXT_SRC): Use BASE_EXTENSIONS.
+
+ * builds/unix/detect.mk (setup): Always execute `configure' script.
+ (have_mk): Rename to...
+ (have_Makefile): This.
+ Don't use `strip' function.
+
+ * builds/unix/unix.mk: Include `install.mk' only if BUILD_PROJECT is
+ defined.
+ (have_mk): Don't use `strip' function.
+ Test for unix-def.mk in OBJ_DIR, not BUILD_DIR (and invert the test
+ accordingly).
+
+ * builds/unix/install.mk (install, uninstall): Handle `ftmodule.h'.
+
+ * builds/os2/os2-dev.mk, builds/unix/unix-dev.mk,
+ builds/win32/w32-bccd.mk, builds/win32/w32-dev.mk: Don't define
+ BUILD_DIR but DEVEL_DIR for development header files.
+
+ * builds/ansi/ansi-def.mk (TOP_DIR, OBJ_DIR),
+ builds/beos/beos-def.mk (TOP_DIR, OBJ_DIR), builds/unix/unix-def.in
+ (TOP_DIR, OBJ_DIR): Removed. Defined elsewhere.
+
+ * builds/dos/dos-def.mk (OBJ_DIR), builds/os2/os2-def.mk (OBJ_DIR),
+ builds/win32/win32-def.mk (OBJ_DIR): Removed. Defined elsewhere.
+
+ * builds/unix/unixddef.mk: Don't define BUILD_DIR but DEVEL_DIR for
+ development header files.
+ Don't define PLATFORM.
+
+ * configure: Copy `modules.cfg' to builddir if builddir != srcdir.
+ Update snippet taken from autoconf's m4sh.m4 to current CVS version.
+ Be more verbose.
+
+ * include/freetype/config/ftmodule.h: Add comments -- this file is
+ no longer used if FreeType is built with GNU make.
+
+ * docs/CHANGES, docs/CUSTOMIZE, docs/INSTALL, docs/INSTALL.ANY,
+ docs/INSTALL.GNU, docs/INSTALL.UNX: Document new build mechanism.
+ Other minor updates.
+
+ * modules.txt: Removed. Contents included in `modules.cfg'.
+
+
+ * include/freetype/internal/ftmemory.h (FT_QAlloc_Debug,
+ FT_Free_Debug) [FT_STRICT_ALIASING]: Fix typos.
+
+ * src/base/ftdbgmem.c (FT_Alloc_Debug, FT_Realloc_Debug,
+ FT_QAlloc_Debug, FT_QRealloc_Debug, FT_Free_Debug)
+ [FT_STRICT_ALIASING]: Implement.
+
+2006-01-31 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ * src/cff/cffobjs.c (cff_face_init), src/cid/cidobjs.c
+ (cid_face_init), src/pfr/pfrobjs.c (pfr_face_init),
+ src/type1/t1objs.c (T1_Face_Init): Set face->height to MAX(1.2 *
+ units_per_EM, ascender - descender).
+
+2006-01-31 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ * include/freetype/internal/t1types.h (AFM_FontInfo),
+ src/psaux/afmparse.c, src/tools/test_afm.c: Read `FontBBox',
+ `Ascender', and `Descender' from an AFM.
+
+ * src/type1/t1afm.c (T1_Read_Metrics): Use the metrics from the AFM.
+
+ * include/freetype/freetype.h (FT_FaceRec): Mention that fields may
+ be changed after file attachment.
+
+2006-01-28 Werner Lemberg <wl@gnu.org>
+
+ * src/*/module.mk (.PHONY): Add.
+
+2006-01-27 Werner Lemberg <wl@gnu.org>
+
+ * README, docs/FTL.TXT: Fix email address for bug reports.
+ Other minor formatting.
+
+ * devel/ftoption.h: Synchronize with
+ include/freetype/config/ftoption.h.
+
+ * src/autofit/module.mk (add_autofit_module), src/bdf/module.mk
+ (add_bdf_module), src/type42/module.mk (add_type42_driver): Fix
+ whitespace.
+
+ * src/smooth/module.mk (add_smooth_renderer): Add lcd and lcdv
+ renderer classes.
+
+2006-01-27 David Turner <david@freetype.org>
+
+ * builds/unix/configure.ac: Fix build problem on Cygwin.
+
+ * builds/unix/install.mk (install): Don't install the internal
+ headers, and remove existing ones if found in the target install
+ directory.
+
+ * src/autofit/afwarp.c: Add simple #ifdef to prevent compilation
+ if the warp hinter isn't active (it shouldn't, still experimental).
+
+ * Jamfile, include/freetype/config/ftmodule.h: Remove `gxvalid'
+ and `otvalid' from the list of modules that are linked statically
+ to a given FreeType library. Functionality has been moved to the
+ `ftvalid' CVS module.
+
+ Note also that current Make-based build system still compiles the
+ modules though.
+
+ * include/freetype/config/ftoption.h (FT_STRICT_ALIASING): New macro
+ which controls the definitions of the memory management functions to
+ avoid warnings with recent versions of GCC. This macro is only here
+ to be disabled, in case we detect problems with the new scheme.
+
+ NOTE: Disable macro to use the memory debugger -- this will be fixed
+ later!
+
+ * include/freetype/internal/ftmemory.h, src/base/ftutil.c (FT_Alloc,
+ FT_QAlloc, FT_Realloc, FT_QRealloc, FT_Free) [FT_STRICT_ALIASING]:
+ New versions.
+
+
+ * builds/win32/visualc/freetype.dsp: Updating project file to
+ define FT2_BUILD_LIBRARY, and remove gxvalid + otvalid modules from
+ compilation.
+
+
+ * builds/freetype.mk (FT_CFLAGS), Jamfile (DEFINES): Define the
+ macro FT2_BUILD_LIBRARY when compiling the library.
+
+ * include/freetype/config/ftheader.h: Remove inclusions of internal
+ headers except if the macro FT2_BUILD_LIBRARY is defined.
+
+
+ * include/freetype/internal/psaux.h (AFM_KernPair, AFM_TrackKern,
+ AFM_FontInfo): Move structure declarations to...
+ * include/freetype/internal/t1types.h: This file.
+
+
+ * (many files): Fix compiler warnings.
+ Various minor reorganizations.
+
+
+ * src/cff/cffload.c (cff_font_done): Don't free static array
+ `subfonts'.
+
+ * src/otvalid/otvcommn.c (otv_ClassDef_validate),
+ src/otvalid/otvgpos.c (otv_x_sxy): Fix debugging information.
+
+
+ Get rid of writable static variables (i.e., the string table) in
+ afmparse, and fix compilation in FT2_MULTI mode.
+
+ * src/psaux/afmparse.c: Include ft2build.h and FT_FREETYPE_H.
+ (AFM_MAX_ARGUMENTS): Define...
+ * src/psaux/afmparse.h: Here.
+ * src/psaux/Jamfile (_sources): Add afmparse.
+
+ * src/psaux/psconv.c: Include psconv.h.
+
+ * src/type1/t1afm.c: Don't include FT_INTERNAL_TYPE1_TYPES_H but
+ FT_INTERNAL_POSTSCRIPT_AUX_H.
+ * src/type1/t1afm.h: Include FT_INTERNAL_TYPE1_TYPES_H.
+
+2006-01-23 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ * include/freetype/freetype.h (FT_Select_Size): Rename the second
+ argument from `idx' to `strike_index'.
+ (FT_Size_Request_Type): Add FT_SIZE_REQUEST_TYPE_MAX to the end of
+ this enum.
+
+ * include/freetype/internal/ftobjs.h (FT_REQUEST_WIDTH,
+ FT_REQUEST_HEIGHT): New macros to get the width and height of a
+ request, in fractional pixels.
+
+ * include/freetype/internal/ftobjs.h (FT_Select_Metrics,
+ FT_Request_Metrics), src/base/ftobjs.c (FT_Select_Metrics,
+ FT_Request_Metrics): New base functions to set the font metrics. They
+ were part of FT_Select_Size/FT_Request_Size and are made independent
+ functions so that metrics are not set again and again.
+
+ * src/base/ftobjs.c (FT_Select_Size, FT_Request_Size): Metrics are set
+ only when driver's size_select/size_request is NULL. That is, drivers
+ should set the metrics themselves.
+ (FT_Match_Size): Round before matching. This was what we did and it
+ does cause some problems without rounding.
+
+ * src/cff/cffobjs.c (cff_size_select), src/truetype/ttdriver.c
+ (tt_size_select): Set the font metrics.
+ s/index/strike_index/.
+ The scaled metrics are always preferred over strikes' metrics, even
+ when some strike is selected. This is done because the strikes'
+ metrics are not reliable, e.g., the sign of the descender is wrong for
+ some fonts.
+
+ * src/cff/cffobjs.c (cff_size_request), src/truetype/ttdriver.c
+ (tt_size_request): Set the font metrics.
+ Call cff_size_select/tt_size_select when some strike is matched.
+
+ * src/bdf/bdfdrivr.c, src/cff/cffobjs.c, src/cid/cidobjs.c,
+ src/pcf/pcfdrivr.c, src/truetype/ttdriver.c, src/type1/t1objs.c,
+ src/type1/t1objs.h, src/type42/t42objs.c, src/winfonts/winfnt.c:
+ Set the font metrics.
+ s/index/strike_index/.
+
+ * src/tools/test_afm.c, src/psaux/psconv.c: Older versions of these
+ files were committed. Just a catch-up.
+ (PS_Conv_ToFixed): Remove the `goto'.
+ (PS_Conv_ASCIIHexDecode, PS_Conv_EexecDecode): Speed up a little.
+
+ * src/sfnt/ttsbit.c (tt_face_load_sbit_strikes,
+ tt_face_load_strike_metrics), src/sfnt/ttsbit0.c
+ (tt_face_load_sbit_strikes, tt_face_load_strike_metrics): The
+ advertised metrics in `available_sizes' are different from those
+ actually used.
+
+2006-01-23 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ * src/psaux/psaux.c src/psaux/psauxmod.c src/type1/t1driver.c: Make
+ AFM parser optional, controlled by `T1_CONFIG_OPTION_NO_AFM'.
+
+2006-01-22 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/install-sh, builds/unix/mkinstalldirs: Updated from
+ `texinfo' CVS module at savannah.gnu.org.
+
+2006-01-21 Werner Lemberg <wl@gnu.org>
+
+ * src/autofit/rules.mk (AUTOF_DRV_SRC): Add afwarp.c.
+
+ * src/autofit/afloader.c (af_loader_load_g): Move AF_USE_WARPER up
+ to avoid compiler warnings.
+
+ * src/autofit/afwarp.c (af_warper_compute_line_best): Remove
+ shadowing variable declarations.
+ Fix warning parameters and replace printf with AF_LOG.
+ (af_warper_compute): Remove unused variable.
+
+2006-01-20 David Turner <david@freetype.org>
+
+ Adding experimental implementation of `warp hinting' (new hinting
+ algorithm for gray-level and LCD rendering). It is disabled by
+ default, you need to #define AF_USE_WARPER in aftypes.h.
+
+ * src/autofit/afhints.c (af_glyph_hints_scale_dim) [AF_USE_WARPER]:
+ New function.
+ * src/autofit/afhints.h: Updated.
+
+ * src/autofit/aflatin.c [AF_USE_WARPER]: Include afwarp.h.
+ (af_latin_hints_init) [AF_USE_WARPER]: Reset mode to
+ FT_RENDER_MODE_NORMAL if an LCD mode is selected.
+ (af_latin_hints_apply) [AF_USE_WARPER]: Call af_warper_compute
+ appropriately.
+
+ * src/autofit/afloader.c (af_loader_load_g) [!AF_USER_WARPER]:
+ Isolate code for adjusting metrics.
+
+ * src/autofit/aftypes.h (AF_USE_WARPER): New macro (commented out by
+ default).
+
+ * src/autofit/afwarp.c, src/autofit/afwarp.h: New files.
+
+ * src/autofit/autofit.c [AF_USE_WARPER]: Include afwarp.c.
+
+ * src/autofit/Jamfile (_sources): Add afwarp.
+
+2006-01-19 David Turner <david@freetype.org>
+
+ * src/sfnt/ttsbit0.c (tt_face_load_strike_metrics): Fix small bug
+ that prevented compilation when FT_OPTIMIZE_MEMORY is defined.
+
+2006-01-19 Brian Weed <bw@imaginengine.com>
+
+ * builds/win32/visualc/freetype.dsp: Updated.
+
+2006-01-17 Werner Lemberg <wl@gnu.org>
+
+ Use pscmap service in CFF module.
+
+ * src/cff/cffcmap.c (cff_cmap_uni_pair_compare): Removed.
+ (cff_sid_to_glyph_name): New function.
+ (cff_cmap_unicode_init, cff_cmap_unicode_done,
+ cff_cmap_unicode_char_index, cff_cmap_unicode_char next): Use pscmap
+ service.
+ (cff_cmap_unicode_class_rec): Updated.
+ * src/cff/cffcmap.h (CFF_CMapUnicode, CFF_CMap_UniPair): Removed.
+
+
+ * src/psnames/psmodule.c (ps_unicodes_char_next): Fix `unicode'
+ return value.
+
+
+ * src/psaux/afmparse.c (afm_parser_read_vals): Use double casting
+ to avoid compiler warnings regarding type-punning.
+
+2006-01-16 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ * src/psaux/afmparse.c, src/psaux/afmparse.h: New files which
+ implement an AFM parser.
+
+ * src/psaux/psconv.c, src/psaux/psconv.h: New files to provide
+ conversion functions (e.g., PS real number => FT_Fixed) for the
+ PS_Parser and AFM_Parser. Some of the functions are taken, with
+ some modifications, from the file psobjs.c.
+
+ * src/psaux/psobjs.c: Use functions from psconv.c.
+
+ * include/freetype/internal/psaux.h, src/psaux/psauxmod.c: Add
+ `AFM_Parser' to the `psaux' service.
+
+ * src/psaux/psaux.c, src/psaux/rules.mk (PSAUX_DRV_SRC): Include
+ those new files.
+
+ * src/tools/test_afm.c: A test program for AFM parser.
+
+ * include/freetype/internal/services/svkern.h: New file providing a
+ `Kerning' service. It is currently only used to get the track
+ kerning information.
+
+ * include/freetype/internal/ftserv.h (FT_SERVICE_KERNING_H): New
+ macro.
+
+ * src/type1/t1driver.c, src/type1/t1objs.c, src/type1/t1afm.c,
+ src/type1/t1afm.h: Update to use the AFM parser.
+ Provide the `Kerning' service.
+
+ * include/freetype/freetype.h, src/base/ftobjs.c: New API
+ `FT_Get_Track_Kerning'.
+
+2006-01-15 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ * include/freetype/internal/ftobjs.h, src/base/ftobjs.c,
+ src/bdf/bdfdrivr.c, src/cff/cffgload.c, src/cid/cidgload.c,
+ src/pcf/pcfdrivr.c, src/type1/t1gload.c, src/winfonts/winfnt.c:
+ s/ft_fake_vertical_metrics/ft_synthesize_vertical_metrics/.
+
+ * docs/CHANGES: Mention that vertical metrics are synthesized for
+ fonts not having this info.
+
+2006-01-15 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ * include/freetype/internal/ftobjs.h (ft_fake_vertical_metrics),
+ src/base/ftobjs.c (ft_fake_vertical_metrics): New function to fake
+ vertical metrics.
+
+ * src/cff/cffgload.c, src/cid/cidgload.c, src/pcf/pcfdrivr.c,
+ src/type1/t1gload.c, src/winfonts/winfnt.c: Fake vertical metrics,
+ which are monotone.
+
+ * src/truetype/ttgload.c (compute_glyph_metrics): Some fixes and
+ formattings in vertical metrics faking. There is still room for
+ improvements (and so does the CFF module).
+
+2006-01-15 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ * src/bdf/bdfdrivr.c (BDF_Glyph_Load), src/pcf/pcfdrivr.c
+ (PCF_Glyph_Load), src/winfonts/winfnt.c (FNT_Load_Glyph): Don't set
+ the linear advance fields as they are only used by the outline
+ glyphs.
+
+ * include/freetype/freetype.h: Documentation updates and
+ clarifications.
+ The meaning of FT_LOAD_FORCE_AUTOHINT is changed so that no real
+ change need be made to the code.
+
+ * src/base/ftobjs.c (FT_Load_Glyph): Resolve flag dependencies and
+ decide whether to use the auto-hinter according to documentation.
+ There should to be no real difference.
+ Some checks (e.g., is text height positive?) after the glyph is
+ loaded.
+ (FT_Select_Size, FT_Request_Size): Scales are set to wrong values.
+ Be careful that scales won't be negative.
+
+2006-01-14 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ * docs/CHANGES: Mention the size selection change.
+
+ * src/bdf/bdfdrivr.c (BDF_Size_Request, BDF_Size_Select),
+ src/pcf/pcfdrivr.c (PCF_Size_Request, PCF_Size_Select),
+ src/winfonts/winfnt.c (FNT_Size_Request, FNT_Size_Select): Do size
+ matching for requests of type NOMINAL and REAL_DIM.
+
+ * src/winfonts/winfnt.c (FNT_Face_Init): Print trace message when
+ `pixel_height' is used for nominal height.
+
+ * src/base/ftobjs.c (FT_Request_Size): Call `FT_Match_Size' if the
+ face is bitmap only and driver doesn't provide `request_size'. This
+ is added merely for completion as no driver satisfies the conditions.
+
+2006-01-13 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ Introduce new size selection interface.
+
+ * include/freetype/internal/ftdriver.h (struct FT_Driver_ClassRec):
+ Replace `set_char_sizes' and `set_pixel_sizes' by `request_size' and
+ `select_size'.
+
+ * include/freetype/freetype.h (FT_Select_Size, FT_Size_Request_Type,
+ FT_Size_Request, FT_Request_Size, FT_Select_Size), src/base/ftobjs.c
+ (FT_Select_Size, FT_Request_Size): API additions to export the new
+ size selection interface.
+
+ * src/base/ftobjs.c (FT_Set_Char_Size, FT_Set_Pixel_Sizes): Use
+ `FT_Request_Size'.
+
+ * include/freetype/internal/ftobjs.h (FT_Match_Size),
+ src/base/ftobjs.c (FT_Match_Size): New function to match a size
+ request against `available_sizes'. Drivers supporting bitmap strikes
+ can use this function to implement `request_size'.
+
+ * src/bdf/bdfdrivr.c, src/cid/cidobjs.c, src/cid/cidobjs.h,
+ src/cid/cidriver.c, src/pcf/pcfdrivr.c, src/type1/t1driver.c,
+ src/type1/t1objs.c, src/type1/t1objs.h, src/type42/t42drivr.c,
+ src/type42/t42objs.c, src/type42/t42objs.h, src/winfonts/winfnt.c:
+ Update to new size selection interface.
+
+ * src/cff/cffdrivr.c, src/cff/cffgload.c, src/cff/cffobjs.c,
+ src/cff/cffobjs.h, src/truetype/ttdriver.c, src/truetype/ttgload.c,
+ src/truetype/ttobjs.c, src/truetype/ttobjs.h: Update to new size
+ selection interface.
+ Make `strike_index' FT_ULong and always defined.
+ Use `load_strike_metrics' provided by SFNT interface.
+
+2006-01-13 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ * include/freetype/internal/sfnt.h (SFNT_Interface): New method
+ `load_strike_metrics' used to load the strike's metrics.
+
+ * src/sfnt/sfdriver.c, src/sfnt/ttsbit.c, src/sfnt/ttsbit.h,
+ src/sfnt/ttsbit0.c: New function `tt_face_load_strike_metrics'.
+
+ * src/pfr/pfrobjs.c (pfr_face_init): Set FT_Bitmap_Size correctly.
+
+ * src/winfonts/winfnt.c (FNT_Face_Init): Use `nominal_point_size' for
+ nominal size unless it is obviously incorrect.
+
+ * include/freetype/freetype.h (FT_Bitmap_Size): Update the comments on
+ FNT driver.
+
+2006-01-12 Werner Lemberg <wl@gnu.org>
+
+ Prepare use of pscmap service within CFF module.
+
+ * include/freetype/internal/services/svpscmap.h: Include
+ FT_INTERNAL_OBJECTS_H.
+ (PS_Unicode_Index_Func): Removed. Unused.
+ (PS_Macintosh_Name_Func): Renamed to...
+ (PS_Macintosh_NameFunc): This.
+ Update all callers.
+ (PS_Adobe_Std_Strings_Func): Renamed to...
+ (PS_Adobe_Std_StringsFunc): This.
+ Update all callers.
+ (PS_UnicodesRec): This is the former `PS_Unicodes' structure.
+ Add `cmap' member.
+ Update all callers.
+ (PS_Unicodes): This is now a typedef'd pointer to PS_UnicodesRec.
+ Update all callers.
+ (PS_Glyph_NameFunc): New typedef.
+ (PS_Unicodes_InitFunc): Change arguments to expect a function
+ and generic data pointer which returns a glyph name from a given
+ index.
+
+ * src/psnames/psmodule.c (ps_unicodes_init, ps_unicodes_char_index,
+ ps_unicodes_char_next, pscmaps_interface): Updated.
+
+ * include/freetype/internal/t1types.h (T1_FaceRec): Updated.
+
+ * src/psaux/t1cmap.h (T1_CmapStdRec): Updated.
+ (T1_CmapUnicode, T1_CmapUnicodeRec): Removed.
+
+ * src/psaux/t1cmap.c (t1_get_glyph_name): New callback function.
+ (t1_cmap_unicode_init, t1_cmap_unicode_done,
+ t1_cmap_unicode_char_index, t1_cmap_unicode_char_next,
+ t1_cmap_unicode_class_rec): Updated.
+
+ * src/type42/t42types.h (T42_FaceRec): Updated.
+
+2006-01-11 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * include/freetype/ftmac.h: Add declaration of new functions
+ FT_New_Face_From_FSRef and FT_GetFile_From_Mac_ATS_Name that
+ were introduced by the jumbo patch on 2006-01-11.
+
+2006-01-11 Werner Lemberg <wl@gnu.org>
+
+ Fix Savannah bug #15056 and use pscmap service in psaux module.
+
+ * include/freetype/internal/services/svpscmap.h (PS_UniMap): Use
+ FT_UInt32 for `glyph_index'.
+ (PS_Unicodes_InitFunc): Use FT_String for `glyph_names'.
+ (PS_Unicodes_CharIndexFunc): Use FT_UInt32 for `unicode'.
+ (PS_Unicodes_CharNextFunc): Make second argument a pointer to
+ FT_UInt32.
+
+ * src/psnames/psmodule.c (VARIANT_BIT, BASE_GLYPH): New macros.
+ (ps_unicode_value): Set VARIANT_BIT in return value if glyph is a
+ variant glyph (this is, it has non-leading `.' in its name).
+ (compare_uni_maps): Sort base glyphs before variant glyphs.
+ (ps_unicodes_init): Use FT_String for `glyph_names' argument.
+ Reallocate only if number of used entries is much smaller.
+ Updated to handle variant glyphs.
+ (ps_unicodes_char_index, ps_unicodes_char_next): Prefer base glyphs
+ over variant glyphs.
+ Simplify code.
+
+ * src/psaux/t1cmap.c (t1_cmap_uni_pair_compare): Removed.
+ (t1_cmap_unicode_init, t1_cmap_unicode_char_index,
+ t1_cmap_unicode_char_next): Use pscmap service.
+ (t1_cmap_unicode_done): Updated.
+
+ * src/psaux/t1cmap.h (T1_CMapUniPair): Removed.
+ (T1_CMapUnicode): Use PS_Unicodes structure.
+
+2006-01-11 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ Jumbo patch to fix `deprecated' warning of cross-build for Tiger on
+ Intel, as reported by Sean McBride <sean@rogue-research.com> on
+ 2005-08-24.
+
+ * src/base/ftmac.c: Heavy change to build without deprecated Carbon
+ functions on Tiger.
+
+ * builds/unix/configure.ac: Add options and autochecks for Carbon
+ functions availabilities, for MacOS X.
+
+ * builds/mac/ascii2mpw.py: Add converter for character `\305'.
+ * builds/mac/FreeType.m68k_{far|cfm}.make.txt: Add conditional
+ macros to avoid unavailable functions.
+ ftmac.c must be compiled without `-strict ansi', because it disables
+ cpp macro to use ToolBox system call.
+
+ * builds/mac/FreeType.ppc_{classic|carbon}.make.txt: Add conditional
+ macros to avoid unavailable functions.
+
+ * builds/mac/README: Detailed notes on function availabilities.
+
+ * docs/CHANGES: Notes about (possible) incompatibilities.
+
+2006-01-08 Werner Lemberg <wl@gnu.org>
+
+ * docs/CHANGES: Updated.
+
+2006-01-08 Huw D M Davies <h.davies1@physics.ox.ac.uk>
+
+ * include/freetype/ftmodapi.h (FT_Module_Get_Flags): New
+ declaration.
+
+ * src/base/ftobjs.c (FT_Module_Get_Flags): New function.
+
+2006-01-07 Werner Lemberg <wl@gnu.org>
+
+ * src/pcf/pcfread.c (pcf_get_bitmaps): Remove unused variable
+ `bitmaps'. Reported by Yu Lei <yulei0@gmail.com>.
+
+ * src/base/ftutil.c (ft_highpow2): s/FT_BASE/FT_BASE_DEF/.
+ Reported by Niels Boldt <nielsboldt@gmail.com>.
+
+2005-12-28 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * src/sfnt/sfnt/ttbdf.c: Add newline '\n' to the end of file, for
+ MPW compiler.
+
+2005-12-23 David Turner <david@freetype.org>
+
+ * Jamfile (RefDoc), docs/reference/README: Fix it so that `jam
+ refdoc' works correctly to generate the API reference in
+ `docs/reference'.
+
+ * src/tools/docmaker/tohtml.py (print_html_field,
+ print_html_field_list): Update to output nicer fields lists in the
+ API reference.
+
+ * src/base/ftobjs.c (FT_Load_Glyph): FT_LOAD_TARGET_LIGHT now
+ forces auto-hinting.
+
+ * freetype/freetype.h: Updating the documentation for
+ FT_LOAD_TARGET_XXX and FT_Render_Mode values.
+
+2005-12-23 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * src/base/ftmac.c (FT_New_Face_From_Suitcase): Count scalable faces
+ in supported formats (sfnt, LWFN) only, and ignore bitmap faces in
+ unsupported formats (fbit, NFNT). The number of available faces are
+ passed via face->num_faces. If bitmap faces are embedded in sfnt
+ resource, face->num_fixed_size is correctly set. In public API,
+ FT_New_Face() and FT_New_Face_From_FSSpec() count the faces as
+ FT_GetFile_From_Mac_Name(), which ignores NFNT resources.
+
+ * doc/CHANGES: Mention the changes.
+
+2005-12-17 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ * src/truetype/ttinterp.c (Update_Max): Set current size of buffer
+ correctly (so that memory debug system won't panic).
+
+2005-12-16 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ * include/freetype/internal/ftobjs.h (ft_glyphslot_grid_fit_metrics),
+ src/base/ftobjs.c (ft_glyphslot_grid_fit_metrics): Removed.
+
+ * src/base/ftobjs.c (ft_recompute_scaled_metrics): Do not round.
+
+ * src/cff/cffgload.c (cff_slot_load), src/cid/cidgload.c
+ (cid_slot_load_glyph), src/truetype/ttgload.c (compute_glyph_metrics),
+ src/type1/t1gload.c (T1_Load_Glyph): Do not round glyph metrics.
+
+ * doc/CHANGES: Mention the changes.
+
+2005-12-13 David Turner <david@freetype.org>
+
+ Change the implementation of the LIGHT hinting mode to completely
+ disable horizontal hinting. This is an experimental effort to
+ integrate David Chester's latest patch without affecting the other
+ hinting modes as well.
+
+ Note that this doesn't force auto-hinting for all fonts, however.
+
+ * src/autofit/afhints.c (af_glyph_hints_reload): Don't set
+ scaler_fiags here but...
+ (af_glyph_hints_rescale): Here.
+
+ * src/autofit/aflatin.c (af_latin_hints_init): Disable horizontal
+ hinting for `light' hinting mode.
+
+
+ * Jamfile: Small fix to ensure that ftexport.sym is placed into the
+ same location as other generated objects (i.e., within the `objs'
+ directory of the current directory).
+
+
+ Add support for an embedded `BDF ' table within SFNT-based bitmap
+ font files. This is used to store atoms & properties from the
+ original BDF fonts that were used to generate the font file.
+
+ The feature is controlled by TT_CONFIG_OPTION_BDF within
+ `ftoption.h' and is used to implement FT_Get_BDF_Property for these
+ font files.
+
+ At the moment, this is still experimental, the BDF table format
+ isn't cast into stone yet.
+
+ * include/freetype/config/ftoption.h (TT_CONFIG_OPTION_BDF): New
+ macro.
+
+ * include/freetype/config/ftstdlib.h (ft_memchr): New macro.
+
+ * include/freetype/internal/tttypes.h (TT_BDFRec, TT_BDF)
+ [TT_CONFIG_OPTION_BDF]: New structure.
+ (TT_FaceRec) [TT_CONFIG_OPTION_BDF]: New member `bdf'.
+
+ * include/freetype/ttags.h (TTAG_BDF): New macro.
+
+ * src/sfnt/Jamfile (_sources): Add ttbdf.
+
+ * src/sfnt/rules.mk (SFNT_DRV_SRC): Add ttbdf.c.
+
+ * src/sfnt/sfdriver.c [TT_CONFIG_OPTION_BDF]: Include ttbdf.h and
+ FT_SERVICE_BDF_H.
+ (sfnt_get_charset_it) [TT_CONFIG_OPTION_BDF]: New function.
+ (sfnt_service_bdf) [TT_CONFIG_OPTION_BDF]: New service.
+ (sfnt_services) [TT_CONFIG_OPTION_BDF]: Add sfnt_service_bdf.
+
+ * src/sfnt/sfnt.c [TT_CONFIG_OPTION_BDF]: Include ttbdf.c.
+
+ * src/sfnt/sfobjs.c [TT_CONFIG_OPTION_BDF]: Include ttbdf.h.
+ (sfnt_done_face) [TT_CONFIG_OPTION_BDF]: Call
+ tt_face_free_bdf_props.
+
+ * src/sfnt/ttbdf.h, src/sfnt/ttbdf.c: New files.
+
+2005-12-07 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/sfobjc.c (sfnt_init_face): Move tag check to...
+ * src/sfnt/ttload.c (sfnt_init): Here, before handling TTCs.
+
+2005-12-06 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ * src/truetype/ttobjs.c (tt_size_init): size->ttmetrics.valid is
+ initialized twice.
+ size->strike_index is not initialized.
+
+2005-12-02 Taek Kwan(TK) Lee <taeklee@gmail.com>
+
+ * src/type42/t42objs.c (T42_Face_Init): Replace call to
+ FT_New_Memory_Face with call to FT_Open_Face to pass `params'.
+
+2005-11-30 Werner Lemberg <wl@gnu.org>
+
+ * docs/CHANGES: Document ftdump's `-v' option.
+ Document latest charmap code changes.
+
+ * src/sfnt/ttcmap.c, src/sfnt/ttcmap.h:
+ s/TT_CMAP_FLAG_OVERLAPPED/TT_CMAP_FLAG_OVERLAPPING/.
+
+2005-11-30 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ * src/sfnt/ttcmap.c (tt_cmap4_char_map_binary,
+ tt_cmap12_char_map_binary): Fix compiler warnings.
+
+2005-11-29 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ Major update to distinguish between unsorted and overlapping
+ segments for cmap format 4. For overlapping but sorted segments,
+ which is previously considered unsorted, we still use binary search.
+
+ * src/sfnt/ttcmap.h (TT_CMapRec_): Replace `unsorted' by `flags'.
+ (TT_CMAP_FLAG_UNSORTED, TT_CMAP_FLAG_OVERLAPPED): New macros.
+
+ * src/sfnt/ttcmap.c (OPT_CMAP4): Removed as it is always defined.
+ (TT_CMap4Rec_): Remove `old_charcode' and `table_length'.
+ (tt_cmap4_reset): Removed.
+ (tt_cmap4_init): Updated accordingly.
+ (tt_cmap4_next): Updated accordingly.
+ Take care of overlapping segments.
+ (tt_cmap4_validate): Make sure the subtable is large enough.
+ Do not check glyph_ids because some fonts set the length wrongly.
+ Also, if all segments have offset 0, glyph_ids is always invalid.
+ It does not cause any problem so far only because the check misses
+ equality.
+ Distinguish between unsorted and overlapping segments.
+ (tt_cmap4_char_map_linear, tt_cmap4_char_map_binary): New functions
+ to do `charcode => glyph index' by linear/binary search.
+ (tt_cmap4_char_index, tt_cmap4_char_next): Use
+ tt_cmap4_char_map_linear and tt_cmap4_char_map_binary.
+ (tt_face_build_cmaps): Treat the return value of validator as flags
+ for cmap.
+
+2005-11-29 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ * src/sfnt/ttcmap.c (TT_CMap12Rec_, tt_cmap12_init, tt_cmap12_next):
+ New structures and functions for fast `next char'.
+ (tt_cmap12_char_map_binary): New function to do `charcode => glyph
+ index' by binary search.
+ (tt_cmap12_char_index, tt_cmap12_char_next): Use
+ tt_cmap12_char_map_binary.
+ (tt_face_build_cmaps): Check table and offset correctly (equality is
+ missing).
+
+2005-11-15 Detlef Würkner <TetiSoft@apg.lahn.de>
+
+ * builds/amiga/smakefile: Adjusted the compiler options
+ to the current sources, now really builds the gxvalid, gzip
+ and psnames modules.
+
+ * builds/amiga/src/base/ftsystem.c: The assumed Seek() position
+ in the file cache was off by one byte which could cause false
+ errors in font files.
+
+2005-11-24 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * builds/mac/FreeType.m68k_far.make.txt,
+ builds/mac/FreeType.m68k_cfm.make.txt,
+ builds/mac/FreeType.ppc_classic.make.txt,
+ builds/mac/FreeType.ppc_carbon.make.txt:
+ Updated for MPW to build all available modules.
+
+2005-11-21 HÃ¥vard Wall <haavardw@ifi.uio.no>
+
+ * src/bdf/bdfdrivr.c (bdf_interpret_style, BDF_Face_Done): Fix small
+ memory leak.
+
+2005-11-21 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/ttload.c (sfnt_init): Add tracing message.
+
+2005-11-21 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ * src/sfnt/ttsbit0.c (tt_sbit_decoder_load_image): Image_offset was
+ added twice to image_start if image_format was 2 or 5.
+
+2005-11-21 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ * src/sfnt/sfobjs.c (sfnt_init_face): Check that format_tag is known
+ before loading the table directory.
+
+ * src/sfnt/ttload.c (tt_face_load_sfnt_header,
+ tt_face_load_directory): Delay sfnt_dir_check from
+ tt_face_load_sfnt_header to tt_face_load_directory.
+
+2005-11-20 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ * src/sfnt/ttload.c (sfnt_dir_check): Clean up and return correct
+ error code.
+ (sfnt_init): New function to fill in face->ttc_header. A non-TTC font
+ is synthesized into a TTC font with one offset table.
+ (tt_face_load_sfnt_header): Use sfnt_init.
+ Fix an invalid access if the font is TTC and face_index is -1.
+
+2005-11-18 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/ttload.c (tt_face_load_metrics): Ignore excess number
+ of metrics instead of aborting. Patch suggested by Derek Noonburg.
+
+ * src/cff/cffgload.c (cff_slot_load), src/cid/cidgload.c
+ (cid_slot_load_glyph), src/type1/t1gload.c (T1_Load_Glyph): Scale
+ the glyph properly if no hinter is available.
+
+ * docs/CHANGES: Mention scaling bug.
+
+2005-11-18 susuzki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * include/freetype/ftgxval.h, src/base/ftgxval.c
+ (FT_TrueTypeGX_Free, FT_ClassicKern_Free): New functions to free
+ buffers allocated by gxvalid module.
+ * include/freetype/ftotval.h, src/base/ftotval.c
+ (FT_OpenType_Free): New function to free buffer allocated by
+ otvalid module.
+
+2005-11-18 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ * builds/unix/ftsystem.c (FT_Stream_Open, FT_New_Memory,
+ FT_Done_Memory), builds/vms/ftsystem.c (FT_Stream_Open, FT_New_Memory,
+ FT_Done_Memory), builds/win32/ftdebug.c (FT_Message, FT_Panic):
+ s/FT_EXPORT/FT_BASE/.
+
+2005-11-17 Detlef Würkner <TetiSoft@apg.lahn.de>
+
+ * builds/amiga/src/base/ftdebug.c (FT_Trace_Get_Count,
+ FT_Trace_Get_Name, FT_Message, FT_Panic),
+ builds/amiga/src/base/ftsystem.c (FT_New_Memory, FT_Done_Memory,
+ FT_Stream_Open): s/FT_EXPORT/FT_BASE/.
+
+2005-11-17 Detlef Würkner <TetiSoft@apg.lahn.de>
+
+ * builds/amiga/makefile, builds/amiga/makefile.os4,
+ builds/amiga/smakefile,
+ builds/amiga/include/freetype/config/ftmodule.h: Updated the Amiga
+ build files (added support for the gxvalid module).
+
+2005-11-17 Werner Lemberg <wl@gnu.org>
+
+ Add vertical metrics support to OpenType CFF outlines. Based on a
+ patch from Mike Moening <MikeM@RetekSolutions.com>.
+
+ * src/cff/cffgload.c (cff_face_get_vertical_metrics): New function.
+ (cff_slot_load): Use cff_face_get_vertical_metrics.
+
+ * docs/CHANGES: Updated.
+
+2005-11-17 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ * src/base/ftcalc.c (FT_MulTo64): Commented out.
+
+ * include/freetype/internal/ftcalc.h (FT_SqrtFixed),
+ src/base/ftcalc.c (FT_SqrtFixed),
+ include/freetype/internal/ftdebug.h (FT_Trace_Get_Count,
+ FT_Trace_Get_Name, FT_Message, FT_Panic), src/base/ftdebug.c
+ (FT_Trace_Get_Count, FT_Trace_Get_Name, FT_Message, FT_Panic),
+ include/freetype/internal/ftobjs.h (FT_New_Memory, FT_Done_Memory),
+ include/freetype/internal/ftstream.h (FT_Stream_Open),
+ src/base/ftsystem.c (FT_New_Memory, FT_Done_Memory, FT_Stream_Open):
+ s/FT_EXPORT/FT_BASE/.
+
+ * builds/exports.mk: Manually add TT_New_Context to EXPORTS_LIST
+ too.
+
+2005-11-15 David Turner <david@freetype.org>
+
+ * src/base/fttrigon.c (ft_trig_prenorm): Fix a bug that created
+ invalid computations, resulting in very weird bugs in TrueType
+ bytecode hinted fonts.
+
+ * src/truetype/ttinterp.c (FT_UNUSED_EXEC): Don't perform a
+ structure copy each time.
+
+2005-11-11 Werner Lemberg <wl@gnu.org>
+
+ * src/cache/ftccache.c (FTC_Cache_Clear), src/cache/ftcmanag.c
+ (FTC_Manager_Check): Remove FT_EXPORT_DEF tag.
+
+ * src/base/ftcalc.c (FT_Add64): Remove FT_EXPORT_DEF tag.
+ (FT_Div64by32, FT_Sqrt32): Commented out. Unused.
+
+ * include/freetype/internal/ftcalc.h (SQRT_32): Removed. Unused.
+ (FT_Sqrt32): Commented out. Unused.
+
+ * include/freetype/cache/ftccache.h:
+ s/ftc_node_destroy/FTC_Node_Destroy/.
+
+ * src/cache/ftccback.h (ftc_node_destroy): New declaration.
+
+ * src/cache/ftccache.c (ftc_node_destroy): Use FT_LOCAL_DEF tag.
+ (FTC_Node_Destroy): New exported wrapper function for
+ ftc_node_destroy.
+
+ * src/cache/ftcmanag.c: Include ftccback.c.
+
+2005-11-10 Werner Lemberg <wl@gnu.org>
+
+ * src/autofit/afangles.c, src/autofit/aftypes.h (af_angle_diff):
+ Comment out. Unused.
+
+ * builds/exports.mk ($(EXPORTS_LIST)): Add TT_RunIns.
+
+2005-11-10 Christian Biesinger <cbiesinger@web.de>
+
+ * builds/beos/beos.mk: Call beos-def.mk before anything else to
+ define the separator.
+
+ * builds/unix/unix-cc.in (LINK_LIBRARY): Add `-no-undefined' flag.
+
+2005-11-07 Werner Lemberg <wl@gnu.org>
+
+ * src/type1/t1afm.c (T1_Read_PFM): Zero offset means `no kerning
+ table available'. From Sergey Tolstov <stolstov@esri.com>.
+
+2005-11-03 Ville Syrjälä <syrjala@sci.fi>
+
+ * src/base/ftobjs.c (FT_Open_Face): Avoid possible memory leak.
+
+2005-11-02 Werner Lemberg <wl@gnu.org>
+
+ Make compiling instructions in docs/CUSTOMIZE work again.
+
+ * builds/unix/unix-cc.in (CPPFLAGS): New variable.
+ (CFLAGS): Don't include @CPPFLAGS@.
+ * builds/freetype.mk (FT_CFLAGS): Add CPPFLAGS.
+
+2005-10-28 David Turner <david@freetype.org>
+
+ Update build system to support the generation of a list of exported
+ symbols or Windows .DEF files by parsing the public headers with the
+ `apinames' tool located in src/tools/apinames.c.
+
+ Only tested on Unix at the moment. On Windows, the .DEF file is
+ generated but isn't used yet to generate a DLL.
+
+ * builds/exports.mk: New file.
+
+ * builds/freetype.mk: Include exports.mk.
+ (dll): New target.
+ (clean_project_dos): Fix rule.
+
+ * builds/compiler/visualc.mk (TE), builds/dos/dos-def.mk (E),
+ builds/os2/os2-def.mk (E), builds/win32/win32-def.mk (E): New
+ variables for controlling executable extensions.
+
+ * builds/unix/unix-cc.in (EXPORTS_LIST, CCexe),
+ builds/win32/w32-bcc.mk, builds/win32/w32-gcc.mk,
+ builds/win32/w32-icc.mk, builds/win32/w32-icc.mk,
+ builds/win32/w32-mingw32.mk, builds/win32/w32-vcc,
+ builds/win32/w32-wat.mk (EXPORTS_LIST, EXPORT_OPTIONS,
+ APINAMES_OPTIONS): New targets for controlling the `apinames' tool.
+
+ * Jamfile (GenExportSymbols): Updated.
+
+
+ * src/pfr/pfrtypes.h, src/pfr/pfrload.c, src/pfr/pfrobjs.c
+ [!FT_OPTIMIZE_MEMORY]: Fold memory optimization code into
+ FT_OPTIMIZE_MEMORY chunks for better maintainability and simplicity.
+
+
+ * src/base/fttrigon.c (ft_trig_prenorm), src/base/ftcalc.c
+ (FT_MulFix): Performance optimizations.
+
+
+ * include/freetype/internal/ftgloadr.h (FT_GLYPHLOADER_CHECK_P,
+ FT_GLYPHLOADER_CHECK_C, FT_GLYPHLOADER_CHECK_POINTS): New macros for
+ checking points and contours. Update callers to use
+ FT_GLYPHLOADER_CHECK_POINTS instead of FT_GlyphLoader_CheckPoints
+ at profile-detected hot-spots.
+
+ * src/base/ftgloadr.c (FT_GlyphLoader_CheckPoints): Set `adjust'
+ to 0 to not call `AdjustPoints' every time.
+
+
+ * src/autofit/aftypes.h (AF_ANGLE_DIFF): New macro to inline
+ FT_Angle_Diff.
+
+ * src/autofit/afhints.c (af_direction_compute): Re-implement.
+ (af_glyph_hints_compute_inflections, af_glyph_hints_reload): Use
+ AF_ANGLE_DIFF to speed up the detection of inflexions.
+
+
+ * src/tools/apinames.c: Include <string.h>.
+ (OutputFormat): New enumeration.
+ (names_dump): Add two parameters to control output format and DLL
+ name.
+ (names_dump_windef): Removed. Code folded into `names_dump'.
+ (read_header_file): Use isalnum, not isalpha. Otherwise function
+ names with digits aren't read correctly.
+ (usage): Updated.
+ (main): New option `-o' to control output file name.
+ New option `-d' to indicate DLL file name.
+ Extend `-w' flag to handle Borland and Watcom compilers and linkers.
+
+2005-10-28 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * builds/mac/ftlib.prj, builds/mac/freetype.mak: Removed.
+ ftlib.prj is unmaintained and incompatible with current tree.
+ freetype.mak is unrecoverably broken.
+
+ * builds/mac/ftlib.prj.xml: Added.
+ Generated by Metrowerks CodeWarrior 9.0.
+
+ * builds/mac/FreeType.m68k_far.make.txt,
+ builds/mac/FreeType.m68k_cfm.make.txt,
+ builds/mac/FreeType.ppc_classic.make.txt,
+ builds/mac/FreeType.ppc_carbon.make.txt: Added.
+ Skeleton files of MPW makefiles.
+
+ * builds/mac/ascii2mpw.py: Added.
+ Python script to make MPW makefile from skeleton.
+
+ * builds/mac/README: Updated.
+ Almost rewritten to use new files.
+
+2005-10-28 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * src/base/ftmac.c: Fix invalid casts from NULL to integer typed
+ variables. Advised by David Turner, Masatake YAMATO, Sean McBride,
+ and George Williams.
+
+2005-10-27 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/ftsysmem.h, include/freetype/ftsysio.h: Removed.
+ Obsolete.
+
+2005-10-25 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/sfdriver.c (sfnt_interface): Move out
+ `tt_face_get_kerning' from a #ifdef clause. Reported by Tony J.
+ Ibbs <tibs@sj.co.uk>.
+
+2005-10-23 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftdbgmem.c (ft_mem_debug_realloc): Make it compile with
+ C++.
+
+2005-10-21 David Turner <david@freetype.org>
+
+ * src/base/ftdbgmem.c (ft_mem_table_set, ft_mem_debug_realloc):
+ Another realloc memory counting bug fix.
+
+ * src/tools/Jamfile: Add missing file.
+
+ * src/lzw/Jamfile: Fix incorrect source file reference.
+
+2005-10-20 David Turner <david@freetype.org>
+
+ * src/base/ftdbgmem.c (ft_mem_table_set, ft_mem_table_remove,
+ ft_mem_debug_alloc, ft_mem_debug_free, ft_mem_debug_realloc): Fixes
+ to better account for memory reallocations.
+
+ * src/lzw/ftlzw2.c, src/lzw/ftzopen.h, src/lzw/ftzopen.c,
+ src/lzw/rules.mk: First version of LZW loader re-implementation.
+ Apparently, this saves about 330 KB of heap memory when loading
+ timR24.pcf.Z.
+
+2005-10-20 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ * include/freetype/ftbitmap.h (FT_Bitmap_Copy, FT_Bitmap_Embolden),
+ src/base/ftbdf.c (FT_Get_BDF_Property), src/cache/ftcmru.c
+ (FTC_MruList_Reset, FTC_MruList_Done, FTC_MruList_Lookup): Fix
+ FT_EXPORT/FT_EXPORT_DEF tagging.
+
+2005-10-19 Chia-I Wu <b90201047@ntu.edu.tw>
+
+ * src/truetype/ttgload.c (TT_Load_Glyph): Allow size->ttmetrics to
+ be invalid when FT_LOAD_NO_SCALE is set.
+
+2005-10-17 David Turner <david@freetype.org>
+
+ * src/base/ftobjs.c (FT_Open_Face): Don't call FT_New_GlyphSlot and
+ FT_New_Size if we are opening a face with face_index < 0 (which is
+ only used for testing the format).
+
+ * src/gxvalid/gxvmort0.c (gxv_mort_subtable_type0_entry_validate):
+ Remove compiler warning.
+
+2005-10-16 David Turner <david@freetype.org>
+
+ * src/tools/apinames.c: Add new tool to extract public API function
+ names from header files.
+
+2005-10-05 Werner Lemberg <wl@gnu.org>
+
+ Add FT_FACE_FLAG_HINTER to indicate that a specific font driver has
+ a hinting engine of its own.
+
+ * include/freetype/freetype.h (FT_FACE_FLAG_HINTER): New macro.
+
+ * src/cff/cffobjs.c (cff_face_init), src/cid/cidobjs.c
+ (cid_face_init), src/truetype/ttobjs.c (tt_face_init)
+ [TT_CONFIG_OPTION_BYTECODE_INTERPRETER], src/type1/t1objs.c
+ (T1_Face_Init), src/type42/t42objs.c (T42_Face_Init)
+ [TT_CONFIG_OPTION_BYTECODE_INTERPRETER]: Update face flags.
+
+ * docs/CHANGES: Document it.
+
+2005-09-27 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/freetype2.m4: Add license exception so that the file
+ can be used in any other autoconf script.
+
+2005-09-26 David Turner <david@freetype.org>
+
+ * src/autofit/aflatin.c (af_latin_compute_stem_width): Fix bad
+ computation of the `vertical' flag, causing ugly things in LCD mode
+ and others.
+
+2005-09-23 David Turner <david@freetype.org>
+
+ * src/autofit/aflatin.c (af_latin_hints_init): Fix a bug that
+ prevented internal hint mode bitflags from being computed correctly.
+
+ * src/base/Jamfile: Adding src/base/ftgxval.c.
+
+ * src/gxvalid/gxvbsln.c, src/gxvalid/gxvcommn.c,
+ src/gxvalid/gxvfeat.c, src/gxvalid/gxvjust.c, src/gxvalid/gxvkern.c,
+ src/gxvalid/gxvlcar.c, src/gxvalid/gxvmort.c,
+ src/gxvalid/gxvmort0.c, src/gxvalid/gxvmort1.c,
+ src/gxvalid/gxvmort2.c, src/gxvalid/gxvmort4.c,
+ src/gxvalid/gxvmort5.c, src/gxvalid/gxvmorx.c,
+ src/gxvalid/gxvmorx0.c, src/gxvalid/gxvmorx1.c,
+ src/gxvalid/gxvmorx2.c, src/gxvalid/gxvmorx5.c,
+ src/gxvalid/gxvopbd.c, src/gxvalid/gxvprop.c,
+ src/truetype/ttgload.c: Remove _many_ compiler warnings when
+ compiling with Visual C++ at maximum level (/W4).
+
+ * src/autofit/afangles.c (af_angle_atan): Replaced CORDIC-based
+ implementation with one using lookup tables. This simple thing
+ speeds up glyph loading by 18%, according to ftbench!
+
+ * src/sfnt/sfdriver.c (sfnt_get_interface): Don't check for
+ `get_sfnt' and `load_sfnt' module interfaces.
+
+2005-09-22 Werner Lemberg <wl@gnu.org>
+
+ * docs/CHANGES: Mention SING Glyphlet support.
+
+2005-09-22 David Turner <david@freetype.org>
+
+ * src/base/Jamfile: Disable compilation of ftgxval module
+ temporarily.
+
+2005-09-19 David Somers <dsomers@omz13.com>
+
+ * src/sfnt/ttload.c (sfnt_dir_check): Modified to allow a
+ font to have no `head' table if tables `SING' and `META' are
+ present; this is to support `SING Glyphlet'.
+
+ `SING Glyphlet' is an extension to OpenType developed by Adobe
+ primarily to facilitate adding supplemental glyphs to an OpenType
+ font (with emphasis on, but not necessarily limited to, gaiji to a
+ CJK font). A SING Glyphlet Font is an OpenType font that contains
+ the outline(s), either in a `glyf' or `CFF' table, for a glyph;
+ `cmap', `BASE', and `GSUB' tables are present with the same format
+ and functionaliy as a regular OpenType font; there are no `name',
+ `head', `OS/2', and `post' tables; there are two new tables, `SING'
+ which contains details about the glyphlet, and `META' which contains
+ metadata.
+
+ Further information on the SING Glyphlet format can be found at:
+
+ http://www.adobe.com/products/indesign/sing_gaiji.html
+
+ * include/freetype/ttags.h (TTAG_SING, TTAG_META): New macros for
+ the OpenType tables `SING' and `META'. These two tables are used in
+ SING Glyphlet Format fonts.
+
+2005-09-09 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/sfobjs.c (sfnt_load_face): Reactivate code to set
+ FT_FACE_FLAG_KERNING which has been commented out erroneously.
+
+ * docs/CHANGES: Document it.
+
+2005-09-05 Werner Lemberg <wl@gnu.org>
+
+ Fixes for `make multi' and using C++ compiler.
+
+ * src/gxvalid/gxvcommn.c (gxv_set_length_by_ushort_offset,
+ gxv_set_length_by_ulong_offset, gxv_array_getlimits_byte,
+ gxv_array_getlimits_ushort): Declare with FT_LOCAL_DEF.
+ (gxv_compare_ranges): Make it static.
+ (gxv_LookupTable_fmt0_validate, gxv_LookupTable_fmt2_validate,
+ gxv_LookupTable_fmt4_validate, gxv_LookupTable_fmt6_validate,
+ gxv_LookupTable_fmt8_validate, gxv_LookupTable_validate): Improve
+ trace messages.
+ (gxv_StateArray_validate, gxv_XStateArray_validate): s/class/clazz/.
+ (GXV_STATETABLE_HEADER_SIZE, GXV_STATEHEADER_SIZE,
+ GXV_XSTATETABLE_HEADER_SIZE, GXV_XSTATEHEADER_SIZE): Move to
+ gxvcommn.h.
+
+ * src/gxvalid/gxvcommn.h: Add prototypes for
+ gxv_StateTable_subtable_setup, gxv_XStateTable_subtable_setup,
+ gxv_XStateTable_validate, gxv_array_getlimits_byte,
+ gxv_array_getlimits_ushort, gxv_set_length_by_ushort_offset,
+ gxv_set_length_by_ulong_offset, gxv_odtect_add_range,
+ gxv_odtect_validate.
+ (GXV_STATETABLE_HEADER_SIZE, GXV_STATEHEADER_SIZE,
+ GXV_XSTATETABLE_HEADER_SIZE, GXV_XSTATEHEADER_SIZE): Moved from
+ gxvcommn.c.
+
+ * src/gxvalid/gxvbsln.c (gxv_bsln_LookupValue_validate,
+ gxv_bsln_parts_fmt1_validate): Improve trace messages.
+
+ * src/gxvalid/gxvfeat.c: Split off predefined registry stuff to...
+ * src/gxvalid/gxvfeat.h: New file.
+
+ * src/gxvalid/gxvjust.c (gxv_just_wdc_entry_validate): Improve trace
+ message.
+
+ * src/gxvalid/gxvkern.c (GXV_kern_Dialect): Add KERN_DIALECT_UNKNOWN.
+ (gxv_kern_subtable_fmt1_valueTable_load,
+ gxv_kern_subtable_fmt1_subtable_setup,
+ gxv_kern_subtable_fmt1_entry_validate): Fix C++ compiler errors.
+ (gxv_kern_coverage_validate): Use KERN_DIALECT_UNKWOWN.
+ Improve trace message.
+ (gxv_kern_validate_generic): Fix C++ compiler error.
+ Improve trace message.
+ (gxv_kern_validate_classic): Fix C++ compiler error.
+
+ * src/gxvalid/gxvmort0.c (gxv_mort_subtable_type0_validate): Declare
+ with FT_LOCAL_DEF.
+
+ * src/gxvalid/gxvmort1.c
+ (gxv_mort_subtable_type1_substitutionTable_load,
+ gxv_mort_subtable_type1_subtable_setup): Fix C++ compiler errors.
+ (gxv_mort_subtable_type1_substTable_validate): Improve trace
+ message.
+ (gxv_mort_subtable_type1_validate): Declare with FT_LOCAL_DEF.
+
+ * src/gxvalid/gxvmort2.c (gxv_mort_subtable_type2_opttable_load,
+ gxv_mort_subtable_type2_subtable_setup,
+ gxv_mort_subtable_type2_ligActionOffset_validate,
+ gxv_mort_subtable_type2_ligatureTable_validate): Fix C++ compiler
+ errors.
+ (gxv_mort_subtable_type2_validate): Declare with FT_LOCAL_DEF.
+
+ * src/gxvalid/gxvmort4.c (gxv_mort_subtable_type4_validate): Declare
+ with FT_LOCAL_DEF.
+
+ * src/gxvalid/gxvmort5.c (gxv_mort_subtable_type5_subtable_setup,
+ gxv_mort_subtable_type5_InsertList_validate): Fix C++ compiler
+ errors.
+ (gxv_mort_subtable_type5_validate): Declare with FT_LOCAL_DEF.
+
+ * src/gxvalid/gxvmort.c: Include gxvfeat.h.
+ (gxv_mort_featurearray_validate, gxv_mort_coverage_validate):
+ Declare with FT_LOCAL_DEF.
+ (gxv_mort_subtables_validate, gxv_mort_validate): Improve trace
+ messages.
+
+ * src/gxvalid/gxvmort.h (gxv_mort_feature_validate): Remove.
+
+ * src/gxvalid/gxvmorx0.c (gxv_morx_subtable_type0_validate): Declare
+ with FT_LOCAL_DEF.
+
+ * src/gxvalid/gxvmorx1.c
+ (gxv_morx_subtable_type1_substitutionTable_load,
+ gxv_morx_subtable_type1_subtable_setup,
+ gxv_morx_subtable_type1_entry_validate,
+ gxv_morx_subtable_type1_substitutionTable_validate): Fix C++
+ compiler errors.
+ (gxv_morx_subtable_type1_validate): Declare with FT_LOCAL_DEF.
+
+ * src/gxvalid/gxvmorx2.c (gxv_morx_subtable_type2_opttable_load,
+ gxv_morx_subtable_type2_subtable_setup,
+ gxv_morx_subtable_type2_ligActionIndex_validate,
+ gxv_morx_subtable_type2_ligatureTable_validate): Fix C++ compiler
+ errors.
+ (gxv_morx_subtable_type2_validate): Declare with FT_LOCAL_DEF.
+ Fix typo.
+
+ * src/gxvalid/gxvmorx4.c (gxv_morx_subtable_type4_validate): Declare
+ with FT_LOCAL_DEF.
+
+ * src/gxvalid/gxvmorx5.c (gxv_morx_subtable_type5_insertionGlyph_load,
+ gxv_morx_subtable_type5_subtable_setup): Fix C++ compiler error.
+ (gxv_morx_subtable_type5_validate): Declare with FT_LOCAL_DEF.
+
+ * src/gxvalid/gxvmorx.c (gxv_morx_subtables_validate,
+ gxv_morx_validate): Improve trace message.
+
+ * src/gxvalid/gxvopbd.c (gxv_opbd_LookupFmt4_transit): Fix compiler
+ warnings.
+ (gxv_opbd_validate): Improve trace message.
+
+ * src/gxvalid/gxvprop.c: Decorate constants with `U' and `L' where
+ appropriate.
+ (gxv_prop_zero_advance_validate, gxv_prop_validate): Improve trace
+ message.
+
+ * src/gxvalid/gxvtrak.c (gxv_trak_trackTable_validate): Remove unused
+ parameter. Update all callers.
+ (gxv_trak_validate): Improve trace message.
+
+ * rules.mk (GXV_DRV_H): Add gxvfeat.h.
+
+2005-09-01 Werner Lemberg <wl@gnu.org>
+
+ * src/gxvalid/gxvbsln.c (GXV_BSLN_VALUE_EMPTY): Add `U'.
+
+ * src/gxvalid/gxmort1.c (GXV_MORT_SUBTABLE_TYPE1_HEADER_SIZE),
+ src/gxvalid/gxmort2.c (GXV_MORT_SUBTABLE_TYPE2_HEADER_SIZE): Fix
+ typo.
+
+ * src/gxvalid/gxvmorx0.c, src/gxvalid/gxvmorx1.c,
+ src/gxvalid/gxvmorx2.c, src/gxvalid/gxvmorx4.c,
+ src/gxvalid/gxvmorx5.c, src/gxvalid/gxvmort.c: Improve trace
+ messages.
+ Decorate constants with `U' and `L' where appropriate.
+ Fix compiler warnings.
+
+2005-08-31 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttgload.c (load_truetype_glyph): Fix typo.
+
+ * src/gxvalid/gxvbsln.c (gxv_bsln_validate): Fix trace message.
+
+ * src/gxvalid/gxvcommn.c (gxv_odtect_add_range): Use `const'.
+
+ * src/gxvalid/gxvfeat.c, src/gxvalid/gxvjust.c,
+ src/gxvalid/gxvkern.c, src/gxvalid/gxvlcar.c, src/gxvalid/gxvmod.c,
+ src/gxvalid/gxvmort0.c, src/gxvalid/gxvmort1.c,
+ src/gxvalid/gxvmort2.c, src/gxvalid/gxvmort4.c,
+ src/gxvalid/gxvmort5.c, src/gxvalid/gxvmort.c: Improve trace
+ messages.
+ Decorate constants with `U' and `L' where appropriate.
+ Fix compiler warnings.
+
+2005-08-30 Werner Lemberg <wl@gnu.org>
+
+ * src/gxvalid/README: Revised.
+ * src/gxvalid/gxvbsln.c: Fix compiler warnings.
+ * src/gxvalid/gxvcommn.c: Fix compiler warnings.
+ (gxv_XEntryTable_validate, gxv_compare_ranges): Remove unused
+ parameter. Update all callers.
+ Improve trace messages.
+ Some formatting.
+
+2005-08-29 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/freetype.h, include/freetype/ftchapters.h: Add
+ a preliminary section with some explanations about user allocation.
+
+ * src/tools/docmaker/tohtml.py (HtmlFormatter.section_enter):
+ Don't abort if there are no data types, functions, etc., in a
+ section.
+ Print synopsis only if we have a data type, function, etc.
+
+ * docs/INSTALL.ANY, docs/INSTALL, docs/INSTALL.UNX, docs/CUSTOMIZE,
+ docs/INSTALL.GNU, docs/TRUETYPE, docs/DEBUG, docs/UPGRADE.UNX,
+ docs/VERSION.DLL, docs/formats.txt: Revised, formatted.
+
+2005-08-28 George Williams <gww@silcom.com>
+
+ * src/truetype/ttgload.c [TT_MAX_COMPOSITE_RECURSE]: Removed.
+ (load_truetype_glyph): Limit recursion depth by `maxComponentDepth'.
+
+2005-08-25 J. Ali Harlow <ali@avrc.city.ac.uk>
+
+ * builds/unix/freetype2.in (CFlags): Add missing directory.
+
+2005-08-24 Werner Lemberg <wl@gnu.org>
+
+ * docs/CHANGES: Mention gxvalid module.
+
+2005-08-23 Werner Lemberg <wl@gnu.org>
+
+ * src/autofit/aflatin.c (af_latin_metrics_scale): Initialize
+ render mode properly. Reported by chris@dokein.co.uk.
+
+2005-08-23 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ Add gxvalid module to validate TrueType GX/AAT tables.
+
+ Modifications on existing files:
+
+ * Jamfile: Register gxvalid module.
+ * src/base/Jamfile: Register ftgxval.c.
+ * src/base/rule.mk: Register ftgxval.c.
+ * docs/INSTALL.ANY: Register gxvalid/gxvalid.c.
+
+ * include/freetype/config/ftheader.h (FT_GX_VALIDATE_H): New macro
+ to include gxvalid header file.
+ * include/freetype/config/ftmodule.h: Register gxv_module_class.
+
+ * include/freetype/ftchapters.h: Add comment about gx_validation.
+ * include/freetype/ftotval.h: Change keyword FT_VALIDATE_XXX
+ to FT_VALIDATE_OTXXX to co-exist with gxvalid.
+ * include/freetype/tttags.h: Add tags for TrueType GX/AAT tables.
+
+ * include/freetype/internal/ftserv.h (FT_SERVICE_GX_VALIDATE_H): New
+ macro for gxvalid service.
+ * include/freetype/internal/fttrace.h: Add trace facilities for
+ gxvalid.
+
+ New files on existing directories:
+
+ * include/freetype/internal/services/svgxval.h: Registration of
+ validation service for TrueType GX/AAT and classic kern table.
+ * include/freetype/ftgxval.h: Public API definition to use gxvalid.
+ * src/base/ftgxval.c: Public API of gxvalid.
+
+ New files under src/gxvalid/:
+
+ * src/gxvalid/Jamfile src/gxvalid/README src/gxvalid/module.mk
+ src/gxvalid/rules.mk src/gxvalid/gxvalid.c src/gxvalid/gxvalid.h
+ src/gxvalid/gxvbsln.c src/gxvalid/gxvcommn.c src/gxvalid/gxvcommn.h
+ src/gxvalid/gxverror.h src/gxvalid/gxvfeat.c src/gxvalid/gxvfgen.c
+ src/gxvalid/gxvjust.c src/gxvalid/gxvkern.c src/gxvalid/gxvlcar.c
+ src/gxvalid/gxvmod.c src/gxvalid/gxvmod.h src/gxvalid/gxvmort.c
+ src/gxvalid/gxvmort.h src/gxvalid/gxvmort0.c src/gxvalid/gxvmort1.c
+ src/gxvalid/gxvmort2.c src/gxvalid/gxvmort4.c src/gxvalid/gxvmort5.c
+ src/gxvalid/gxvmorx.c src/gxvalid/gxvmorx.h src/gxvalid/gxvmorx0.c
+ src/gxvalid/gxvmorx1.c src/gxvalid/gxvmorx2.c src/gxvalid/gxvmorx4.c
+ src/gxvalid/gxvmorx5.c src/gxvalid/gxvopbd.c src/gxvalid/gxvprop.c
+ src/gxvalid/gxvtrak.c: New files, gxvalid body.
+
+2005-08-21 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttgload.c (TT_Load_Glyph): Only translate outline
+ to (0,0) if bit 1 of the `head' table isn't set. This improves
+ rendering of buggy fonts.
+
+2005-08-20 Chia I Wu <b90201047@ntu.edu.tw>
+
+ * src/truetype/ttdriver.c (Load_Glyph): Don't check the validity of
+ ttmetrics here. TrueType fonts with only sbits always have
+ ttmetrics.valid set to false.
+
+ * src/truetype/ttgload.c (TT_Load_Glyph): Check that ttmetrics is
+ valid before loading outline glyph.
+
+ * src/cache/ftcimage.c (FTC_INode_New): Fix a memory leak.
+
+2005-08-20 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/ttload.c (tt_face_load_metrics_header): Ignore missing
+ `hhea' table for SFNT Mac fonts. Change based on a patch by
+ mpsuzuki@hiroshima-u.ac.jp.
+
+2005-08-20 Masatake YAMATO <jet@gyve.org>
+
+ * src/otvalid/otvmod.c (otv_validate): Use ft_validator_run instead
+ of ft_setjmp.
+
+2005-08-19 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttgload.c (load_truetype_glyph): Fix compiler
+ warnings.
+
+2005-08-16 Chia I Wu <b90201047@ntu.edu.tw>
+
+ * src/truetype/ttinterp.c, src/truetype/ttinterp.h: Update copyright
+ messages.
+
+2005-08-16 Chia I Wu <b90201047@ntu.edu.tw>
+
+ * src/truetype/ttinterp.c, src/truetype/ttinterp.h: Remove original
+ TT_Done_Context and rename TT_Destroy_Context to TT_Done_Context
+ with slight changes.
+ Update all callers.
+ (TT_New_Context): Now takes TT_Driver argument directly.
+ Update all callers.
+
+ * src/truetype/ttobjs.h (tt_slot_init): New function.
+ * src/truetype/ttobjs.c (tt_driver_init): Initialize execution
+ context here.
+ (tt_slot_init): New function to create extra points for the internal
+ glyph loader. We then use it directly, instead of face's glyph
+ loader, when loading glyph.
+
+ * src/truetype/ttdriver.c (tt_driver_class): Use tt_slot_init for
+ glyph slot initialization.
+ (Load_Glyph): Load flag dependencies are handled here. Return error
+ if size is NULL.
+
+ * src/truetype/ttgload.c: Heavy cleanup and refactoring.
+ (org_to_cur): Removed.
+ (TT_Load_Simple_Glyph): Call FT_GlyphLoader_CheckPoints.
+ (TT_Hint_Glyph): New function to hint a zone, prepared by caller.
+ (TT_Process_Simple_Glyph): s/load/loader/.
+ Use loader->pp values instead of recalculation.
+ Use TT_Hint_Glyph.
+ No need to save/restore loader->stream before and after
+ TT_Vary_Get_Glyph_Deltas now.
+ (TT_LOADER_SET_PP): New macro to calculate and set the four phantom
+ points.
+ (load_truetype_glyph): Never set exec->glyphSize to 0. This closes
+ Savannah bug #13107.
+ Forget glyph frame before calling TT_Process_Simple_Glyph.
+ Use TT_LOADER_SET_PP.
+ Scale all four phantom points.
+ Split off some functionality to ...
+ (TT_Process_Composite_Component, TT_Process_Composite_Glyph): These
+ new functions.
+ (TT_Load_Glyph): Set various fields of `glyph' here, not in
+ load_truetype_glyph and compute_glyph_metrics.
+ Split off some functionality to ...
+ (load_sbit_image, tt_loader_init): These new functions.
+ (compute_glyph_metrics): Call FT_Outline_Get_CBox.
+
+2005-08-08 Werner Lemberg <wl@gnu.org>
+
+ * docs/INSTALL.ANY: Updated.
+
+2005-08-05 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cffgload.c (cff_builder_close_contour),
+ src/psaux/psobjs.c (t1_builder_close_contour): Protect against
+ zero `outline' pointer.
+
+ * src/base/ftgloadr.c (FT_GlyphLoader_Add): Protect against zero
+ `loader' address.
+
+2005-08-03 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/sfdriver.c (sfnt_interface) [FT_OPTIMIZE_MEMORY]:
+ Reactivate pointers to tt_find_sbit_image and tt_load_sbit_metrics
+ to make X work again.
+
+2005-08-02 Werner Lemberg <wl@gnu.org>
+
+ * src/otvalid/otvcommn.h: Remove dead code.
+
+2005-07-31 Chia I Wu <b90201047@ntu.edu.tw>
+
+ * src/truetype/ttobjs.h (tt_size_run_fpgm, tt_size_run_prep): New
+ functions.
+
+ * src/truetype/ttobjs.c (tt_size_run_fpgm, tt_size_run_prep): New
+ functions.
+ (tt_size_init): Add 4, instead of 2, (phantom) points to twilight
+ zone.
+ Move code that runs fpgm to tt_size_run_fpgm.
+ (Reset_Outline_Size): Move code that runs prep to tt_size_run_prep.
+ (tt_glyphzone_new): Allocate right size of arrays.
+ Set max_points and max_contours properly.
+
+2005-07-26 Chia I Wu <b90201047@ntu.edu.tw>
+
+ * src/truetype/ttdriver.c (Set_Char_Sizes): Avoid unnecessary
+ computations and clean up.
+
+ * src/truetype/ttobjs.h (struct TT_SizeRec_): Comment on the
+ internal copy of metrics.
+
+2005-07-12 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/ftoutln.h (FT_Outline_Embolden): Fix prototype.
+ Reported by Xerxes.
+
+2005-07-04 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/internal/ftmemory.h (FT_REALLOC_ARRAY): Fix typo.
+ Reported by Brett Hutley.
+
+2005-06-30 David Turner <david@freetype.org>
+
+ * src/sfnt/ftbitmap.c, src/truetype/ttgload.c, src/sfnt/ttcmap.c:
+ Removing compiler warnings (Visual C++ /W4).
+
+
+ Implement a work-around for broken C preprocessor in Visual C++ (it
+ has been confirmed by the MS developers that it is indeed a bug
+ which won't be fixed in the very near future).
+
+ * Jamfile (FT2_COMPONENTS): Include otvalid (again).
+
+ * src/otvalid/otvcommn.h (OTV_NAME, OTV_FUNC): New macros.
+ (OTV_NEST1, OTV_NEST2, OTV_NEST3): Use OTV_NAME and OTV_FUNC to
+ avoid argument expansion by argument prescan.
+ Append `Func' to all affected macros and change them to take just a
+ single argument. Example: `AttachList' is renamed to
+ `AttachListFunc'.
+
+ * src/otvalid/otvgdef.c, src/otvalid/otvgpos.c,
+ src/otvalid/otvgsub.c, src/otvjstf.c: Append `Func' to macros
+ affected by the changes to OTV_NESTx and modify them to take just a
+ single argument.
+
+2005-06-20 Chia I Wu <b90201047@ntu.edu.tw>
+
+ * include/freetype/internal/ftobjs.h, src/base/ftobjs.c: New function
+ ft_glyphslot_grid_fit_metrics.
+
+ * src/truetype/ttgload.c (compute_glyph_metrics): Use
+ ft_glyphslot_grid_fit_metrics.
+
+ * src/cff/cffgload.c (cff_slot_load), src/cid/cidgload.c
+ (cid_slot_load_glyph), src/type1/t1gload.c (T1_Load_Glyph): Use
+ ft_glyphslot_grid_fit_metrics.
+ FT_Outline_Get_CBox is called twice.
+
+ * src/base/ftsynth.c (FT_GlyphSlot_Embolden): Modify metrics to more
+ reasonable values when emboldening outline glyphs. The theoretic
+ ones are unrealistic.
+
+2005-06-16 Chia I Wu <b90201047@ntu.edu.tw>
+
+ * src/base/ftoutln.c (FT_Outline_Embolden): Strength should be
+ halved.
+
+ * src/base/ftsynth.c (FT_GlyphSlot_Embolden): Change the default
+ strength.
+ Don't increase slot->advance.y.
+
+2005-06-16 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/freetype.h (FREETYPE_MINOR): Set to 2.
+ (FREETYPE_PATCH): Set to 0.
+
+ * builds/unix/configure.ac (version_info): Set to 9:9:3.
+ Currently, we are still binary compatible.
+
+ * builds/win32/visualc/index.html,
+ builds/win32/visualc/freetype.dsp,
+ builds/win32/visualc/freetype.vcproj: s/219/2110/, s/2.1.9/2.1.10/.
+
+ * builds/freetype.mk (refdoc), README, Jamfile (RefDoc):
+ s/2.1.9/2.1.10/.
+
+ * docs/CHANGES, docs/VERSION.DLL: Updated.
+
+ * ChangeLog: Split off older entries into...
+ * ChangeLog.20, ChangeLog.21: These new files.
+
+2005-06-15 Kirill Smelkov <kirr@mns.spb.ru>
+
+ The next release will be 2.2.0, so don't worry about source code
+ backwards compatibility.
+
+ * include/freetype/ftimage.h (FT_Outline_MoveToFunc,
+ FT_Outline_LineToFunc, FT_Outline_ConicToFunc,
+ FT_Outline_CubicToFunc, FT_SpanFunc, FT_Raster_RenderFunc),
+ include/freetype/ftrender.h (FT_Glyph_TransformFunc,
+ FT_Renderer_RenderFunc, FT_Renderer_TransformFunc): Decorate
+ parameters with `const' where appropriate.
+
+2005-06-15 Chia I Wu <b90201047@ntu.edu.tw>
+
+ * src/sfnt/ttsbit.c (tt_face_load_sbit_image): Compute vertBearingY
+ to make glyphs centered vertically.
+
+ * src/truetype/ttgload.c (compute_glyph_metrics): Compute
+ vertBearingY to make glyphs centered vertically.
+ Fix some bugs in vertical metrics:
+
+ . loader->pp3.y and loader->pp4.y are in 26.6 format, not in font
+ units.
+ . As we use the glyph's cbox to calculate the top bearing now
+ there is no need to adjust `top'.
+
+2005-06-15 Werner Lemberg <wl@gnu.org>
+
+ * src/otvalid/otvcommn.h (OTV_OPTIONAL_TABLE): Use FT_UShort to be
+ in sync with OTV_OPTIONAL_OFFSET. Reported by YAMATO Masatake.
+
+2005-06-13 Werner Lemberg <wl@gnu.org>
+
+ * docs/release: Update.
+
+----------------------------------------------------------------------------
+
+Copyright 2005, 2006, 2007, 2008 by
+David Turner, Robert Wilhelm, and Werner Lemberg.
+
+This file is part of the FreeType project, and may only be used, modified,
+and distributed under the terms of the FreeType project license,
+LICENSE.TXT. By continuing to use, modify, or distribute this file you
+indicate that you have read the license and understand and accept it
+fully.
+
+
+Local Variables:
+version-control: never
+coding: utf-8
+End:
diff --git a/src/3rdparty/freetype/Jamfile b/src/3rdparty/freetype/Jamfile
new file mode 100644
index 0000000..eeaad3f
--- /dev/null
+++ b/src/3rdparty/freetype/Jamfile
@@ -0,0 +1,203 @@
+# FreeType 2 top Jamfile.
+#
+# Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+# The HDRMACRO is already defined in FTJam and is used to add
+# the content of certain macros to the list of included header
+# files.
+#
+# We can compile FreeType 2 with classic Jam however thanks to
+# the following code
+#
+if ! $(JAM_TOOLSET)
+{
+ rule HDRMACRO
+ {
+ # nothing
+ }
+}
+
+
+# We need to invoke a SubDir rule if the FT2 source directory top is not the
+# current directory. This allows us to build FreeType 2 as part of a larger
+# project easily.
+#
+if $(FT2_TOP) != $(DOT)
+{
+ SubDir FT2_TOP ;
+}
+
+
+# The following macros define the include directory, the source directory,
+# and the final library name (without library extensions). They can be
+# replaced by other definitions when the library is compiled as part of
+# a larger project.
+#
+
+# Name of FreeType include directory during compilation.
+# This is relative to FT2_TOP.
+#
+FT2_INCLUDE_DIR ?= include ;
+
+# Name of FreeType source directory during compilation.
+# This is relative to FT2_TOP.
+#
+FT2_SRC_DIR ?= src ;
+
+# Name of final library, without extension.
+#
+FT2_LIB ?= $(LIBPREFIX)freetype ;
+
+
+# Define FT2_BUILD_INCLUDE to point to your build-specific directory.
+# This is prepended to FT2_INCLUDE_DIR. It can be used to specify
+# the location of a custom <ft2build.h> which will point to custom
+# versions of `ftmodule.h' and `ftoption.h', for example.
+#
+FT2_BUILD_INCLUDE ?= ;
+
+# The list of modules to compile on any given build of the library.
+# By default, this will contain _all_ modules defined in FT2_SRC_DIR.
+#
+# IMPORTANT: You'll need to change the content of `ftmodule.h' as well
+# if you modify this list or provide your own.
+#
+FT2_COMPONENTS ?= autofit # auto-fitter
+ base # base component (public APIs)
+ bdf # BDF font driver
+ cache # cache sub-system
+ cff # CFF/CEF font driver
+ cid # PostScript CID-keyed font driver
+ gzip # support for gzip-compressed files
+ lzw # support for LZW-compressed files
+ pcf # PCF font driver
+ pfr # PFR/TrueDoc font driver
+ psaux # common PostScript routines module
+ pshinter # PostScript hinter module
+ psnames # PostScript names handling
+ raster # monochrome rasterizer
+ smooth # anti-aliased rasterizer
+ sfnt # SFNT-based format support routines
+ truetype # TrueType font driver
+ type1 # PostScript Type 1 font driver
+ type42 # PostScript Type 42 (embedded TrueType) driver
+ winfonts # Windows FON/FNT font driver
+ ;
+
+
+# Don't touch.
+#
+FT2_INCLUDE = $(FT2_BUILD_INCLUDE)
+ [ FT2_SubDir $(FT2_INCLUDE_DIR) ] ;
+
+FT2_SRC = [ FT2_SubDir $(FT2_SRC_DIR) ] ;
+
+# Location of API Reference Documentation
+#
+if $(DOC_DIR)
+{
+ DOC_DIR = $(DOCDIR:T) ;
+}
+else
+{
+ DOC_DIR = docs/reference ;
+}
+
+
+# Only used by FreeType developers.
+#
+if $(DEBUG_HINTER)
+{
+ CCFLAGS += -DDEBUG_HINTER ;
+}
+
+
+# We need `freetype2/include' in the current include path in order to
+# compile any part of FreeType 2.
+#: updating documentation for upcoming release
+
+HDRS += $(FT2_INCLUDE) ;
+
+
+# We need to #define FT2_BUILD_LIBRARY so that our sources find the
+# internal headers
+#
+DEFINES += FT2_BUILD_LIBRARY ;
+
+# Uncomment the following line if you want to build individual source files
+# for each FreeType 2 module. This is only useful during development, and
+# is better defined as an environment variable anyway!
+#
+# FT2_MULTI = true ;
+
+
+# The file <freetype/config/ftheader.h> is used to define macros that are
+# later used in #include statements. It needs to be parsed in order to
+# record these definitions.
+#
+HDRMACRO [ FT2_SubDir include freetype config ftheader.h ] ;
+HDRMACRO [ FT2_SubDir include freetype internal internal.h ] ;
+
+
+# Now include the Jamfile in `freetype2/src', used to drive the compilation
+# of each FreeType 2 component and/or module.
+#
+SubInclude FT2_TOP $(FT2_SRC_DIR) ;
+
+# Handle the generation of the `ftexport.sym' file which contain the list
+# of exported symbols. This can be used on Unix by libtool.
+#
+SubInclude FT2_TOP $(FT2_SRC_DIR) tools ;
+
+rule GenExportSymbols
+{
+ local apinames = apinames$(SUFEXE) ;
+ local headers = [ Glob $(2) : *.h ] ;
+
+ LOCATE on $(1) = $(ALL_LOCATE_TARGET) ;
+
+ APINAMES on $(1) = apinames$(SUFEXE) ;
+
+ Depends $(1) : $(apinames) $(headers) ;
+ GenExportSymbols1 $(1) : $(headers) ;
+ Clean clean : $(1) ;
+}
+
+actions GenExportSymbols1 bind APINAMES
+{
+ $(APINAMES) $(2) > $(1)
+}
+
+GenExportSymbols ftexport.sym : include/freetype include/freetype/cache ;
+
+# Test files (hinter debugging). Only used by FreeType developers.
+#
+if $(DEBUG_HINTER)
+{
+ SubInclude FT2_TOP tests ;
+}
+
+rule RefDoc
+{
+ Depends $1 : all ;
+ NotFile $1 ;
+ Always $1 ;
+}
+
+actions RefDoc
+{
+ python $(FT2_SRC)/tools/docmaker/docmaker.py --prefix=ft2 --title=FreeType-2.3.6 --output=$(DOC_DIR) $(FT2_INCLUDE)/freetype/*.h $(FT2_INCLUDE)/freetype/config/*.h
+}
+
+RefDoc refdoc ;
+
+
+# end of top Jamfile
diff --git a/src/3rdparty/freetype/Jamrules b/src/3rdparty/freetype/Jamrules
new file mode 100644
index 0000000..d8d1c7e
--- /dev/null
+++ b/src/3rdparty/freetype/Jamrules
@@ -0,0 +1,71 @@
+# FreeType 2 JamRules.
+#
+# Copyright 2001, 2002, 2003 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+# This file contains the Jam rules needed to build the FreeType 2 library.
+# It is shared by all Jamfiles and is included only once in the build
+# process.
+#
+
+
+# Call SubDirHdrs on a list of directories.
+#
+rule AddSubDirHdrs
+{
+ local x ;
+
+ for x in $(<)
+ {
+ SubDirHdrs $(x) ;
+ }
+}
+
+
+# Determine prefix of library file. We must use "libxxxxx" on Unix systems,
+# while all other simply use the real name.
+#
+if $(UNIX)
+{
+ LIBPREFIX ?= lib ;
+}
+else
+{
+ LIBPREFIX ?= "" ;
+}
+
+# FT2_TOP contains the location of the FreeType source directory. You can
+# set it to a specific value if you want to compile the library as part of a
+# larger project.
+#
+FT2_TOP ?= $(DOT) ;
+
+# Define a new rule used to declare a sub directory of the Nirvana source
+# tree.
+#
+rule FT2_SubDir
+{
+ if $(FT2_TOP) = $(DOT)
+ {
+ return [ FDirName $(<) ] ;
+ }
+ else
+ {
+ return [ FDirName $(FT2_TOP) $(<) ] ;
+ }
+}
+
+# We also set ALL_LOCATE_TARGET in order to place all object and library
+# files in "objs".
+#
+ALL_LOCATE_TARGET ?= [ FT2_SubDir objs ] ;
+
+
+# end of Jamrules
diff --git a/src/3rdparty/freetype/Makefile b/src/3rdparty/freetype/Makefile
new file mode 100644
index 0000000..c1fa16c
--- /dev/null
+++ b/src/3rdparty/freetype/Makefile
@@ -0,0 +1,34 @@
+#
+# FreeType 2 build system -- top-level Makefile
+#
+
+
+# Copyright 1996-2000, 2002, 2006 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+# Project names
+#
+PROJECT := freetype
+PROJECT_TITLE := FreeType
+
+# The variable TOP_DIR holds the path to the topmost directory in the project
+# engine source hierarchy. If it is not defined, default it to `.'.
+#
+TOP_DIR ?= .
+
+# The variable OBJ_DIR gives the location where object files and the
+# FreeType library are built.
+#
+OBJ_DIR ?= $(TOP_DIR)/objs
+
+
+include $(TOP_DIR)/builds/toplevel.mk
+
+# EOF
diff --git a/src/3rdparty/freetype/README b/src/3rdparty/freetype/README
new file mode 100644
index 0000000..a6ab092
--- /dev/null
+++ b/src/3rdparty/freetype/README
@@ -0,0 +1,64 @@
+ Special notes to Unix users
+ ===========================
+
+ Please read the file `docs/UPGRADE.UNIX'. It contains important
+ information regarding the installation of FreeType on Unix systems,
+ especially GNU based operating systems like GNU/Linux.
+
+ FreeType 2's library is called `libfreetype', FreeType 1's library
+ is called `libttf'. They are *not* compatible!
+
+
+ FreeType 2.3.6
+ ==============
+
+ Please read the docs/CHANGES file, it contains IMPORTANT
+ INFORMATION.
+
+ Read the files `docs/INSTALL' for installation instructions.
+
+ The FreeType 2 API reference is located in `docs/reference'; use the
+ file `ft2-doc.html' as the top entry point. Additional
+ documentation is available as a separate package from our sites. Go
+ to
+
+ http://download.savannah.gnu.org/releases/freetype/
+
+ and download one of the following files.
+
+ freetype-doc-2.3.6.tar.bz2
+ freetype-doc-2.3.6.tar.gz
+ ftdoc236.zip
+
+
+ Bugs
+ ====
+
+ Please report bugs by e-mail to `freetype-devel@nongnu.org'. Don't
+ forget to send a detailed explanation of the problem -- there is
+ nothing worse than receiving a terse message that only says `it
+ doesn't work'.
+
+ Alternatively, you may submit a bug report at
+
+ https://savannah.nongnu.org/bugs/?group=freetype
+
+
+ Enjoy!
+
+
+ The FreeType Team
+
+----------------------------------------------------------------------
+
+Copyright 2006, 2007, 2008 by
+David Turner, Robert Wilhelm, and Werner Lemberg.
+
+This file is part of the FreeType project, and may only be used,
+modified, and distributed under the terms of the FreeType project
+license, LICENSE.TXT. By continuing to use, modify, or distribute
+this file you indicate that you have read the license and understand
+and accept it fully.
+
+
+--- end of README ---
diff --git a/src/3rdparty/freetype/README.CVS b/src/3rdparty/freetype/README.CVS
new file mode 100644
index 0000000..2764ae9
--- /dev/null
+++ b/src/3rdparty/freetype/README.CVS
@@ -0,0 +1,50 @@
+The CVS archive doesn't contain pre-built configuration scripts for
+UNIXish platforms. To generate them say
+
+ sh autogen.sh
+
+which in turn depends on the following packages:
+
+ automake (1.10.1)
+ libtool (2.2.4)
+ autoconf (2.62)
+
+The versions given in parentheses are known to work. Newer versions
+should work too, of course. Note that autogen.sh also sets up proper
+file permissions for the `configure' and auxiliary scripts.
+
+A very common problem is that this script complains that the `aclocal'
+program doesn't accept a `--force' option:
+
+ generating `configure.ac'
+ running `aclocal -I . --force'
+ aclocal: unrecognized option -- `--force'
+ Try `aclocal --help' for more information.
+ error while running `aclocal -I . --force'
+
+This means that your version of the automake package is too old.
+Please update it before trying to build FreeType.
+
+
+For static builds which don't use platform specific optimizations, no
+configure script is necessary at all; saying
+
+ make setup ansi
+ make
+
+should work on all platforms which have GNU make (or makepp).
+
+
+----------------------------------------------------------------------
+
+Copyright 2005, 2006, 2007, 2008 by
+David Turner, Robert Wilhelm, and Werner Lemberg.
+
+This file is part of the FreeType project, and may only be used,
+modified, and distributed under the terms of the FreeType project
+license, LICENSE.TXT. By continuing to use, modify, or distribute
+this file you indicate that you have read the license and understand
+and accept it fully.
+
+
+--- end of README.CVS ---
diff --git a/src/3rdparty/freetype/autogen.sh b/src/3rdparty/freetype/autogen.sh
new file mode 100644
index 0000000..d8fb5b2
--- /dev/null
+++ b/src/3rdparty/freetype/autogen.sh
@@ -0,0 +1,61 @@
+#!/bin/sh
+
+# Copyright 2005, 2006, 2007 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+run ()
+{
+ echo "running \`$*'"
+ eval $*
+
+ if test $? != 0 ; then
+ echo "error while running \`$*'"
+ exit 1
+ fi
+}
+
+if test ! -f ./builds/unix/configure.raw; then
+ echo "You must be in the same directory as \`autogen.sh'."
+ echo "Bootstrapping doesn't work if srcdir != builddir."
+ exit 1
+fi
+
+# This sets freetype_major, freetype_minor, and freetype_patch.
+eval `sed -nf version.sed include/freetype/freetype.h`
+
+# We set freetype-patch to an empty value if it is zero.
+if test "$freetype_patch" = ".0"; then
+ freetype_patch=
+fi
+
+cd builds/unix
+
+echo "generating \`configure.ac'"
+sed -e "s;@VERSION@;$freetype_major$freetype_minor$freetype_patch;" \
+ < configure.raw > configure.ac
+
+# On MacOS X, the GNU libtool is named `glibtool'.
+HOSTOS=`uname`
+LIBTOOLIZE=libtoolize
+if test "$HOSTOS"x = Darwinx; then
+ LIBTOOLIZE=glibtoolize
+fi
+
+run aclocal -I . --force
+run $LIBTOOLIZE --force --copy
+run autoconf --force
+
+chmod +x mkinstalldirs
+chmod +x install-sh
+
+cd ../..
+
+chmod +x ./configure
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/amiga/README b/src/3rdparty/freetype/builds/amiga/README
new file mode 100644
index 0000000..2b8f8e8
--- /dev/null
+++ b/src/3rdparty/freetype/builds/amiga/README
@@ -0,0 +1,110 @@
+
+README for the builds/amiga subdirectory.
+
+Copyright 2005 by
+Werner Lemberg and Detlef Würkner.
+
+This file is part of the FreeType project, and may only be used, modified,
+and distributed under the terms of the FreeType project license,
+LICENSE.TXT. By continuing to use, modify, or distribute this file you
+indicate that you have read the license and understand and accept it
+fully.
+
+
+The makefile.os4 is for the AmigaOS4 SDK. To use it, type
+"make -f makefile.os4", it produces a link library libft2_ppc.a.
+
+The makefile is for ppc-morphos-gcc-2.95.3-bin.tgz (gcc 2.95.3 hosted on
+68k-Amiga producing MorphOS-PPC-binaries from http://www.morphos.de).
+To use it, type "make assign", then "make"; it produces a link library
+libft2_ppc.a.
+
+The smakefile is a makefile for Amiga SAS/C 6.58 (no longer available,
+latest sold version was 6.50, updates can be found in Aminet). It is
+based on the version found in the sourcecode of ttf.library 0.83b for
+FreeType 1.3.1 from Richard Griffith (ragriffi@sprynet.com,
+http://ragriffi.home.sprynet.com).
+
+You will also need the latest include files and amiga.lib from the
+Amiga web site (http://www.amiga.com/3.9/download/NDK3.9.lha) for
+AmigaOS 3.9; the generated code should work under AmigaOS 2.04 and up.
+
+To use it, call "smake assign" and then "smake" from the builds/amiga
+directory. The results are:
+
+- A link library "ft2_680x0.lib" (where x depends on the setting of
+ the CPU entry in the smakefile) containing all FreeType2 parts
+ except of the init code, debugging code, and the system interface
+ code.
+
+- ftsystem.o, an object module containing the standard version of the
+ system interface code which uses fopen() fclose() fread() fseek()
+ ftell() malloc() realloc() and free() from lib:sc.lib (not pure).
+
+- ftsystempure.o, an object module containing the pure version of the
+ system interface code which uses Open() Close() Read() Seek()
+ ExamineFH() AsmAllocPooled() AsmFreePooled() etc. This version can
+ be used in both normal programs and in Amiga run-time shared system
+ librarys (can be linked with lib:libinit.o, no copying of DATA and
+ BSS hunks for each OpenLibrary() necessary). Source code is in
+ src/base/ftsystem.c.
+
+- ftdebug.o, an object module containing the standard version of the
+ debugging code which uses vprintf() and exit() (not pure).
+ Debugging can be turned on in FT:include/freetype/config/ftoption.h
+ and with FT_SetTraceLevel().
+
+- ftdebugpure.o, an object module containing the pure version of the
+ debugging code which uses KVPrintf() from lib:debug.lib and no
+ exit(). For debugging of Amiga run-time shared system libraries.
+ Source code is in src/base/ftdebug.c.
+
+- NO ftinit.o. Because linking with a link library should result in
+ linking only the needed object modules in it, but standard
+ ftsystem.o would force ALL FreeType2 modules to be linked to your
+ program, I decided to use a different scheme: You must #include
+ FT:src/base/ftinit.c in your sourcecode and specify with #define
+ statements which modules you need. See
+ include/freetype/config/ftmodule.h.
+
+
+To use in your own programs:
+
+- Insert the #define and #include statements from top of
+ include/freetype/config/ftmodule.h in your source code and uncomment
+ the #define statements for the FreeType2 modules you need.
+
+- You can use either PARAMETERS=REGISTER or PARAMETERS=STACK for
+ calling the FreeType2 functions, because the link library and the
+ object files are compiled with PARAMETERS=BOTH.
+
+- "smake assign" (assign "FT:" to the FreeType2 main directory).
+
+- Compile your program.
+
+- Link with either ftsystem.o or ftsystempure.o, if debugging enabled
+ with either ftdebug.o or (ftdebugpure.o and lib:debug.lib), and with
+ ft2_680x0.lib as link library.
+
+
+To adapt to other compilers:
+
+- The standard ANSI C maximum length of 31 significant characters in
+ identifiers is not enough for FreeType2. Check if your compiler has
+ a minimum length of 40 significant characters or can be switched to
+ it. "idlen=40" is the option for SAS/C. Setting #define
+ HAVE_LIMIT_ON_IDENTS in an include file may also work (not tested).
+
+- Make sure that the include directory in builds/amiga is searched
+ before the normal FreeType2 include directory, so you are able to
+ replace problematic include files with your own version (same may be
+ useful for the src directory).
+
+- An example of how to replace/workaround a problematic include file
+ is include/config/ftconfig.h; it changes a #define that would
+ prevent SAS/C from generating XDEF's where it should do that and
+ then includes the standard FreeType2 include file.
+
+Local Variables:
+coding: latin-1
+End:
diff --git a/src/3rdparty/freetype/builds/amiga/include/freetype/config/ftconfig.h b/src/3rdparty/freetype/builds/amiga/include/freetype/config/ftconfig.h
new file mode 100644
index 0000000..c2c2ac8
--- /dev/null
+++ b/src/3rdparty/freetype/builds/amiga/include/freetype/config/ftconfig.h
@@ -0,0 +1,55 @@
+/***************************************************************************/
+/* */
+/* ftconfig.h */
+/* */
+/* Amiga-specific configuration file (specification only). */
+/* */
+/* Copyright 2005, 2006, 2007 by */
+/* Werner Lemberg and Detlef Würkner. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+/*
+ * This is an example how to override the default FreeType2 header files
+ * with Amiga-specific changes. When the compiler searches this directory
+ * before the default directory, we can do some modifications.
+ *
+ * Here we must change FT_EXPORT_DEF so that SAS/C does
+ * generate the needed XDEFs.
+ */
+
+#if 0
+#define FT_EXPORT_DEF( x ) extern x
+#endif
+
+#undef FT_EXPORT_DEF
+#define FT_EXPORT_DEF( x ) x
+
+/* Now include the original file */
+#ifndef __MORPHOS__
+#ifdef __SASC
+#include "FT:include/freetype/config/ftconfig.h"
+#else
+#include "/FT/include/freetype/config/ftconfig.h"
+#endif
+#else
+/* We must define that, it seems that
+ * lib/gcc-lib/ppc-morphos/2.95.3/include/syslimits.h is missing in
+ * ppc-morphos-gcc-2.95.3-bin.tgz (gcc for 68k producing MorphOS PPC elf
+ * binaries from http://www.morphos.de)
+ */
+#define _LIBC_LIMITS_H_
+#include "/FT/include/freetype/config/ftconfig.h"
+#endif
+
+/*
+Local Variables:
+coding: latin-1
+End:
+*/
diff --git a/src/3rdparty/freetype/builds/amiga/include/freetype/config/ftmodule.h b/src/3rdparty/freetype/builds/amiga/include/freetype/config/ftmodule.h
new file mode 100644
index 0000000..c8a5bee
--- /dev/null
+++ b/src/3rdparty/freetype/builds/amiga/include/freetype/config/ftmodule.h
@@ -0,0 +1,160 @@
+/***************************************************************************/
+/* */
+/* ftmodule.h */
+/* */
+/* Amiga-specific FreeType module selection. */
+/* */
+/* Copyright 2005 by */
+/* Werner Lemberg and Detlef Würkner. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+/*
+ * To avoid that all your programs include all FreeType modules,
+ * you copy the following piece of source code into your own
+ * source file and specify which modules you really need in your
+ * application by uncommenting the appropriate lines.
+ */
+/*
+//#define FT_USE_AUTOFIT // autofitter
+//#define FT_USE_RASTER // monochrome rasterizer
+//#define FT_USE_SMOOTH // anti-aliasing rasterizer
+//#define FT_USE_TT // truetype font driver
+//#define FT_USE_T1 // type1 font driver
+//#define FT_USE_T42 // type42 font driver
+//#define FT_USE_T1CID // cid-keyed type1 font driver // no cmap support
+//#define FT_USE_CFF // opentype font driver
+//#define FT_USE_BDF // bdf bitmap font driver
+//#define FT_USE_PCF // pcf bitmap font driver
+//#define FT_USE_PFR // pfr font driver
+//#define FT_USE_WINFNT // windows .fnt|.fon bitmap font driver
+//#define FT_USE_OTV // opentype validator
+//#define FT_USE_GXV // truetype gx validator
+#include "FT:src/base/ftinit.c"
+*/
+
+/* Make sure that the needed support modules are built in.
+ * Dependencies can be found by searching for FT_Get_Module.
+ */
+
+#ifdef FT_USE_T42
+#define FT_USE_TT
+#endif
+
+#ifdef FT_USE_TT
+#define FT_USE_SFNT
+#endif
+
+#ifdef FT_USE_CFF
+#define FT_USE_SFNT
+#define FT_USE_PSHINT
+#define FT_USE_PSNAMES
+#endif
+
+#ifdef FT_USE_T1
+#define FT_USE_PSAUX
+#define FT_USE_PSHINT
+#define FT_USE_PSNAMES
+#endif
+
+#ifdef FT_USE_T1CID
+#define FT_USE_PSAUX
+#define FT_USE_PSHINT
+#define FT_USE_PSNAMES
+#endif
+
+#ifdef FT_USE_PSAUX
+#define FT_USE_PSNAMES
+#endif
+
+#ifdef FT_USE_SFNT
+#define FT_USE_PSNAMES
+#endif
+
+/* Now include the modules */
+
+#ifdef FT_USE_AUTOFIT
+FT_USE_MODULE(autofit_module_class)
+#endif
+
+#ifdef FT_USE_TT
+FT_USE_MODULE(tt_driver_class)
+#endif
+
+#ifdef FT_USE_T1
+FT_USE_MODULE(t1_driver_class)
+#endif
+
+#ifdef FT_USE_CFF
+FT_USE_MODULE(cff_driver_class)
+#endif
+
+#ifdef FT_USE_T1CID
+FT_USE_MODULE(t1cid_driver_class)
+#endif
+
+#ifdef FT_USE_PFR
+FT_USE_MODULE(pfr_driver_class)
+#endif
+
+#ifdef FT_USE_T42
+FT_USE_MODULE(t42_driver_class)
+#endif
+
+#ifdef FT_USE_WINFNT
+FT_USE_MODULE(winfnt_driver_class)
+#endif
+
+#ifdef FT_USE_PCF
+FT_USE_MODULE(pcf_driver_class)
+#endif
+
+#ifdef FT_USE_PSAUX
+FT_USE_MODULE(psaux_module_class)
+#endif
+
+#ifdef FT_USE_PSNAMES
+FT_USE_MODULE(psnames_module_class)
+#endif
+
+#ifdef FT_USE_PSHINT
+FT_USE_MODULE(pshinter_module_class)
+#endif
+
+#ifdef FT_USE_RASTER
+FT_USE_MODULE(ft_raster1_renderer_class)
+#endif
+
+#ifdef FT_USE_SFNT
+FT_USE_MODULE(sfnt_module_class)
+#endif
+
+#ifdef FT_USE_SMOOTH
+FT_USE_MODULE(ft_smooth_renderer_class)
+FT_USE_MODULE(ft_smooth_lcd_renderer_class)
+FT_USE_MODULE(ft_smooth_lcdv_renderer_class)
+#endif
+
+#ifdef FT_USE_OTV
+FT_USE_MODULE(otv_module_class)
+#endif
+
+#ifdef FT_USE_BDF
+FT_USE_MODULE(bdf_driver_class)
+#endif
+
+#ifdef FT_USE_GXV
+FT_USE_MODULE(gxv_module_class)
+#endif
+
+/*
+Local Variables:
+coding: latin-1
+End:
+*/
diff --git a/src/3rdparty/freetype/builds/amiga/makefile b/src/3rdparty/freetype/builds/amiga/makefile
new file mode 100644
index 0000000..24e8545
--- /dev/null
+++ b/src/3rdparty/freetype/builds/amiga/makefile
@@ -0,0 +1,284 @@
+#
+# Makefile for FreeType2 link library using ppc-morphos-gcc-2.95.3-bin.tgz
+# (gcc 2.95.3 hosted on 68k-Amiga producing MorphOS-PPC-binaries from
+# http://www.morphos.de)
+#
+
+
+# Copyright 2005, 2006, 2007 by
+# Werner Lemberg and Detlef Würkner.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+#
+# to build from the builds/amiga directory call
+#
+# make assign
+# make
+#
+# Your programs source code should start with this
+# (uncomment the parts you do not need to keep the program small):
+# ---8<---
+#define FT_USE_AUTOFIT // autofitter
+#define FT_USE_RASTER // monochrome rasterizer
+#define FT_USE_SMOOTH // anti-aliasing rasterizer
+#define FT_USE_TT // truetype font driver
+#define FT_USE_T1 // type1 font driver
+#define FT_USE_T42 // type42 font driver
+#define FT_USE_T1CID // cid-keyed type1 font driver
+#define FT_USE_CFF // opentype font driver
+#define FT_USE_BDF // bdf bitmap font driver
+#define FT_USE_PCF // pcf bitmap font driver
+#define FT_USE_PFR // pfr font driver
+#define FT_USE_WINFNT // windows .fnt|.fon bitmap font driver
+#define FT_USE_OTV // opentype validator
+#define FT_USE_GXV // truetype gx validator
+#include "FT:src/base/ftinit.c"
+# ---8<---
+#
+# link your programs with libft2_ppc.a and either ftsystem.ppc.o or ftsystempure.ppc.o
+# (and either ftdebug.ppc.o or ftdebugpure.ppc.o if you enabled FT_DEBUG_LEVEL_ERROR or
+# FT_DEBUG_LEVEL_TRACE in include/freetype/config/ftoption.h).
+
+all: libft2_ppc.a ftsystem.ppc.o ftsystempure.ppc.o
+
+assign:
+ assign FT: //
+
+FTSRC = /FT/src
+
+CC = ppc-morphos-gcc
+AR = ppc-morphos-ar rc
+RANLIB = ppc-morphos-ranlib
+LD = ppc-morphos-ld
+CFLAGS = -DFT2_BUILD_LIBRARY -O2 -I/emu/emulinclude/includegcc -I/emu/include -Iinclude -I$(FTSRC) -I/FT/include
+
+#
+# FreeType2 library base
+#
+ftbase.ppc.o: $(FTSRC)/base/ftbase.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+ftinit.ppc.o: $(FTSRC)/base/ftinit.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+ftsystem.ppc.o: $(FTSRC)/base/ftsystem.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+# pure version for use in run-time library etc
+ftsystempure.ppc.o: src/base/ftsystem.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+ftdebug.ppc.o: $(FTSRC)/base/ftdebug.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+# pure version for use in run-time library etc
+ftdebugpure.ppc.o: src/base/ftdebug.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+#
+# FreeType2 library base extensions
+#
+ftbbox.ppc.o: $(FTSRC)/base/ftbbox.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+ftbdf.ppc.o: $(FTSRC)/base/ftbdf.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+ftbitmap.ppc.o: $(FTSRC)/base/ftbitmap.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+ftgasp.ppc.o: $(FTSRC)/base/ftgasp.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+ftglyph.ppc.o: $(FTSRC)/base/ftglyph.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+ftgxval.ppc.o: $(FTSRC)/base/ftgxval.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+ftlcdfil.ppc.o: $(FTSRC)/base/ftlcdfil.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+ftmm.ppc.o: $(FTSRC)/base/ftmm.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+ftotval.ppc.o: $(FTSRC)/base/ftotval.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+ftpfr.ppc.o: $(FTSRC)/base/ftpfr.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+ftstroke.ppc.o: $(FTSRC)/base/ftstroke.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+ftsynth.ppc.o: $(FTSRC)/base/ftsynth.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+fttype1.ppc.o: $(FTSRC)/base/fttype1.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+ftwinfnt.ppc.o: $(FTSRC)/base/ftwinfnt.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+ftxf86.ppc.o: $(FTSRC)/base/ftxf86.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+#
+# FreeType2 library autofitting module
+#
+autofit.ppc.o: $(FTSRC)/autofit/autofit.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+#
+# FreeType2 library postscript hinting module
+#
+pshinter.ppc.o: $(FTSRC)/pshinter/pshinter.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+#
+# FreeType2 library PS support module
+#
+psaux.ppc.o: $(FTSRC)/psaux/psaux.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+#
+# FreeType2 library PS glyph names module
+#
+psnames.ppc.o: $(FTSRC)/psnames/psnames.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+#
+# FreeType2 library monochrome raster module
+#
+raster.ppc.o: $(FTSRC)/raster/raster.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+#
+# FreeType2 library anti-aliasing raster module
+#
+smooth.ppc.o: $(FTSRC)/smooth/smooth.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+#
+# FreeType2 library 'sfnt' module
+#
+sfnt.ppc.o: $(FTSRC)/sfnt/sfnt.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+#
+# FreeType2 library glyph and image caching system
+#
+ftcache.ppc.o: $(FTSRC)/cache/ftcache.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+#
+# FreeType2 library OpenType font driver
+#
+cff.ppc.o: $(FTSRC)/cff/cff.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+#
+# FreeType2 library TrueType font driver
+#
+truetype.ppc.o: $(FTSRC)/truetype/truetype.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+#
+# FreeType2 library Type1 font driver
+#
+type1.ppc.o: $(FTSRC)/type1/type1.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+#
+# FreeType2 library Type42 font driver
+#
+type42.ppc.o: $(FTSRC)/type42/type42.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+#
+# FreeType2 library CID-keyed Type1 font driver
+#
+type1cid.ppc.o: $(FTSRC)/cid/type1cid.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+#
+# FreeType2 library BDF bitmap font driver
+#
+bdf.ppc.o: $(FTSRC)/bdf/bdf.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+#
+# FreeType2 library PCF bitmap font driver
+#
+pcf.ppc.o: $(FTSRC)/pcf/pcf.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+#
+# FreeType2 library gzip support for compressed PCF bitmap fonts
+#
+gzip.ppc.o: $(FTSRC)/gzip/ftgzip.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+#
+# FreeType2 library compress support for compressed PCF bitmap fonts
+#
+lzw.ppc.o: $(FTSRC)/lzw/ftlzw.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+#
+# FreeType2 library PFR font driver
+#
+pfr.ppc.o: $(FTSRC)/pfr/pfr.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+#
+# FreeType2 library Windows FNT/FON bitmap font driver
+#
+winfnt.ppc.o: $(FTSRC)/winfonts/winfnt.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+#
+# FreeType2 library TrueTypeGX Validator
+#
+gxvalid.ppc.o: $(FTSRC)/gxvalid/gxvalid.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+#
+# FreeType2 library OpenType validator
+#
+otvalid.ppc.o: $(FTSRC)/otvalid/otvalid.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+BASEPPC = ftbase.ppc.o ftbbox.ppc.o ftbdf.ppc.o ftbitmap.ppc.o \
+ ftgasp.ppc.o ftglyph.ppc.o ftgxvalid.ppc.o ftlcdfil.ppc.o \
+ ftmm.ppc.o ftotval.ppc.o ftpfr.ppc.o ftstroke.ppc.o \
+ ftsynth.ppc.o fttype1.ppc.o ftwinfnt.ppc.o ftxf86.ppc.o
+
+DEBUGPPC = ftdebug.ppc.o ftdebugpure.ppc.o
+
+AFITPPC = autofit.ppc.o
+
+GXVPPC = gxvalid.ppc.o
+
+OTVPPC = otvalid.ppc.o
+
+PSPPC = psaux.ppc.o psnames.ppc.o pshinter.ppc.o
+
+RASTERPPC = raster.ppc.o smooth.ppc.o
+
+FONTDPPC = cff.ppc.o type1.ppc.o type42.ppc.o type1cid.ppc.o truetype.ppc.o\
+ bdf.ppc.o pcf.ppc.o pfr.ppc.o winfnt.ppc.o
+
+libft2_ppc.a: $(BASEPPC) $(AFITPPC) $(GXVPPC) $(OTVPPC) $(PSPPC) $(RASTERPPC) sfnt.ppc.o ftcache.ppc.o $(FONTDPPC) gzip.ppc.o lzw.ppc.o
+ $(AR) $@ $(BASEPPC) $(AFITPPC) $(GXVPPC) $(OTVPPC) $(PSPPC) $(RASTERPPC) sfnt.ppc.o ftcache.ppc.o $(FONTDPPC) gzip.ppc.o lzw.ppc.o
+ -@ ($(RANLIB) $@ || true) >/dev/null 2>&1
+
+#Local Variables:
+#coding: latin-1
+#End:
diff --git a/src/3rdparty/freetype/builds/amiga/makefile.os4 b/src/3rdparty/freetype/builds/amiga/makefile.os4
new file mode 100644
index 0000000..6853c9f
--- /dev/null
+++ b/src/3rdparty/freetype/builds/amiga/makefile.os4
@@ -0,0 +1,287 @@
+#
+# Makefile for FreeType2 link library using gcc 4.0.3 from the
+# AmigaOS4 SDK
+#
+
+
+# Copyright 2005, 2006, 2007 by
+# Werner Lemberg and Detlef Würkner.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+# to build from the builds/amiga directory call
+#
+# make -f makefile.os4
+#
+# Your programs source code should start with this
+# (uncomment the parts you do not need to keep the program small):
+# ---8<---
+#define FT_USE_AUTOFIT // autofitter
+#define FT_USE_RASTER // monochrome rasterizer
+#define FT_USE_SMOOTH // anti-aliasing rasterizer
+#define FT_USE_TT // truetype font driver
+#define FT_USE_T1 // type1 font driver
+#define FT_USE_T42 // type42 font driver
+#define FT_USE_T1CID // cid-keyed type1 font driver
+#define FT_USE_CFF // opentype font driver
+#define FT_USE_BDF // bdf bitmap font driver
+#define FT_USE_PCF // pcf bitmap font driver
+#define FT_USE_PFR // pfr font driver
+#define FT_USE_WINFNT // windows .fnt|.fon bitmap font driver
+#define FT_USE_OTV // opentype validator
+#define FT_USE_GXV // truetype gx validator
+#include "FT:src/base/ftinit.c"
+# ---8<---
+#
+# link your programs with libft2_ppc.a and either ftsystem.ppc.o or ftsystempure.ppc.o
+# (and either ftdebug.ppc.o or ftdebugpure.ppc.o if you enabled FT_DEBUG_LEVEL_ERROR or
+# FT_DEBUG_LEVEL_TRACE in include/freetype/config/ftoption.h).
+
+all: assign libft2_ppc.a ftsystem.ppc.o ftsystempure.ppc.o
+
+assign:
+ assign FT: //
+
+CC = ppc-amigaos-gcc
+AR = ppc-amigaos-ar
+RANLIB = ppc-amigaos-ranlib
+
+DIRFLAGS = -Iinclude -I/FT/src -I/FT/include -I/SDK/include
+
+WARNINGS = -Wall -W -Wundef -Wpointer-arith -Wbad-function-cast \
+ -Waggregate-return -Wwrite-strings -Wshadow
+
+OPTIONS = -DFT2_BUILD_LIBRARY -DNDEBUG -fno-builtin
+OPTIMIZE = -O2 -fomit-frame-pointer -fstrength-reduce -finline-functions
+
+CFLAGS = -mcrt=clib2 $(DIRFLAGS) $(WARNINGS) $(FT2FLAGS) $(OPTIONS) $(OPTIMIZE)
+
+#
+# FreeType2 library base
+#
+ftbase.ppc.o: FT:src/base/ftbase.c
+ $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftbase.c
+
+ftinit.ppc.o: FT:src/base/ftinit.c
+ $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftinit.c
+
+ftsystem.ppc.o: FT:src/base/ftsystem.c
+ $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftsystem.c
+
+# pure version for use in run-time library etc
+ftsystempure.ppc.o: src/base/ftsystem.c
+ $(CC) -c $(CFLAGS) -o $@ src/base/ftsystem.c
+
+#
+# FreeType2 library base extensions
+#
+ftbbox.ppc.o: FT:src/base/ftbbox.c
+ $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftbbox.c
+
+ftbdf.ppc.o: FT:src/base/ftbdf.c
+ $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftbdf.c
+
+ftbitmap.ppc.o: FT:src/base/ftbitmap.c
+ $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftbitmap.c
+
+ftdebug.ppc.o: FT:src/base/ftdebug.c
+ $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftdebug.c
+
+# pure version for use in run-time library etc
+ftdebugpure.ppc.o: src/base/ftdebug.c
+ $(CC) -c $(CFLAGS) -o $@ src/base/ftdebug.c
+
+ftgasp.ppc.o: FT:src/base/ftgasp.c
+ $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftgasp.c
+
+ftglyph.ppc.o: FT:src/base/ftglyph.c
+ $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftglyph.c
+
+ftgxval.ppc.o: FT:src/base/ftgxval.c
+ $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftgxval.c
+
+ftlcdfil.ppc.o: FT:src/base/ftlcdfil.c
+ $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftlcdfil.c
+
+ftmm.ppc.o: FT:src/base/ftmm.c
+ $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftmm.c
+
+ftotval.ppc.o: FT:src/base/ftotval.c
+ $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftotval.c
+
+ftpfr.ppc.o: FT:src/base/ftpfr.c
+ $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftpfr.c
+
+ftstroke.ppc.o: FT:src/base/ftstroke.c
+ $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftstroke.c
+
+ftsynth.ppc.o: FT:src/base/ftsynth.c
+ $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftsynth.c
+
+fttype1.ppc.o: FT:src/base/fttype1.c
+ $(CC) -c $(CFLAGS) -o $@ /FT/src/base/fttype1.c
+
+ftwinfnt.ppc.o: FT:src/base/ftwinfnt.c
+ $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftwinfnt.c
+
+ftxf86.ppc.o: FT:src/base/ftxf86.c
+ $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftxf86.c
+
+#
+# FreeType2 library autofitting module
+#
+autofit.ppc.o: FT:src/autofit/autofit.c
+ $(CC) -c $(CFLAGS) -o $@ /FT/src/autofit/autofit.c
+
+#
+# FreeType2 library postscript hinting module
+#
+pshinter.ppc.o: FT:src/pshinter/pshinter.c
+ $(CC) -c $(CFLAGS) -o $@ /FT/src/pshinter/pshinter.c
+
+#
+# FreeType2 library PS support module
+#
+psaux.ppc.o: FT:src/psaux/psaux.c
+ $(CC) -c $(CFLAGS) -o $@ /FT/src/psaux/psaux.c
+
+#
+# FreeType2 library PS glyph names module
+#
+psnames.ppc.o: FT:src/psnames/psnames.c
+ $(CC) -c $(CFLAGS) -o $@ /FT/src/psnames/psnames.c
+
+#
+# FreeType2 library monochrome raster module
+#
+raster.ppc.o: FT:src/raster/raster.c
+ $(CC) -c $(CFLAGS) -o $@ /FT/src/raster/raster.c
+
+#
+# FreeType2 library anti-aliasing raster module
+#
+smooth.ppc.o: FT:src/smooth/smooth.c
+ $(CC) -c $(CFLAGS) -o $@ /FT/src/smooth/smooth.c
+
+#
+# FreeType2 library 'sfnt' module
+#
+sfnt.ppc.o: FT:src/sfnt/sfnt.c
+ $(CC) -c $(CFLAGS) -o $@ /FT/src/sfnt/sfnt.c
+
+#
+# FreeType2 library glyph and image caching system
+#
+ftcache.ppc.o: FT:src/cache/ftcache.c
+ $(CC) -c $(CFLAGS) -o $@ /FT/src/cache/ftcache.c
+
+#
+# FreeType2 library OpenType font driver
+#
+cff.ppc.o: FT:src/cff/cff.c
+ $(CC) -c $(CFLAGS) -o $@ /FT/src/cff/cff.c
+
+#
+# FreeType2 library TrueType font driver
+#
+truetype.ppc.o: FT:src/truetype/truetype.c
+ $(CC) -c $(CFLAGS) -o $@ /FT/src/truetype/truetype.c
+
+#
+# FreeType2 library Type1 font driver
+#
+type1.ppc.o: FT:src/type1/type1.c
+ $(CC) -c $(CFLAGS) -o $@ /FT/src/type1/type1.c
+
+#
+# FreeType2 library Type42 font driver
+#
+type42.ppc.o: FT:src/type42/type42.c
+ $(CC) -c $(CFLAGS) -o $@ /FT/src/type42/type42.c
+
+#
+# FreeType2 library CID-keyed Type1 font driver
+#
+type1cid.ppc.o: FT:src/cid/type1cid.c
+ $(CC) -c $(CFLAGS) -o $@ /FT/src/cid/type1cid.c
+
+#
+# FreeType2 library BDF bitmap font driver
+#
+bdf.ppc.o: FT:src/bdf/bdf.c
+ $(CC) -c $(CFLAGS) -o $@ /FT/src/bdf/bdf.c
+
+#
+# FreeType2 library PCF bitmap font driver
+#
+pcf.ppc.o: FT:src/pcf/pcf.c
+ $(CC) -c $(CFLAGS) -o $@ /FT/src/pcf/pcf.c
+
+#
+# FreeType2 library gzip support for compressed PCF bitmap fonts
+#
+gzip.ppc.o: FT:src/gzip/ftgzip.c
+ $(CC) -c $(CFLAGS) -o $@ /FT/src/gzip/ftgzip.c
+
+#
+# FreeType2 library compress support for compressed PCF bitmap fonts
+#
+lzw.ppc.o: FT:src/lzw/ftlzw.c
+ $(CC) -c $(CFLAGS) -o $@ /FT/src/lzw/ftlzw.c
+
+#
+# FreeType2 library PFR font driver
+#
+pfr.ppc.o: FT:src/pfr/pfr.c
+ $(CC) -c $(CFLAGS) -o $@ /FT/src/pfr/pfr.c
+
+#
+# FreeType2 library Windows FNT/FON bitmap font driver
+#
+winfnt.ppc.o: FT:src/winfonts/winfnt.c
+ $(CC) -c $(CFLAGS) -o $@ /FT/src/winfonts/winfnt.c
+
+#
+# FreeType2 library TrueTypeGX Validator
+#
+gxvalid.ppc.o: FT:src/gxvalid/gxvalid.c
+ $(CC) -c $(CFLAGS) -Wno-aggregate-return -o $@ /FT/src/gxvalid/gxvalid.c
+
+#
+# FreeType2 library OpenType validator
+#
+otvalid.ppc.o: FT:src/otvalid/otvalid.c
+ $(CC) -c $(CFLAGS) -o $@ /FT/src/otvalid/otvalid.c
+
+BASE = ftbase.ppc.o ftbbox.ppc.o ftbdf.ppc.o ftbitmap.ppc.o \
+ ftgasp.ppc.o ftglyph.ppc.o ftgxval.ppc.o ftlcdfil.ppc.o \
+ ftmm.ppc.o ftotval.ppc.o ftpfr.ppc.o ftstroke.ppc.o \
+ ftsynth.ppc.o fttype1.ppc.o ftwinfnt.ppc.o ftxf86.ppc.o
+
+DEBUG = ftdebug.ppc.o ftdebugpure.ppc.o
+
+AFIT = autofit.ppc.o
+
+GXV = gxvalid.ppc.o
+
+OTV = otvalid.ppc.o
+
+PS = psaux.ppc.o psnames.ppc.o pshinter.ppc.o
+
+RASTER = raster.ppc.o smooth.ppc.o
+
+FONTD = cff.ppc.o type1.ppc.o type42.ppc.o type1cid.ppc.o truetype.ppc.o\
+ bdf.ppc.o pcf.ppc.o pfr.ppc.o winfnt.ppc.o
+
+libft2_ppc.a: $(BASE) $(AFIT) $(GXV) $(OTV) $(PS) $(RASTER) sfnt.ppc.o ftcache.ppc.o $(FONTD) gzip.ppc.o lzw.ppc.o
+ $(AR) r $@ $(BASE) $(AFIT) $(GXV) $(OTV) $(PS) $(RASTER) sfnt.ppc.o ftcache.ppc.o $(FONTD) gzip.ppc.o lzw.ppc.o
+ $(RANLIB) $@
+
+#Local Variables:
+#coding: latin-1
+#End:
diff --git a/src/3rdparty/freetype/builds/amiga/smakefile b/src/3rdparty/freetype/builds/amiga/smakefile
new file mode 100644
index 0000000..c9209f7
--- /dev/null
+++ b/src/3rdparty/freetype/builds/amiga/smakefile
@@ -0,0 +1,291 @@
+#
+# Makefile for FreeType2 link library using Amiga SAS/C 6.58
+#
+
+
+# Copyright 2005,2006, 2007 by
+# Werner Lemberg and Detlef Würkner.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+# to build from the builds/amiga directory call
+#
+# smake assign
+# smake
+#
+# Your programs source code should start with this
+# (uncomment the parts you do not need to keep the program small):
+# ---8<---
+#define FT_USE_AUTOFIT // autofitter
+#define FT_USE_RASTER // monochrome rasterizer
+#define FT_USE_SMOOTH // anti-aliasing rasterizer
+#define FT_USE_TT // truetype font driver
+#define FT_USE_T1 // type1 font driver
+#define FT_USE_T42 // type42 font driver
+#define FT_USE_T1CID // cid-keyed type1 font driver
+#define FT_USE_CFF // opentype font driver
+#define FT_USE_BDF // bdf bitmap font driver
+#define FT_USE_PCF // pcf bitmap font driver
+#define FT_USE_PFR // pfr font driver
+#define FT_USE_WINFNT // windows .fnt|.fon bitmap font driver
+#define FT_USE_OTV // opentype validator
+#define FT_USE_GXV // truetype gx validator
+#include "FT:src/base/ftinit.c"
+# ---8<---
+#
+# link your programs with ft2_680x0.lib and either ftsystem.o or ftsystempure.o
+# (and either ftdebug.o or ftdebugpure.o if you enabled FT_DEBUG_LEVEL_ERROR or
+# FT_DEBUG_LEVEL_TRACE in include/freetype/config/ftoption.h).
+
+OBJBASE = ftbase.o ftbbox.o ftbdf.o ftbitmap.o ftgasp.o ftglyph.o \
+ ftgxval.o ftlcdfil.o ftmm.o ftotval.o ftpfr.o ftstroke.o \
+ ftsynth.o fttype1.o ftwinfnt.o ftxf86.o
+
+OBJSYSTEM = ftsystem.o ftsystempure.o
+
+OBJDEBUG = ftdebug.o ftdebugpure.o
+
+OBJAFIT = autofit.o
+
+OBJGXV = gxvalid.o
+
+OBJOTV = otvalid.o
+
+OBJPS = psaux.o psnames.o pshinter.o
+
+OBJRASTER = raster.o smooth.o
+
+OBJSFNT = sfnt.o
+
+OBJCACHE = ftcache.o
+
+OBJFONTD = cff.o type1.o type42.o type1cid.o\
+ truetype.o winfnt.o bdf.o pcf.o pfr.o
+
+CORE = FT:src/
+
+CPU = 68000
+#CPU = 68020
+#CPU = 68030
+#CPU = 68040
+#CPU = 68060
+
+OPTIMIZER = optinlocal
+
+SCFLAGS = optimize opttime optsched strmerge data=faronly idlen=50 cpu=$(CPU)\
+ idir=include/ idir=$(CORE) idir=FT:include/ nostackcheck nochkabort\
+ noicons ignore=79,85,110,306 parameters=both define=FT2_BUILD_LIBRARY
+
+LIB = ft2_$(CPU).lib
+
+# sample linker options
+OPTS = link lib=$(LIB),lib:sc.lib,lib:amiga.lib,lib:debug.lib\
+ smallcode smalldata noicons utillib
+
+# sample program entry
+#myprog: myprog.c ftsystem.o $(LIB)
+# sc $< programname=$@ ftsystem.o $(SCFLAGS) $(OPTS)
+
+all: $(LIB) $(OBJSYSTEM) $(OBJDEBUG)
+
+assign:
+ assign FT: //
+
+# uses separate object modules in lib to make for easier debugging
+# also, can make smaller programs if entire engine is not used
+ft2_$(CPU).lib: $(OBJBASE) $(OBJAFIT) $(OBJOTV) $(OBJPS) $(OBJRASTER) $(OBJSFNT) $(OBJCACHE) $(OBJFONTD) lzw.o gzip.o
+ oml $@ r $(OBJBASE) $(OBJAFIT) $(OBJOTV) $(OBJPS) $(OBJRASTER) $(OBJSFNT) $(OBJCACHE) $(OBJFONTD) lzw.o gzip.o
+
+clean:
+ -delete \#?.o
+
+realclean: clean
+ -delete ft2$(CPU).lib
+
+#
+# freetype library base
+#
+ftbase.o: $(CORE)base/ftbase.c
+ sc $(SCFLAGS) objname=$@ $<
+ftinit.o: $(CORE)base/ftinit.c
+ sc $(SCFLAGS) objname=$@ $<
+ftsystem.o: $(CORE)base/ftsystem.c
+ sc $(SCFLAGS) objname=$@ $<
+ftsystempure.o: src/base/ftsystem.c ## pure version for use in run-time library etc
+ sc $(SCFLAGS) objname=$@ $<
+ftdebug.o: $(CORE)base/ftdebug.c
+ sc $(SCFLAGS) objname=$@ $<
+ftdebugpure.o: src/base/ftdebug.c ## pure version for use in run-time library etc
+ sc $(SCFLAGS) objname=$@ $<
+#
+# freetype library base extensions
+#
+ftbbox.o: $(CORE)base/ftbbox.c
+ sc $(SCFLAGS) objname=$@ $<
+ftbdf.o: $(CORE)base/ftbdf.c
+ sc $(SCFLAGS) objname=$@ $<
+ftbitmap.o: $(CORE)base/ftbitmap.c
+ sc $(SCFLAGS) objname=$@ $<
+ftgasp.o: $(CORE)base/ftgasp.c
+ sc $(SCFLAGS) objname=$@ $<
+ftglyph.o: $(CORE)base/ftglyph.c
+ sc $(SCFLAGS) objname=$@ $<
+ftgxval.o: $(CORE)base/ftgxval.c
+ sc $(SCFLAGS) objname=$@ $<
+ftlcdfil.o: $(CORE)base/ftlcdfil.c
+ sc $(SCFLAGS) objname=$@ $<
+ftmm.o: $(CORE)base/ftmm.c
+ sc $(SCFLAGS) objname=$@ $<
+ftotval.o: $(CORE)base/ftotval.c
+ sc $(SCFLAGS) objname=$@ $<
+ftpfr.o: $(CORE)base/ftpfr.c
+ sc $(SCFLAGS) objname=$@ $<
+ftstroke.o: $(CORE)base/ftstroke.c
+ sc $(SCFLAGS) objname=$@ $<
+ftsynth.o: $(CORE)base/ftsynth.c
+ sc $(SCFLAGS) objname=$@ $<
+fttype1.o: $(CORE)base/fttype1.c
+ sc $(SCFLAGS) objname=$@ $<
+ftwinfnt.o: $(CORE)base/ftwinfnt.c
+ sc $(SCFLAGS) objname=$@ $<
+ftxf86.o: $(CORE)base/ftxf86.c
+ sc $(SCFLAGS) objname=$@ $<
+
+#
+# freetype library autofitter module
+#
+autofit.o: $(CORE)autofit/autofit.c
+ sc $(SCFLAGS) objname=$@ $<
+
+#
+# freetype library PS hinting module
+#
+pshinter.o: $(CORE)pshinter/pshinter.c
+ sc $(SCFLAGS) objname=$@ $<
+#
+# freetype library PS support module
+#
+psaux.o: $(CORE)psaux/psaux.c
+ sc $(SCFLAGS) objname=$@ $<
+
+#
+# freetype library PS glyph names module
+#
+psnames.o: $(CORE)psnames/psnames.c
+ sc $(SCFLAGS) code=far objname=$@ $<
+
+#
+# freetype library monochrome raster module
+#
+raster.o: $(CORE)raster/raster.c
+ sc $(SCFLAGS) objname=$@ $<
+
+#
+# freetype library anti-aliasing raster module
+#
+smooth.o: $(CORE)smooth/smooth.c
+ sc $(SCFLAGS) objname=$@ $<
+
+#
+# freetype library 'sfnt' module
+#
+sfnt.o: $(CORE)sfnt/sfnt.c
+ sc $(SCFLAGS) objname=$@ $<
+
+#
+# freetype library glyph and image caching system (still experimental)
+#
+ftcache.o: $(CORE)cache/ftcache.c
+ sc $(SCFLAGS) objname=$@ $<
+
+#
+# freetype library OpenType font driver
+#
+cff.o: $(CORE)cff/cff.c
+ sc $(SCFLAGS) objname=$@ $<
+
+#
+# freetype library TrueType font driver
+#
+truetype.o: $(CORE)truetype/truetype.c
+ sc $(SCFLAGS) objname=$@ $<
+
+#
+# freetype library Type1 font driver
+#
+type1.o: $(CORE)type1/type1.c
+ sc $(SCFLAGS) objname=$@ $<
+
+#
+# FreeType2 library Type42 font driver
+#
+type42.o: $(CORE)type42/type42.c
+ sc $(SCFLAGS) objname=$@ $<
+
+#
+# freetype library CID-keyed Type1 font driver
+#
+type1cid.o: $(CORE)cid/type1cid.c
+ sc $(SCFLAGS) objname=$@ $<
+#
+# freetype library CID-keyed Type1 font driver extensions
+#
+#cidafm.o: $(CORE)cid/cidafm.c
+# sc $(SCFLAGS) objname=$@ $<
+
+#
+# freetype library BDF bitmap font driver
+#
+bdf.o: $(CORE)bdf/bdf.c
+ sc $(SCFLAGS) objname=$@ $<
+
+#
+# freetype library PCF bitmap font driver
+#
+pcf.o: $(CORE)pcf/pcf.c
+ sc $(SCFLAGS) objname=$@ $<
+
+#
+# freetype library gzip support for compressed PCF bitmap fonts
+#
+gzip.o: $(CORE)gzip/ftgzip.c
+ sc $(SCFLAGS) define FAR objname=$@ $<
+
+#
+# freetype library compress support for compressed PCF bitmap fonts
+#
+lzw.o: $(CORE)lzw/ftlzw.c
+ sc $(SCFLAGS) objname=$@ $<
+
+#
+# freetype library PFR font driver
+#
+pfr.o: $(CORE)pfr/pfr.c
+ sc $(SCFLAGS) objname=$@ $<
+
+#
+# freetype library Windows FNT/FON bitmap font driver
+#
+winfnt.o: $(CORE)winfonts/winfnt.c
+ sc $(SCFLAGS) objname=$@ $<
+
+#
+# freetype library TrueTypeGX validator
+#
+gxvalid.o: $(CORE)gxvalid/gxvalid.c
+ sc $(SCFLAGS) objname=$@ $<
+
+#
+# freetype library OpenType validator
+#
+otvalid.o: $(CORE)otvalid/otvalid.c
+ sc $(SCFLAGS) objname=$@ $<
+
+#Local Variables:
+#coding: latin-1
+#End:
diff --git a/src/3rdparty/freetype/builds/amiga/src/base/ftdebug.c b/src/3rdparty/freetype/builds/amiga/src/base/ftdebug.c
new file mode 100644
index 0000000..5284e69
--- /dev/null
+++ b/src/3rdparty/freetype/builds/amiga/src/base/ftdebug.c
@@ -0,0 +1,279 @@
+/***************************************************************************/
+/* */
+/* ftdebug.c */
+/* */
+/* Debugging and logging component (body). */
+/* */
+/* Copyright 1996-2001, 2002, 2004, 2005 by */
+/* David Turner, Robert Wilhelm, Werner Lemberg and Detlef Würkner. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* This component contains various macros and functions used to ease the */
+ /* debugging of the FreeType engine. Its main purpose is in assertion */
+ /* checking, tracing, and error detection. */
+ /* */
+ /* There are now three debugging modes: */
+ /* */
+ /* - trace mode */
+ /* */
+ /* Error and trace messages are sent to the log file (which can be the */
+ /* standard error output). */
+ /* */
+ /* - error mode */
+ /* */
+ /* Only error messages are generated. */
+ /* */
+ /* - release mode: */
+ /* */
+ /* No error message is sent or generated. The code is free from any */
+ /* debugging parts. */
+ /* */
+ /*************************************************************************/
+
+
+/*
+ * Based on the default ftdebug.c,
+ * replaced vprintf() with KVPrintF(),
+ * commented out exit(),
+ * replaced getenv() with GetVar().
+ */
+
+#include <exec/types.h>
+#include <utility/tagitem.h>
+#include <dos/exall.h>
+#include <dos/var.h>
+#define __NOLIBBASE__
+#define __NOLOBALIFACE__
+#define __USE_INLINE__
+#include <proto/dos.h>
+#include <clib/debug_protos.h>
+
+#ifndef __amigaos4__
+extern struct Library *DOSBase;
+#else
+extern struct DOSIFace *IDOS;
+#endif
+
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+#include FT_INTERNAL_DEBUG_H
+
+
+#if defined( FT_DEBUG_LEVEL_ERROR )
+
+ /* documentation is in ftdebug.h */
+
+ FT_BASE_DEF( void )
+ FT_Message( const char* fmt, ... )
+ {
+ va_list ap;
+
+
+ va_start( ap, fmt );
+/* vprintf( fmt, ap ); */
+ KVPrintF( fmt, ap );
+ va_end( ap );
+ }
+
+
+ /* documentation is in ftdebug.h */
+
+ FT_BASE_DEF( void )
+ FT_Panic( const char* fmt, ... )
+ {
+ va_list ap;
+
+
+ va_start( ap, fmt );
+/* vprintf( fmt, ap ); */
+ KVPrintF( fmt, ap );
+ va_end( ap );
+
+/* exit( EXIT_FAILURE ); */
+ }
+
+#endif /* FT_DEBUG_LEVEL_ERROR */
+
+
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+
+ /* array of trace levels, initialized to 0 */
+ int ft_trace_levels[trace_count];
+
+
+ /* define array of trace toggle names */
+#define FT_TRACE_DEF( x ) #x ,
+
+ static const char* ft_trace_toggles[trace_count + 1] =
+ {
+#include FT_INTERNAL_TRACE_H
+ NULL
+ };
+
+#undef FT_TRACE_DEF
+
+
+ /* documentation is in ftdebug.h */
+
+ FT_BASE_DEF( FT_Int )
+ FT_Trace_Get_Count( void )
+ {
+ return trace_count;
+ }
+
+
+ /* documentation is in ftdebug.h */
+
+ FT_BASE_DEF( const char * )
+ FT_Trace_Get_Name( FT_Int idx )
+ {
+ int max = FT_Trace_Get_Count();
+
+
+ if ( idx < max )
+ return ft_trace_toggles[idx];
+ else
+ return NULL;
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* Initialize the tracing sub-system. This is done by retrieving the */
+ /* value of the `FT2_DEBUG' environment variable. It must be a list of */
+ /* toggles, separated by spaces, `;', or `,'. Example: */
+ /* */
+ /* export FT2_DEBUG="any:3 memory:7 stream:5" */
+ /* */
+ /* This requests that all levels be set to 3, except the trace level for */
+ /* the memory and stream components which are set to 7 and 5, */
+ /* respectively. */
+ /* */
+ /* See the file <include/freetype/internal/fttrace.h> for details of the */
+ /* available toggle names. */
+ /* */
+ /* The level must be between 0 and 7; 0 means quiet (except for serious */
+ /* runtime errors), and 7 means _very_ verbose. */
+ /* */
+ FT_BASE_DEF( void )
+ ft_debug_init( void )
+ {
+/* const char* ft2_debug = getenv( "FT2_DEBUG" ); */
+ char buf[256];
+ const char* ft2_debug = &buf[0];
+
+
+/* if ( ft2_debug ) */
+ if ( GetVar( "FT2_DEBUG", (STRPTR)ft2_debug, 256, LV_VAR ) > 0 )
+ {
+ const char* p = ft2_debug;
+ const char* q;
+
+
+ for ( ; *p; p++ )
+ {
+ /* skip leading whitespace and separators */
+ if ( *p == ' ' || *p == '\t' || *p == ',' || *p == ';' || *p == '=' )
+ continue;
+
+ /* read toggle name, followed by ':' */
+ q = p;
+ while ( *p && *p != ':' )
+ p++;
+
+ if ( *p == ':' && p > q )
+ {
+ FT_Int n, i, len = (FT_Int)( p - q );
+ FT_Int level = -1, found = -1;
+
+
+ for ( n = 0; n < trace_count; n++ )
+ {
+ const char* toggle = ft_trace_toggles[n];
+
+
+ for ( i = 0; i < len; i++ )
+ {
+ if ( toggle[i] != q[i] )
+ break;
+ }
+
+ if ( i == len && toggle[i] == 0 )
+ {
+ found = n;
+ break;
+ }
+ }
+
+ /* read level */
+ p++;
+ if ( *p )
+ {
+ level = *p++ - '0';
+ if ( level < 0 || level > 7 )
+ level = -1;
+ }
+
+ if ( found >= 0 && level >= 0 )
+ {
+ if ( found == trace_any )
+ {
+ /* special case for `any' */
+ for ( n = 0; n < trace_count; n++ )
+ ft_trace_levels[n] = level;
+ }
+ else
+ ft_trace_levels[found] = level;
+ }
+ }
+ }
+ }
+ }
+
+
+#else /* !FT_DEBUG_LEVEL_TRACE */
+
+
+ FT_BASE_DEF( void )
+ ft_debug_init( void )
+ {
+ /* nothing */
+ }
+
+
+ FT_BASE_DEF( FT_Int )
+ FT_Trace_Get_Count( void )
+ {
+ return 0;
+ }
+
+
+ FT_BASE_DEF( const char * )
+ FT_Trace_Get_Name( FT_Int idx )
+ {
+ FT_UNUSED( idx );
+
+ return NULL;
+ }
+
+
+#endif /* !FT_DEBUG_LEVEL_TRACE */
+
+/*
+Local Variables:
+coding: latin-1
+End:
+*/
+/* END */
diff --git a/src/3rdparty/freetype/builds/amiga/src/base/ftsystem.c b/src/3rdparty/freetype/builds/amiga/src/base/ftsystem.c
new file mode 100644
index 0000000..016f1e2
--- /dev/null
+++ b/src/3rdparty/freetype/builds/amiga/src/base/ftsystem.c
@@ -0,0 +1,522 @@
+/***************************************************************************/
+/* */
+/* ftsystem.c */
+/* */
+/* Amiga-specific FreeType low-level system interface (body). */
+/* */
+/* Copyright 1996-2001, 2002, 2005, 2006, 2007 by */
+/* David Turner, Robert Wilhelm, Werner Lemberg and Detlef Würkner. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+ /*************************************************************************/
+ /* */
+ /* This file contains the Amiga interface used by FreeType to access */
+ /* low-level, i.e. memory management, i/o access as well as thread */
+ /* synchronisation. */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* Maintained by Detlef Würkner <TetiSoft@apg.lahn.de> */
+ /* */
+ /* Based on the original ftsystem.c, */
+ /* modified to avoid fopen(), fclose(), fread(), fseek(), ftell(), */
+ /* malloc(), realloc(), and free(). */
+ /* */
+ /* Those C library functions are often not thread-safe or cant be */
+ /* used in a shared Amiga library. If that's not a problem for you, */
+ /* you can of course use the default ftsystem.c with C library calls */
+ /* instead. */
+ /* */
+ /* This implementation needs exec V39+ because it uses AllocPooled() etc */
+ /* */
+ /*************************************************************************/
+
+#define __NOLIBBASE__
+#define __NOGLOBALIFACE__
+#define __USE_INLINE__
+#include <proto/exec.h>
+#include <dos/stdio.h>
+#include <proto/dos.h>
+#ifdef __amigaos4__
+extern struct ExecIFace *IExec;
+extern struct DOSIFace *IDOS;
+#else
+extern struct Library *SysBase;
+extern struct Library *DOSBase;
+#endif
+
+#define IOBUF_SIZE 512
+
+/* structure that helps us to avoid
+ * useless calls of Seek() and Read()
+ */
+struct SysFile
+{
+ BPTR file;
+ ULONG iobuf_start;
+ ULONG iobuf_end;
+ UBYTE iobuf[IOBUF_SIZE];
+};
+
+#ifndef __amigaos4__
+/* C implementation of AllocVecPooled (see autodoc exec/AllocPooled) */
+APTR
+Alloc_VecPooled( APTR poolHeader,
+ ULONG memSize )
+{
+ ULONG newSize = memSize + sizeof ( ULONG );
+ ULONG *mem = AllocPooled( poolHeader, newSize );
+
+ if ( !mem )
+ return NULL;
+ *mem = newSize;
+ return mem + 1;
+}
+
+/* C implementation of FreeVecPooled (see autodoc exec/AllocPooled) */
+void
+Free_VecPooled( APTR poolHeader,
+ APTR memory )
+{
+ ULONG *realmem = (ULONG *)memory - 1;
+
+ FreePooled( poolHeader, realmem, *realmem );
+}
+#endif
+
+#include <ft2build.h>
+#include FT_CONFIG_CONFIG_H
+#include FT_INTERNAL_DEBUG_H
+#include FT_SYSTEM_H
+#include FT_ERRORS_H
+#include FT_TYPES_H
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+ /*************************************************************************/
+ /* */
+ /* MEMORY MANAGEMENT INTERFACE */
+ /* */
+ /*************************************************************************/
+
+ /*************************************************************************/
+ /* */
+ /* It is not necessary to do any error checking for the */
+ /* allocation-related functions. This is done by the higher level */
+ /* routines like ft_mem_alloc() or ft_mem_realloc(). */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* ft_alloc */
+ /* */
+ /* <Description> */
+ /* The memory allocation function. */
+ /* */
+ /* <Input> */
+ /* memory :: A pointer to the memory object. */
+ /* */
+ /* size :: The requested size in bytes. */
+ /* */
+ /* <Return> */
+ /* The address of newly allocated block. */
+ /* */
+ FT_CALLBACK_DEF( void* )
+ ft_alloc( FT_Memory memory,
+ long size )
+ {
+#ifdef __amigaos4__
+ return AllocVecPooled( memory->user, size );
+#else
+ return Alloc_VecPooled( memory->user, size );
+#endif
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* ft_realloc */
+ /* */
+ /* <Description> */
+ /* The memory reallocation function. */
+ /* */
+ /* <Input> */
+ /* memory :: A pointer to the memory object. */
+ /* */
+ /* cur_size :: The current size of the allocated memory block. */
+ /* */
+ /* new_size :: The newly requested size in bytes. */
+ /* */
+ /* block :: The current address of the block in memory. */
+ /* */
+ /* <Return> */
+ /* The address of the reallocated memory block. */
+ /* */
+ FT_CALLBACK_DEF( void* )
+ ft_realloc( FT_Memory memory,
+ long cur_size,
+ long new_size,
+ void* block )
+ {
+ void* new_block;
+
+#ifdef __amigaos4__
+ new_block = AllocVecPooled ( memory->user, new_size );
+#else
+ new_block = Alloc_VecPooled ( memory->user, new_size );
+#endif
+ if ( new_block != NULL )
+ {
+ CopyMem ( block, new_block,
+ ( new_size > cur_size ) ? cur_size : new_size );
+#ifdef __amigaos4__
+ FreeVecPooled ( memory->user, block );
+#else
+ Free_VecPooled ( memory->user, block );
+#endif
+ }
+ return new_block;
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* ft_free */
+ /* */
+ /* <Description> */
+ /* The memory release function. */
+ /* */
+ /* <Input> */
+ /* memory :: A pointer to the memory object. */
+ /* */
+ /* block :: The address of block in memory to be freed. */
+ /* */
+ FT_CALLBACK_DEF( void )
+ ft_free( FT_Memory memory,
+ void* block )
+ {
+#ifdef __amigaos4__
+ FreeVecPooled( memory->user, block );
+#else
+ Free_VecPooled( memory->user, block );
+#endif
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* RESOURCE MANAGEMENT INTERFACE */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
+ /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
+ /* messages during execution. */
+ /* */
+#undef FT_COMPONENT
+#define FT_COMPONENT trace_io
+
+ /* We use the macro STREAM_FILE for convenience to extract the */
+ /* system-specific stream handle from a given FreeType stream object */
+#define STREAM_FILE( stream ) ( (struct SysFile *)stream->descriptor.pointer )
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* ft_amiga_stream_close */
+ /* */
+ /* <Description> */
+ /* The function to close a stream. */
+ /* */
+ /* <Input> */
+ /* stream :: A pointer to the stream object. */
+ /* */
+ FT_CALLBACK_DEF( void )
+ ft_amiga_stream_close( FT_Stream stream )
+ {
+ struct SysFile* sysfile;
+
+ sysfile = STREAM_FILE( stream );
+ Close ( sysfile->file );
+ FreeMem ( sysfile, sizeof ( struct SysFile ));
+
+ stream->descriptor.pointer = NULL;
+ stream->size = 0;
+ stream->base = 0;
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* ft_amiga_stream_io */
+ /* */
+ /* <Description> */
+ /* The function to open a stream. */
+ /* */
+ /* <Input> */
+ /* stream :: A pointer to the stream object. */
+ /* */
+ /* offset :: The position in the data stream to start reading. */
+ /* */
+ /* buffer :: The address of buffer to store the read data. */
+ /* */
+ /* count :: The number of bytes to read from the stream. */
+ /* */
+ /* <Return> */
+ /* The number of bytes actually read. */
+ /* */
+ FT_CALLBACK_DEF( unsigned long )
+ ft_amiga_stream_io( FT_Stream stream,
+ unsigned long offset,
+ unsigned char* buffer,
+ unsigned long count )
+ {
+ struct SysFile* sysfile;
+ unsigned long read_bytes;
+
+ if ( count != 0 )
+ {
+ sysfile = STREAM_FILE( stream );
+
+ /* handle the seek */
+ if ( (offset < sysfile->iobuf_start) || (offset + count > sysfile->iobuf_end) )
+ {
+ /* requested offset implies we need a buffer refill */
+ if ( !sysfile->iobuf_end || offset != sysfile->iobuf_end )
+ {
+ /* a physical seek is necessary */
+ Seek( sysfile->file, offset, OFFSET_BEGINNING );
+ }
+ sysfile->iobuf_start = offset;
+ sysfile->iobuf_end = 0; /* trigger a buffer refill */
+ }
+
+ /* handle the read */
+ if ( offset + count <= sysfile->iobuf_end )
+ {
+ /* we have buffer and requested bytes are all inside our buffer */
+ CopyMem( &sysfile->iobuf[offset - sysfile->iobuf_start], buffer, count );
+ read_bytes = count;
+ }
+ else
+ {
+ /* (re)fill buffer */
+ if ( count <= IOBUF_SIZE )
+ {
+ /* requested bytes is a subset of the buffer */
+ read_bytes = Read( sysfile->file, sysfile->iobuf, IOBUF_SIZE );
+ if ( read_bytes == -1UL )
+ {
+ /* error */
+ read_bytes = 0;
+ }
+ else
+ {
+ sysfile->iobuf_end = offset + read_bytes;
+ CopyMem( sysfile->iobuf, buffer, count );
+ if ( read_bytes > count )
+ {
+ read_bytes = count;
+ }
+ }
+ }
+ else
+ {
+ /* we actually need more than our buffer can hold, so we decide
+ ** to do a single big read, and then copy the last IOBUF_SIZE
+ ** bytes of that to our internal buffer for later use */
+ read_bytes = Read( sysfile->file, buffer, count );
+ if ( read_bytes == -1UL )
+ {
+ /* error */
+ read_bytes = 0;
+ }
+ else
+ {
+ ULONG bufsize;
+
+ bufsize = ( read_bytes > IOBUF_SIZE ) ? IOBUF_SIZE : read_bytes;
+ sysfile->iobuf_end = offset + read_bytes;
+ sysfile->iobuf_start = sysfile->iobuf_end - bufsize;
+ CopyMem( &buffer[read_bytes - bufsize] , sysfile->iobuf, bufsize );
+ }
+ }
+ }
+ }
+ else
+ {
+ read_bytes = 0;
+ }
+
+ return read_bytes;
+ }
+
+
+ /* documentation is in ftobjs.h */
+
+ FT_BASE_DEF( FT_Error )
+ FT_Stream_Open( FT_Stream stream,
+ const char* filepathname )
+ {
+ struct FileInfoBlock* fib;
+ struct SysFile* sysfile;
+
+
+ if ( !stream )
+ return FT_Err_Invalid_Stream_Handle;
+
+#ifdef __amigaos4__
+ sysfile = AllocMem ( sizeof (struct SysFile ), MEMF_SHARED );
+#else
+ sysfile = AllocMem ( sizeof (struct SysFile ), MEMF_PUBLIC );
+#endif
+ if ( !sysfile )
+ {
+ FT_ERROR(( "FT_Stream_Open:" ));
+ FT_ERROR(( " could not open `%s'\n", filepathname ));
+
+ return FT_Err_Cannot_Open_Resource;
+ }
+ sysfile->file = Open( (STRPTR)filepathname, MODE_OLDFILE );
+ if ( !sysfile->file )
+ {
+ FreeMem ( sysfile, sizeof ( struct SysFile ));
+ FT_ERROR(( "FT_Stream_Open:" ));
+ FT_ERROR(( " could not open `%s'\n", filepathname ));
+
+ return FT_Err_Cannot_Open_Resource;
+ }
+
+ fib = AllocDosObject( DOS_FIB, NULL );
+ if ( !fib )
+ {
+ Close ( sysfile->file );
+ FreeMem ( sysfile, sizeof ( struct SysFile ));
+ FT_ERROR(( "FT_Stream_Open:" ));
+ FT_ERROR(( " could not open `%s'\n", filepathname ));
+
+ return FT_Err_Cannot_Open_Resource;
+ }
+ if ( !( ExamineFH( sysfile->file, fib ) ) )
+ {
+ FreeDosObject( DOS_FIB, fib );
+ Close ( sysfile->file );
+ FreeMem ( sysfile, sizeof ( struct SysFile ));
+ FT_ERROR(( "FT_Stream_Open:" ));
+ FT_ERROR(( " could not open `%s'\n", filepathname ));
+
+ return FT_Err_Cannot_Open_Resource;
+ }
+ stream->size = fib->fib_Size;
+ FreeDosObject( DOS_FIB, fib );
+
+ stream->descriptor.pointer = (void *)sysfile;
+ stream->pathname.pointer = (char*)filepathname;
+ sysfile->iobuf_start = 0;
+ sysfile->iobuf_end = 0;
+ stream->pos = 0;
+
+ stream->read = ft_amiga_stream_io;
+ stream->close = ft_amiga_stream_close;
+
+ FT_TRACE1(( "FT_Stream_Open:" ));
+ FT_TRACE1(( " opened `%s' (%ld bytes) successfully\n",
+ filepathname, stream->size ));
+
+ return FT_Err_Ok;
+ }
+
+
+#ifdef FT_DEBUG_MEMORY
+
+ extern FT_Int
+ ft_mem_debug_init( FT_Memory memory );
+
+ extern void
+ ft_mem_debug_done( FT_Memory memory );
+
+#endif
+
+
+ /* documentation is in ftobjs.h */
+
+ FT_BASE_DEF( FT_Memory )
+ FT_New_Memory( void )
+ {
+ FT_Memory memory;
+
+
+#ifdef __amigaos4__
+ memory = (FT_Memory)AllocVec( sizeof ( *memory ), MEMF_SHARED );
+#else
+ memory = (FT_Memory)AllocVec( sizeof ( *memory ), MEMF_PUBLIC );
+#endif
+ if ( memory )
+ {
+#ifdef __amigaos4__
+ memory->user = CreatePool( MEMF_SHARED, 16384, 16384 );
+#else
+ memory->user = CreatePool( MEMF_PUBLIC, 16384, 16384 );
+#endif
+ if ( memory->user == NULL )
+ {
+ FreeVec( memory );
+ memory = NULL;
+ }
+ else
+ {
+ memory->alloc = ft_alloc;
+ memory->realloc = ft_realloc;
+ memory->free = ft_free;
+#ifdef FT_DEBUG_MEMORY
+ ft_mem_debug_init( memory );
+#endif
+ }
+ }
+
+ return memory;
+ }
+
+
+ /* documentation is in ftobjs.h */
+
+ FT_BASE_DEF( void )
+ FT_Done_Memory( FT_Memory memory )
+ {
+#ifdef FT_DEBUG_MEMORY
+ ft_mem_debug_done( memory );
+#endif
+
+ DeletePool( memory->user );
+ FreeVec( memory );
+ }
+
+/*
+Local Variables:
+coding: latin-1
+End:
+*/
+/* END */
diff --git a/src/3rdparty/freetype/builds/ansi/ansi-def.mk b/src/3rdparty/freetype/builds/ansi/ansi-def.mk
new file mode 100644
index 0000000..2c58572
--- /dev/null
+++ b/src/3rdparty/freetype/builds/ansi/ansi-def.mk
@@ -0,0 +1,74 @@
+#
+# FreeType 2 configuration rules for a `normal' ANSI system
+#
+
+
+# Copyright 1996-2000, 2003, 2006 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+DELETE := rm -f
+CAT := cat
+SEP := /
+BUILD_DIR := $(TOP_DIR)/builds/ansi
+PLATFORM := ansi
+
+
+# The directory where all library files are placed.
+#
+# By default, this is the same as $(OBJ_DIR); however, this can be changed
+# to suit particular needs.
+#
+LIB_DIR := $(OBJ_DIR)
+
+
+# The name of the final library file. Note that the DOS-specific Makefile
+# uses a shorter (8.3) name.
+#
+LIBRARY := lib$(PROJECT)
+
+
+# Path inclusion flag. Some compilers use a different flag than `-I' to
+# specify an additional include path. Examples are `/i=' or `-J'.
+#
+I := -I
+
+
+# C flag used to define a macro before the compilation of a given source
+# object. Usually it is `-D' like in `-DDEBUG'.
+#
+D := -D
+
+
+# The link flag used to specify a given library file on link. Note that
+# this is only used to compile the demo programs, not the library itself.
+#
+L := -l
+
+
+# Target flag.
+#
+T := -o$(space)
+
+
+# C flags
+#
+# These should concern: debug output, optimization & warnings.
+#
+# Use the ANSIFLAGS variable to define the compiler flags used to enfore
+# ANSI compliance.
+#
+CFLAGS ?= -c
+
+# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
+#
+ANSIFLAGS :=
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/ansi/ansi.mk b/src/3rdparty/freetype/builds/ansi/ansi.mk
new file mode 100644
index 0000000..32b3bac
--- /dev/null
+++ b/src/3rdparty/freetype/builds/ansi/ansi.mk
@@ -0,0 +1,21 @@
+#
+# FreeType 2 configuration rules for a `normal' pseudo ANSI compiler/system
+#
+
+
+# Copyright 1996-2000 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+include $(TOP_DIR)/builds/ansi/ansi-def.mk
+include $(TOP_DIR)/builds/compiler/ansi-cc.mk
+include $(TOP_DIR)/builds/link_std.mk
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/atari/ATARI.H b/src/3rdparty/freetype/builds/atari/ATARI.H
new file mode 100644
index 0000000..bb69138
--- /dev/null
+++ b/src/3rdparty/freetype/builds/atari/ATARI.H
@@ -0,0 +1,16 @@
+#ifndef ATARI_H
+#define ATARI_H
+
+#pragma warn -stu
+
+/* PureC doesn't like 32bit enumerations */
+
+#ifndef FT_IMAGE_TAG
+#define FT_IMAGE_TAG( value, _x1, _x2, _x3, _x4 ) value
+#endif /* FT_IMAGE_TAG */
+
+#ifndef FT_ENC_TAG
+#define FT_ENC_TAG( value, a, b, c, d ) value
+#endif /* FT_ENC_TAG */
+
+#endif /* ATARI_H */
diff --git a/src/3rdparty/freetype/builds/atari/FNames.SIC b/src/3rdparty/freetype/builds/atari/FNames.SIC
new file mode 100644
index 0000000..f365717
--- /dev/null
+++ b/src/3rdparty/freetype/builds/atari/FNames.SIC
@@ -0,0 +1,37 @@
+/* the following changes file names for PureC projects */
+
+if (argc > 0)
+{
+ ordner = argv[0];
+ if (basename(ordner) == "") /* ist Ordner */
+ {
+ ChangeFilenames(ordner);
+ }
+}
+
+proc ChangeFilenames(folder)
+local i,entries,directory,file;
+{
+ entries = filelist(directory,folder);
+ for (i = 0; i < entries; ++i)
+ {
+ file = directory[i,0];
+ if ((directory[i,3]&16) > 0) /* subdirectory */
+ {
+ ChangeFilenames(folder+file+"\\");
+ }
+ else
+ {
+ if ((stricmp(suffix(file),".h")==0)|(stricmp(suffix(file),".c")==0))
+ ChangeFilename(folder,file);
+ }
+ }
+}
+
+proc ChangeFilename(path,datei)
+local newfile,err;
+{
+ newfile=datei;
+ newfile[0]=(newfile[0] | 32) ^ 32;
+ err=files.rename("-q",path+datei,newfile);
+}
diff --git a/src/3rdparty/freetype/builds/atari/FREETYPE.PRJ b/src/3rdparty/freetype/builds/atari/FREETYPE.PRJ
new file mode 100644
index 0000000..4776a5b
--- /dev/null
+++ b/src/3rdparty/freetype/builds/atari/FREETYPE.PRJ
@@ -0,0 +1,32 @@
+;FreeType project file
+
+FREETYPE.LIB
+
+.C [-K -P -R -A]
+.L [-J -V]
+.S
+
+=
+
+..\..\src\base\ftsystem.c
+..\..\src\base\ftdebug.c
+
+..\..\src\base\ftinit.c
+..\..\src\base\ftglyph.c
+..\..\src\base\ftmm
+..\..\src\base\ftbbox
+
+..\..\src\base\ftbase.c
+..\..\src\autohint\autohint.c
+;..\..\src\cache\ftcache.c
+..\..\src\cff\cff.c
+..\..\src\cid\type1cid.c
+..\..\src\psaux\psaux.c
+..\..\src\pshinter\pshinter.c
+..\..\src\psnames\psnames.c
+..\..\src\raster\raster.c
+..\..\src\sfnt\sfnt.c
+..\..\src\smooth\smooth.c
+..\..\src\truetype\truetype.c
+..\..\src\type1\type1.c
+..\..\src\type42\type42.c
diff --git a/src/3rdparty/freetype/builds/atari/README.TXT b/src/3rdparty/freetype/builds/atari/README.TXT
new file mode 100644
index 0000000..04eec63
--- /dev/null
+++ b/src/3rdparty/freetype/builds/atari/README.TXT
@@ -0,0 +1,51 @@
+Compiling FreeType 2 with PureC compiler
+========================================
+
+[See below for a German version.]
+
+To compile FreeType 2 as a library the following changes must be applied:
+
+- All *.c files must start with an uppercase letter.
+ (In case GEMSCRIPT is available:
+ Simply drag the whole FreeType 2 directory to the file `FNames.SIC'.)
+
+- You have to change the INCLUDE directory in PureC's compiler options
+ to contain both the `INCLUDE' and `freetype2\include' directory.
+ Example:
+
+ INCLUDE;E:\freetype2\include
+
+- The file `freetype2/include/Ft2build.h' must be patched as follows to
+ include ATARI.H:
+
+ #ifndef __FT2_BUILD_GENERIC_H__
+ #define __FT2_BUILD_GENERIC_H__
+
+ #include "ATARI.H"
+
+
+
+Compilieren von FreeType 2 mit PureC
+====================================
+
+Um FreeType 2 als eine Bibliothek (library) zu compilieren, muss folgendes
+ge„ndert werden:
+
+- Alle *.c-files mssen mit einem GROSSBUCHSTABEN beginnen.
+ (Falls GEMSCRIPT zur Verfgung steht:
+ Den kompletten Ordner freetype2 auf die Datei `FNames.SIC' draggen.)
+
+- In den Compiler-Optionen von PureC muss das INCLUDE directory auf INCLUDE
+ und freetype2\include verweisen. Z.B.:
+
+ INCLUDE;E:\freetype2\include
+
+- In der Datei freetype2/include/Ft2build.h muss zu Beginn
+ ein #include "ATARI.H" wie folgt eingefgt werden:
+
+ #ifndef __FT2_BUILD_GENERIC_H__
+ #define __FT2_BUILD_GENERIC_H__
+
+ #include "ATARI.H"
+
+--- end of README.TXT ---
diff --git a/src/3rdparty/freetype/builds/beos/beos-def.mk b/src/3rdparty/freetype/builds/beos/beos-def.mk
new file mode 100644
index 0000000..4371a30
--- /dev/null
+++ b/src/3rdparty/freetype/builds/beos/beos-def.mk
@@ -0,0 +1,76 @@
+#
+# FreeType 2 configuration rules for a BeOS system
+#
+# this is similar to the "ansi-def.mk" file, except for BUILD and PLATFORM
+#
+
+
+# Copyright 1996-2000, 2003, 2006 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+DELETE := rm -f
+CAT := cat
+SEP := /
+BUILD_DIR := $(TOP_DIR)/builds/beos
+PLATFORM := beos
+
+
+# The directory where all library files are placed.
+#
+# By default, this is the same as $(OBJ_DIR); however, this can be changed
+# to suit particular needs.
+#
+LIB_DIR := $(OBJ_DIR)
+
+
+# The name of the final library file. Note that the DOS-specific Makefile
+# uses a shorter (8.3) name.
+#
+LIBRARY := lib$(PROJECT)
+
+
+# Path inclusion flag. Some compilers use a different flag than `-I' to
+# specify an additional include path. Examples are `/i=' or `-J'.
+#
+I := -I
+
+
+# C flag used to define a macro before the compilation of a given source
+# object. Usually it is `-D' like in `-DDEBUG'.
+#
+D := -D
+
+
+# The link flag used to specify a given library file on link. Note that
+# this is only used to compile the demo programs, not the library itself.
+#
+L := -l
+
+
+# Target flag.
+#
+T := -o$(space)
+
+
+# C flags
+#
+# These should concern: debug output, optimization & warnings.
+#
+# Use the ANSIFLAGS variable to define the compiler flags used to enfore
+# ANSI compliance.
+#
+CFLAGS ?= -c
+
+# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
+#
+ANSIFLAGS :=
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/beos/beos.mk b/src/3rdparty/freetype/builds/beos/beos.mk
new file mode 100644
index 0000000..b5c8bda
--- /dev/null
+++ b/src/3rdparty/freetype/builds/beos/beos.mk
@@ -0,0 +1,19 @@
+#
+# FreeType 2 configuration rules for a BeOS system
+#
+
+# Copyright 1996-2000, 2002, 2005 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+include $(TOP_DIR)/builds/beos/beos-def.mk
+include $(TOP_DIR)/builds/compiler/ansi-cc.mk
+include $(TOP_DIR)/builds/link_std.mk
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/beos/detect.mk b/src/3rdparty/freetype/builds/beos/detect.mk
new file mode 100644
index 0000000..24a0878
--- /dev/null
+++ b/src/3rdparty/freetype/builds/beos/detect.mk
@@ -0,0 +1,41 @@
+#
+# FreeType 2 configuration file to detect an BeOS host platform.
+#
+
+
+# Copyright 1996-2000, 2003, 2006 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+.PHONY: setup
+
+
+ifeq ($(PLATFORM),ansi)
+
+ ifdef BE_HOST_CPU
+
+ PLATFORM := beos
+
+ endif # test MACHTYPE beos
+endif
+
+ifeq ($(PLATFORM),beos)
+
+ DELETE := rm -f
+ CAT := cat
+ SEP := /
+ BUILD_DIR := $(TOP_DIR)/builds/beos
+ CONFIG_FILE := beos.mk
+
+ setup: std_setup
+
+endif # test PLATFORM beos
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/compiler/ansi-cc.mk b/src/3rdparty/freetype/builds/compiler/ansi-cc.mk
new file mode 100644
index 0000000..3b668e2
--- /dev/null
+++ b/src/3rdparty/freetype/builds/compiler/ansi-cc.mk
@@ -0,0 +1,80 @@
+#
+# FreeType 2 generic pseudo ANSI compiler
+#
+
+
+# Copyright 1996-2000, 2003, 2006 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+# Compiler command line name
+#
+CC := cc
+COMPILER_SEP := $(SEP)
+
+
+# The object file extension (for standard and static libraries). This can be
+# .o, .tco, .obj, etc., depending on the platform.
+#
+O := o
+SO := o
+
+# The library file extension (for standard and static libraries). This can
+# be .a, .lib, etc., depending on the platform.
+#
+A := a
+SA := a
+
+
+# Path inclusion flag. Some compilers use a different flag than `-I' to
+# specify an additional include path. Examples are `/i=' or `-J'.
+#
+I := -I
+
+
+# C flag used to define a macro before the compilation of a given source
+# object. Usually it is `-D' like in `-DDEBUG'.
+#
+D := -D
+
+
+# The link flag used to specify a given library file on link. Note that
+# this is only used to compile the demo programs, not the library itself.
+#
+L := -l
+
+
+# Target flag.
+#
+T := -o$(space)
+
+
+# C flags
+#
+# These should concern: debug output, optimization & warnings.
+#
+# Use the ANSIFLAGS variable to define the compiler flags used to enfore
+# ANSI compliance.
+#
+CFLAGS ?= -c
+
+# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
+#
+# we assume the compiler is already strictly ANSI
+#
+ANSIFLAGS :=
+
+
+# Library linking
+#
+CLEAN_LIBRARY ?= $(DELETE) $(subst /,$(SEP),$(PROJECT_LIBRARY))
+LINK_LIBRARY = $(AR) -r $@ $(subst /,$(COMPILER_SEP),$(OBJECTS_LIST))
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/compiler/bcc-dev.mk b/src/3rdparty/freetype/builds/compiler/bcc-dev.mk
new file mode 100644
index 0000000..ba1a88a
--- /dev/null
+++ b/src/3rdparty/freetype/builds/compiler/bcc-dev.mk
@@ -0,0 +1,78 @@
+#
+# FreeType 2 Borland C++-specific with NO OPTIMIZATIONS + DEBUGGING
+#
+
+
+# Copyright 1996-2000, 2003, 2006 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+# Compiler command line name
+#
+CC := bcc32
+COMPILER_SEP := $(SEP)
+
+
+# The object file extension (for standard and static libraries). This can be
+# .o, .tco, .obj, etc., depending on the platform.
+#
+O := obj
+SO := obj
+
+# The library file extension (for standard and static libraries). This can
+# be .a, .lib, etc., depending on the platform.
+#
+A := lib
+SA := lib
+
+
+# Path inclusion flag. Some compilers use a different flag than `-I' to
+# specify an additional include path. Examples are `/i=' or `-J'.
+#
+I := -I
+
+
+# C flag used to define a macro before the compilation of a given source
+# object. Usually it is `-D' like in `-DDEBUG'.
+#
+D := -D
+
+
+# The link flag used to specify a given library file on link. Note that
+# this is only used to compile the demo programs, not the library itself.
+#
+L :=
+
+
+# Target flag -- no trailing space.
+#
+T := -o
+
+
+# C flags
+#
+# These should concern: debug output, optimization & warnings.
+#
+# Use the ANSIFLAGS variable to define the compiler flags used to enfore
+# ANSI compliance.
+#
+CFLAGS ?= -q -c -y -d -v -Od -w-par -w-ccc -w-rch -w-pro -w-aus
+
+# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
+#
+ANSIFLAGS := -A
+
+
+# Library linking
+#
+CLEAN_LIBRARY ?= $(DELETE) $(subst /,$(SEP),$(PROJECT_LIBRARY))
+LINK_LIBRARY = tlib /u $(subst /,$(COMPILER_SEP),$@ $(OBJECTS_LIST:%=+%))
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/compiler/bcc.mk b/src/3rdparty/freetype/builds/compiler/bcc.mk
new file mode 100644
index 0000000..509cb72
--- /dev/null
+++ b/src/3rdparty/freetype/builds/compiler/bcc.mk
@@ -0,0 +1,78 @@
+#
+# FreeType 2 Borland C++-specific rules
+#
+
+
+# Copyright 1996-2000, 2003, 2006 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+# Compiler command line name
+#
+CC := bcc32
+COMPILER_SEP := $(SEP)
+
+
+# The object file extension (for standard and static libraries). This can be
+# .o, .tco, .obj, etc., depending on the platform.
+#
+O := obj
+SO := obj
+
+# The library file extension (for standard and static libraries). This can
+# be .a, .lib, etc., depending on the platform.
+#
+A := lib
+SA := lib
+
+
+# Path inclusion flag. Some compilers use a different flag than `-I' to
+# specify an additional include path. Examples are `/i=' or `-J'.
+#
+I := -I
+
+
+# C flag used to define a macro before the compilation of a given source
+# object. Usually it is `-D' like in `-DDEBUG'.
+#
+D := -D
+
+
+# The link flag used to specify a given library file on link. Note that
+# this is only used to compile the demo programs, not the library itself.
+#
+L :=
+
+
+# Target flag -- no trailing space.
+#
+T := -o
+
+
+# C flags
+#
+# These should concern: debug output, optimization & warnings.
+#
+# Use the ANSIFLAGS variable to define the compiler flags used to enfore
+# ANSI compliance.
+#
+CFLAGS ?= -c -q -y -d -v -Od -w-par -w-ccc -w-rch -w-pro -w-aus
+
+# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
+#
+ANSIFLAGS := -A
+
+
+# Library linking
+#
+CLEAN_LIBRARY ?= $(DELETE) $(subst /,$(SEP),$(PROJECT_LIBRARY))
+LINK_LIBRARY = tlib /u $(subst /,$(COMPILER_SEP),$@ $(OBJECTS_LIST:%=+%))
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/compiler/emx.mk b/src/3rdparty/freetype/builds/compiler/emx.mk
new file mode 100644
index 0000000..c237005
--- /dev/null
+++ b/src/3rdparty/freetype/builds/compiler/emx.mk
@@ -0,0 +1,77 @@
+#
+# FreeType 2 emx-specific definitions
+#
+
+
+# Copyright 2003, 2006 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+# Compiler command line name
+#
+CC := set GCCOPT="-ansi -pedantic"; gcc
+COMPILER_SEP := /
+
+
+# The object file extension (for standard and static libraries). This can be
+# .o, .tco, .obj, etc., depending on the platform.
+#
+O := o
+SO := o
+
+# The library file extension (for standard and static libraries). This can
+# be .a, .lib, etc., depending on the platform.
+#
+A := a
+SA := a
+
+
+# Path inclusion flag. Some compilers use a different flag than `-I' to
+# specify an additional include path. Examples are `/i=' or `-J'.
+#
+I := -I
+
+
+# C flag used to define a macro before the compilation of a given source
+# object. Usually it is `-D' like in `-DDEBUG'.
+#
+D := -D
+
+
+# The link flag used to specify a given library file on link. Note that
+# this is only used to compile the demo programs, not the library itself.
+#
+L := -l
+
+
+# Target flag.
+#
+T := -o$(space)
+
+# C flags
+#
+# These should concern: debug output, optimization & warnings.
+#
+# Use the ANSIFLAGS variable to define the compiler flags used to enfore
+# ANSI compliance.
+#
+CFLAGS ?= -c -g -O6 -Wall
+
+# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
+#
+ANSIFLAGS :=
+
+
+# Library linking
+#
+CLEAN_LIBRARY ?= $(DELETE) $(subst /,$(SEP),$(PROJECT_LIBRARY))
+LINK_LIBRARY = $(foreach m,$(OBJECTS_LIST),$(AR) -r $@ $(m);) echo > nul
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/compiler/gcc-dev.mk b/src/3rdparty/freetype/builds/compiler/gcc-dev.mk
new file mode 100644
index 0000000..c63e126
--- /dev/null
+++ b/src/3rdparty/freetype/builds/compiler/gcc-dev.mk
@@ -0,0 +1,95 @@
+#
+# FreeType 2 gcc-specific with NO OPTIMIZATIONS + DEBUGGING
+#
+
+
+# Copyright 1996-2000, 2003, 2004, 2005, 2006 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+# Compiler command line name
+#
+CC := gcc
+COMPILER_SEP := /
+
+
+# The object file extension (for standard and static libraries). This can be
+# .o, .tco, .obj, etc., depending on the platform.
+#
+O := o
+SO := o
+
+# The library file extension (for standard and static libraries). This can
+# be .a, .lib, etc., depending on the platform.
+#
+A := a
+SA := a
+
+
+# Path inclusion flag. Some compilers use a different flag than `-I' to
+# specify an additional include path. Examples are `/i=' or `-J'.
+#
+I := -I
+
+
+# C flag used to define a macro before the compilation of a given source
+# object. Usually it is `-D' like in `-DDEBUG'.
+#
+D := -D
+
+
+# The link flag used to specify a given library file on link. Note that
+# this is only used to compile the demo programs, not the library itself.
+#
+L := -l
+
+
+# Target flag.
+#
+T := -o$(space)
+
+
+# C flags
+#
+# These should concern: debug output, optimization & warnings.
+#
+# Use the ANSIFLAGS variable to define the compiler flags used to enfore
+# ANSI compliance.
+#
+ifndef CFLAGS
+ ifeq ($(findstring g++,$(CC)),)
+ nested_externs := -Wnested-externs
+ strict_prototypes := -Wstrict-prototypes
+ endif
+
+ CFLAGS := -c -g -O0 \
+ -Wall \
+ -W \
+ -Wundef \
+ -Wshadow \
+ -Wpointer-arith \
+ -Wwrite-strings \
+ -Wredundant-decls \
+ -Wno-long-long \
+ $(nested_externs) \
+ $(strict_prototypes)
+endif
+
+# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
+#
+ANSIFLAGS := -ansi -pedantic
+
+
+# Library linking
+#
+CLEAN_LIBRARY ?= $(DELETE) $(subst /,$(SEP),$(PROJECT_LIBRARY))
+LINK_LIBRARY = $(AR) -r $@ $(OBJECTS_LIST)
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/compiler/gcc.mk b/src/3rdparty/freetype/builds/compiler/gcc.mk
new file mode 100644
index 0000000..e941443
--- /dev/null
+++ b/src/3rdparty/freetype/builds/compiler/gcc.mk
@@ -0,0 +1,77 @@
+#
+# FreeType 2 gcc-specific definitions
+#
+
+
+# Copyright 1996-2000, 2003, 2005, 2006 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+# Compiler command line name
+#
+CC := gcc
+COMPILER_SEP := /
+
+
+# The object file extension (for standard and static libraries). This can be
+# .o, .tco, .obj, etc., depending on the platform.
+#
+O := o
+SO := o
+
+# The library file extension (for standard and static libraries). This can
+# be .a, .lib, etc., depending on the platform.
+#
+A := a
+SA := a
+
+
+# Path inclusion flag. Some compilers use a different flag than `-I' to
+# specify an additional include path. Examples are `/i=' or `-J'.
+#
+I := -I
+
+
+# C flag used to define a macro before the compilation of a given source
+# object. Usually it is `-D' like in `-DDEBUG'.
+#
+D := -D
+
+
+# The link flag used to specify a given library file on link. Note that
+# this is only used to compile the demo programs, not the library itself.
+#
+L := -l
+
+
+# Target flag.
+#
+T := -o$(space)
+
+# C flags
+#
+# These should concern: debug output, optimization & warnings.
+#
+# Use the ANSIFLAGS variable to define the compiler flags used to enfore
+# ANSI compliance.
+#
+CFLAGS ?= -c -g -O6 -Wall
+
+# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
+#
+ANSIFLAGS := -ansi -pedantic
+
+
+# Library linking
+#
+CLEAN_LIBRARY ?= $(DELETE) $(subst /,$(SEP),$(PROJECT_LIBRARY))
+LINK_LIBRARY = $(AR) -r $@ $(OBJECTS_LIST)
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/compiler/intelc.mk b/src/3rdparty/freetype/builds/compiler/intelc.mk
new file mode 100644
index 0000000..413ce5b
--- /dev/null
+++ b/src/3rdparty/freetype/builds/compiler/intelc.mk
@@ -0,0 +1,85 @@
+#
+# FreeType 2 Intel C/C++ definitions (VC++ compatibility mode)
+#
+
+
+# Copyright 1996-2000, 2003, 2006 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+# compiler command line name
+#
+CC := icl
+COMPILER_SEP := $(SEP)
+
+
+# The object file extension (for standard and static libraries). This can be
+# .o, .tco, .obj, etc., depending on the platform.
+#
+O := obj
+SO := obj
+
+
+# The library file extension (for standard and static libraries). This can
+# be .a, .lib, etc., depending on the platform.
+#
+A := lib
+SA := lib
+
+
+# Path inclusion flag. Some compilers use a different flag than `-I' to
+# specify an additional include path. Examples are `/i=' or `-J'.
+#
+I := /I
+
+
+# C flag used to define a macro before the compilation of a given source
+# object. Usually it is `-D' like in `-DDEBUG'.
+#
+D := /D
+
+
+# The link flag used to specify a given library file on link. Note that
+# this is only used to compile the demo programs, not the library itself.
+#
+L := /Fl
+
+
+# Target flag.
+#
+T := /Fo
+TE := /Fe
+
+
+# C flags
+#
+# These should concern: debug output, optimization & warnings.
+#
+# Use the ANSIFLAGS variable to define the compiler flags used to enfore
+# ANSI compliance.
+#
+# Note that the Intel C/C++ compiler version 4.5 complains about
+# the use of FT_FIELD_OFFSET with "value must be arithmetic type"!
+# This really looks like a bug in the compiler because the macro
+# _does_ compute an arithmetic value, so we disable this warning
+# with "/Qwd32".
+#
+CFLAGS ?= /nologo /c /Ox /G5 /W3 /Qwd32
+
+# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
+#
+ANSIFLAGS := /Qansi_alias /Za
+
+# Library linking
+#
+#CLEAN_LIBRARY =
+LINK_LIBRARY = lib /nologo /out:$(subst /,$(COMPILER_SEP),$@ $(OBJECTS_LIST))
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/compiler/unix-lcc.mk b/src/3rdparty/freetype/builds/compiler/unix-lcc.mk
new file mode 100644
index 0000000..d79f508
--- /dev/null
+++ b/src/3rdparty/freetype/builds/compiler/unix-lcc.mk
@@ -0,0 +1,83 @@
+#
+# FreeType 2 Unix LCC specific definitions
+#
+
+
+# Copyright 1996-2000, 2003, 2006 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+# Command line name
+#
+CC := lcc
+COMPILER_SEP := $(SEP)
+
+
+# The object file extension (for standard and static libraries). This can be
+# .o, .tco, .obj, etc., depending on the platform.
+#
+O := o
+SO := o
+
+
+# The library file extension (for standard and static libraries). This can
+# be .a, .lib, etc., depending on the platform.
+#
+A := a
+SA := a
+
+
+# Path inclusion flag. Some compilers use a different flag than `-I' to
+# specify an additional include path. Examples are `/i=' or `-J'.
+#
+I := -I
+
+
+# C flag used to define a macro before the compilation of a given source
+# object. Usually it is `-D' like in `-DDEBUG'.
+#
+D := -D
+
+
+# The link flag used to specify a given library file on link. Note that
+# this is only used to compile the demo programs, not the library itself.
+#
+L := -l
+
+
+# Target flag.
+#
+T := -o$(space)
+
+
+# C flags
+#
+# These should concern: debug output, optimization & warnings.
+#
+# Use the ANSIFLAGS variable to define the compiler flags used to enfore
+# ANSI compliance.
+#
+CFLAGS ?= -c -g
+
+# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
+#
+# LCC is pure ANSI anyway!
+#
+# the "-A" flag simply increments verbosity about non ANSI code
+#
+ANSIFLAGS := -A
+
+
+# library linking
+#
+CLEAN_LIBRARY ?= $(DELETE) $(PROJECT_LIBRARY)
+LINK_LIBRARY = $(AR) -r $@ $(OBJECTS_LIST)
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/compiler/visualage.mk b/src/3rdparty/freetype/builds/compiler/visualage.mk
new file mode 100644
index 0000000..c109659
--- /dev/null
+++ b/src/3rdparty/freetype/builds/compiler/visualage.mk
@@ -0,0 +1,76 @@
+#
+# FreeType 2 Visual Age C++ specific definitions
+#
+
+
+# Copyright 1996-2000, 2003, 2006 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+# command line compiler name
+#
+CC := icc
+COMPILER_SEP := $(SEP)
+
+
+# The object file extension (for standard and static libraries). This can be
+# .o, .tco, .obj, etc., depending on the platform.
+#
+O := obj
+SO := obj
+
+
+# The library file extension (for standard and static libraries). This can
+# be .a, .lib, etc., depending on the platform.
+#
+A := lib
+SA := lib
+
+
+# Path inclusion flag. Some compilers use a different flag than `-I' to
+# specify an additional include path. Examples are `/i=' or `-J'.
+#
+I := /I
+
+
+# C flag used to define a macro before the compilation of a given source
+# object. Usually it is `-D' like in `-DDEBUG'.
+#
+D := /D
+
+
+# The link flag used to specify a given library file on link. Note that
+# this is only used to compile the demo programs, not the library itself.
+#
+L := /Fl
+
+
+# Target flag.
+#
+T := /Fo
+
+
+# C flags
+#
+# These should concern: debug output, optimization & warnings.
+#
+CFLAGS ?= /Q- /Gd+ /O2 /G5 /W3 /C
+
+# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
+#
+ANSI_FLAGS := /Sa
+
+
+# Library linking
+#
+#CLEAN_LIBRARY :=
+LINK_LIBRARY = lib /nologo /out:$(subst /,$(COMPILER_SEP),$@ $(OBJECTS_LIST))
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/compiler/visualc.mk b/src/3rdparty/freetype/builds/compiler/visualc.mk
new file mode 100644
index 0000000..2e19ef8
--- /dev/null
+++ b/src/3rdparty/freetype/builds/compiler/visualc.mk
@@ -0,0 +1,82 @@
+#
+# FreeType 2 Visual C++ definitions
+#
+
+
+# Copyright 1996-2000, 2003, 2005, 2006, 2008 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+# compiler command line name
+#
+CC := cl
+COMPILER_SEP := $(SEP)
+
+
+# The object file extension (for standard and static libraries). This can be
+# .o, .tco, .obj, etc., depending on the platform.
+#
+O := obj
+SO := obj
+
+
+# The library file extension (for standard and static libraries). This can
+# be .a, .lib, etc., depending on the platform.
+#
+A := lib
+SA := lib
+
+
+# Path inclusion flag. Some compilers use a different flag than `-I' to
+# specify an additional include path. Examples are `/i=' or `-J'.
+#
+I := /I
+
+
+# C flag used to define a macro before the compilation of a given source
+# object. Usually it is `-D' like in `-DDEBUG'.
+#
+D := /D
+
+
+# The link flag used to specify a given library file on link. Note that
+# this is only used to compile the demo programs, not the library itself.
+#
+L := /Fl
+
+
+# Target flag.
+#
+T := /Fo
+
+# Target executable flag
+#
+TE := /Fe
+
+# C flags
+#
+# These should concern: debug output, optimization & warnings.
+#
+# Use the ANSIFLAGS variable to define the compiler flags used to enfore
+# ANSI compliance.
+#
+CFLAGS ?= /nologo /c /Ox /W3 /WX
+
+# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
+#
+ANSIFLAGS := /Za /D_CRT_SECURE_NO_DEPRECATE
+
+
+# Library linking
+#
+#CLEAN_LIBRARY =
+LINK_LIBRARY = lib /nologo /out:$(subst /,$(COMPILER_SEP),$@ $(OBJECTS_LIST))
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/compiler/watcom.mk b/src/3rdparty/freetype/builds/compiler/watcom.mk
new file mode 100644
index 0000000..4db1e7f
--- /dev/null
+++ b/src/3rdparty/freetype/builds/compiler/watcom.mk
@@ -0,0 +1,81 @@
+#
+# FreeType 2 Watcom-specific definitions
+#
+
+
+# Copyright 1996-2000, 2003, 2006 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+# Compiler command line name
+#
+CC := wcc386
+COMPILER_SEP := $(SEP)
+
+
+# The object file extension (for standard and static libraries). This can be
+# .o, .tco, .obj, etc., depending on the platform.
+#
+O := obj
+SO := obj
+
+
+# The library file extension (for standard and static libraries). This can
+# be .a, .lib, etc., depending on the platform.
+#
+A := lib
+SA := lib
+
+
+# Path inclusion flag. Some compilers use a different flag than `-I' to
+# specify an additional include path. Examples are `/i=' or `-J'.
+#
+I := -I=
+
+
+# C flag used to define a macro before the compilation of a given source
+# object. Usually it is `-D' like in `-DDEBUG'.
+#
+D := -D
+
+
+# The link flag used to specify a given library file on link. Note that
+# this is only used to compile the demo programs, not the library itself.
+#
+L := -l
+
+
+# Target flag.
+#
+T := -FO=
+
+
+# C flags
+#
+# These should concern: debug output, optimization & warnings.
+#
+# Use the ANSIFLAGS variable to define the compiler flags used to enfore
+# ANSI compliance.
+#
+CFLAGS ?= -zq
+
+# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
+#
+ANSIFLAGS := -za
+
+
+# Library linking
+#
+CLEAN_LIBRARY ?= $(DELETE) $(subst /,$(SEP),$(PROJECT_LIBRARY))
+LINK_LIBRARY = $(subst /,$(COMPILER_SEP), \
+ wlib -q -n $@; \
+ $(foreach m, $(OBJECTS_LIST), wlib -q $@ +$(m);) \
+ echo > nul)
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/compiler/win-lcc.mk b/src/3rdparty/freetype/builds/compiler/win-lcc.mk
new file mode 100644
index 0000000..5d02d82
--- /dev/null
+++ b/src/3rdparty/freetype/builds/compiler/win-lcc.mk
@@ -0,0 +1,81 @@
+#
+# FreeType 2 Win32-LCC specific definitions
+#
+
+
+# Copyright 1996-2000, 2003, 2006 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+# Command line name
+#
+CC := lcc
+COMPILER_SEP := $(SEP)
+
+
+# The object file extension (for standard and static libraries). This can be
+# .o, .tco, .obj, etc., depending on the platform.
+#
+O := obj
+SO := obj
+
+
+# The library file extension (for standard and static libraries). This can
+# be .a, .lib, etc., depending on the platform.
+#
+A := lib
+SA := lib
+
+
+# Path inclusion flag. Some compilers use a different flag than `-I' to
+# specify an additional include path. Examples are `/i=' or `-J'.
+#
+I := -I
+
+
+# C flag used to define a macro before the compilation of a given source
+# object. Usually it is `-D' like in `-DDEBUG'.
+#
+D := -D
+
+
+# The link flag used to specify a given library file on link. Note that
+# this is only used to compile the demo programs, not the library itself.
+#
+L := -Fl
+
+
+# Target flag.
+#
+T := -Fo
+
+
+# C flags
+#
+# These should concern: debug output, optimization & warnings.
+#
+# Use the ANSIFLAGS variable to define the compiler flags used to enfore
+# ANSI compliance.
+#
+CFLAGS ?= -c -g2 -O
+
+# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
+#
+# LCC is pure ANSI anyway!
+#
+ANSIFLAGS :=
+
+
+# library linking
+#
+#CLEAN_LIBRARY :=
+LINK_LIBRARY = lcclib /out:$(subst /,$(COMPILER_SEP),$@ $(OBJECTS_LIST))
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/detect.mk b/src/3rdparty/freetype/builds/detect.mk
new file mode 100644
index 0000000..987ae51
--- /dev/null
+++ b/src/3rdparty/freetype/builds/detect.mk
@@ -0,0 +1,154 @@
+#
+# FreeType 2 host platform detection rules
+#
+
+
+# Copyright 1996-2000, 2001, 2002, 2003, 2006, 2008 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+# This sub-Makefile is in charge of detecting the current platform. It sets
+# the following variables:
+#
+# BUILD_DIR The configuration and system-specific directory. Usually
+# `freetype/builds/$(PLATFORM)' but can be different for
+# custom builds of the library.
+#
+# The following variables must be defined in system specific `detect.mk'
+# files:
+#
+# PLATFORM The detected platform. This will default to `ansi' if
+# auto-detection fails.
+# CONFIG_FILE The configuration sub-makefile to use. This usually depends
+# on the compiler defined in the `CC' environment variable.
+# DELETE The shell command used to remove a given file.
+# COPY The shell command used to copy one file.
+# SEP The platform-specific directory separator.
+# COMPILER_SEP The separator used in arguments of the compilation tools.
+# CC The compiler to use.
+#
+# You need to set the following variable(s) before calling it:
+#
+# TOP_DIR The top-most directory in the FreeType library source
+# hierarchy. If not defined, it will default to `.'.
+
+# Set auto-detection default to `ansi' resp. UNIX-like operating systems.
+#
+PLATFORM := ansi
+DELETE := $(RM)
+COPY := cp
+CAT := cat
+SEP := /
+
+BUILD_CONFIG := $(TOP_DIR)/builds
+
+# These two assignments must be delayed.
+BUILD_DIR = $(BUILD_CONFIG)/$(PLATFORM)
+CONFIG_RULES = $(BUILD_DIR)/$(CONFIG_FILE)
+
+# We define the BACKSLASH variable to hold a single back-slash character.
+# This is needed because a line like
+#
+# SEP := \
+#
+# does not work with GNU Make (the backslash is interpreted as a line
+# continuation). While a line like
+#
+# SEP := \\
+#
+# really defines $(SEP) as `\' on Unix, and `\\' on Dos and Windows!
+#
+BACKSLASH := $(strip \ )
+
+# Find all auto-detectable platforms.
+#
+PLATFORMS := $(notdir $(subst /detect.mk,,$(wildcard $(BUILD_CONFIG)/*/detect.mk)))
+.PHONY: $(PLATFORMS) ansi
+
+# Filter out platform specified as setup target.
+#
+PLATFORM := $(firstword $(filter $(MAKECMDGOALS),$(PLATFORMS)))
+
+# If no setup target platform was specified, enable auto-detection/
+# default platform.
+#
+ifeq ($(PLATFORM),)
+ PLATFORM := ansi
+endif
+
+# If the user has explicitly asked for `ansi' on the command line,
+# disable auto-detection.
+#
+ifeq ($(findstring ansi,$(MAKECMDGOALS)),)
+ # Now, include all detection rule files found in the `builds/<system>'
+ # directories. Note that the calling order of the various `detect.mk'
+ # files isn't predictable.
+ #
+ include $(wildcard $(BUILD_CONFIG)/*/detect.mk)
+endif
+
+# In case no detection rule file was successful, use the default.
+#
+ifndef CONFIG_FILE
+ CONFIG_FILE := ansi.mk
+ setup: std_setup
+ .PHONY: setup
+endif
+
+# The following targets are equivalent, with the exception that they use
+# a slightly different syntax for the `echo' command.
+#
+# std_setup: defined for most (i.e. Unix-like) platforms
+# dos_setup: defined for Dos-ish platforms like Dos, Windows & OS/2
+#
+.PHONY: std_setup dos_setup
+
+std_setup:
+ @echo ""
+ @echo "$(PROJECT_TITLE) build system -- automatic system detection"
+ @echo ""
+ @echo "The following settings are used:"
+ @echo ""
+ @echo " platform $(PLATFORM)"
+ @echo " compiler $(CC)"
+ @echo " configuration directory $(BUILD_DIR)"
+ @echo " configuration rules $(CONFIG_RULES)"
+ @echo ""
+ @echo "If this does not correspond to your system or settings please remove the file"
+ @echo "\`$(CONFIG_MK)' from this directory then read the INSTALL file for help."
+ @echo ""
+ @echo "Otherwise, simply type \`$(MAKE)' again to build the library,"
+ @echo "or \`$(MAKE) refdoc' to build the API reference (the latter needs python)."
+ @echo ""
+ @$(COPY) $(CONFIG_RULES) $(CONFIG_MK)
+
+
+# Special case for Dos, Windows, OS/2, where echo "" doesn't work correctly!
+#
+dos_setup:
+ @type builds$(SEP)newline
+ @echo $(PROJECT_TITLE) build system -- automatic system detection
+ @type builds$(SEP)newline
+ @echo The following settings are used:
+ @type builds$(SEP)newline
+ @echo platformÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$(PLATFORM)
+ @echo compilerÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$(CC)
+ @echo configuration directoryÿÿÿÿÿÿ$(subst /,$(SEP),$(BUILD_DIR))
+ @echo configuration rulesÿÿÿÿÿÿÿÿÿÿ$(subst /,$(SEP),$(CONFIG_RULES))
+ @type builds$(SEP)newline
+ @echo If this does not correspond to your system or settings please remove the file
+ @echo '$(CONFIG_MK)' from this directory then read the INSTALL file for help.
+ @type builds$(SEP)newline
+ @echo Otherwise, simply type 'make' again to build the library.
+ @echo or 'make refdoc' to build the API reference (the latter needs python).
+ @type builds$(SEP)newline
+ @$(COPY) $(subst /,$(SEP),$(CONFIG_RULES) $(CONFIG_MK)) > nul
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/dos/detect.mk b/src/3rdparty/freetype/builds/dos/detect.mk
new file mode 100644
index 0000000..700a122
--- /dev/null
+++ b/src/3rdparty/freetype/builds/dos/detect.mk
@@ -0,0 +1,142 @@
+#
+# FreeType 2 configuration file to detect a DOS host platform.
+#
+
+
+# Copyright 1996-2000, 2003, 2004, 2006 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+.PHONY: setup
+
+
+ifeq ($(PLATFORM),ansi)
+
+ # Test for DJGPP by checking the DJGPP environment variable, which must be
+ # set in order to use the system (ie. it will always be present when the
+ # `make' utility is run).
+ #
+ # We test for the COMSPEC environment variable, then run the `ver'
+ # command-line program to see if its output contains the word `Dos' or
+ # `DOS'.
+ #
+ # If this is true, we are running a Dos-ish platform (or an emulation).
+ #
+ ifdef DJGPP
+ PLATFORM := dos
+ else
+ ifdef COMSPEC
+ is_dos := $(findstring DOS,$(subst Dos,DOS,$(shell ver)))
+
+ # We try to recognize a Dos session under OS/2. The `ver' command
+ # returns `Operating System/2 ...' there, so `is_dos' should be empty.
+ #
+ # To recognize a Dos session under OS/2, we check COMSPEC for the
+ # substring `MDOS\COMMAND'
+ #
+ ifeq ($(is_dos),)
+ is_dos := $(findstring MDOS\COMMAND,$(COMSPEC))
+ endif
+
+ # We also try to recognize Dos 7.x without Windows 9X launched.
+ # See builds/win32/detect.mk for explanations about the logic.
+ #
+ ifeq ($(is_dos),)
+ ifdef winbootdir
+#ifneq ($(OS),Windows_NT)
+ # If win32 is available, do not trigger this test.
+ ifndef windir
+ is_dos := $(findstring Windows,$(strip $(shell ver)))
+ endif
+#endif
+ endif
+ endif
+
+ endif # test COMSPEC
+
+ ifneq ($(is_dos),)
+
+ PLATFORM := dos
+
+ endif # test Dos
+ endif # test DJGPP
+endif # test PLATFORM ansi
+
+ifeq ($(PLATFORM),dos)
+
+ # Use DJGPP (i.e. gcc) by default.
+ #
+ CONFIG_FILE := dos-gcc.mk
+ CC ?= gcc
+
+ # additionally, we provide hooks for various other compilers
+ #
+ ifneq ($(findstring emx,$(MAKECMDGOALS)),) # EMX gcc
+ CONFIG_FILE := dos-emx.mk
+ CC := gcc
+ emx: setup
+ .PHONY: emx
+ endif
+
+ ifneq ($(findstring turboc,$(MAKECMDGOALS)),) # Turbo C
+ CONFIG_FILE := dos-tcc.mk
+ CC := tcc
+ turboc: setup
+ .PHONY: turboc
+ endif
+
+ ifneq ($(findstring watcom,$(MAKECMDGOALS)),) # Watcom C/C++
+ CONFIG_FILE := dos-wat.mk
+ CC := wcc386
+ watcom: setup
+ .PHONY: watcom
+ endif
+
+ ifneq ($(findstring borlandc,$(MAKECMDGOALS)),) # Borland C/C++ 32-bit
+ CONFIG_FILE := dos-bcc.mk
+ CC := bcc32
+ borlandc: setup
+ .PHONY: borlandc
+ endif
+
+ ifneq ($(findstring borlandc16,$(MAKECMDGOALS)),) # Borland C/C++ 16-bit
+ CONFIG_FILE := dos-bcc.mk
+ CC := bcc
+ borlandc16: setup
+ .PHONY: borlandc16
+ endif
+
+ ifneq ($(findstring bash,$(SHELL)),) # check for bash
+ SEP := /
+ DELETE := rm
+ COPY := cp
+ CAT := cat
+ setup: std_setup
+ else
+ SEP := $(BACKSLASH)
+ DELETE := del
+ CAT := type
+
+ # Setting COPY is a bit trickier. We can be running DJGPP on some
+ # Windows NT derivatives, like XP. See builds/win32/detect.mk for
+ # explanations why we need hacking here.
+ #
+ ifeq ($(OS),Windows_NT)
+ COPY := cmd.exe /c copy
+ else
+ COPY := copy
+ endif # test NT
+
+ setup: dos_setup
+ endif
+
+endif # test PLATFORM dos
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/dos/dos-def.mk b/src/3rdparty/freetype/builds/dos/dos-def.mk
new file mode 100644
index 0000000..950f581
--- /dev/null
+++ b/src/3rdparty/freetype/builds/dos/dos-def.mk
@@ -0,0 +1,45 @@
+#
+# FreeType 2 DOS specific definitions
+#
+
+
+# Copyright 1996-2000, 2003, 2005, 2006 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+DELETE := del
+CAT := type
+SEP := $(strip \ )
+BUILD_DIR := $(TOP_DIR)/builds/dos
+PLATFORM := dos
+
+
+# The executable file extension (for tools), *with* leading dot.
+#
+E := .exe
+
+# The directory where all library files are placed.
+#
+# By default, this is the same as $(OBJ_DIR); however, this can be changed
+# to suit particular needs.
+#
+LIB_DIR := $(OBJ_DIR)
+
+# The name of the final library file. Note that the DOS-specific Makefile
+# uses a shorter (8.3) name.
+#
+LIBRARY := $(PROJECT)
+
+
+# The NO_OUTPUT macro is used to ignore the output of commands.
+#
+NO_OUTPUT = > nul
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/dos/dos-emx.mk b/src/3rdparty/freetype/builds/dos/dos-emx.mk
new file mode 100644
index 0000000..6ea8f6d
--- /dev/null
+++ b/src/3rdparty/freetype/builds/dos/dos-emx.mk
@@ -0,0 +1,21 @@
+#
+# FreeType 2 configuration rules for the EMX gcc compiler
+#
+
+
+# Copyright 2003 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+include $(TOP_DIR)/builds/dos/dos-def.mk
+include $(TOP_DIR)/builds/compiler/emx.mk
+include $(TOP_DIR)/builds/link_dos.mk
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/dos/dos-gcc.mk b/src/3rdparty/freetype/builds/dos/dos-gcc.mk
new file mode 100644
index 0000000..e14255c
--- /dev/null
+++ b/src/3rdparty/freetype/builds/dos/dos-gcc.mk
@@ -0,0 +1,21 @@
+#
+# FreeType 2 configuration rules for the DJGPP compiler
+#
+
+
+# Copyright 1996-2000, 2003 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+include $(TOP_DIR)/builds/dos/dos-def.mk
+include $(TOP_DIR)/builds/compiler/gcc.mk
+include $(TOP_DIR)/builds/link_dos.mk
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/dos/dos-wat.mk b/src/3rdparty/freetype/builds/dos/dos-wat.mk
new file mode 100644
index 0000000..c763b16
--- /dev/null
+++ b/src/3rdparty/freetype/builds/dos/dos-wat.mk
@@ -0,0 +1,20 @@
+#
+# FreeType 2 configuration rules for the Watcom C/C++ compiler
+#
+
+
+# Copyright 2003 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+include $(TOP_DIR)/builds/dos/dos-def.mk
+include $(TOP_DIR)/builds/compiler/watcom.mk
+include $(TOP_DIR)/builds/link_dos.mk
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/exports.mk b/src/3rdparty/freetype/builds/exports.mk
new file mode 100644
index 0000000..5452b35
--- /dev/null
+++ b/src/3rdparty/freetype/builds/exports.mk
@@ -0,0 +1,76 @@
+#
+# FreeType 2 exports sub-Makefile
+#
+
+
+# Copyright 2005, 2006 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+# DO NOT INVOKE THIS MAKEFILE DIRECTLY! IT IS MEANT TO BE INCLUDED BY
+# OTHER MAKEFILES.
+
+
+# This sub-Makefile is used to compute the list of exported symbols whenever
+# the EXPORTS_LIST variable is defined by one of the platform or compiler
+# specific build files.
+#
+# EXPORTS_LIST contains the name of the `list' file, for example a Windows
+# .DEF file.
+#
+ifneq ($(EXPORTS_LIST),)
+
+ # CCexe is the compiler used to compile the `apinames' tool program
+ # on the host machine. This isn't necessarily the same as the compiler
+ # which can be a cross-compiler for a different architecture, for example.
+ #
+ ifeq ($(CCexe),)
+ CCexe := $(CC)
+ endif
+
+ # TE acts like T, but for executables instead of object files.
+ ifeq ($(TE),)
+ TE := $T
+ endif
+
+ # The list of public headers we're going to parse.
+ PUBLIC_HEADERS := $(wildcard $(PUBLIC_DIR)/*.h)
+
+ # The `apinames' source and executable. We use $E_BUILD as the host
+ # executable suffix, which *includes* the final dot.
+ #
+ # Note that $(APINAMES_OPTIONS) is empty, except for Windows compilers.
+ #
+ APINAMES_SRC := $(TOP_DIR)/src/tools/apinames.c
+ APINAMES_EXE := $(OBJ_DIR)/apinames$(E_BUILD)
+
+ $(APINAMES_EXE): $(APINAMES_SRC)
+ $(CCexe) $(TE)$@ $<
+
+ .PHONY: symbols_list
+
+ symbols_list: $(EXPORTS_LIST)
+
+ # We manually add TT_New_Context and TT_RunIns, which are needed by TT
+ # debuggers, to the EXPORTS_LIST.
+ #
+ $(EXPORTS_LIST): $(APINAMES_EXE) $(PUBLIC_HEADERS)
+ $(subst /,$(SEP),$(APINAMES_EXE)) -o$@ $(APINAMES_OPTIONS) $(PUBLIC_HEADERS)
+ @echo TT_New_Context >> $(EXPORTS_LIST)
+ @echo TT_RunIns >> $(EXPORTS_LIST)
+
+ $(PROJECT_LIBRARY): $(EXPORTS_LIST)
+
+ CLEAN += $(EXPORTS_LIST) \
+ $(APINAMES_EXE)
+
+endif
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/freetype.mk b/src/3rdparty/freetype/builds/freetype.mk
new file mode 100644
index 0000000..877bda2
--- /dev/null
+++ b/src/3rdparty/freetype/builds/freetype.mk
@@ -0,0 +1,361 @@
+#
+# FreeType 2 library sub-Makefile
+#
+
+
+# Copyright 1996-2000, 2001, 2002, 2003, 2004, 2005, 2006, 2008 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+# DO NOT INVOKE THIS MAKEFILE DIRECTLY! IT IS MEANT TO BE INCLUDED BY
+# OTHER MAKEFILES.
+
+
+# The following variables (set by other Makefile components, in the
+# environment, or on the command line) are used:
+#
+# BUILD_DIR The architecture dependent directory,
+# e.g. `$(TOP_DIR)/builds/unix'. Added to INCLUDES also.
+#
+# OBJ_DIR The directory in which object files are created.
+#
+# LIB_DIR The directory in which the library is created.
+#
+# DOC_DIR The directory in which the API reference is created.
+#
+# INCLUDES A list of directories to be included additionally.
+#
+# DEVEL_DIR Development directory which is added to the INCLUDES
+# variable before the standard include directories.
+#
+# CFLAGS Compilation flags. This overrides the default settings
+# in the platform-specific configuration files.
+#
+# FTSYS_SRC If set, its value is used as the name of a replacement
+# file for `src/base/ftsystem.c'.
+#
+# FTDEBUG_SRC If set, its value is used as the name of a replacement
+# file for `src/base/ftdebug.c'. [For a normal build, this
+# file does nothing.]
+#
+# FTMODULE_H The file which contains the list of module classes for
+# the current build. Usually, this is automatically
+# created by `modules.mk'.
+#
+# BASE_OBJ_S
+# BASE_OBJ_M A list of base objects (for single object and multiple
+# object builds, respectively). Set up in
+# `src/base/rules.mk'.
+#
+# BASE_EXT_OBJ A list of base extension objects. Set up in
+# `src/base/rules.mk'.
+#
+# DRV_OBJ_S
+# DRV_OBJ_M A list of driver objects (for single object and multiple
+# object builds, respectively). Set up cumulatively in
+# `src/<driver>/rules.mk'.
+#
+# CLEAN
+# DISTCLEAN The sub-makefiles can append additional stuff to these two
+# variables which is to be removed for the `clean' resp.
+# `distclean' target.
+#
+# TOP_DIR, SEP,
+# COMPILER_SEP,
+# LIBRARY, CC,
+# A, I, O, T Check `config.mk' for details.
+
+
+# The targets `objects' and `library' are defined at the end of this
+# Makefile after all other rules have been included.
+#
+.PHONY: single multi objects library refdoc
+
+# default target -- build single objects and library
+#
+single: objects library
+
+# `multi' target -- build multiple objects and library
+#
+multi: objects library
+
+
+# The FreeType source directory, usually `./src'.
+#
+SRC_DIR := $(TOP_DIR)/src
+
+# The directory where the base layer components are placed, usually
+# `./src/base'.
+#
+BASE_DIR := $(SRC_DIR)/base
+
+# Other derived directories.
+#
+PUBLIC_DIR := $(TOP_DIR)/include/freetype
+INTERNAL_DIR := $(PUBLIC_DIR)/internal
+SERVICES_DIR := $(INTERNAL_DIR)/services
+CONFIG_DIR := $(PUBLIC_DIR)/config
+
+# The documentation directory.
+#
+DOC_DIR ?= $(TOP_DIR)/docs/reference
+
+# The final name of the library file.
+#
+PROJECT_LIBRARY := $(LIB_DIR)/$(LIBRARY).$A
+
+
+# include paths
+#
+# IMPORTANT NOTE: The architecture-dependent directory must ALWAYS be placed
+# before the standard include list. Porters are then able to
+# put their own version of some of the FreeType components
+# in the `freetype/builds/<system>' directory, as these
+# files will override the default sources.
+#
+INCLUDES := $(subst /,$(COMPILER_SEP),$(OBJ_DIR) \
+ $(DEVEL_DIR) \
+ $(BUILD_DIR) \
+ $(TOP_DIR)/include)
+
+INCLUDE_FLAGS := $(INCLUDES:%=$I%)
+
+
+# C flags used for the compilation of an object file. This must include at
+# least the paths for the `base' and `builds/<system>' directories;
+# debug/optimization/warning flags + ansi compliance if needed.
+#
+# $(INCLUDE_FLAGS) should come before $(CFLAGS) to avoid problems with
+# old FreeType versions.
+#
+# Note what we also define the macro FT2_BUILD_LIBRARY when building
+# FreeType. This is required to let our sources include the internal
+# headers (something forbidden by clients).
+#
+# Finally, we define FT_CONFIG_MODULES_H so that the compiler uses the
+# generated version of `ftmodule.h' in $(OBJ_DIR). If there is an
+# `ftoption.h' files in $(OBJ_DIR), define FT_CONFIG_OPTIONS_H too.
+#
+ifneq ($(wildcard $(OBJ_DIR)/ftoption.h),)
+ FTOPTION_H := $(OBJ_DIR)/ftoption.h
+ FTOPTION_FLAG := $DFT_CONFIG_OPTIONS_H="<ftoption.h>"
+endif
+
+FT_CFLAGS = $(CPPFLAGS) \
+ $(INCLUDE_FLAGS) \
+ $(CFLAGS) \
+ $DFT2_BUILD_LIBRARY \
+ $DFT_CONFIG_MODULES_H="<ftmodule.h>" \
+ $(FTOPTION_FLAG)
+FT_CC = $(CC) $(FT_CFLAGS)
+FT_COMPILE = $(CC) $(ANSIFLAGS) $(FT_CFLAGS)
+
+
+# Include the `exports' rules file.
+#
+include $(TOP_DIR)/builds/exports.mk
+
+
+# Initialize the list of objects.
+#
+OBJECTS_LIST :=
+
+
+# Define $(PUBLIC_H) as the list of all public header files located in
+# `$(TOP_DIR)/include/freetype'. $(BASE_H), and $(CONFIG_H) are defined
+# similarly.
+#
+# This is used to simplify the dependency rules -- if one of these files
+# changes, the whole library is recompiled.
+#
+PUBLIC_H := $(wildcard $(PUBLIC_DIR)/*.h)
+BASE_H := $(wildcard $(INTERNAL_DIR)/*.h) \
+ $(wildcard $(SERVICES_DIR)/*.h)
+CONFIG_H := $(wildcard $(CONFIG_DIR)/*.h) \
+ $(wildcard $(BUILD_DIR)/freetype/config/*.h) \
+ $(FTMODULE_H) \
+ $(FTOPTION_H)
+DEVEL_H := $(wildcard $(TOP_DIR)/devel/*.h)
+
+FREETYPE_H := $(PUBLIC_H) $(BASE_H) $(CONFIG_H) $(DEVEL_H)
+
+
+# ftsystem component
+#
+FTSYS_SRC ?= $(BASE_DIR)/ftsystem.c
+
+FTSYS_OBJ := $(OBJ_DIR)/ftsystem.$O
+
+OBJECTS_LIST += $(FTSYS_OBJ)
+
+$(FTSYS_OBJ): $(FTSYS_SRC) $(FREETYPE_H)
+ $(FT_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
+
+
+# ftdebug component
+#
+FTDEBUG_SRC ?= $(BASE_DIR)/ftdebug.c
+
+FTDEBUG_OBJ := $(OBJ_DIR)/ftdebug.$O
+
+OBJECTS_LIST += $(FTDEBUG_OBJ)
+
+$(FTDEBUG_OBJ): $(FTDEBUG_SRC) $(FREETYPE_H)
+ $(FT_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
+
+
+# Include all rule files from FreeType components.
+#
+include $(SRC_DIR)/base/rules.mk
+include $(patsubst %,$(SRC_DIR)/%/rules.mk,$(MODULES))
+
+
+# ftinit component
+#
+# The C source `ftinit.c' contains the FreeType initialization routines.
+# It is able to automatically register one or more drivers when the API
+# function FT_Init_FreeType() is called.
+#
+# The set of initial drivers is determined by the driver Makefiles
+# includes above. Each driver Makefile updates the FTINIT_xxx lists
+# which contain additional include paths and macros used to compile the
+# single `ftinit.c' source.
+#
+FTINIT_SRC := $(BASE_DIR)/ftinit.c
+FTINIT_OBJ := $(OBJ_DIR)/ftinit.$O
+
+OBJECTS_LIST += $(FTINIT_OBJ)
+
+$(FTINIT_OBJ): $(FTINIT_SRC) $(FREETYPE_H)
+ $(FT_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
+
+
+# All FreeType library objects.
+#
+OBJ_M := $(BASE_OBJ_M) $(BASE_EXT_OBJ) $(DRV_OBJS_M)
+OBJ_S := $(BASE_OBJ_S) $(BASE_EXT_OBJ) $(DRV_OBJS_S)
+
+
+# The target `multi' on the Make command line indicates that we want to
+# compile each source file independently.
+#
+# Otherwise, each module/driver is compiled in a single object file through
+# source file inclusion (see `src/base/ftbase.c' or
+# `src/truetype/truetype.c' for examples).
+#
+BASE_OBJECTS := $(OBJECTS_LIST)
+
+ifneq ($(findstring multi,$(MAKECMDGOALS)),)
+ OBJECTS_LIST += $(OBJ_M)
+else
+ OBJECTS_LIST += $(OBJ_S)
+endif
+
+objects: $(OBJECTS_LIST)
+
+library: $(PROJECT_LIBRARY)
+
+dll: $(PROJECT_LIBRARY) exported_symbols
+
+.c.$O:
+ $(FT_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
+
+
+ifneq ($(findstring refdoc,$(MAKECMDGOALS)),)
+ # poor man's `sed' emulation with make's built-in string functions
+ work := $(strip $(shell $(CAT) $(PUBLIC_DIR)/freetype.h))
+ work := $(subst |,x,$(work))
+ work := $(subst $(space),|,$(work))
+ work := $(subst \#define|FREETYPE_MAJOR|,$(space),$(work))
+ work := $(word 2,$(work))
+ major := $(subst |,$(space),$(work))
+ major := $(firstword $(major))
+
+ work := $(subst \#define|FREETYPE_MINOR|,$(space),$(work))
+ work := $(word 2,$(work))
+ minor := $(subst |,$(space),$(work))
+ minor := $(firstword $(minor))
+
+ work := $(subst \#define|FREETYPE_PATCH|,$(space),$(work))
+ work := $(word 2,$(work))
+ patch := $(subst |,$(space),$(work))
+ patch := $(firstword $(patch))
+
+ version := $(major).$(minor).$(patch)
+endif
+
+# We write-protect the docmaker directory to suppress generation
+# of .pyc files.
+#
+refdoc:
+ -chmod -w $(SRC_DIR)/tools/docmaker
+ python $(SRC_DIR)/tools/docmaker/docmaker.py \
+ --prefix=ft2 \
+ --title=FreeType-$(version) \
+ --output=$(DOC_DIR) \
+ $(PUBLIC_DIR)/*.h \
+ $(PUBLIC_DIR)/config/*.h \
+ $(PUBLIC_DIR)/cache/*.h
+ -chmod +w $(SRC_DIR)/tools/docmaker
+
+
+.PHONY: clean_project_std distclean_project_std
+
+# Standard cleaning and distclean rules. These are not accepted
+# on all systems though.
+#
+clean_project_std:
+ -$(DELETE) $(BASE_OBJECTS) $(OBJ_M) $(OBJ_S) $(CLEAN)
+
+distclean_project_std: clean_project_std
+ -$(DELETE) $(PROJECT_LIBRARY)
+ -$(DELETE) *.orig *~ core *.core $(DISTCLEAN)
+
+
+.PHONY: clean_project_dos distclean_project_dos
+
+# The Dos command shell does not support very long list of arguments, so
+# we are stuck with wildcards.
+#
+# Don't break the command lines with \; this prevents the "del" command from
+# working correctly on Win9x.
+#
+clean_project_dos:
+ -$(DELETE) $(subst /,$(SEP),$(OBJ_DIR)/*.$O $(CLEAN) $(NO_OUTPUT))
+
+distclean_project_dos: clean_project_dos
+ -$(DELETE) $(subst /,$(SEP),$(PROJECT_LIBRARY) $(DISTCLEAN) $(NO_OUTPUT))
+
+
+.PHONY: remove_config_mk remove_ftmodule_h
+
+# Remove configuration file (used for distclean).
+#
+remove_config_mk:
+ -$(DELETE) $(subst /,$(SEP),$(CONFIG_MK) $(NO_OUTPUT))
+
+# Remove module list (used for distclean).
+#
+remove_ftmodule_h:
+ -$(DELETE) $(subst /,$(SEP),$(FTMODULE_H) $(NO_OUTPUT))
+
+
+.PHONY: clean distclean
+
+# The `config.mk' file must define `clean_freetype' and
+# `distclean_freetype'. Implementations may use to relay these to either
+# the `std' or `dos' versions from above, or simply provide their own
+# implementation.
+#
+clean: clean_project
+distclean: distclean_project remove_config_mk remove_ftmodule_h
+ -$(DELETE) $(subst /,$(SEP),$(DOC_DIR)/*.html $(NO_OUTPUT))
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/link_dos.mk b/src/3rdparty/freetype/builds/link_dos.mk
new file mode 100644
index 0000000..c37ac7e
--- /dev/null
+++ b/src/3rdparty/freetype/builds/link_dos.mk
@@ -0,0 +1,42 @@
+#
+# Link instructions for Dos-like systems (Dos, Win32, OS/2)
+#
+
+
+# Copyright 1996-2000 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+ifdef BUILD_PROJECT
+
+ .PHONY: clean_project distclean_project
+
+ # Now include the main sub-makefile. It contains all the rules used to
+ # build the library with the previous variables defined.
+ #
+ include $(TOP_DIR)/builds/$(PROJECT).mk
+
+ # The cleanup targets.
+ #
+ clean_project: clean_project_dos
+ distclean_project: distclean_project_dos
+
+ # This final rule is used to link all object files into a single library.
+ # this is compiler-specific
+ #
+ $(PROJECT_LIBRARY): $(OBJECTS_LIST)
+ ifdef CLEAN_LIBRARY
+ -$(CLEAN_LIBRARY) $(NO_OUTPUT)
+ endif
+ $(LINK_LIBRARY)
+
+endif
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/link_std.mk b/src/3rdparty/freetype/builds/link_std.mk
new file mode 100644
index 0000000..0bd2163
--- /dev/null
+++ b/src/3rdparty/freetype/builds/link_std.mk
@@ -0,0 +1,42 @@
+#
+# Link instructions for standard systems
+#
+
+
+# Copyright 1996-2000 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+ifdef BUILD_PROJECT
+
+ .PHONY: clean_project distclean_project
+
+ # Now include the main sub-makefile. It contains all the rules used to
+ # build the library with the previous variables defined.
+ #
+ include $(TOP_DIR)/builds/$(PROJECT).mk
+
+ # The cleanup targets.
+ #
+ clean_project: clean_project_std
+ distclean_project: distclean_project_std
+
+ # This final rule is used to link all object files into a single library.
+ # this is compiler-specific
+ #
+ $(PROJECT_LIBRARY): $(OBJECTS_LIST)
+ ifdef CLEAN_LIBRARY
+ -$(CLEAN_LIBRARY) $(NO_OUTPUT)
+ endif
+ $(LINK_LIBRARY)
+
+endif
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/mac/FreeType.m68k_cfm.make.txt b/src/3rdparty/freetype/builds/mac/FreeType.m68k_cfm.make.txt
new file mode 100644
index 0000000..78d65d2
--- /dev/null
+++ b/src/3rdparty/freetype/builds/mac/FreeType.m68k_cfm.make.txt
@@ -0,0 +1,202 @@
+# File: FreeType.m68k_cfm.make
+# Target: FreeType.m68k_cfm
+# Created: Thursday, October 27, 2005 09:23:25 PM
+
+
+MAKEFILE = FreeType.m68k_cfm.make
+\xA5MondoBuild\xA5 = {MAKEFILE} # Make blank to avoid rebuilds when makefile is modified
+
+ObjDir = :objs:
+Includes = \xB6
+ -ansi strict \xB6
+ -includes unix \xB6
+ -i :include: \xB6
+ -i :src: \xB6
+ -i :include:freetype:config:
+
+Sym-68K = -sym off
+
+COptions = \xB6
+ -d HAVE_FSSPEC=1 \xB6
+ -d HAVE_FSREF=0 \xB6
+ -d HAVE_QUICKDRAW_TOOLBOX=1 \xB6
+ -d HAVE_QUICKDRAW_CARBON=0 \xB6
+ -d HAVE_ATS=0 \xB6
+ -d FT2_BUILD_LIBRARY \xB6
+ -d FT_CONFIG_CONFIG_H="<ftconfig.h>" \xB6
+ -d FT_CONFIG_MODULES_H="<ftmodule.h>" \xB6
+ {Includes} {Sym-68K} -model cfmseg
+
+
+### Source Files ###
+
+SrcFiles = \xB6
+ :builds:mac:ftmac.c \xB6
+ :src:autofit:autofit.c \xB6
+ :src:base:ftbase.c \xB6
+ :src:base:ftbbox.c \xB6
+ :src:base:ftbdf.c \xB6
+ :src:base:ftbitmap.c \xB6
+ :src:base:ftdebug.c \xB6
+ :src:base:ftglyph.c \xB6
+ :src:base:ftgxval.c \xB6
+ :src:base:ftinit.c \xB6
+ :src:base:ftmm.c \xB6
+ :src:base:ftotval.c \xB6
+ :src:base:ftpfr.c \xB6
+ :src:base:ftstroke.c \xB6
+ :src:base:ftsynth.c \xB6
+ :src:base:ftsystem.c \xB6
+ :src:base:fttype1.c \xB6
+ :src:base:ftwinfnt.c \xB6
+ :src:base:ftxf86.c \xB6
+ :src:cache:ftcache.c \xB6
+ :src:bdf:bdf.c \xB6
+ :src:cff:cff.c \xB6
+ :src:cid:type1cid.c \xB6
+# :src:gxvalid:gxvalid.c \xB6
+ :src:gzip:ftgzip.c \xB6
+ :src:lzw:ftlzw.c \xB6
+ :src:otvalid:otvalid.c \xB6
+ :src:pcf:pcf.c \xB6
+ :src:pfr:pfr.c \xB6
+ :src:psaux:psaux.c \xB6
+ :src:pshinter:pshinter.c \xB6
+ :src:psnames:psmodule.c \xB6
+ :src:raster:raster.c \xB6
+ :src:sfnt:sfnt.c \xB6
+ :src:smooth:smooth.c \xB6
+ :src:truetype:truetype.c \xB6
+ :src:type1:type1.c \xB6
+ :src:type42:type42.c \xB6
+ :src:winfonts:winfnt.c
+
+
+### Object Files ###
+
+ObjFiles-68K = \xB6
+ "{ObjDir}ftmac.c.o" \xB6
+ "{ObjDir}autofit.c.o" \xB6
+ "{ObjDir}ftbase.c.o" \xB6
+ "{ObjDir}ftbbox.c.o" \xB6
+ "{ObjDir}ftbdf.c.o" \xB6
+ "{ObjDir}ftbitmap.c.o" \xB6
+ "{ObjDir}ftdebug.c.o" \xB6
+ "{ObjDir}ftglyph.c.o" \xB6
+ "{ObjDir}ftgxval.c.o" \xB6
+ "{ObjDir}ftinit.c.o" \xB6
+ "{ObjDir}ftmm.c.o" \xB6
+ "{ObjDir}ftotval.c.o" \xB6
+ "{ObjDir}ftpfr.c.o" \xB6
+ "{ObjDir}ftstroke.c.o" \xB6
+ "{ObjDir}ftsynth.c.o" \xB6
+ "{ObjDir}ftsystem.c.o" \xB6
+ "{ObjDir}fttype1.c.o" \xB6
+ "{ObjDir}ftwinfnt.c.o" \xB6
+ "{ObjDir}ftxf86.c.o" \xB6
+ "{ObjDir}ftcache.c.o" \xB6
+ "{ObjDir}bdf.c.o" \xB6
+ "{ObjDir}cff.c.o" \xB6
+ "{ObjDir}type1cid.c.o" \xB6
+# "{ObjDir}gxvalid.c.o" \xB6
+ "{ObjDir}ftgzip.c.o" \xB6
+ "{ObjDir}ftlzw.c.o" \xB6
+ "{ObjDir}otvalid.c.o" \xB6
+ "{ObjDir}pcf.c.o" \xB6
+ "{ObjDir}pfr.c.o" \xB6
+ "{ObjDir}psaux.c.o" \xB6
+ "{ObjDir}pshinter.c.o" \xB6
+ "{ObjDir}psmodule.c.o" \xB6
+ "{ObjDir}raster.c.o" \xB6
+ "{ObjDir}sfnt.c.o" \xB6
+ "{ObjDir}smooth.c.o" \xB6
+ "{ObjDir}truetype.c.o" \xB6
+ "{ObjDir}type1.c.o" \xB6
+ "{ObjDir}type42.c.o" \xB6
+ "{ObjDir}winfnt.c.o"
+
+
+### Libraries ###
+
+LibFiles-68K =
+
+
+### Default Rules ###
+
+.c.o \xC4 .c {\xA5MondoBuild\xA5}
+ {C} {depDir}{default}.c -o {targDir}{default}.c.o {COptions}
+
+
+### Build Rules ###
+
+"{ObjDir}ftmac.c.o" \xC4\xC4 :builds:mac:ftmac.c
+ {C} :builds:mac:ftmac.c -o "{ObjDir}ftmac.c.o" {COptions}
+
+FreeType.m68k_cfm \xC4\xC4 FreeType.m68k_cfm.o
+
+FreeType.m68k_cfm.o \xC4\xC4 {ObjFiles-68K} {LibFiles-68K} {\xA5MondoBuild\xA5}
+ Lib \xB6
+ -o {Targ} \xB6
+ {ObjFiles-68K} \xB6
+ {LibFiles-68K} \xB6
+ {Sym-68K} \xB6
+ -mf -d
+
+
+
+### Required Dependencies ###
+
+"{ObjDir}autofit.c.o" \xC4 :src:autofit:autofit.c
+"{ObjDir}ftbase.c.o" \xC4 :src:base:ftbase.c
+"{ObjDir}ftbbox.c.o" \xC4 :src:base:ftbbox.c
+"{ObjDir}ftbdf.c.o" \xC4 :src:base:ftbdf.c
+"{ObjDir}ftbitmap.c.o" \xC4 :src:base:ftbitmap.c
+"{ObjDir}ftdebug.c.o" \xC4 :src:base:ftdebug.c
+"{ObjDir}ftglyph.c.o" \xC4 :src:base:ftglyph.c
+"{ObjDir}ftgxval.c.o" \xC4 :src:base:ftgxval.c
+"{ObjDir}ftinit.c.o" \xC4 :src:base:ftinit.c
+# "{ObjDir}ftmac.c.o" \xC4 :builds:mac:ftmac.c
+"{ObjDir}ftmm.c.o" \xC4 :src:base:ftmm.c
+"{ObjDir}ftotval.c.o" \xC4 :src:base:ftotval.c
+"{ObjDir}ftpfr.c.o" \xC4 :src:base:ftpfr.c
+"{ObjDir}ftstroke.c.o" \xC4 :src:base:ftstroke.c
+"{ObjDir}ftsynth.c.o" \xC4 :src:base:ftsynth.c
+"{ObjDir}ftsystem.c.o" \xC4 :src:base:ftsystem.c
+"{ObjDir}fttype1.c.o" \xC4 :src:base:fttype1.c
+"{ObjDir}ftwinfnt.c.o" \xC4 :src:base:ftwinfnt.c
+"{ObjDir}ftxf86.c.o" \xC4 :src:base:ftxf86.c
+"{ObjDir}ftcache.c.o" \xC4 :src:cache:ftcache.c
+"{ObjDir}bdf.c.o" \xC4 :src:bdf:bdf.c
+"{ObjDir}cff.c.o" \xC4 :src:cff:cff.c
+"{ObjDir}type1cid.c.o" \xC4 :src:cid:type1cid.c
+# "{ObjDir}gxvalid.c.o" \xC4 :src:gxvalid:gxvalid.c
+"{ObjDir}ftgzip.c.o" \xC4 :src:gzip:ftgzip.c
+"{ObjDir}ftlzw.c.o" \xC4 :src:lzw:ftlzw.c
+"{ObjDir}otvalid.c.o" \xC4 :src:otvalid:otvalid.c
+"{ObjDir}pcf.c.o" \xC4 :src:pcf:pcf.c
+"{ObjDir}pfr.c.o" \xC4 :src:pfr:pfr.c
+"{ObjDir}psaux.c.o" \xC4 :src:psaux:psaux.c
+"{ObjDir}pshinter.c.o" \xC4 :src:pshinter:pshinter.c
+"{ObjDir}psmodule.c.o" \xC4 :src:psnames:psmodule.c
+"{ObjDir}raster.c.o" \xC4 :src:raster:raster.c
+"{ObjDir}sfnt.c.o" \xC4 :src:sfnt:sfnt.c
+"{ObjDir}smooth.c.o" \xC4 :src:smooth:smooth.c
+"{ObjDir}truetype.c.o" \xC4 :src:truetype:truetype.c
+"{ObjDir}type1.c.o" \xC4 :src:type1:type1.c
+"{ObjDir}type42.c.o" \xC4 :src:type42:type42.c
+"{ObjDir}winfnt.c.o" \xC4 :src:winfonts:winfnt.c
+
+
+### Optional Dependencies ###
+### Build this target to generate "include file" dependencies. ###
+
+Dependencies \xC4 $OutOfDate
+ MakeDepend \xB6
+ -append {MAKEFILE} \xB6
+ -ignore "{CIncludes}" \xB6
+ -objdir "{ObjDir}" \xB6
+ -objext .o \xB6
+ {Includes} \xB6
+ {SrcFiles}
+
+
diff --git a/src/3rdparty/freetype/builds/mac/FreeType.m68k_far.make.txt b/src/3rdparty/freetype/builds/mac/FreeType.m68k_far.make.txt
new file mode 100644
index 0000000..c23dead
--- /dev/null
+++ b/src/3rdparty/freetype/builds/mac/FreeType.m68k_far.make.txt
@@ -0,0 +1,201 @@
+# File: FreeType.m68k_far.make
+# Target: FreeType.m68k_far
+# Created: Tuesday, October 25, 2005 03:34:05 PM
+
+
+MAKEFILE = FreeType.m68k_far.make
+\xA5MondoBuild\xA5 = {MAKEFILE} # Make blank to avoid rebuilds when makefile is modified
+
+ObjDir = :objs:
+Includes = \xB6
+ -includes unix \xB6
+ -i :include: \xB6
+ -i :src: \xB6
+ -i :include:freetype:config:
+
+Sym-68K = -sym off
+
+COptions = \xB6
+ -d HAVE_FSSPEC=1 \xB6
+ -d HAVE_FSREF=0 \xB6
+ -d HAVE_QUICKDRAW_TOOLBOX=1 \xB6
+ -d HAVE_QUICKDRAW_CARBON=0 \xB6
+ -d HAVE_ATS=0 \xB6
+ -d FT2_BUILD_LIBRARY \xB6
+ -d FT_CONFIG_CONFIG_H="<ftconfig.h>" \xB6
+ -d FT_CONFIG_MODULES_H="<ftmodule.h>" \xB6
+ {Includes} {Sym-68K} -model far
+
+
+### Source Files ###
+
+SrcFiles = \xB6
+ :builds:mac:ftmac.c \xB6
+ :src:autofit:autofit.c \xB6
+ :src:base:ftbase.c \xB6
+ :src:base:ftbbox.c \xB6
+ :src:base:ftbdf.c \xB6
+ :src:base:ftbitmap.c \xB6
+ :src:base:ftdebug.c \xB6
+ :src:base:ftglyph.c \xB6
+ :src:base:ftgxval.c \xB6
+ :src:base:ftinit.c \xB6
+ :src:base:ftmm.c \xB6
+ :src:base:ftotval.c \xB6
+ :src:base:ftpfr.c \xB6
+ :src:base:ftstroke.c \xB6
+ :src:base:ftsynth.c \xB6
+ :src:base:ftsystem.c \xB6
+ :src:base:fttype1.c \xB6
+ :src:base:ftwinfnt.c \xB6
+ :src:base:ftxf86.c \xB6
+ :src:cache:ftcache.c \xB6
+ :src:bdf:bdf.c \xB6
+ :src:cff:cff.c \xB6
+ :src:cid:type1cid.c \xB6
+ :src:gxvalid:gxvalid.c \xB6
+ :src:gzip:ftgzip.c \xB6
+ :src:lzw:ftlzw.c \xB6
+ :src:otvalid:otvalid.c \xB6
+ :src:pcf:pcf.c \xB6
+ :src:pfr:pfr.c \xB6
+ :src:psaux:psaux.c \xB6
+ :src:pshinter:pshinter.c \xB6
+ :src:psnames:psmodule.c \xB6
+ :src:raster:raster.c \xB6
+ :src:sfnt:sfnt.c \xB6
+ :src:smooth:smooth.c \xB6
+ :src:truetype:truetype.c \xB6
+ :src:type1:type1.c \xB6
+ :src:type42:type42.c \xB6
+ :src:winfonts:winfnt.c
+
+
+### Object Files ###
+
+ObjFiles-68K = \xB6
+ "{ObjDir}autofit.c.o" \xB6
+ "{ObjDir}ftbase.c.o" \xB6
+ "{ObjDir}ftbbox.c.o" \xB6
+ "{ObjDir}ftbdf.c.o" \xB6
+ "{ObjDir}ftbitmap.c.o" \xB6
+ "{ObjDir}ftdebug.c.o" \xB6
+ "{ObjDir}ftglyph.c.o" \xB6
+ "{ObjDir}ftgxval.c.o" \xB6
+ "{ObjDir}ftinit.c.o" \xB6
+ "{ObjDir}ftmac.c.o" \xB6
+ "{ObjDir}ftmm.c.o" \xB6
+ "{ObjDir}ftotval.c.o" \xB6
+ "{ObjDir}ftpfr.c.o" \xB6
+ "{ObjDir}ftstroke.c.o" \xB6
+ "{ObjDir}ftsynth.c.o" \xB6
+ "{ObjDir}ftsystem.c.o" \xB6
+ "{ObjDir}fttype1.c.o" \xB6
+ "{ObjDir}ftwinfnt.c.o" \xB6
+ "{ObjDir}ftxf86.c.o" \xB6
+ "{ObjDir}ftcache.c.o" \xB6
+ "{ObjDir}bdf.c.o" \xB6
+ "{ObjDir}cff.c.o" \xB6
+ "{ObjDir}type1cid.c.o" \xB6
+ "{ObjDir}gxvalid.c.o" \xB6
+ "{ObjDir}ftgzip.c.o" \xB6
+ "{ObjDir}ftlzw.c.o" \xB6
+ "{ObjDir}otvalid.c.o" \xB6
+ "{ObjDir}pcf.c.o" \xB6
+ "{ObjDir}pfr.c.o" \xB6
+ "{ObjDir}psaux.c.o" \xB6
+ "{ObjDir}pshinter.c.o" \xB6
+ "{ObjDir}psmodule.c.o" \xB6
+ "{ObjDir}raster.c.o" \xB6
+ "{ObjDir}sfnt.c.o" \xB6
+ "{ObjDir}smooth.c.o" \xB6
+ "{ObjDir}truetype.c.o" \xB6
+ "{ObjDir}type1.c.o" \xB6
+ "{ObjDir}type42.c.o" \xB6
+ "{ObjDir}winfnt.c.o"
+
+
+### Libraries ###
+
+LibFiles-68K =
+
+
+### Default Rules ###
+
+.c.o \xC4 .c {\xA5MondoBuild\xA5}
+ {C} {depDir}{default}.c -o {targDir}{default}.c.o {COptions} \xB6
+ -ansi strict
+
+### Build Rules ###
+
+"{ObjDir}ftmac.c.o" \xC4\xC4 :builds:mac:ftmac.c
+ {C} :builds:mac:ftmac.c -o "{ObjDir}ftmac.c.o" {COptions}
+
+FreeType.m68k_far \xC4\xC4 FreeType.m68k_far.o
+
+FreeType.m68k_far.o \xC4\xC4 {ObjFiles-68K} {LibFiles-68K} {\xA5MondoBuild\xA5}
+ Lib \xB6
+ -o {Targ} \xB6
+ {ObjFiles-68K} \xB6
+ {LibFiles-68K} \xB6
+ {Sym-68K} \xB6
+ -mf -d
+
+
+
+### Required Dependencies ###
+
+"{ObjDir}autofit.c.o" \xC4 :src:autofit:autofit.c
+"{ObjDir}ftbase.c.o" \xC4 :src:base:ftbase.c
+"{ObjDir}ftbbox.c.o" \xC4 :src:base:ftbbox.c
+"{ObjDir}ftbdf.c.o" \xC4 :src:base:ftbdf.c
+"{ObjDir}ftbitmap.c.o" \xC4 :src:base:ftbitmap.c
+"{ObjDir}ftdebug.c.o" \xC4 :src:base:ftdebug.c
+"{ObjDir}ftglyph.c.o" \xC4 :src:base:ftglyph.c
+"{ObjDir}ftgxval.c.o" \xC4 :src:base:ftgxval.c
+"{ObjDir}ftinit.c.o" \xC4 :src:base:ftinit.c
+# "{ObjDir}ftmac.c.o" \xC4 :src:base:ftmac.c
+"{ObjDir}ftmm.c.o" \xC4 :src:base:ftmm.c
+"{ObjDir}ftotval.c.o" \xC4 :src:base:ftotval.c
+"{ObjDir}ftpfr.c.o" \xC4 :src:base:ftpfr.c
+"{ObjDir}ftstroke.c.o" \xC4 :src:base:ftstroke.c
+"{ObjDir}ftsynth.c.o" \xC4 :src:base:ftsynth.c
+"{ObjDir}ftsystem.c.o" \xC4 :src:base:ftsystem.c
+"{ObjDir}fttype1.c.o" \xC4 :src:base:fttype1.c
+"{ObjDir}ftwinfnt.c.o" \xC4 :src:base:ftwinfnt.c
+"{ObjDir}ftxf86.c.o" \xC4 :src:base:ftxf86.c
+"{ObjDir}ftcache.c.o" \xC4 :src:cache:ftcache.c
+"{ObjDir}bdf.c.o" \xC4 :src:bdf:bdf.c
+"{ObjDir}cff.c.o" \xC4 :src:cff:cff.c
+"{ObjDir}type1cid.c.o" \xC4 :src:cid:type1cid.c
+"{ObjDir}gxvalid.c.o" \xC4 :src:gxvalid:gxvalid.c
+"{ObjDir}ftgzip.c.o" \xC4 :src:gzip:ftgzip.c
+"{ObjDir}ftlzw.c.o" \xC4 :src:lzw:ftlzw.c
+"{ObjDir}otvalid.c.o" \xC4 :src:otvalid:otvalid.c
+"{ObjDir}pcf.c.o" \xC4 :src:pcf:pcf.c
+"{ObjDir}pfr.c.o" \xC4 :src:pfr:pfr.c
+"{ObjDir}psaux.c.o" \xC4 :src:psaux:psaux.c
+"{ObjDir}pshinter.c.o" \xC4 :src:pshinter:pshinter.c
+"{ObjDir}psmodule.c.o" \xC4 :src:psnames:psmodule.c
+"{ObjDir}raster.c.o" \xC4 :src:raster:raster.c
+"{ObjDir}sfnt.c.o" \xC4 :src:sfnt:sfnt.c
+"{ObjDir}smooth.c.o" \xC4 :src:smooth:smooth.c
+"{ObjDir}truetype.c.o" \xC4 :src:truetype:truetype.c
+"{ObjDir}type1.c.o" \xC4 :src:type1:type1.c
+"{ObjDir}type42.c.o" \xC4 :src:type42:type42.c
+"{ObjDir}winfnt.c.o" \xC4 :src:winfonts:winfnt.c
+
+
+### Optional Dependencies ###
+### Build this target to generate "include file" dependencies. ###
+
+Dependencies \xC4 $OutOfDate
+ MakeDepend \xB6
+ -append {MAKEFILE} \xB6
+ -ignore "{CIncludes}" \xB6
+ -objdir "{ObjDir}" \xB6
+ -objext .o \xB6
+ {Includes} \xB6
+ {SrcFiles}
+
+
diff --git a/src/3rdparty/freetype/builds/mac/FreeType.ppc_carbon.make.txt b/src/3rdparty/freetype/builds/mac/FreeType.ppc_carbon.make.txt
new file mode 100644
index 0000000..f8e2d66
--- /dev/null
+++ b/src/3rdparty/freetype/builds/mac/FreeType.ppc_carbon.make.txt
@@ -0,0 +1,202 @@
+# File: FreeType.ppc_carbon.make
+# Target: FreeType.ppc_carbon
+# Created: Friday, October 28, 2005 03:40:06 PM
+
+
+MAKEFILE = FreeType.ppc_carbon.make
+\xA5MondoBuild\xA5 = {MAKEFILE} # Make blank to avoid rebuilds when makefile is modified
+
+ObjDir = :objs:
+Includes = \xB6
+ -ansi strict \xB6
+ -includes unix \xB6
+ -i :include: \xB6
+ -i :src: \xB6
+ -i :include:freetype:config:
+
+Sym-PPC = -sym off
+
+PPCCOptions = \xB6
+ -d HAVE_FSSPEC=1 \xB6
+ -d HAVE_FSREF=1 \xB6
+ -d HAVE_QUICKDRAW_TOOLBOX=1 \xB6
+ -d HAVE_QUICKDRAW_CARBON=1 \xB6
+ -d HAVE_ATS=0 \xB6
+ -d FT2_BUILD_LIBRARY \xB6
+ -d FT_CONFIG_CONFIG_H="<ftconfig.h>" \xB6
+ -d FT_CONFIG_MODULES_H="<ftmodule.h>" \xB6
+ {Includes} {Sym-PPC} -d TARGET_API_MAC_CARBON=1
+
+
+### Source Files ###
+
+SrcFiles = \xB6
+ :builds:mac:ftmac.c \xB6
+ :src:autofit:autofit.c \xB6
+ :src:base:ftbase.c \xB6
+ :src:base:ftbbox.c \xB6
+ :src:base:ftbdf.c \xB6
+ :src:base:ftbitmap.c \xB6
+ :src:base:ftdebug.c \xB6
+ :src:base:ftglyph.c \xB6
+ :src:base:ftgxval.c \xB6
+ :src:base:ftinit.c \xB6
+ :src:base:ftmm.c \xB6
+ :src:base:ftotval.c \xB6
+ :src:base:ftpfr.c \xB6
+ :src:base:ftstroke.c \xB6
+ :src:base:ftsynth.c \xB6
+ :src:base:ftsystem.c \xB6
+ :src:base:fttype1.c \xB6
+ :src:base:ftwinfnt.c \xB6
+ :src:base:ftxf86.c \xB6
+ :src:cache:ftcache.c \xB6
+ :src:bdf:bdf.c \xB6
+ :src:cff:cff.c \xB6
+ :src:cid:type1cid.c \xB6
+ :src:gxvalid:gxvalid.c \xB6
+ :src:gzip:ftgzip.c \xB6
+ :src:lzw:ftlzw.c \xB6
+ :src:otvalid:otvalid.c \xB6
+ :src:pcf:pcf.c \xB6
+ :src:pfr:pfr.c \xB6
+ :src:psaux:psaux.c \xB6
+ :src:pshinter:pshinter.c \xB6
+ :src:psnames:psmodule.c \xB6
+ :src:raster:raster.c \xB6
+ :src:sfnt:sfnt.c \xB6
+ :src:smooth:smooth.c \xB6
+ :src:truetype:truetype.c \xB6
+ :src:type1:type1.c \xB6
+ :src:type42:type42.c \xB6
+ :src:winfonts:winfnt.c
+
+
+### Object Files ###
+
+ObjFiles-PPC = \xB6
+ "{ObjDir}autofit.c.x" \xB6
+ "{ObjDir}ftbase.c.x" \xB6
+ "{ObjDir}ftbbox.c.x" \xB6
+ "{ObjDir}ftbdf.c.x" \xB6
+ "{ObjDir}ftbitmap.c.x" \xB6
+ "{ObjDir}ftdebug.c.x" \xB6
+ "{ObjDir}ftglyph.c.x" \xB6
+ "{ObjDir}ftgxval.c.x" \xB6
+ "{ObjDir}ftinit.c.x" \xB6
+ "{ObjDir}ftmac.c.x" \xB6
+ "{ObjDir}ftmm.c.x" \xB6
+ "{ObjDir}ftotval.c.x" \xB6
+ "{ObjDir}ftpfr.c.x" \xB6
+ "{ObjDir}ftstroke.c.x" \xB6
+ "{ObjDir}ftsynth.c.x" \xB6
+ "{ObjDir}ftsystem.c.x" \xB6
+ "{ObjDir}fttype1.c.x" \xB6
+ "{ObjDir}ftwinfnt.c.x" \xB6
+ "{ObjDir}ftxf86.c.x" \xB6
+ "{ObjDir}ftcache.c.x" \xB6
+ "{ObjDir}bdf.c.x" \xB6
+ "{ObjDir}cff.c.x" \xB6
+ "{ObjDir}type1cid.c.x" \xB6
+ "{ObjDir}gxvalid.c.x" \xB6
+ "{ObjDir}ftgzip.c.x" \xB6
+ "{ObjDir}ftlzw.c.x" \xB6
+ "{ObjDir}otvalid.c.x" \xB6
+ "{ObjDir}pcf.c.x" \xB6
+ "{ObjDir}pfr.c.x" \xB6
+ "{ObjDir}psaux.c.x" \xB6
+ "{ObjDir}pshinter.c.x" \xB6
+ "{ObjDir}psmodule.c.x" \xB6
+ "{ObjDir}raster.c.x" \xB6
+ "{ObjDir}sfnt.c.x" \xB6
+ "{ObjDir}smooth.c.x" \xB6
+ "{ObjDir}truetype.c.x" \xB6
+ "{ObjDir}type1.c.x" \xB6
+ "{ObjDir}type42.c.x" \xB6
+ "{ObjDir}winfnt.c.x"
+
+
+### Libraries ###
+
+LibFiles-PPC =
+
+
+### Default Rules ###
+
+.c.x \xC4 .c {\xA5MondoBuild\xA5}
+ {PPCC} {depDir}{default}.c -o {targDir}{default}.c.x {PPCCOptions}
+
+
+### Build Rules ###
+
+FreeType.ppc_carbon \xC4\xC4 FreeType.ppc_carbon.o
+
+FreeType.ppc_carbon.o \xC4\xC4 {ObjFiles-PPC} {LibFiles-PPC} {\xA5MondoBuild\xA5}
+ PPCLink \xB6
+ -o {Targ} \xB6
+ {ObjFiles-PPC} \xB6
+ {LibFiles-PPC} \xB6
+ {Sym-PPC} \xB6
+ -mf -d \xB6
+ -t 'XCOF' \xB6
+ -c 'MPS ' \xB6
+ -xm l
+
+
+
+### Required Dependencies ###
+
+"{ObjDir}ftmac.c.x" \xC4 :builds:mac:ftmac.c
+"{ObjDir}autofit.c.x" \xC4 :src:autofit:autofit.c
+"{ObjDir}ftbase.c.x" \xC4 :src:base:ftbase.c
+"{ObjDir}ftbbox.c.x" \xC4 :src:base:ftbbox.c
+"{ObjDir}ftbdf.c.x" \xC4 :src:base:ftbdf.c
+"{ObjDir}ftbitmap.c.x" \xC4 :src:base:ftbitmap.c
+"{ObjDir}ftdebug.c.x" \xC4 :src:base:ftdebug.c
+"{ObjDir}ftglyph.c.x" \xC4 :src:base:ftglyph.c
+"{ObjDir}ftgxval.c.x" \xC4 :src:base:ftgxval.c
+"{ObjDir}ftinit.c.x" \xC4 :src:base:ftinit.c
+"{ObjDir}ftmm.c.x" \xC4 :src:base:ftmm.c
+"{ObjDir}ftotval.c.x" \xC4 :src:base:ftotval.c
+"{ObjDir}ftpfr.c.x" \xC4 :src:base:ftpfr.c
+"{ObjDir}ftstroke.c.x" \xC4 :src:base:ftstroke.c
+"{ObjDir}ftsynth.c.x" \xC4 :src:base:ftsynth.c
+"{ObjDir}ftsystem.c.x" \xC4 :src:base:ftsystem.c
+"{ObjDir}fttype1.c.x" \xC4 :src:base:fttype1.c
+"{ObjDir}ftwinfnt.c.x" \xC4 :src:base:ftwinfnt.c
+"{ObjDir}ftxf86.c.x" \xC4 :src:base:ftxf86.c
+"{ObjDir}ftcache.c.x" \xC4 :src:cache:ftcache.c
+"{ObjDir}bdf.c.x" \xC4 :src:bdf:bdf.c
+"{ObjDir}cff.c.x" \xC4 :src:cff:cff.c
+"{ObjDir}type1cid.c.x" \xC4 :src:cid:type1cid.c
+"{ObjDir}gxvalid.c.x" \xC4 :src:gxvalid:gxvalid.c
+"{ObjDir}ftgzip.c.x" \xC4 :src:gzip:ftgzip.c
+"{ObjDir}ftlzw.c.x" \xC4 :src:lzw:ftlzw.c
+"{ObjDir}otvalid.c.x" \xC4 :src:otvalid:otvalid.c
+"{ObjDir}pcf.c.x" \xC4 :src:pcf:pcf.c
+"{ObjDir}pfr.c.x" \xC4 :src:pfr:pfr.c
+"{ObjDir}psaux.c.x" \xC4 :src:psaux:psaux.c
+"{ObjDir}pshinter.c.x" \xC4 :src:pshinter:pshinter.c
+"{ObjDir}psmodule.c.x" \xC4 :src:psnames:psmodule.c
+"{ObjDir}raster.c.x" \xC4 :src:raster:raster.c
+"{ObjDir}sfnt.c.x" \xC4 :src:sfnt:sfnt.c
+"{ObjDir}smooth.c.x" \xC4 :src:smooth:smooth.c
+"{ObjDir}truetype.c.x" \xC4 :src:truetype:truetype.c
+"{ObjDir}type1.c.x" \xC4 :src:type1:type1.c
+"{ObjDir}type42.c.x" \xC4 :src:type42:type42.c
+"{ObjDir}winfnt.c.x" \xC4 :src:winfonts:winfnt.c
+
+
+### Optional Dependencies ###
+### Build this target to generate "include file" dependencies. ###
+
+Dependencies \xC4 $OutOfDate
+ MakeDepend \xB6
+ -append {MAKEFILE} \xB6
+ -ignore "{CIncludes}" \xB6
+ -objdir "{ObjDir}" \xB6
+ -objext .x \xB6
+ {Includes} \xB6
+ {SrcFiles}
+
+
diff --git a/src/3rdparty/freetype/builds/mac/FreeType.ppc_classic.make.txt b/src/3rdparty/freetype/builds/mac/FreeType.ppc_classic.make.txt
new file mode 100644
index 0000000..5c743fd
--- /dev/null
+++ b/src/3rdparty/freetype/builds/mac/FreeType.ppc_classic.make.txt
@@ -0,0 +1,203 @@
+# File: FreeType.ppc_classic.make
+# Target: FreeType.ppc_classic
+# Created: Thursday, October 27, 2005 07:42:43 PM
+
+
+MAKEFILE = FreeType.ppc_classic.make
+\xA5MondoBuild\xA5 = {MAKEFILE} # Make blank to avoid rebuilds when makefile is modified
+
+ObjDir = :objs:
+Includes = \xB6
+ -ansi strict \xB6
+ -includes unix \xB6
+ -i :include: \xB6
+ -i :src: \xB6
+ -i :include:freetype:config:
+
+Sym-PPC = -sym off
+
+PPCCOptions = \xB6
+ -d HAVE_FSSPEC=1 \xB6
+ -d HAVE_FSREF=0 \xB6
+ -d HAVE_QUICKDRAW_TOOLBOX=1 \xB6
+ -d HAVE_QUICKDRAW_CARBON=0 \xB6
+ -d HAVE_ATS=0 \xB6
+ -d FT2_BUILD_LIBRARY \xB6
+ -d FT_CONFIG_CONFIG_H="<ftconfig.h>" \xB6
+ -d FT_CONFIG_MODULES_H="<ftmodule.h>" \xB6
+ {Includes} {Sym-PPC}
+
+
+### Source Files ###
+
+SrcFiles = \xB6
+ :builds:mac:ftmac.c \xB6
+ :src:autofit:autofit.c \xB6
+ :src:base:ftbase.c \xB6
+ :src:base:ftbbox.c \xB6
+ :src:base:ftbdf.c \xB6
+ :src:base:ftbitmap.c \xB6
+ :src:base:ftdebug.c \xB6
+ :src:base:ftglyph.c \xB6
+ :src:base:ftgxval.c \xB6
+ :src:base:ftinit.c \xB6
+ :src:base:ftmm.c \xB6
+ :src:base:ftotval.c \xB6
+ :src:base:ftpfr.c \xB6
+ :src:base:ftstroke.c \xB6
+ :src:base:ftsynth.c \xB6
+ :src:base:ftsystem.c \xB6
+ :src:base:fttype1.c \xB6
+ :src:base:ftwinfnt.c \xB6
+ :src:base:ftxf86.c \xB6
+ :src:cache:ftcache.c \xB6
+ :src:bdf:bdf.c \xB6
+ :src:cff:cff.c \xB6
+ :src:cid:type1cid.c \xB6
+ :src:gxvalid:gxvalid.c \xB6
+ :src:gzip:ftgzip.c \xB6
+ :src:lzw:ftlzw.c \xB6
+ :src:otvalid:otvalid.c \xB6
+ :src:pcf:pcf.c \xB6
+ :src:pfr:pfr.c \xB6
+ :src:psaux:psaux.c \xB6
+ :src:pshinter:pshinter.c \xB6
+ :src:psnames:psmodule.c \xB6
+ :src:raster:raster.c \xB6
+ :src:sfnt:sfnt.c \xB6
+ :src:smooth:smooth.c \xB6
+ :src:truetype:truetype.c \xB6
+ :src:type1:type1.c \xB6
+ :src:type42:type42.c \xB6
+ :src:winfonts:winfnt.c
+
+
+### Object Files ###
+
+ObjFiles-PPC = \xB6
+ "{ObjDir}autofit.c.x" \xB6
+ "{ObjDir}ftbase.c.x" \xB6
+ "{ObjDir}ftbbox.c.x" \xB6
+ "{ObjDir}ftbdf.c.x" \xB6
+ "{ObjDir}ftbitmap.c.x" \xB6
+ "{ObjDir}ftdebug.c.x" \xB6
+ "{ObjDir}ftglyph.c.x" \xB6
+ "{ObjDir}ftgxval.c.x" \xB6
+ "{ObjDir}ftinit.c.x" \xB6
+ "{ObjDir}ftmac.c.x" \xB6
+ "{ObjDir}ftmm.c.x" \xB6
+ "{ObjDir}ftotval.c.x" \xB6
+ "{ObjDir}ftpfr.c.x" \xB6
+ "{ObjDir}ftstroke.c.x" \xB6
+ "{ObjDir}ftsynth.c.x" \xB6
+ "{ObjDir}ftsystem.c.x" \xB6
+ "{ObjDir}fttype1.c.x" \xB6
+ "{ObjDir}ftwinfnt.c.x" \xB6
+ "{ObjDir}ftxf86.c.x" \xB6
+ "{ObjDir}ftcache.c.x" \xB6
+ "{ObjDir}bdf.c.x" \xB6
+ "{ObjDir}cff.c.x" \xB6
+ "{ObjDir}type1cid.c.x" \xB6
+ "{ObjDir}gxvalid.c.x" \xB6
+ "{ObjDir}ftgzip.c.x" \xB6
+ "{ObjDir}ftlzw.c.x" \xB6
+ "{ObjDir}otvalid.c.x" \xB6
+ "{ObjDir}pcf.c.x" \xB6
+ "{ObjDir}pfr.c.x" \xB6
+ "{ObjDir}psaux.c.x" \xB6
+ "{ObjDir}pshinter.c.x" \xB6
+ "{ObjDir}psmodule.c.x" \xB6
+ "{ObjDir}raster.c.x" \xB6
+ "{ObjDir}sfnt.c.x" \xB6
+ "{ObjDir}smooth.c.x" \xB6
+ "{ObjDir}truetype.c.x" \xB6
+ "{ObjDir}type1.c.x" \xB6
+ "{ObjDir}type42.c.x" \xB6
+ "{ObjDir}winfnt.c.x"
+
+
+### Libraries ###
+
+LibFiles-PPC =
+
+
+### Default Rules ###
+
+.c.x \xC4 .c {\xA5MondoBuild\xA5}
+ {PPCC} {depDir}{default}.c -o {targDir}{default}.c.x {PPCCOptions}
+
+
+### Build Rules ###
+
+FreeType.ppc_classic \xC4\xC4 FreeType.ppc_classic.o
+
+FreeType.ppc_classic.o \xC4\xC4 {ObjFiles-PPC} {LibFiles-PPC} {\xA5MondoBuild\xA5}
+ PPCLink \xB6
+ -o {Targ} \xB6
+ {ObjFiles-PPC} \xB6
+ {LibFiles-PPC} \xB6
+ {Sym-PPC} \xB6
+ -mf -d \xB6
+ -t 'XCOF' \xB6
+ -c 'MPS ' \xB6
+ -xm l
+
+
+
+### Required Dependencies ###
+
+"{ObjDir}ftmac.c.x" \xC4 :builds:mac:ftmac.c
+"{ObjDir}autofit.c.x" \xC4 :src:autofit:autofit.c
+"{ObjDir}ftbase.c.x" \xC4 :src:base:ftbase.c
+"{ObjDir}ftbbox.c.x" \xC4 :src:base:ftbbox.c
+"{ObjDir}ftbdf.c.x" \xC4 :src:base:ftbdf.c
+"{ObjDir}ftbitmap.c.x" \xC4 :src:base:ftbitmap.c
+"{ObjDir}ftdebug.c.x" \xC4 :src:base:ftdebug.c
+"{ObjDir}ftglyph.c.x" \xC4 :src:base:ftglyph.c
+"{ObjDir}ftgxval.c.x" \xC4 :src:base:ftgxval.c
+"{ObjDir}ftinit.c.x" \xC4 :src:base:ftinit.c
+"{ObjDir}ftmm.c.x" \xC4 :src:base:ftmm.c
+"{ObjDir}ftotval.c.x" \xC4 :src:base:ftotval.c
+"{ObjDir}ftpfr.c.x" \xC4 :src:base:ftpfr.c
+"{ObjDir}ftstroke.c.x" \xC4 :src:base:ftstroke.c
+"{ObjDir}ftsynth.c.x" \xC4 :src:base:ftsynth.c
+"{ObjDir}ftsystem.c.x" \xC4 :src:base:ftsystem.c
+"{ObjDir}fttype1.c.x" \xC4 :src:base:fttype1.c
+"{ObjDir}ftwinfnt.c.x" \xC4 :src:base:ftwinfnt.c
+"{ObjDir}ftxf86.c.x" \xC4 :src:base:ftxf86.c
+"{ObjDir}ftcache.c.x" \xC4 :src:cache:ftcache.c
+"{ObjDir}bdf.c.x" \xC4 :src:bdf:bdf.c
+"{ObjDir}cff.c.x" \xC4 :src:cff:cff.c
+"{ObjDir}type1cid.c.x" \xC4 :src:cid:type1cid.c
+"{ObjDir}gxvalid.c.x" \xC4 :src:gxvalid:gxvalid.c
+"{ObjDir}ftgzip.c.x" \xC4 :src:gzip:ftgzip.c
+"{ObjDir}ftlzw.c.x" \xC4 :src:lzw:ftlzw.c
+"{ObjDir}otvalid.c.x" \xC4 :src:otvalid:otvalid.c
+"{ObjDir}pcf.c.x" \xC4 :src:pcf:pcf.c
+"{ObjDir}pfr.c.x" \xC4 :src:pfr:pfr.c
+"{ObjDir}psaux.c.x" \xC4 :src:psaux:psaux.c
+"{ObjDir}pshinter.c.x" \xC4 :src:pshinter:pshinter.c
+"{ObjDir}psmodule.c.x" \xC4 :src:psnames:psmodule.c
+"{ObjDir}raster.c.x" \xC4 :src:raster:raster.c
+"{ObjDir}sfnt.c.x" \xC4 :src:sfnt:sfnt.c
+"{ObjDir}smooth.c.x" \xC4 :src:smooth:smooth.c
+"{ObjDir}truetype.c.x" \xC4 :src:truetype:truetype.c
+"{ObjDir}type1.c.x" \xC4 :src:type1:type1.c
+"{ObjDir}type42.c.x" \xC4 :src:type42:type42.c
+"{ObjDir}winfnt.c.x" \xC4 :src:winfonts:winfnt.c
+
+
+
+### Optional Dependencies ###
+### Build this target to generate "include file" dependencies. ###
+
+Dependencies \xC4 $OutOfDate
+ MakeDepend \xB6
+ -append {MAKEFILE} \xB6
+ -ignore "{CIncludes}" \xB6
+ -objdir "{ObjDir}" \xB6
+ -objext .x \xB6
+ {Includes} \xB6
+ {SrcFiles}
+
+
diff --git a/src/3rdparty/freetype/builds/mac/README b/src/3rdparty/freetype/builds/mac/README
new file mode 100644
index 0000000..edd57b1
--- /dev/null
+++ b/src/3rdparty/freetype/builds/mac/README
@@ -0,0 +1,403 @@
+This folder contains
+
+ * Makefile skeltons for Apple MPW (Macintosh's Programmers Workshop)
+
+ * Python script to generate MPW makefile from skelton
+
+ * Metrowerks CodeWarrior 9.0 project file in XML format
+
+------------------------------------------------------------
+
+1. What is this
+---------------
+
+Files in this directory are designed to build FreeType
+running on classic MacOS. To build FreeType running on
+Mac OS X, build as the system is UNIX.
+
+However, Mac OS X is most useful to manipulate files in
+vanilla FreeType to fit classic MacOS.
+
+The information about MacOS specific API is written in
+appendix of this document.
+
+2. Requirement
+--------------
+
+You can use MPW: a free-charged developer environment
+by Apple, or CodeWarrior: a commercial developer
+environment by Metrowerks. GCC for MPW and Symantec
+"Think C" are not tested at present.
+
+
+ 2-1. Apple MPW
+ --------------
+
+ Following C compilers are tested:
+
+ m68k target: Apple SC 8.9.0d3e1
+ ppc target: Apple MrC 5.0.0d3c1
+
+ The final MPW-GM (official release on 1999/Dec) is too
+ old and cannot compile FreeType, because bundled C
+ compilers cannot search header files in sub directories.
+ Updating by the final MPW-PR (pre-release on 2001/Feb)
+ is required.
+
+ Required files are downloadable from:
+
+ http://developer.apple.com/tools/mpw-tools/index.html
+
+ Also you can find documents how to update by MPW-PR.
+
+ Python is required to restore MPW makefiles from the
+ skeltons. Python bundled to Mac OS X is enough. For
+ classic MacOS, MacPython is available:
+
+ http://homepages.cwi.nl/~jack/macpython/
+
+ MPW requires all files are typed by resource fork.
+ ResEdit bundled to MPW is enough. In Mac OS X,
+ /Developer/Tools/SetFile of DevTool is useful to
+ manipulate from commandline.
+
+ 2-2. Metrowerks CodeWarriror
+ ----------------------------
+
+ XML project file is generated and tested by
+ CodeWarriror 9.0. Older versions are not tested
+ at all. At present, static library for ppc target
+ is available in the project file.
+
+
+3. How to build
+---------------
+
+ 3-1. Apple MPW
+ --------------
+ Detailed building procedure by Apple MPW is
+ described in following.
+
+ 3-1-1. Generate MPW makefiles from the skeltons
+ ------------------------------------------------
+
+ Here are 4 skeltons for following targets are
+ included.
+
+ - FreeType.m68k_far.make.txt
+ Ancient 32bit binary executable format for
+ m68k MacOS: System 6, with 32bit addressing
+ mode (far-pointer-model) So-called "Toolbox"
+ API is used.
+
+ - FreeType.m68k_cfm.make.txt
+ CFM binary executable format for m68k MacOS:
+ System 7. So-called "Toolbox" API is used.
+
+ - FreeType.ppc_classic.make.txt
+ CFM binary executable format for ppc MacOS:
+ System 7, MacOS 8, MacOS 9. So-called "Toolbox"
+ API is used.
+
+ - FreeType.ppc_classic.make.txt
+ CFM binary executable format for ppc MacOS:
+ MacOS 9. Carbon API is used.
+
+ At present, static library is only supported,
+ although targets except of m68k_far are capable
+ to use shared library.
+
+ MPW makefile syntax uses 8bit characters. To keep
+ from violating them during version control, here
+ we store skeltons in pure ASCII format. You must
+ generate MPW makefile by Python script ascii2mpw.py.
+
+ In Mac OS X terminal, you can convert as:
+
+ python builds/mac/ascii2mpw.py \
+ < builds/mac/FreeType.m68k_far.make.txt \
+ > FreeType.m68k_far.make
+
+ The skeltons are designed to use in the top
+ directory where there are builds, include, src etc.
+ You must name the generated MPW makefile by removing
+ ".txt" from source skelton name.
+
+ 3-1-2. Add resource forks to related files
+ ------------------------------------------
+
+ MPW's Make and C compilers cannot recognize files
+ without resource fork. You have to add resource
+ fork to the files that MPW uses. In Mac OS X
+ terminal of the system, you can do as:
+
+ find . -name '*.[ch]' -exec \
+ /Developer/Tools/SetFile -a l -c "MPS " -t TEXT \{\} \;
+
+ find . -name '*.make' -exec \
+ /Developer/Tools/SetFile -a l -c "MPS " -t TEXT \{\} \;
+
+
+ 3-1-3. Open MPW shell and build
+ -------------------------------
+
+ Open MPW shell and go to the top directory that
+ FreeType sources are extracted (MPW makefile must
+ be located in there), from "Set Directory" in
+ "Directory" menu.
+
+ Choose "Build" from "Build" menu, and type the
+ name of project by removing ".make" from MPW
+ makefile, as: FreeType.m68k_far
+
+ If building is successfully finished, you can find
+ built library in objs/ directory.
+
+
+ 3-2. Metrowerks CodeWarrior
+ ---------------------------
+
+ Detailed building procedure by Metrowerks
+ CodeWarrior (CW) 9.0 is described in following.
+
+ 3-2-1. Import XML project file
+ ------------------------------
+
+ CW XML project file is not ready for double-
+ click. Start CodeWarrior IDE, and choose
+ "Import project" in "File" menu. Choose XML
+ project file: builds/mac/ftlib.prj.xml.
+ In next, you will be asked where to save CW
+ native project file: you must choose
+ "builds/mac/ftlib.prj". The project file is
+ designed with relative path from there. After
+ CW native project file is generated, it is
+ automatically loaded, small project window
+ titled "ftlib.prj" is displayed.
+
+ 3-2-2. Building
+ ---------------
+ Choose "Make" from "Project" menu. If building
+ is successfully finished, you can find built
+ library at objs/FreeTypeLib.
+
+4. TODO
+-------
+
+ 4-1. All modules should be included
+ -----------------------------------
+
+ At present, MPW makefiles and CW project file are
+ just updated versions of these by Leonard. Some
+ modules are added after the last maintenance, they
+ are not included.
+
+ 4-2. Working test with ftdemos
+ ------------------------------
+
+ At present, MPW makefiles and CW project file can
+ build FreeType for classic MacOS. But their working
+ behaviours are not tested at all. Building ftdemos
+ for classic MacOS and working test is required.
+
+ 4-3. Porting Jam onto MPW
+ -------------------------
+
+ FreeType uses Jam (and FT-Jam) for unified cross-
+ platform building tool. At present, Jam is not ported
+ to MPW. To update classic MacOS support easily,
+ building by Jam is expected on MPW.
+
+
+APPENDIX I
+----------
+
+ A-1. Framework dependencies
+ ---------------------------
+
+ src/base/ftmac.c adds two Mac-specific features to
+ FreeType. These features are based on MacOS libraries.
+
+ * accessing resource-fork font
+ The fonts for classic MacOS store their graphical data
+ in resource forks which cannot be accessed via ANSI C
+ functions. FreeType2 provides functions to handle such
+ resource fork fonts, they are based on File Manager
+ framework of MacOS. In addition, HFS and HFS+ file
+ system driver of Linux is supported. Following
+ functions are for this purpose.
+
+ FT_New_Face_From_Resource()
+ FT_New_Face_From_FSSpec()
+ FT_New_Face_From_FSRef()
+
+ * resolving font name to font file
+ The font menu of MacOS application prefers font name
+ written in FOND resource than sfnt resource. FreeType2
+ provides functions to find font file by name in MacOS
+ application, they are based on QuickDraw Font Manager
+ and Apple Type Service framework of MacOS.
+
+ FT_GetFile_From_Mac_Name()
+ FT_GetFile_From_Mac_ATS_Name()
+
+ Working functions for each MacOS are summarized as
+ following.
+
+ upto MacOS 6:
+ not tested (you have to obtain MPW 2.x)
+
+ MacOS 7.x, 8.x, 9.x (without CarbonLib):
+ FT_GetFile_From_Mac_Name()
+ FT_New_Face_From_Resource()
+ FT_New_Face_From_FSSpec()
+
+ MacOS 9.x (with CarbonLib):
+ FT_GetFile_From_Mac_Name()
+ FT_New_Face_From_Resource()
+ FT_New_Face_From_FSSpec()
+ FT_New_Face_From_FSRef()
+
+ Mac OS X upto 10.4.x:
+ FT_GetFile_From_Mac_Name() deprecated
+ FT_New_Face_From_FSSpec() deprecated
+ FT_GetFile_From_Mac_ATS_Name() deprecated?
+ FT_New_Face_From_FSRef()
+
+ A-2. Deprecated Functions
+ -------------------------
+
+ A-2-1. FileManager
+ ------------------
+
+ For convenience to write MacOS application, ftmac.c
+ provides functions to specify a file by FSSpec and FSRef,
+ because the file identification pathname had ever been
+ unrecommended method in MacOS programming.
+
+ Toward to MacOS X 10.4 & 5, Carbon functions using FSSpec
+ datatype is noticed as deprecated, and recommended to
+ migrate to FSRef datatype. The big differences of FSRef
+ against FSSpec are explained in Apple TechNotes 2078.
+
+ http://developer.apple.com/technotes/tn2002/tn2078.html
+
+ - filename length: the max length of file
+ name of FSRef is 255 chars (it is limit of HFS+),
+ that of FSSpec is 31 chars (it is limit of HFS).
+
+ - filename encoding: FSSpec is localized by
+ legacy encoding for each language system,
+ FSRef is Unicode enabled.
+
+ A-2-2. FontManager
+ ------------------
+
+ Following functions receive QuickDraw fontname:
+
+ FT_GetFile_From_Mac_Name()
+
+ QuickDraw is deprecated and replaced by Quartz
+ since Mac OS X 10.4. They are still kept for
+ backward compatibility. By undefinition of
+ HAVE_QUICKDRAW in building, you can change these
+ functions to return FT_Err_Unimplemented always.
+
+ Replacement functions are added for migration.
+
+ FT_GetFile_From_Mac_ATS_Name()
+
+ They are usable on Mac OS X only. On older systems,
+ these functions return FT_Err_Unimplemented always.
+
+ The detailed incompatibilities and possibility
+ of FontManager emulation without QuickDraw is
+ explained in
+
+ http://www.gyve.org/~mpsuzuki/ats_benchmark.html
+
+ A-3. Framework Availabilities
+ -----------------------------
+
+ The framework of MacOS are often revised, especially
+ when new format of binary executable is introduced.
+ Following table is the minimum version of frameworks
+ to use functions used in FreeType2. The table is
+ extracted from MPW header files for assembly language.
+
+ *** NOTE ***
+ The conditional definition of available data type
+ in MPW compiler is insufficient. You can compile
+ program using FSRef data type for older systems
+ (MacOS 7, 8) that don't know FSRef data type.
+
+
+ +-------------------+-----------------------------+
+ CPU | mc680x0 | PowerPC |
+ +---------+---------+---------+---------+---------+
+ Binary Executable Format | Classic | 68K-CFM | CFM | CFM | Mach-O |
+ +---------+---------+---------+---------+---------+
+ Framework API | Toolbox | Toolbox | Toolbox | Carbon | Carbon |
+ +---------+---------+---------+---------+---------+
+
+ +---------+---------+---------+---------+---------+
+ | ?(*) |Interface|Interface|CarbonLib|Mac OS X |
+ | |Lib |Lib | | |
+* Files.h +---------+---------+---------+---------+---------+
+PBGetFCBInfoSync() | o | 7.1- | 7.1- | 1.0- | o |
+FSMakeFSSpec() | o | 7.1- | 7.1- | 1.0- | o |
+FSGetForkCBInfo() | o | (**) | 9.0- | 1.0- | o |
+FSpMakeFSRef() | o | (**) | 9.0- | 1.0- | o |
+FSGetCatalogInfo() | o | (**) | 9.0- | 1.0- | -10.3 |
+FSPathMakeRef() | x | x | x | 1.1- | -10.3 |
+ +---------+---------+---------+---------+---------+
+
+ +---------+---------+---------+---------+---------+
+ | ?(*) |Font |Font |CarbonLib|Mac OS X |
+ | |Manager |Manager | | |
+* Fonts.h +---------+---------+---------+---------+---------+
+FMCreateFontFamilyIterator() | x | x | 9.0- | 1.0- | -10.3 |
+FMDisposeFontFamilyIterator() | x | x | 9.0- | 1.0- | -10.3 |
+FMGetNextFontFamily() | x | x | 9.0- | 1.0- | -10.3 |
+FMGetFontFamilyName() | x | x | 9.0- | 1.0- | -10.3 |
+FMCreateFontFamilyInstanceIterator() | x | x | 9.0- | 1.0- | -10.3 |
+FMDisposeFontFamilyInstanceIterator() | x | x | 9.0- | 1.0- | -10.3 |
+FMGetNextFontFamilyInstance() | x | x | 9.0- | 1.0- | -10.3 |
+ +---------+---------+---------+---------+---------+
+
+ +---------+---------+---------+---------+---------+
+ | - | - | - |CarbonLib|Mac OS X |
+* ATSFont.h (***) +---------+---------+---------+---------+---------+
+ATSFontFindFromName() | x | x | x | x | o |
+ATSFontGetFileSpecification() | x | x | x | x | o |
+ +---------+---------+---------+---------+---------+
+
+ (*)
+ In the "Classic": the original binary executable
+ format, these framework functions are directly
+ transformed to MacOS system call. Therefore, the
+ exact availability should be checked by running
+ system.
+
+ (**)
+ InterfaceLib is bundled to MacOS and its version
+ is usually equal to MacOS. There's no separate
+ update for InterfaceLib. It is supposed that
+ there's no InterfaceLib 9.x for m68k platforms.
+ In fact, these functions are FSRef dependent.
+
+ (***)
+ ATSUI framework is available on ATSUnicode 8.5 on
+ ppc Toolbox CFM, CarbonLib 1.0 too. But its base:
+ ATS font manager is not published in these versions.
+
+------------------------------------------------------------
+Last update: 2007-Feb-01, by Alexei Podtelezhnikov.
+
+Currently maintained by
+ suzuki toshiya, <mpsuzuki@hiroshima-u.ac.jp>
+Originally prepared by
+ Leonard Rosenthol, <leonardr@lazerware.com>
+ Just van Rossum, <just@letterror.com>
+
+This directory is now actively maintained as part of the FreeType Project.
diff --git a/src/3rdparty/freetype/builds/mac/ascii2mpw.py b/src/3rdparty/freetype/builds/mac/ascii2mpw.py
new file mode 100755
index 0000000..ad32b21
--- /dev/null
+++ b/src/3rdparty/freetype/builds/mac/ascii2mpw.py
@@ -0,0 +1,24 @@
+#!/usr/bin/env python
+import sys
+import string
+
+if len( sys.argv ) == 1 :
+ for asc_line in sys.stdin.readlines():
+ mpw_line = string.replace(asc_line, "\\xA5", "\245")
+ mpw_line = string.replace(mpw_line, "\\xB6", "\266")
+ mpw_line = string.replace(mpw_line, "\\xC4", "\304")
+ mpw_line = string.replace(mpw_line, "\\xC5", "\305")
+ mpw_line = string.replace(mpw_line, "\\xFF", "\377")
+ mpw_line = string.replace(mpw_line, "\n", "\r")
+ mpw_line = string.replace(mpw_line, "\\n", "\n")
+ sys.stdout.write(mpw_line)
+elif sys.argv[1] == "-r" :
+ for mpw_line in sys.stdin.readlines():
+ asc_line = string.replace(mpw_line, "\n", "\\n")
+ asc_line = string.replace(asc_line, "\r", "\n")
+ asc_line = string.replace(asc_line, "\245", "\\xA5")
+ asc_line = string.replace(asc_line, "\266", "\\xB6")
+ asc_line = string.replace(asc_line, "\304", "\\xC4")
+ asc_line = string.replace(asc_line, "\305", "\\xC5")
+ asc_line = string.replace(asc_line, "\377", "\\xFF")
+ sys.stdout.write(asc_line)
diff --git a/src/3rdparty/freetype/builds/mac/ftlib.prj.xml b/src/3rdparty/freetype/builds/mac/ftlib.prj.xml
new file mode 100644
index 0000000..cbbc45e
--- /dev/null
+++ b/src/3rdparty/freetype/builds/mac/ftlib.prj.xml
@@ -0,0 +1,1194 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<?codewarrior exportversion="1.0.1" ideversion="5.0" ?>
+
+<!DOCTYPE PROJECT [
+<!ELEMENT PROJECT (TARGETLIST, TARGETORDER, GROUPLIST, DESIGNLIST?)>
+<!ELEMENT TARGETLIST (TARGET+)>
+<!ELEMENT TARGET (NAME, SETTINGLIST, FILELIST?, LINKORDER?, SEGMENTLIST?, OVERLAYGROUPLIST?, SUBTARGETLIST?, SUBPROJECTLIST?, FRAMEWORKLIST?, PACKAGEACTIONSLIST?)>
+<!ELEMENT NAME (#PCDATA)>
+<!ELEMENT USERSOURCETREETYPE (#PCDATA)>
+<!ELEMENT PATH (#PCDATA)>
+<!ELEMENT FILELIST (FILE*)>
+<!ELEMENT FILE (PATHTYPE, PATHROOT?, ACCESSPATH?, PATH, PATHFORMAT?, ROOTFILEREF?, FILEKIND?, FILEFLAGS?)>
+<!ELEMENT PATHTYPE (#PCDATA)>
+<!ELEMENT PATHROOT (#PCDATA)>
+<!ELEMENT ACCESSPATH (#PCDATA)>
+<!ELEMENT PATHFORMAT (#PCDATA)>
+<!ELEMENT ROOTFILEREF (PATHTYPE, PATHROOT?, ACCESSPATH?, PATH, PATHFORMAT?)>
+<!ELEMENT FILEKIND (#PCDATA)>
+<!ELEMENT FILEFLAGS (#PCDATA)>
+<!ELEMENT FILEREF (TARGETNAME?, PATHTYPE, PATHROOT?, ACCESSPATH?, PATH, PATHFORMAT?)>
+<!ELEMENT TARGETNAME (#PCDATA)>
+<!ELEMENT SETTINGLIST ((SETTING|PANELDATA)+)>
+<!ELEMENT SETTING (NAME?, (VALUE|(SETTING+)))>
+<!ELEMENT PANELDATA (NAME, VALUE)>
+<!ELEMENT VALUE (#PCDATA)>
+<!ELEMENT LINKORDER (FILEREF*)>
+<!ELEMENT SEGMENTLIST (SEGMENT+)>
+<!ELEMENT SEGMENT (NAME, ATTRIBUTES?, FILEREF*)>
+<!ELEMENT ATTRIBUTES (#PCDATA)>
+<!ELEMENT OVERLAYGROUPLIST (OVERLAYGROUP+)>
+<!ELEMENT OVERLAYGROUP (NAME, BASEADDRESS, OVERLAY*)>
+<!ELEMENT BASEADDRESS (#PCDATA)>
+<!ELEMENT OVERLAY (NAME, FILEREF*)>
+<!ELEMENT SUBTARGETLIST (SUBTARGET+)>
+<!ELEMENT SUBTARGET (TARGETNAME, ATTRIBUTES?, FILEREF?)>
+<!ELEMENT SUBPROJECTLIST (SUBPROJECT+)>
+<!ELEMENT SUBPROJECT (FILEREF, SUBPROJECTTARGETLIST)>
+<!ELEMENT SUBPROJECTTARGETLIST (SUBPROJECTTARGET*)>
+<!ELEMENT SUBPROJECTTARGET (TARGETNAME, ATTRIBUTES?, FILEREF?)>
+<!ELEMENT FRAMEWORKLIST (FRAMEWORK+)>
+<!ELEMENT FRAMEWORK (FILEREF, LIBRARYFILE?, VERSION?)>
+<!ELEMENT PACKAGEACTIONSLIST (PACKAGEACTION+)>
+<!ELEMENT PACKAGEACTION (#PCDATA)>
+<!ELEMENT LIBRARYFILE (FILEREF)>
+<!ELEMENT VERSION (#PCDATA)>
+<!ELEMENT TARGETORDER (ORDEREDTARGET|ORDEREDDESIGN)*>
+<!ELEMENT ORDEREDTARGET (NAME)>
+<!ELEMENT ORDEREDDESIGN (NAME, ORDEREDTARGET+)>
+<!ELEMENT GROUPLIST (GROUP|FILEREF)*>
+<!ELEMENT GROUP (NAME, (GROUP|FILEREF)*)>
+<!ELEMENT DESIGNLIST (DESIGN+)>
+<!ELEMENT DESIGN (NAME, DESIGNDATA)>
+<!ELEMENT DESIGNDATA (#PCDATA)>
+]>
+
+<PROJECT>
+ <TARGETLIST>
+ <TARGET>
+ <NAME>FreeTypeLib</NAME>
+ <SETTINGLIST>
+
+ <!-- Settings for "Source Trees" panel -->
+ <SETTING><NAME>UserSourceTrees</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "Access Paths" panel -->
+ <SETTING><NAME>AlwaysSearchUserPaths</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>InterpretDOSAndUnixPaths</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>RequireFrameworkStyleIncludes</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>SourceRelativeIncludes</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>UserSearchPaths</NAME>
+ <SETTING>
+ <SETTING><NAME>SearchPath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>Recursive</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>FrameworkPath</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>HostFlags</NAME><VALUE>All</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>SearchPath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:::include:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>Recursive</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>FrameworkPath</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>HostFlags</NAME><VALUE>All</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>SearchPath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:::src:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>Recursive</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>FrameworkPath</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>HostFlags</NAME><VALUE>All</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>SearchPath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>::</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>Recursive</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>FrameworkPath</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>HostFlags</NAME><VALUE>All</VALUE></SETTING>
+ </SETTING>
+ </SETTING>
+ <SETTING><NAME>SystemSearchPaths</NAME>
+ <SETTING>
+ <SETTING><NAME>SearchPath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>CodeWarrior</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>Recursive</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>FrameworkPath</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>HostFlags</NAME><VALUE>All</VALUE></SETTING>
+ </SETTING>
+ </SETTING>
+
+ <!-- Settings for "Debugger Runtime" panel -->
+ <SETTING><NAME>MWRuntimeSettings_WorkingDirectory</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWRuntimeSettings_CommandLine</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWRuntimeSettings_HostApplication</NAME>
+ <SETTING><NAME>Path</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>Generic</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Absolute</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>MWRuntimeSettings_EnvVars</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "Target Settings" panel -->
+ <SETTING><NAME>Linker</NAME><VALUE>MacOS PPC Linker</VALUE></SETTING>
+ <SETTING><NAME>PreLinker</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>PostLinker</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Targetname</NAME><VALUE>FreeTypeLib</VALUE></SETTING>
+ <SETTING><NAME>OutputDirectory</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:::objs:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>SaveEntriesUsingRelativePaths</NAME><VALUE>false</VALUE></SETTING>
+
+ <!-- Settings for "File Mappings" panel -->
+ <SETTING><NAME>FileMappings</NAME>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>APPL</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>Appl</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>MMLB</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>Lib Import PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>MPLF</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>Lib Import PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>MWCD</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>RSRC</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.bh</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>Balloon Help</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.c</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.c++</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.cc</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.cp</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.cpp</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.exp</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.h</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>true</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.p</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW Pascal PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.pas</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW Pascal PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.pch</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.pch++</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.ppu</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>MW Pascal PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.r</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>Rez</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE>Rez</VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.s</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>PPCAsm</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>XCOF</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>XCOFF Import PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>docu</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>rsrc</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>shlb</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>PEF Import PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileType</NAME><VALUE>stub</VALUE></SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>PEF Import PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.doc</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>true</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.o</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE>XCOFF Import PPC</VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.ppob</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ <SETTING>
+ <SETTING><NAME>FileExtension</NAME><VALUE>.rsrc</VALUE></SETTING>
+ <SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
+ </SETTING>
+ </SETTING>
+
+ <!-- Settings for "Build Extras" panel -->
+ <SETTING><NAME>CacheModDates</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>DumpBrowserInfo</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>CacheSubprojects</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>UseThirdPartyDebugger</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>BrowserGenerator</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>DebuggerAppPath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>Generic</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Absolute</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>DebuggerCmdLineArgs</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>DebuggerWorkingDir</NAME>
+ <SETTING><NAME>Path</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>Generic</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Absolute</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>CodeCompletionPrefixFileName</NAME><VALUE>MacHeaders.c</VALUE></SETTING>
+ <SETTING><NAME>CodeCompletionMacroFileName</NAME><VALUE>MacOS_Carbon_C++_Macros.h</VALUE></SETTING>
+
+ <!-- Settings for "Debugger Target" panel -->
+ <SETTING><NAME>ConsoleEncoding</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>LogSystemMessages</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>AutoTargetDLLs</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>StopAtWatchpoints</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>PauseWhileRunning</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>PauseInterval</NAME><VALUE>5</VALUE></SETTING>
+ <SETTING><NAME>PauseUIFlags</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>AltExePath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>Generic</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Absolute</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>StopAtTempBPOnLaunch</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>CacheSymbolics</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>TempBPFunctionName</NAME><VALUE>main</VALUE></SETTING>
+ <SETTING><NAME>TempBPType</NAME><VALUE>0</VALUE></SETTING>
+
+ <!-- Settings for "Remote Debug" panel -->
+ <SETTING><NAME>Enabled</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ConnectionName</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>DownloadPath</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>LaunchRemoteApp</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>RemoteAppPath</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>CoreID</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>JTAGClockSpeed</NAME><VALUE>8000</VALUE></SETTING>
+ <SETTING><NAME>IsMultiCore</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>OSDownload</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>UseGlobalOSDownload</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>OSDownloadConnectionName</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>OSDownloadPath</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>AltDownload</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>AltDownloadConnectionName</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "Auto-target" panel -->
+ <SETTING><NAME>OtherExecutables</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "Analyzer Connections" panel -->
+ <SETTING><NAME>AnalyzerConnectionName</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "Custom Keywords" panel -->
+ <SETTING><NAME>CustomColor1</NAME>
+ <SETTING><NAME>Red</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>Green</NAME><VALUE>32767</VALUE></SETTING>
+ <SETTING><NAME>Blue</NAME><VALUE>0</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>CustomColor2</NAME>
+ <SETTING><NAME>Red</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>Green</NAME><VALUE>32767</VALUE></SETTING>
+ <SETTING><NAME>Blue</NAME><VALUE>0</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>CustomColor3</NAME>
+ <SETTING><NAME>Red</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>Green</NAME><VALUE>32767</VALUE></SETTING>
+ <SETTING><NAME>Blue</NAME><VALUE>0</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>CustomColor4</NAME>
+ <SETTING><NAME>Red</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>Green</NAME><VALUE>32767</VALUE></SETTING>
+ <SETTING><NAME>Blue</NAME><VALUE>0</VALUE></SETTING>
+ </SETTING>
+
+ <!-- Settings for "C/C++ Compiler" panel -->
+ <SETTING><NAME>MWFrontEnd_C_cplusplus</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_checkprotos</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_arm</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_trigraphs</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_onlystdkeywords</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_enumsalwaysint</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_ansistrict</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_wchar_type</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_enableexceptions</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_dontreusestrings</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_poolstrings</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_dontinline</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_useRTTI</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_unsignedchars</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_autoinline</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_booltruefalse</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_inlinelevel</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_ecplusplus</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_defer_codegen</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_templateparser</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_c99</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_bottomupinline</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_gcc_extensions</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWFrontEnd_C_instance_manager</NAME><VALUE>0</VALUE></SETTING>
+
+ <!-- Settings for "C/C++ Preprocessor" panel -->
+ <SETTING><NAME>C_CPP_Preprocessor_EmitFile</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>C_CPP_Preprocessor_EmitLine</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>C_CPP_Preprocessor_EmitFullPath</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>C_CPP_Preprocessor_KeepComments</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>C_CPP_Preprocessor_PCHUsesPrefixText</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>C_CPP_Preprocessor_EmitPragmas</NAME><VALUE>true</VALUE></SETTING>
+ <SETTING><NAME>C_CPP_Preprocessor_KeepWhiteSpace</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>C_CPP_Preprocessor_MultiByteEncoding</NAME><VALUE>encASCII_Unicode</VALUE></SETTING>
+ <SETTING><NAME>C_CPP_Preprocessor_PrefixText</NAME><VALUE>/* settings imported from old "C/C++ Language" panel */
+
+#if !__option(precompile)
+#include "ftoption.h" /* was "Prefix file" */
+#endif
+</VALUE></SETTING>
+
+ <!-- Settings for "C/C++ Warnings" panel -->
+ <SETTING><NAME>MWWarning_C_warn_illpragma</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_emptydecl</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_possunwant</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_unusedvar</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_unusedarg</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_extracomma</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_pedantic</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warningerrors</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_hidevirtual</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_implicitconv</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_notinlined</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_structclass</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_missingreturn</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_no_side_effect</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_resultnotused</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_padding</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_impl_i2f_conv</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_impl_f2i_conv</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_impl_s2u_conv</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_illtokenpasting</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_filenamecaps</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_filenamecapssystem</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_undefmacro</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWWarning_C_warn_ptrintconv</NAME><VALUE>0</VALUE></SETTING>
+
+ <!-- Settings for "MacOS Merge Panel" panel -->
+ <SETTING><NAME>MWMerge_MacOS_projectType</NAME><VALUE>Application</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_outputName</NAME><VALUE>Merge Out</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_outputCreator</NAME><VALUE>????</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_outputType</NAME><VALUE>APPL</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_suppressWarning</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_copyFragments</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_copyResources</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_flattenResource</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_flatFileName</NAME><VALUE>a.rsrc</VALUE></SETTING>
+ <SETTING><NAME>MWMerge_MacOS_flatFileOutputPath</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>MWMerge_MacOS_skipResources</NAME>
+ <SETTING><VALUE>DLGX</VALUE></SETTING>
+ <SETTING><VALUE>ckid</VALUE></SETTING>
+ <SETTING><VALUE>Proj</VALUE></SETTING>
+ <SETTING><VALUE>WSPC</VALUE></SETTING>
+ </SETTING>
+
+ <!-- Settings for "Output Flags" panel -->
+ <SETTING><NAME>FileLocked</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>ResourcesMapIsReadOnly</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>PrinterDriverIsMultiFinderCompatible</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Invisible</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>HasBundle</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>NameLocked</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Stationery</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>HasCustomIcon</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Shared</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>HasBeenInited</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>Label</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>Comments</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>HasCustomBadge</NAME><VALUE>false</VALUE></SETTING>
+ <SETTING><NAME>HasRoutingInfo</NAME><VALUE>false</VALUE></SETTING>
+
+ <!-- Settings for "PPC CodeGen" panel -->
+ <SETTING><NAME>MWCodeGen_PPC_structalignment</NAME><VALUE>PPC_mw</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_tracebacktables</NAME><VALUE>None</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_processor</NAME><VALUE>Generic</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_function_align</NAME><VALUE>4</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_tocdata</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_largetoc</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_profiler</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_vectortocdata</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_poolconst</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_peephole</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_readonlystrings</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_linkerpoolsstrings</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_volatileasm</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_schedule</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_altivec</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_altivec_move_block</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_strictIEEEfp</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_fpcontract</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_genfsel</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_PPC_orderedfpcmp</NAME><VALUE>0</VALUE></SETTING>
+
+ <!-- Settings for "PPC CodeGen Mach-O" panel -->
+ <SETTING><NAME>MWCodeGen_MachO_structalignment</NAME><VALUE>PPC_mw</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_profiler_enum</NAME><VALUE>Off</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_processor</NAME><VALUE>Generic</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_function_align</NAME><VALUE>4</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_common</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_boolisint</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_peephole</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_readonlystrings</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_linkerpoolsstrings</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_volatileasm</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_schedule</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_altivec</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_vecmove</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_fp_ieee_strict</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_fpcontract</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_genfsel</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWCodeGen_MachO_fp_cmps_ordered</NAME><VALUE>0</VALUE></SETTING>
+
+ <!-- Settings for "PPC Disassembler" panel -->
+ <SETTING><NAME>MWDisassembler_PPC_showcode</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWDisassembler_PPC_extended</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWDisassembler_PPC_mix</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWDisassembler_PPC_nohex</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWDisassembler_PPC_showdata</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWDisassembler_PPC_showexceptions</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWDisassembler_PPC_showsym</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWDisassembler_PPC_shownames</NAME><VALUE>1</VALUE></SETTING>
+
+ <!-- Settings for "PPC Global Optimizer" panel -->
+ <SETTING><NAME>GlobalOptimizer_PPC_optimizationlevel</NAME><VALUE>Level0</VALUE></SETTING>
+ <SETTING><NAME>GlobalOptimizer_PPC_optfor</NAME><VALUE>Speed</VALUE></SETTING>
+
+ <!-- Settings for "PPC Linker" panel -->
+ <SETTING><NAME>MWLinker_PPC_linksym</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_symfullpath</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_linkmap</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_nolinkwarnings</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_dontdeadstripinitcode</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_permitmultdefs</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_linkmode</NAME><VALUE>Fast</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_code_folding</NAME><VALUE>None</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_initname</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_mainname</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWLinker_PPC_termname</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "PPC Mac OS X Linker" panel -->
+ <SETTING><NAME>MWLinker_MacOSX_linksym</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MacOSX_symfullpath</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MacOSX_nolinkwarnings</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MacOSX_linkmap</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MacOSX_dontdeadstripinitcode</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MacOSX_permitmultdefs</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MacOSX_use_objectivec_semantics</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MacOSX_strip_debug_symbols</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MacOSX_split_segs</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MacOSX_report_msl_overloads</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MacOSX_objects_follow_linkorder</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MacOSX_linkmode</NAME><VALUE>Normal</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MacOSX_exports</NAME><VALUE>ReferencedGlobals</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MacOSX_sortcode</NAME><VALUE>None</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MacOSX_mainname</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MacOSX_initname</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MacOSX_code_folding</NAME><VALUE>None</VALUE></SETTING>
+ <SETTING><NAME>MWLinker_MacOSX_stabsgen</NAME><VALUE>None</VALUE></SETTING>
+
+ <!-- Settings for "PPC Mac OS X Project" panel -->
+ <SETTING><NAME>MWProject_MacOSX_type</NAME><VALUE>Executable</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MacOSX_outfile</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWProject_MacOSX_filecreator</NAME><VALUE>????</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MacOSX_filetype</NAME><VALUE>MEXE</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MacOSX_vmaddress</NAME><VALUE>4096</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MacOSX_usedefaultvmaddr</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MacOSX_flatrsrc</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MacOSX_flatrsrcfilename</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWProject_MacOSX_flatrsrcoutputdir</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>MWProject_MacOSX_installpath</NAME><VALUE>./</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MacOSX_dont_prebind</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MacOSX_flat_namespace</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MacOSX_frameworkversion</NAME><VALUE>A</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MacOSX_currentversion</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MacOSX_flat_oldimpversion</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_MacOSX_AddrMode</NAME><VALUE>1</VALUE></SETTING>
+
+ <!-- Settings for "PPC PEF" panel -->
+ <SETTING><NAME>MWPEF_exports</NAME><VALUE>None</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_libfolder</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_sortcode</NAME><VALUE>None</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_expandbss</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_sharedata</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_olddefversion</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_oldimpversion</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_currentversion</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWPEF_fragmentname</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWPEF_collapsereloads</NAME><VALUE>0</VALUE></SETTING>
+
+ <!-- Settings for "PPC Project" panel -->
+ <SETTING><NAME>MWProject_PPC_type</NAME><VALUE>Library</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_outfile</NAME><VALUE>FreeTypeLib</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_filecreator</NAME><VALUE>????</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_filetype</NAME><VALUE>????</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_size</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_minsize</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_stacksize</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_flags</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_symfilename</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_rsrcname</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_rsrcheader</NAME><VALUE>Native</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_rsrctype</NAME><VALUE>????</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_rsrcid</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_rsrcflags</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_rsrcstore</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_rsrcmerge</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_flatrsrc</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWProject_PPC_flatrsrcoutputdir</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>MWProject_PPC_flatrsrcfilename</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "PPCAsm Panel" panel -->
+ <SETTING><NAME>MWAssembler_PPC_auxheader</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWAssembler_PPC_symmode</NAME><VALUE>Mac</VALUE></SETTING>
+ <SETTING><NAME>MWAssembler_PPC_dialect</NAME><VALUE>PPC</VALUE></SETTING>
+ <SETTING><NAME>MWAssembler_PPC_prefixfile</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWAssembler_PPC_typecheck</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWAssembler_PPC_warnings</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWAssembler_PPC_casesensitive</NAME><VALUE>0</VALUE></SETTING>
+
+ <!-- Settings for "Property List" panel -->
+ <SETTING><NAME>PList_OutputType</NAME><VALUE>File</VALUE></SETTING>
+ <SETTING><NAME>PList_OutputEncoding</NAME><VALUE>UTF-8</VALUE></SETTING>
+ <SETTING><NAME>PList_PListVersion</NAME><VALUE>1.0</VALUE></SETTING>
+ <SETTING><NAME>PList_Prefix</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>PList_FileFilename</NAME><VALUE>Info.plist</VALUE></SETTING>
+ <SETTING><NAME>PList_FileDirectory</NAME>
+ <SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
+ <SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
+ <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
+ </SETTING>
+ <SETTING><NAME>PList_ResourceType</NAME><VALUE>plst</VALUE></SETTING>
+ <SETTING><NAME>PList_ResourceID</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>PList_ResourceName</NAME><VALUE></VALUE></SETTING>
+
+ <!-- Settings for "Rez Compiler" panel -->
+ <SETTING><NAME>MWRez_Language_maxwidth</NAME><VALUE>80</VALUE></SETTING>
+ <SETTING><NAME>MWRez_Language_script</NAME><VALUE>Roman</VALUE></SETTING>
+ <SETTING><NAME>MWRez_Language_alignment</NAME><VALUE>Align1</VALUE></SETTING>
+ <SETTING><NAME>MWRez_Language_filtermode</NAME><VALUE>FilterSkip</VALUE></SETTING>
+ <SETTING><NAME>MWRez_Language_suppresswarnings</NAME><VALUE>0</VALUE></SETTING>
+ <SETTING><NAME>MWRez_Language_escapecontrolchars</NAME><VALUE>1</VALUE></SETTING>
+ <SETTING><NAME>MWRez_Language_prefixname</NAME><VALUE></VALUE></SETTING>
+ <SETTING><NAME>MWRez_Language_filteredtypes</NAME><VALUE>'CODE' 'DATA' 'PICT'</VALUE></SETTING>
+ </SETTINGLIST>
+ <FILELIST>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>ftsystem.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>ftbase.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>ftinit.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>sfnt.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>psnames.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>ftdebug.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>type1cid.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>cff.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>smooth.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>winfnt.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>truetype.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>ftmac.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>psaux.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS></FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>ftcache.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS></FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>ftglyph.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS></FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>type1.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pshinter.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pcf.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>ftraster.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ <FILE>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>ftrend1.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ <FILEKIND>Text</FILEKIND>
+ <FILEFLAGS>Debug</FILEFLAGS>
+ </FILE>
+ </FILELIST>
+ <LINKORDER>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>ftsystem.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>ftbase.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>ftinit.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>sfnt.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>psnames.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>ftdebug.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>type1cid.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>cff.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>smooth.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>winfnt.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>truetype.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>ftmac.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>psaux.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>ftcache.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>ftglyph.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>type1.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pshinter.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pcf.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>ftraster.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>ftrend1.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ </LINKORDER>
+ </TARGET>
+ </TARGETLIST>
+
+ <TARGETORDER>
+ <ORDEREDTARGET><NAME>FreeTypeLib</NAME></ORDEREDTARGET>
+ </TARGETORDER>
+
+ <GROUPLIST>
+ <GROUP><NAME>base</NAME>
+ <FILEREF>
+ <TARGETNAME>FreeTypeLib</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>ftbase.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>FreeTypeLib</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>ftdebug.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>FreeTypeLib</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>ftglyph.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>FreeTypeLib</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>ftinit.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>FreeTypeLib</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>ftsystem.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>FreeTypeLib</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>ftmac.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ </GROUP>
+ <GROUP><NAME>ftmodules</NAME>
+ <FILEREF>
+ <TARGETNAME>FreeTypeLib</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>cff.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>FreeTypeLib</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>ftcache.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>FreeTypeLib</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>psaux.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>FreeTypeLib</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>psnames.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>FreeTypeLib</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>sfnt.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>FreeTypeLib</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>smooth.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>FreeTypeLib</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>truetype.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>FreeTypeLib</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>type1cid.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>FreeTypeLib</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>winfnt.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>FreeTypeLib</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>type1.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>FreeTypeLib</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pshinter.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>FreeTypeLib</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>pcf.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>FreeTypeLib</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>ftraster.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ <FILEREF>
+ <TARGETNAME>FreeTypeLib</TARGETNAME>
+ <PATHTYPE>Name</PATHTYPE>
+ <PATH>ftrend1.c</PATH>
+ <PATHFORMAT>MacOS</PATHFORMAT>
+ </FILEREF>
+ </GROUP>
+ </GROUPLIST>
+
+</PROJECT>
diff --git a/src/3rdparty/freetype/builds/mac/ftmac.c b/src/3rdparty/freetype/builds/mac/ftmac.c
new file mode 100644
index 0000000..6e91a8f
--- /dev/null
+++ b/src/3rdparty/freetype/builds/mac/ftmac.c
@@ -0,0 +1,1600 @@
+/***************************************************************************/
+/* */
+/* ftmac.c */
+/* */
+/* Mac FOND support. Written by just@letterror.com. */
+/* Heavily Fixed by mpsuzuki, George Williams and Sean McBride */
+/* */
+/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by */
+/* Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+ /*
+ Notes
+
+ Mac suitcase files can (and often do!) contain multiple fonts. To
+ support this I use the face_index argument of FT_(Open|New)_Face()
+ functions, and pretend the suitcase file is a collection.
+
+ Warning: fbit and NFNT bitmap resources are not supported yet. In old
+ sfnt fonts, bitmap glyph data for each size is stored in each `NFNT'
+ resources instead of the `bdat' table in the sfnt resource. Therefore,
+ face->num_fixed_sizes is set to 0, because bitmap data in `NFNT'
+ resource is unavailable at present.
+
+ The Mac FOND support works roughly like this:
+
+ - Check whether the offered stream points to a Mac suitcase file. This
+ is done by checking the file type: it has to be 'FFIL' or 'tfil'. The
+ stream that gets passed to our init_face() routine is a stdio stream,
+ which isn't usable for us, since the FOND resources live in the
+ resource fork. So we just grab the stream->pathname field.
+
+ - Read the FOND resource into memory, then check whether there is a
+ TrueType font and/or(!) a Type 1 font available.
+
+ - If there is a Type 1 font available (as a separate `LWFN' file), read
+ its data into memory, massage it slightly so it becomes PFB data, wrap
+ it into a memory stream, load the Type 1 driver and delegate the rest
+ of the work to it by calling FT_Open_Face(). (XXX TODO: after this
+ has been done, the kerning data from the FOND resource should be
+ appended to the face: On the Mac there are usually no AFM files
+ available. However, this is tricky since we need to map Mac char
+ codes to ps glyph names to glyph ID's...)
+
+ - If there is a TrueType font (an `sfnt' resource), read it into memory,
+ wrap it into a memory stream, load the TrueType driver and delegate
+ the rest of the work to it, by calling FT_Open_Face().
+
+ - Some suitcase fonts (notably Onyx) might point the `LWFN' file to
+ itself, even though it doesn't contains `POST' resources. To handle
+ this special case without opening the file an extra time, we just
+ ignore errors from the `LWFN' and fallback to the `sfnt' if both are
+ available.
+ */
+
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+#include FT_INTERNAL_STREAM_H
+
+#if defined( __GNUC__ ) || defined( __IBMC__ )
+ /* This is for Mac OS X. Without redefinition, OS_INLINE */
+ /* expands to `static inline' which doesn't survive the */
+ /* -ansi compilation flag of GCC. */
+#if !HAVE_ANSI_OS_INLINE
+#undef OS_INLINE
+#define OS_INLINE static __inline__
+#endif
+#include <CoreServices/CoreServices.h>
+#include <ApplicationServices/ApplicationServices.h>
+#include <sys/syslimits.h> /* PATH_MAX */
+#else
+#include <Resources.h>
+#include <Fonts.h>
+#include <Endian.h>
+#include <Errors.h>
+#include <Files.h>
+#include <TextUtils.h>
+#endif
+
+#ifndef PATH_MAX
+#define PATH_MAX 1024 /* same with Mac OS X's syslimits.h */
+#endif
+
+#if defined( __MWERKS__ ) && !TARGET_RT_MAC_MACHO
+#include <FSp_fopen.h>
+#endif
+
+#define FT_DEPRECATED_ATTRIBUTE
+
+#include FT_MAC_H
+
+ /* undefine blocking-macros in ftmac.h */
+#undef FT_GetFile_From_Mac_Name
+#undef FT_GetFile_From_Mac_ATS_Name
+#undef FT_New_Face_From_FOND
+#undef FT_New_Face_From_FSSpec
+#undef FT_New_Face_From_FSRef
+
+
+ /* FSSpec functions are deprecated since Mac OS X 10.4 */
+#ifndef HAVE_FSSPEC
+#if TARGET_API_MAC_OS8 || TARGET_API_MAC_CARBON
+#define HAVE_FSSPEC 1
+#else
+#define HAVE_FSSPEC 0
+#endif
+#endif
+
+ /* most FSRef functions were introduced since Mac OS 9 */
+#ifndef HAVE_FSREF
+#if TARGET_API_MAC_OSX
+#define HAVE_FSREF 1
+#else
+#define HAVE_FSREF 0
+#endif
+#endif
+
+ /* QuickDraw is deprecated since Mac OS X 10.4 */
+#ifndef HAVE_QUICKDRAW_CARBON
+#if TARGET_API_MAC_OS8 || TARGET_API_MAC_CARBON
+#define HAVE_QUICKDRAW_CARBON 1
+#else
+#define HAVE_QUICKDRAW_CARBON 0
+#endif
+#endif
+
+ /* AppleTypeService is available since Mac OS X */
+#ifndef HAVE_ATS
+#if TARGET_API_MAC_OSX
+#define HAVE_ATS 1
+#ifndef kATSOptionFlagsUnRestrictedScope /* since Mac OS X 10.1 */
+#define kATSOptionFlagsUnRestrictedScope kATSOptionFlagsDefault
+#endif
+#else
+#define HAVE_ATS 0
+#endif
+#endif
+
+ /* Some portable types are unavailable on legacy SDKs */
+#ifndef MAC_OS_X_VERSION_10_5
+typedef short ResourceIndex;
+#endif
+
+ /* Set PREFER_LWFN to 1 if LWFN (Type 1) is preferred over
+ TrueType in case *both* are available (this is not common,
+ but it *is* possible). */
+#ifndef PREFER_LWFN
+#define PREFER_LWFN 1
+#endif
+
+
+#if !HAVE_QUICKDRAW_CARBON /* QuickDraw is deprecated since Mac OS X 10.4 */
+
+ FT_EXPORT_DEF( FT_Error )
+ FT_GetFile_From_Mac_Name( const char* fontName,
+ FSSpec* pathSpec,
+ FT_Long* face_index )
+ {
+ FT_UNUSED( fontName );
+ FT_UNUSED( pathSpec );
+ FT_UNUSED( face_index );
+
+ return FT_Err_Unimplemented_Feature;
+ }
+
+#else
+
+ FT_EXPORT_DEF( FT_Error )
+ FT_GetFile_From_Mac_Name( const char* fontName,
+ FSSpec* pathSpec,
+ FT_Long* face_index )
+ {
+ OptionBits options = kFMUseGlobalScopeOption;
+
+ FMFontFamilyIterator famIter;
+ OSStatus status = FMCreateFontFamilyIterator( NULL, NULL,
+ options,
+ &famIter );
+ FMFont the_font = 0;
+ FMFontFamily family = 0;
+
+
+ *face_index = 0;
+ while ( status == 0 && !the_font )
+ {
+ status = FMGetNextFontFamily( &famIter, &family );
+ if ( status == 0 )
+ {
+ int stat2;
+ FMFontFamilyInstanceIterator instIter;
+ Str255 famNameStr;
+ char famName[256];
+
+
+ /* get the family name */
+ FMGetFontFamilyName( family, famNameStr );
+ CopyPascalStringToC( famNameStr, famName );
+
+ /* iterate through the styles */
+ FMCreateFontFamilyInstanceIterator( family, &instIter );
+
+ *face_index = 0;
+ stat2 = 0;
+
+ while ( stat2 == 0 && !the_font )
+ {
+ FMFontStyle style;
+ FMFontSize size;
+ FMFont font;
+
+
+ stat2 = FMGetNextFontFamilyInstance( &instIter, &font,
+ &style, &size );
+ if ( stat2 == 0 && size == 0 )
+ {
+ char fullName[256];
+
+
+ /* build up a complete face name */
+ ft_strcpy( fullName, famName );
+ if ( style & bold )
+ ft_strcat( fullName, " Bold" );
+ if ( style & italic )
+ ft_strcat( fullName, " Italic" );
+
+ /* compare with the name we are looking for */
+ if ( ft_strcmp( fullName, fontName ) == 0 )
+ {
+ /* found it! */
+ the_font = font;
+ }
+ else
+ ++(*face_index);
+ }
+ }
+
+ FMDisposeFontFamilyInstanceIterator( &instIter );
+ }
+ }
+
+ FMDisposeFontFamilyIterator( &famIter );
+
+ if ( the_font )
+ {
+ FMGetFontContainer( the_font, pathSpec );
+ return FT_Err_Ok;
+ }
+ else
+ return FT_Err_Unknown_File_Format;
+ }
+
+#endif /* HAVE_QUICKDRAW_CARBON */
+
+
+#if HAVE_ATS
+
+ /* Private function. */
+ /* The FSSpec type has been discouraged for a long time, */
+ /* unfortunately an FSRef replacement API for */
+ /* ATSFontGetFileSpecification() is only available in */
+ /* Mac OS X 10.5 and later. */
+ static OSStatus
+ FT_ATSFontGetFileReference( ATSFontRef ats_font_id,
+ FSRef* ats_font_ref )
+ {
+ OSStatus err;
+
+#if !defined( MAC_OS_X_VERSION_10_5 ) || \
+ MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5
+ FSSpec spec;
+
+
+ err = ATSFontGetFileSpecification( ats_font_id, &spec );
+ if ( noErr == err )
+ err = FSpMakeFSRef( &spec, ats_font_ref );
+#else
+ err = ATSFontGetFileReference( ats_font_id, ats_font_ref );
+#endif
+
+ return err;
+ }
+
+
+ static FT_Error
+ FT_GetFileRef_From_Mac_ATS_Name( const char* fontName,
+ FSRef* ats_font_ref,
+ FT_Long* face_index )
+ {
+ CFStringRef cf_fontName;
+ ATSFontRef ats_font_id;
+
+
+ *face_index = 0;
+
+ cf_fontName = CFStringCreateWithCString( NULL, fontName,
+ kCFStringEncodingMacRoman );
+ ats_font_id = ATSFontFindFromName( cf_fontName,
+ kATSOptionFlagsUnRestrictedScope );
+ CFRelease( cf_fontName );
+
+ if ( ats_font_id == 0 || ats_font_id == 0xFFFFFFFFUL )
+ return FT_Err_Unknown_File_Format;
+
+ if ( noErr != FT_ATSFontGetFileReference( ats_font_id, ats_font_ref ) )
+ return FT_Err_Unknown_File_Format;
+
+ /* face_index calculation by searching preceding fontIDs */
+ /* with same FSRef */
+ {
+ ATSFontRef id2 = ats_font_id - 1;
+ FSRef ref2;
+
+
+ while ( id2 > 0 )
+ {
+ if ( noErr != FT_ATSFontGetFileReference( id2, &ref2 ) )
+ break;
+ if ( noErr != FSCompareFSRefs( ats_font_ref, &ref2 ) )
+ break;
+
+ id2--;
+ }
+ *face_index = ats_font_id - ( id2 + 1 );
+ }
+
+ return FT_Err_Ok;
+ }
+
+#endif
+
+#if !HAVE_ATS
+
+ FT_EXPORT_DEF( FT_Error )
+ FT_GetFilePath_From_Mac_ATS_Name( const char* fontName,
+ UInt8* path,
+ UInt32 maxPathSize,
+ FT_Long* face_index )
+ {
+ FT_UNUSED( fontName );
+ FT_UNUSED( path );
+ FT_UNUSED( maxPathSize );
+ FT_UNUSED( face_index );
+
+ return FT_Err_Unimplemented_Feature;
+ }
+
+#else
+
+ FT_EXPORT_DEF( FT_Error )
+ FT_GetFilePath_From_Mac_ATS_Name( const char* fontName,
+ UInt8* path,
+ UInt32 maxPathSize,
+ FT_Long* face_index )
+ {
+ FSRef ref;
+ FT_Error err;
+
+
+ err = FT_GetFileRef_From_Mac_ATS_Name( fontName, &ref, face_index );
+ if ( FT_Err_Ok != err )
+ return err;
+
+ if ( noErr != FSRefMakePath( &ref, path, maxPathSize ) )
+ return FT_Err_Unknown_File_Format;
+
+ return FT_Err_Ok;
+ }
+
+#endif /* HAVE_ATS */
+
+
+#if !HAVE_FSSPEC || !HAVE_ATS
+
+ FT_EXPORT_DEF( FT_Error )
+ FT_GetFile_From_Mac_ATS_Name( const char* fontName,
+ FSSpec* pathSpec,
+ FT_Long* face_index )
+ {
+ FT_UNUSED( fontName );
+ FT_UNUSED( pathSpec );
+ FT_UNUSED( face_index );
+
+ return FT_Err_Unimplemented_Feature;
+ }
+
+#else
+
+ /* This function is deprecated because FSSpec is deprecated in Mac OS X. */
+ FT_EXPORT_DEF( FT_Error )
+ FT_GetFile_From_Mac_ATS_Name( const char* fontName,
+ FSSpec* pathSpec,
+ FT_Long* face_index )
+ {
+ FSRef ref;
+ FT_Error err;
+
+
+ err = FT_GetFileRef_From_Mac_ATS_Name( fontName, &ref, face_index );
+ if ( FT_Err_Ok != err )
+ return err;
+
+ if ( noErr != FSGetCatalogInfo( &ref, kFSCatInfoNone, NULL, NULL,
+ pathSpec, NULL ) )
+ return FT_Err_Unknown_File_Format;
+
+ return FT_Err_Ok;
+ }
+
+#endif
+
+
+#if defined( __MWERKS__ ) && !TARGET_RT_MAC_MACHO
+
+#define STREAM_FILE( stream ) ( (FT_FILE*)stream->descriptor.pointer )
+
+
+ FT_CALLBACK_DEF( void )
+ ft_FSp_stream_close( FT_Stream stream )
+ {
+ ft_fclose( STREAM_FILE( stream ) );
+
+ stream->descriptor.pointer = NULL;
+ stream->size = 0;
+ stream->base = 0;
+ }
+
+
+ FT_CALLBACK_DEF( unsigned long )
+ ft_FSp_stream_io( FT_Stream stream,
+ unsigned long offset,
+ unsigned char* buffer,
+ unsigned long count )
+ {
+ FT_FILE* file;
+
+
+ file = STREAM_FILE( stream );
+
+ ft_fseek( file, offset, SEEK_SET );
+
+ return (unsigned long)ft_fread( buffer, 1, count, file );
+ }
+
+#endif /* __MWERKS__ && !TARGET_RT_MAC_MACHO */
+
+
+#if HAVE_FSSPEC && !HAVE_FSREF
+
+ /* isDirectory is a dummy to synchronize API with FSPathMakeRef() */
+ static OSErr
+ FT_FSPathMakeSpec( const UInt8* pathname,
+ FSSpec* spec_p,
+ Boolean isDirectory )
+ {
+ const char *p, *q;
+ short vRefNum;
+ long dirID;
+ Str255 nodeName;
+ OSErr err;
+ FT_UNUSED( isDirectory );
+
+
+ p = q = (const char *)pathname;
+ dirID = 0;
+ vRefNum = 0;
+
+ while ( 1 )
+ {
+ int len = ft_strlen( p );
+
+
+ if ( len > 255 )
+ len = 255;
+
+ q = p + len;
+
+ if ( q == p )
+ return 0;
+
+ if ( 255 < ft_strlen( (char *)pathname ) )
+ {
+ while ( p < q && *q != ':' )
+ q--;
+ }
+
+ if ( p < q )
+ *(char *)nodeName = q - p;
+ else if ( ft_strlen( p ) < 256 )
+ *(char *)nodeName = ft_strlen( p );
+ else
+ return errFSNameTooLong;
+
+ ft_strncpy( (char *)nodeName + 1, (char *)p, *(char *)nodeName );
+ err = FSMakeFSSpec( vRefNum, dirID, nodeName, spec_p );
+ if ( err || '\0' == *q )
+ return err;
+
+ vRefNum = spec_p->vRefNum;
+ dirID = spec_p->parID;
+
+ p = q;
+ }
+ }
+
+
+ static OSErr
+ FT_FSpMakePath( const FSSpec* spec_p,
+ UInt8* path,
+ UInt32 maxPathSize )
+ {
+ OSErr err;
+ FSSpec spec = *spec_p;
+ short vRefNum;
+ long dirID;
+ Str255 parDir_name;
+
+
+ FT_MEM_SET( path, 0, maxPathSize );
+ while ( 1 )
+ {
+ int child_namelen = ft_strlen( (char *)path );
+ unsigned char node_namelen = spec.name[0];
+ unsigned char* node_name = spec.name + 1;
+
+
+ if ( node_namelen + child_namelen > maxPathSize )
+ return errFSNameTooLong;
+
+ FT_MEM_MOVE( path + node_namelen + 1, path, child_namelen );
+ FT_MEM_COPY( path, node_name, node_namelen );
+ if ( child_namelen > 0 )
+ path[node_namelen] = ':';
+
+ vRefNum = spec.vRefNum;
+ dirID = spec.parID;
+ parDir_name[0] = '\0';
+ err = FSMakeFSSpec( vRefNum, dirID, parDir_name, &spec );
+ if ( noErr != err || dirID == spec.parID )
+ break;
+ }
+ return noErr;
+ }
+
+#endif /* HAVE_FSSPEC && !HAVE_FSREF */
+
+
+ static OSErr
+ FT_FSPathMakeRes( const UInt8* pathname,
+ ResFileRefNum* res )
+ {
+
+#if HAVE_FSREF
+
+ OSErr err;
+ FSRef ref;
+
+
+ if ( noErr != FSPathMakeRef( pathname, &ref, FALSE ) )
+ return FT_Err_Cannot_Open_Resource;
+
+ /* at present, no support for dfont format */
+ err = FSOpenResourceFile( &ref, 0, NULL, fsRdPerm, res );
+ if ( noErr == err )
+ return err;
+
+ /* fallback to original resource-fork font */
+ *res = FSOpenResFile( &ref, fsRdPerm );
+ err = ResError();
+
+#else
+
+ OSErr err;
+ FSSpec spec;
+
+
+ if ( noErr != FT_FSPathMakeSpec( pathname, &spec, FALSE ) )
+ return FT_Err_Cannot_Open_Resource;
+
+ /* at present, no support for dfont format without FSRef */
+ /* (see above), try original resource-fork font */
+ *res = FSpOpenResFile( &spec, fsRdPerm );
+ err = ResError();
+
+#endif /* HAVE_FSREF */
+
+ return err;
+ }
+
+
+ /* Return the file type for given pathname */
+ static OSType
+ get_file_type_from_path( const UInt8* pathname )
+ {
+
+#if HAVE_FSREF
+
+ FSRef ref;
+ FSCatalogInfo info;
+
+
+ if ( noErr != FSPathMakeRef( pathname, &ref, FALSE ) )
+ return ( OSType ) 0;
+
+ if ( noErr != FSGetCatalogInfo( &ref, kFSCatInfoFinderInfo, &info,
+ NULL, NULL, NULL ) )
+ return ( OSType ) 0;
+
+ return ((FInfo *)(info.finderInfo))->fdType;
+
+#else
+
+ FSSpec spec;
+ FInfo finfo;
+
+
+ if ( noErr != FT_FSPathMakeSpec( pathname, &spec, FALSE ) )
+ return ( OSType ) 0;
+
+ if ( noErr != FSpGetFInfo( &spec, &finfo ) )
+ return ( OSType ) 0;
+
+ return finfo.fdType;
+
+#endif /* HAVE_FSREF */
+
+ }
+
+
+ /* Given a PostScript font name, create the Macintosh LWFN file name. */
+ static void
+ create_lwfn_name( char* ps_name,
+ Str255 lwfn_file_name )
+ {
+ int max = 5, count = 0;
+ FT_Byte* p = lwfn_file_name;
+ FT_Byte* q = (FT_Byte*)ps_name;
+
+
+ lwfn_file_name[0] = 0;
+
+ while ( *q )
+ {
+ if ( ft_isupper( *q ) )
+ {
+ if ( count )
+ max = 3;
+ count = 0;
+ }
+ if ( count < max && ( ft_isalnum( *q ) || *q == '_' ) )
+ {
+ *++p = *q;
+ lwfn_file_name[0]++;
+ count++;
+ }
+ q++;
+ }
+ }
+
+
+ static short
+ count_faces_sfnt( char* fond_data )
+ {
+ /* The count is 1 greater than the value in the FOND. */
+ /* Isn't that cute? :-) */
+
+ return EndianS16_BtoN( *( (short*)( fond_data +
+ sizeof ( FamRec ) ) ) ) + 1;
+ }
+
+
+ static short
+ count_faces_scalable( char* fond_data )
+ {
+ AsscEntry* assoc;
+ FamRec* fond;
+ short i, face, face_all;
+
+
+ fond = (FamRec*)fond_data;
+ face_all = EndianS16_BtoN( *( (short *)( fond_data +
+ sizeof ( FamRec ) ) ) ) + 1;
+ assoc = (AsscEntry*)( fond_data + sizeof ( FamRec ) + 2 );
+ face = 0;
+
+ for ( i = 0; i < face_all; i++ )
+ {
+ if ( 0 == EndianS16_BtoN( assoc[i].fontSize ) )
+ face++;
+ }
+ return face;
+ }
+
+
+ /* Look inside the FOND data, answer whether there should be an SFNT
+ resource, and answer the name of a possible LWFN Type 1 file.
+
+ Thanks to Paul Miller (paulm@profoundeffects.com) for the fix
+ to load a face OTHER than the first one in the FOND!
+ */
+
+ static void
+ parse_fond( char* fond_data,
+ short* have_sfnt,
+ ResID* sfnt_id,
+ Str255 lwfn_file_name,
+ short face_index )
+ {
+ AsscEntry* assoc;
+ AsscEntry* base_assoc;
+ FamRec* fond;
+
+
+ *sfnt_id = 0;
+ *have_sfnt = 0;
+ lwfn_file_name[0] = 0;
+
+ fond = (FamRec*)fond_data;
+ assoc = (AsscEntry*)( fond_data + sizeof ( FamRec ) + 2 );
+ base_assoc = assoc;
+
+ /* the maximum faces in a FOND is 48, size of StyleTable.indexes[] */
+ if ( 47 < face_index )
+ return;
+
+ /* Let's do a little range checking before we get too excited here */
+ if ( face_index < count_faces_sfnt( fond_data ) )
+ {
+ assoc += face_index; /* add on the face_index! */
+
+ /* if the face at this index is not scalable,
+ fall back to the first one (old behavior) */
+ if ( EndianS16_BtoN( assoc->fontSize ) == 0 )
+ {
+ *have_sfnt = 1;
+ *sfnt_id = EndianS16_BtoN( assoc->fontID );
+ }
+ else if ( base_assoc->fontSize == 0 )
+ {
+ *have_sfnt = 1;
+ *sfnt_id = EndianS16_BtoN( base_assoc->fontID );
+ }
+ }
+
+ if ( EndianS32_BtoN( fond->ffStylOff ) )
+ {
+ unsigned char* p = (unsigned char*)fond_data;
+ StyleTable* style;
+ unsigned short string_count;
+ char ps_name[256];
+ unsigned char* names[64];
+ int i;
+
+
+ p += EndianS32_BtoN( fond->ffStylOff );
+ style = (StyleTable*)p;
+ p += sizeof ( StyleTable );
+ string_count = EndianS16_BtoN( *(short*)(p) );
+ p += sizeof ( short );
+
+ for ( i = 0; i < string_count && i < 64; i++ )
+ {
+ names[i] = p;
+ p += names[i][0];
+ p++;
+ }
+
+ {
+ size_t ps_name_len = (size_t)names[0][0];
+
+
+ if ( ps_name_len != 0 )
+ {
+ ft_memcpy(ps_name, names[0] + 1, ps_name_len);
+ ps_name[ps_name_len] = 0;
+ }
+ if ( style->indexes[face_index] > 1 &&
+ style->indexes[face_index] <= FT_MIN( string_count, 64 ) )
+ {
+ unsigned char* suffixes = names[style->indexes[face_index] - 1];
+
+
+ for ( i = 1; i <= suffixes[0]; i++ )
+ {
+ unsigned char* s;
+ size_t j = suffixes[i] - 1;
+
+
+ if ( j < string_count && ( s = names[j] ) != NULL )
+ {
+ size_t s_len = (size_t)s[0];
+
+
+ if ( s_len != 0 && ps_name_len + s_len < sizeof ( ps_name ) )
+ {
+ ft_memcpy( ps_name + ps_name_len, s + 1, s_len );
+ ps_name_len += s_len;
+ ps_name[ps_name_len] = 0;
+ }
+ }
+ }
+ }
+ }
+
+ create_lwfn_name( ps_name, lwfn_file_name );
+ }
+ }
+
+
+ static FT_Error
+ lookup_lwfn_by_fond( const UInt8* path_fond,
+ ConstStr255Param base_lwfn,
+ UInt8* path_lwfn,
+ int path_size )
+ {
+
+#if HAVE_FSREF
+
+ FSRef ref, par_ref;
+ int dirname_len;
+
+
+ /* Pathname for FSRef can be in various formats: HFS, HFS+, and POSIX. */
+ /* We should not extract parent directory by string manipulation. */
+
+ if ( noErr != FSPathMakeRef( path_fond, &ref, FALSE ) )
+ return FT_Err_Invalid_Argument;
+
+ if ( noErr != FSGetCatalogInfo( &ref, kFSCatInfoNone,
+ NULL, NULL, NULL, &par_ref ) )
+ return FT_Err_Invalid_Argument;
+
+ if ( noErr != FSRefMakePath( &par_ref, path_lwfn, path_size ) )
+ return FT_Err_Invalid_Argument;
+
+ if ( ft_strlen( (char *)path_lwfn ) + 1 + base_lwfn[0] > path_size )
+ return FT_Err_Invalid_Argument;
+
+ /* now we have absolute dirname in path_lwfn */
+ if ( path_lwfn[0] == '/' )
+ ft_strcat( (char *)path_lwfn, "/" );
+ else
+ ft_strcat( (char *)path_lwfn, ":" );
+
+ dirname_len = ft_strlen( (char *)path_lwfn );
+ ft_strcat( (char *)path_lwfn, (char *)base_lwfn + 1 );
+ path_lwfn[dirname_len + base_lwfn[0]] = '\0';
+
+ if ( noErr != FSPathMakeRef( path_lwfn, &ref, FALSE ) )
+ return FT_Err_Cannot_Open_Resource;
+
+ if ( noErr != FSGetCatalogInfo( &ref, kFSCatInfoNone,
+ NULL, NULL, NULL, NULL ) )
+ return FT_Err_Cannot_Open_Resource;
+
+ return FT_Err_Ok;
+
+#else
+
+ int i;
+ FSSpec spec;
+
+
+ /* pathname for FSSpec is always HFS format */
+ if ( ft_strlen( (char *)path_fond ) > path_size )
+ return FT_Err_Invalid_Argument;
+
+ ft_strcpy( (char *)path_lwfn, (char *)path_fond );
+
+ i = ft_strlen( (char *)path_lwfn ) - 1;
+ while ( i > 0 && ':' != path_lwfn[i] )
+ i--;
+
+ if ( i + 1 + base_lwfn[0] > path_size )
+ return FT_Err_Invalid_Argument;
+
+ if ( ':' == path_lwfn[i] )
+ {
+ ft_strcpy( (char *)path_lwfn + i + 1, (char *)base_lwfn + 1 );
+ path_lwfn[i + 1 + base_lwfn[0]] = '\0';
+ }
+ else
+ {
+ ft_strcpy( (char *)path_lwfn, (char *)base_lwfn + 1 );
+ path_lwfn[base_lwfn[0]] = '\0';
+ }
+
+ if ( noErr != FT_FSPathMakeSpec( path_lwfn, &spec, FALSE ) )
+ return FT_Err_Cannot_Open_Resource;
+
+ return FT_Err_Ok;
+
+#endif /* HAVE_FSREF */
+
+ }
+
+
+ static short
+ count_faces( Handle fond,
+ const UInt8* pathname )
+ {
+ ResID sfnt_id;
+ short have_sfnt, have_lwfn;
+ Str255 lwfn_file_name;
+ UInt8 buff[PATH_MAX];
+ FT_Error err;
+ short num_faces;
+
+
+ have_sfnt = have_lwfn = 0;
+
+ HLock( fond );
+ parse_fond( *fond, &have_sfnt, &sfnt_id, lwfn_file_name, 0 );
+
+ if ( lwfn_file_name[0] )
+ {
+ err = lookup_lwfn_by_fond( pathname, lwfn_file_name,
+ buff, sizeof ( buff ) );
+ if ( FT_Err_Ok == err )
+ have_lwfn = 1;
+ }
+
+ if ( have_lwfn && ( !have_sfnt || PREFER_LWFN ) )
+ num_faces = 1;
+ else
+ num_faces = count_faces_scalable( *fond );
+
+ HUnlock( fond );
+ return num_faces;
+ }
+
+
+ /* Read Type 1 data from the POST resources inside the LWFN file,
+ return a PFB buffer. This is somewhat convoluted because the FT2
+ PFB parser wants the ASCII header as one chunk, and the LWFN
+ chunks are often not organized that way, so we glue chunks
+ of the same type together. */
+ static FT_Error
+ read_lwfn( FT_Memory memory,
+ ResFileRefNum res,
+ FT_Byte** pfb_data,
+ FT_ULong* size )
+ {
+ FT_Error error = FT_Err_Ok;
+ ResID res_id;
+ unsigned char *buffer, *p, *size_p = NULL;
+ FT_ULong total_size = 0;
+ FT_ULong old_total_size = 0;
+ FT_ULong post_size, pfb_chunk_size;
+ Handle post_data;
+ char code, last_code;
+
+
+ UseResFile( res );
+
+ /* First pass: load all POST resources, and determine the size of */
+ /* the output buffer. */
+ res_id = 501;
+ last_code = -1;
+
+ for (;;)
+ {
+ post_data = Get1Resource( FT_MAKE_TAG( 'P', 'O', 'S', 'T' ),
+ res_id++ );
+ if ( post_data == NULL )
+ break; /* we are done */
+
+ code = (*post_data)[0];
+
+ if ( code != last_code )
+ {
+ if ( code == 5 )
+ total_size += 2; /* just the end code */
+ else
+ total_size += 6; /* code + 4 bytes chunk length */
+ }
+
+ total_size += GetHandleSize( post_data ) - 2;
+ last_code = code;
+
+ /* detect integer overflows */
+ if ( total_size < old_total_size )
+ {
+ error = FT_Err_Array_Too_Large;
+ goto Error;
+ }
+
+ old_total_size = total_size;
+ }
+
+ if ( FT_ALLOC( buffer, (FT_Long)total_size ) )
+ goto Error;
+
+ /* Second pass: append all POST data to the buffer, add PFB fields. */
+ /* Glue all consecutive chunks of the same type together. */
+ p = buffer;
+ res_id = 501;
+ last_code = -1;
+ pfb_chunk_size = 0;
+
+ for (;;)
+ {
+ post_data = Get1Resource( FT_MAKE_TAG( 'P', 'O', 'S', 'T' ),
+ res_id++ );
+ if ( post_data == NULL )
+ break; /* we are done */
+
+ post_size = (FT_ULong)GetHandleSize( post_data ) - 2;
+ code = (*post_data)[0];
+
+ if ( code != last_code )
+ {
+ if ( last_code != -1 )
+ {
+ /* we are done adding a chunk, fill in the size field */
+ if ( size_p != NULL )
+ {
+ *size_p++ = (FT_Byte)( pfb_chunk_size & 0xFF );
+ *size_p++ = (FT_Byte)( ( pfb_chunk_size >> 8 ) & 0xFF );
+ *size_p++ = (FT_Byte)( ( pfb_chunk_size >> 16 ) & 0xFF );
+ *size_p++ = (FT_Byte)( ( pfb_chunk_size >> 24 ) & 0xFF );
+ }
+ pfb_chunk_size = 0;
+ }
+
+ *p++ = 0x80;
+ if ( code == 5 )
+ *p++ = 0x03; /* the end */
+ else if ( code == 2 )
+ *p++ = 0x02; /* binary segment */
+ else
+ *p++ = 0x01; /* ASCII segment */
+
+ if ( code != 5 )
+ {
+ size_p = p; /* save for later */
+ p += 4; /* make space for size field */
+ }
+ }
+
+ ft_memcpy( p, *post_data + 2, post_size );
+ pfb_chunk_size += post_size;
+ p += post_size;
+ last_code = code;
+ }
+
+ *pfb_data = buffer;
+ *size = total_size;
+
+ Error:
+ CloseResFile( res );
+ return error;
+ }
+
+
+ /* Finalizer for a memory stream; gets called by FT_Done_Face().
+ It frees the memory it uses. */
+ static void
+ memory_stream_close( FT_Stream stream )
+ {
+ FT_Memory memory = stream->memory;
+
+
+ FT_FREE( stream->base );
+
+ stream->size = 0;
+ stream->base = 0;
+ stream->close = 0;
+ }
+
+
+ /* Create a new memory stream from a buffer and a size. */
+ static FT_Error
+ new_memory_stream( FT_Library library,
+ FT_Byte* base,
+ FT_ULong size,
+ FT_Stream_CloseFunc close,
+ FT_Stream* astream )
+ {
+ FT_Error error;
+ FT_Memory memory;
+ FT_Stream stream;
+
+
+ if ( !library )
+ return FT_Err_Invalid_Library_Handle;
+
+ if ( !base )
+ return FT_Err_Invalid_Argument;
+
+ *astream = 0;
+ memory = library->memory;
+ if ( FT_NEW( stream ) )
+ goto Exit;
+
+ FT_Stream_OpenMemory( stream, base, size );
+
+ stream->close = close;
+
+ *astream = stream;
+
+ Exit:
+ return error;
+ }
+
+
+ /* Create a new FT_Face given a buffer and a driver name. */
+ static FT_Error
+ open_face_from_buffer( FT_Library library,
+ FT_Byte* base,
+ FT_ULong size,
+ FT_Long face_index,
+ char* driver_name,
+ FT_Face* aface )
+ {
+ FT_Open_Args args;
+ FT_Error error;
+ FT_Stream stream;
+ FT_Memory memory = library->memory;
+
+
+ error = new_memory_stream( library,
+ base,
+ size,
+ memory_stream_close,
+ &stream );
+ if ( error )
+ {
+ FT_FREE( base );
+ return error;
+ }
+
+ args.flags = FT_OPEN_STREAM;
+ args.stream = stream;
+ if ( driver_name )
+ {
+ args.flags = args.flags | FT_OPEN_DRIVER;
+ args.driver = FT_Get_Module( library, driver_name );
+ }
+
+ /* At this point, face_index has served its purpose; */
+ /* whoever calls this function has already used it to */
+ /* locate the correct font data. We should not propagate */
+ /* this index to FT_Open_Face() (unless it is negative). */
+
+ if ( face_index > 0 )
+ face_index = 0;
+
+ error = FT_Open_Face( library, &args, face_index, aface );
+ if ( error == FT_Err_Ok )
+ (*aface)->face_flags &= ~FT_FACE_FLAG_EXTERNAL_STREAM;
+ else
+ FT_Stream_Free( stream, 0 );
+
+ return error;
+ }
+
+
+ /* Create a new FT_Face from a file spec to an LWFN file. */
+ static FT_Error
+ FT_New_Face_From_LWFN( FT_Library library,
+ const UInt8* pathname,
+ FT_Long face_index,
+ FT_Face* aface )
+ {
+ FT_Byte* pfb_data;
+ FT_ULong pfb_size;
+ FT_Error error;
+ ResFileRefNum res;
+
+
+ if ( noErr != FT_FSPathMakeRes( pathname, &res ) )
+ return FT_Err_Cannot_Open_Resource;
+
+ pfb_data = NULL;
+ pfb_size = 0;
+ error = read_lwfn( library->memory, res, &pfb_data, &pfb_size );
+ CloseResFile( res ); /* PFB is already loaded, useless anymore */
+ if ( error )
+ return error;
+
+ return open_face_from_buffer( library,
+ pfb_data,
+ pfb_size,
+ face_index,
+ "type1",
+ aface );
+ }
+
+
+ /* Create a new FT_Face from an SFNT resource, specified by res ID. */
+ static FT_Error
+ FT_New_Face_From_SFNT( FT_Library library,
+ ResID sfnt_id,
+ FT_Long face_index,
+ FT_Face* aface )
+ {
+ Handle sfnt = NULL;
+ FT_Byte* sfnt_data;
+ size_t sfnt_size;
+ FT_Error error = FT_Err_Ok;
+ FT_Memory memory = library->memory;
+ int is_cff;
+
+
+ sfnt = GetResource( FT_MAKE_TAG( 's', 'f', 'n', 't' ), sfnt_id );
+ if ( sfnt == NULL )
+ return FT_Err_Invalid_Handle;
+
+ sfnt_size = (FT_ULong)GetHandleSize( sfnt );
+ if ( FT_ALLOC( sfnt_data, (FT_Long)sfnt_size ) )
+ {
+ ReleaseResource( sfnt );
+ return error;
+ }
+
+ HLock( sfnt );
+ ft_memcpy( sfnt_data, *sfnt, sfnt_size );
+ HUnlock( sfnt );
+ ReleaseResource( sfnt );
+
+ is_cff = sfnt_size > 4 && sfnt_data[0] == 'O' &&
+ sfnt_data[1] == 'T' &&
+ sfnt_data[2] == 'T' &&
+ sfnt_data[3] == 'O';
+
+ return open_face_from_buffer( library,
+ sfnt_data,
+ sfnt_size,
+ face_index,
+ is_cff ? "cff" : "truetype",
+ aface );
+ }
+
+
+ /* Create a new FT_Face from a file spec to a suitcase file. */
+ static FT_Error
+ FT_New_Face_From_Suitcase( FT_Library library,
+ const UInt8* pathname,
+ FT_Long face_index,
+ FT_Face* aface )
+ {
+ FT_Error error = FT_Err_Cannot_Open_Resource;
+ ResFileRefNum res_ref;
+ ResourceIndex res_index;
+ Handle fond;
+ short num_faces_in_res, num_faces_in_fond;
+
+
+ if ( noErr != FT_FSPathMakeRes( pathname, &res_ref ) )
+ return FT_Err_Cannot_Open_Resource;
+
+ UseResFile( res_ref );
+ if ( ResError() )
+ return FT_Err_Cannot_Open_Resource;
+
+ num_faces_in_res = 0;
+ for ( res_index = 1; ; ++res_index )
+ {
+ fond = Get1IndResource( FT_MAKE_TAG( 'F', 'O', 'N', 'D' ),
+ res_index );
+ if ( ResError() )
+ break;
+
+ num_faces_in_fond = count_faces( fond, pathname );
+ num_faces_in_res += num_faces_in_fond;
+
+ if ( 0 <= face_index && face_index < num_faces_in_fond && error )
+ error = FT_New_Face_From_FOND( library, fond, face_index, aface );
+
+ face_index -= num_faces_in_fond;
+ }
+
+ CloseResFile( res_ref );
+ if ( FT_Err_Ok == error && NULL != aface )
+ (*aface)->num_faces = num_faces_in_res;
+ return error;
+ }
+
+
+ /* documentation is in ftmac.h */
+
+ FT_EXPORT_DEF( FT_Error )
+ FT_New_Face_From_FOND( FT_Library library,
+ Handle fond,
+ FT_Long face_index,
+ FT_Face* aface )
+ {
+ short have_sfnt, have_lwfn = 0;
+ ResID sfnt_id, fond_id;
+ OSType fond_type;
+ Str255 fond_name;
+ Str255 lwfn_file_name;
+ UInt8 path_lwfn[PATH_MAX];
+ OSErr err;
+ FT_Error error = FT_Err_Ok;
+
+
+ GetResInfo( fond, &fond_id, &fond_type, fond_name );
+ if ( ResError() != noErr ||
+ fond_type != FT_MAKE_TAG( 'F', 'O', 'N', 'D' ) )
+ return FT_Err_Invalid_File_Format;
+
+ HLock( fond );
+ parse_fond( *fond, &have_sfnt, &sfnt_id, lwfn_file_name, face_index );
+ HUnlock( fond );
+
+ if ( lwfn_file_name[0] )
+ {
+ ResFileRefNum res;
+
+
+ res = HomeResFile( fond );
+ if ( noErr != ResError() )
+ goto found_no_lwfn_file;
+
+#if HAVE_FSREF
+
+ {
+ UInt8 path_fond[PATH_MAX];
+ FSRef ref;
+
+
+ err = FSGetForkCBInfo( res, kFSInvalidVolumeRefNum,
+ NULL, NULL, NULL, &ref, NULL );
+ if ( noErr != err )
+ goto found_no_lwfn_file;
+
+ err = FSRefMakePath( &ref, path_fond, sizeof ( path_fond ) );
+ if ( noErr != err )
+ goto found_no_lwfn_file;
+
+ error = lookup_lwfn_by_fond( path_fond, lwfn_file_name,
+ path_lwfn, sizeof ( path_lwfn ) );
+ if ( FT_Err_Ok == error )
+ have_lwfn = 1;
+ }
+
+#elif HAVE_FSSPEC
+
+ {
+ UInt8 path_fond[PATH_MAX];
+ FCBPBRec pb;
+ Str255 fond_file_name;
+ FSSpec spec;
+
+
+ FT_MEM_SET( &spec, 0, sizeof ( FSSpec ) );
+ FT_MEM_SET( &pb, 0, sizeof ( FCBPBRec ) );
+
+ pb.ioNamePtr = fond_file_name;
+ pb.ioVRefNum = 0;
+ pb.ioRefNum = res;
+ pb.ioFCBIndx = 0;
+
+ err = PBGetFCBInfoSync( &pb );
+ if ( noErr != err )
+ goto found_no_lwfn_file;
+
+ err = FSMakeFSSpec( pb.ioFCBVRefNum, pb.ioFCBParID,
+ fond_file_name, &spec );
+ if ( noErr != err )
+ goto found_no_lwfn_file;
+
+ err = FT_FSpMakePath( &spec, path_fond, sizeof ( path_fond ) );
+ if ( noErr != err )
+ goto found_no_lwfn_file;
+
+ error = lookup_lwfn_by_fond( path_fond, lwfn_file_name,
+ path_lwfn, sizeof ( path_lwfn ) );
+ if ( FT_Err_Ok == error )
+ have_lwfn = 1;
+ }
+
+#endif /* HAVE_FSREF, HAVE_FSSPEC */
+
+ }
+
+ if ( have_lwfn && ( !have_sfnt || PREFER_LWFN ) )
+ error = FT_New_Face_From_LWFN( library,
+ path_lwfn,
+ face_index,
+ aface );
+ else
+ error = FT_Err_Unknown_File_Format;
+
+ found_no_lwfn_file:
+ if ( have_sfnt && FT_Err_Ok != error )
+ error = FT_New_Face_From_SFNT( library,
+ sfnt_id,
+ face_index,
+ aface );
+
+ return error;
+ }
+
+
+ /* Common function to load a new FT_Face from a resource file. */
+ static FT_Error
+ FT_New_Face_From_Resource( FT_Library library,
+ const UInt8* pathname,
+ FT_Long face_index,
+ FT_Face* aface )
+ {
+ OSType file_type;
+ FT_Error error;
+
+
+ /* LWFN is a (very) specific file format, check for it explicitly */
+ file_type = get_file_type_from_path( pathname );
+ if ( file_type == FT_MAKE_TAG( 'L', 'W', 'F', 'N' ) )
+ return FT_New_Face_From_LWFN( library, pathname, face_index, aface );
+
+ /* Otherwise the file type doesn't matter (there are more than */
+ /* `FFIL' and `tfil'). Just try opening it as a font suitcase; */
+ /* if it works, fine. */
+
+ error = FT_New_Face_From_Suitcase( library, pathname, face_index, aface );
+ if ( error == 0 )
+ return error;
+
+ /* let it fall through to normal loader (.ttf, .otf, etc.); */
+ /* we signal this by returning no error and no FT_Face */
+ *aface = NULL;
+ return 0;
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_New_Face */
+ /* */
+ /* <Description> */
+ /* This is the Mac-specific implementation of FT_New_Face. In */
+ /* addition to the standard FT_New_Face() functionality, it also */
+ /* accepts pathnames to Mac suitcase files. For further */
+ /* documentation see the original FT_New_Face() in freetype.h. */
+ /* */
+ FT_EXPORT_DEF( FT_Error )
+ FT_New_Face( FT_Library library,
+ const char* pathname,
+ FT_Long face_index,
+ FT_Face* aface )
+ {
+ FT_Open_Args args;
+ FT_Error error;
+
+
+ /* test for valid `library' and `aface' delayed to FT_Open_Face() */
+ if ( !pathname )
+ return FT_Err_Invalid_Argument;
+
+ error = FT_Err_Ok;
+ *aface = NULL;
+
+ /* try resourcefork based font: LWFN, FFIL */
+ error = FT_New_Face_From_Resource( library, (UInt8 *)pathname,
+ face_index, aface );
+ if ( error != 0 || *aface != NULL )
+ return error;
+
+ /* let it fall through to normal loader (.ttf, .otf, etc.) */
+ args.flags = FT_OPEN_PATHNAME;
+ args.pathname = (char*)pathname;
+ return FT_Open_Face( library, &args, face_index, aface );
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_New_Face_From_FSRef */
+ /* */
+ /* <Description> */
+ /* FT_New_Face_From_FSRef is identical to FT_New_Face except it */
+ /* accepts an FSRef instead of a path. */
+ /* */
+ /* This function is deprecated because Carbon data types (FSRef) */
+ /* are not cross-platform, and thus not suitable for the freetype API. */
+ FT_EXPORT_DEF( FT_Error )
+ FT_New_Face_From_FSRef( FT_Library library,
+ const FSRef* ref,
+ FT_Long face_index,
+ FT_Face* aface )
+ {
+
+#if !HAVE_FSREF
+
+ FT_UNUSED( library );
+ FT_UNUSED( ref );
+ FT_UNUSED( face_index );
+ FT_UNUSED( aface );
+
+ return FT_Err_Unimplemented_Feature;
+
+#else
+
+ FT_Error error;
+ FT_Open_Args args;
+ OSErr err;
+ UInt8 pathname[PATH_MAX];
+
+
+ if ( !ref )
+ return FT_Err_Invalid_Argument;
+
+ err = FSRefMakePath( ref, pathname, sizeof ( pathname ) );
+ if ( err )
+ error = FT_Err_Cannot_Open_Resource;
+
+ error = FT_New_Face_From_Resource( library, pathname, face_index, aface );
+ if ( error != 0 || *aface != NULL )
+ return error;
+
+ /* fallback to datafork font */
+ args.flags = FT_OPEN_PATHNAME;
+ args.pathname = (char*)pathname;
+ return FT_Open_Face( library, &args, face_index, aface );
+
+#endif /* HAVE_FSREF */
+
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_New_Face_From_FSSpec */
+ /* */
+ /* <Description> */
+ /* FT_New_Face_From_FSSpec is identical to FT_New_Face except it */
+ /* accepts an FSSpec instead of a path. */
+ /* */
+ /* This function is deprecated because Carbon data types (FSSpec) */
+ /* are not cross-platform, and thus not suitable for the freetype API. */
+ FT_EXPORT_DEF( FT_Error )
+ FT_New_Face_From_FSSpec( FT_Library library,
+ const FSSpec* spec,
+ FT_Long face_index,
+ FT_Face* aface )
+ {
+
+#if HAVE_FSREF
+
+ FSRef ref;
+
+
+ if ( !spec || FSpMakeFSRef( spec, &ref ) != noErr )
+ return FT_Err_Invalid_Argument;
+ else
+ return FT_New_Face_From_FSRef( library, &ref, face_index, aface );
+
+#elif HAVE_FSSPEC
+
+ FT_Error error;
+ FT_Open_Args args;
+ OSErr err;
+ UInt8 pathname[PATH_MAX];
+
+
+ if ( !spec )
+ return FT_Err_Invalid_Argument;
+
+ err = FT_FSpMakePath( spec, pathname, sizeof ( pathname ) );
+ if ( err )
+ error = FT_Err_Cannot_Open_Resource;
+
+ error = FT_New_Face_From_Resource( library, pathname, face_index, aface );
+ if ( error != 0 || *aface != NULL )
+ return error;
+
+ /* fallback to datafork font */
+ args.flags = FT_OPEN_PATHNAME;
+ args.pathname = (char*)pathname;
+ return FT_Open_Face( library, &args, face_index, aface );
+
+#else
+
+ FT_UNUSED( library );
+ FT_UNUSED( spec );
+ FT_UNUSED( face_index );
+ FT_UNUSED( aface );
+
+ return FT_Err_Unimplemented_Feature;
+
+#endif /* HAVE_FSREF, HAVE_FSSPEC */
+
+ }
+
+
+/* END */
diff --git a/src/3rdparty/freetype/builds/modules.mk b/src/3rdparty/freetype/builds/modules.mk
new file mode 100644
index 0000000..c4a882c
--- /dev/null
+++ b/src/3rdparty/freetype/builds/modules.mk
@@ -0,0 +1,79 @@
+#
+# FreeType 2 modules sub-Makefile
+#
+
+
+# Copyright 1996-2000, 2003, 2006, 2008 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+# DO NOT INVOKE THIS MAKEFILE DIRECTLY! IT IS MEANT TO BE INCLUDED BY
+# OTHER MAKEFILES.
+
+
+# This file is in charge of handling the generation of the modules list
+# file.
+
+
+# Build the modules list.
+#
+$(FTMODULE_H): $(MODULES_CFG)
+ $(FTMODULE_H_INIT)
+ $(FTMODULE_H_CREATE)
+ $(FTMODULE_H_DONE)
+
+ifneq ($(findstring $(PLATFORM),dos win32 win16 os2),)
+ OPEN_MODULE := @echo$(space)
+ CLOSE_MODULE := >> $(subst /,$(SEP),$(FTMODULE_H))
+ REMOVE_MODULE := @-$(DELETE) $(subst /,$(SEP),$(FTMODULE_H))
+else
+ OPEN_MODULE := @echo "
+ CLOSE_MODULE := " >> $(FTMODULE_H)
+ REMOVE_MODULE := @-$(DELETE) $(FTMODULE_H)
+endif
+
+
+define FTMODULE_H_INIT
+$(REMOVE_MODULE)
+@-echo Generating modules list in $(FTMODULE_H)...
+$(OPEN_MODULE)/* This is a generated file. */$(CLOSE_MODULE)
+endef
+
+# It is no mistake that the final closing parenthesis is on the
+# next line -- it produces proper newlines during the expansion
+# of `foreach'.
+#
+define FTMODULE_H_CREATE
+$(foreach COMMAND,$(FTMODULE_H_COMMANDS),$($(COMMAND))
+)
+endef
+
+define FTMODULE_H_DONE
+$(OPEN_MODULE)/* EOF */$(CLOSE_MODULE)
+@echo done.
+endef
+
+
+# $(OPEN_DRIVER) & $(CLOSE_DRIVER) are used to specify a given font driver
+# in the `module.mk' rules file.
+#
+OPEN_DRIVER := $(OPEN_MODULE)FT_USE_MODULE(
+CLOSE_DRIVER := )$(CLOSE_MODULE)
+
+ECHO_DRIVER := @echo "* module:$(space)
+ECHO_DRIVER_DESC := (
+ECHO_DRIVER_DONE := )"
+
+# Each `module.mk' in the `src/*' subdirectories adds a variable with
+# commands to $(FTMODULE_H_COMMANDS). Note that we can't use SRC_DIR here.
+#
+-include $(patsubst %,$(TOP_DIR)/src/%/module.mk,$(MODULES))
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/newline b/src/3rdparty/freetype/builds/newline
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/src/3rdparty/freetype/builds/newline
@@ -0,0 +1 @@
+
diff --git a/src/3rdparty/freetype/builds/os2/detect.mk b/src/3rdparty/freetype/builds/os2/detect.mk
new file mode 100644
index 0000000..47a40a2
--- /dev/null
+++ b/src/3rdparty/freetype/builds/os2/detect.mk
@@ -0,0 +1,73 @@
+#
+# FreeType 2 configuration file to detect an OS/2 host platform.
+#
+
+
+# Copyright 1996-2000, 2003, 2006 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+.PHONY: setup
+
+
+ifeq ($(PLATFORM),ansi)
+
+ ifdef OS2_SHELL
+
+ PLATFORM := os2
+
+ endif # test OS2_SHELL
+endif
+
+ifeq ($(PLATFORM),os2)
+
+ COPY := copy
+ DELETE := del
+ CAT := type
+ SEP := $(BACKSLASH)
+
+ # gcc-emx by default
+ CONFIG_FILE := os2-gcc.mk
+
+ # additionally, we provide hooks for various other compilers
+ #
+ ifneq ($(findstring visualage,$(MAKECMDGOALS)),) # Visual Age C++
+ CONFIG_FILE := os2-icc.mk
+ CC := icc
+ visualage: setup
+ .PHONY: visualage
+ endif
+
+ ifneq ($(findstring watcom,$(MAKECMDGOALS)),) # Watcom C/C++
+ CONFIG_FILE := os2-wat.mk
+ CC := wcc386
+ watcom: setup
+ .PHONY: watcom
+ endif
+
+ ifneq ($(findstring borlandc,$(MAKECMDGOALS)),) # Borland C++ 32-bit
+ CONFIG_FILE := os2-bcc.mk
+ CC := bcc32
+ borlandc: setup
+ .PHONY: borlandc
+ endif
+
+ ifneq ($(findstring devel,$(MAKECMDGOALS)),) # development target
+ CONFIG_FILE := os2-dev.mk
+ CC := gcc
+ devel: setup
+ .PHONY: devel
+ endif
+
+ setup: dos_setup
+
+endif # test PLATFORM os2
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/os2/os2-def.mk b/src/3rdparty/freetype/builds/os2/os2-def.mk
new file mode 100644
index 0000000..01cda92
--- /dev/null
+++ b/src/3rdparty/freetype/builds/os2/os2-def.mk
@@ -0,0 +1,44 @@
+#
+# FreeType 2 OS/2 specific definitions
+#
+
+
+# Copyright 1996-2000, 2003, 2005, 2006 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+DELETE := del
+CAT := type
+SEP := $(strip \ )
+BUILD_DIR := $(TOP_DIR)/builds/os2
+PLATFORM := os2
+
+# The executable file extension (for tools), *with* leading dot.
+#
+E := .exe
+
+# The directory where all library files are placed.
+#
+# By default, this is the same as $(OBJ_DIR); however, this can be changed
+# to suit particular needs.
+#
+LIB_DIR := $(OBJ_DIR)
+
+# The name of the final library file. Note that the DOS-specific Makefile
+# uses a shorter (8.3) name.
+#
+LIBRARY := $(PROJECT)
+
+
+# The NO_OUTPUT macro is used to ignore the output of commands.
+#
+NO_OUTPUT = 2> nul
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/os2/os2-dev.mk b/src/3rdparty/freetype/builds/os2/os2-dev.mk
new file mode 100644
index 0000000..83da8de
--- /dev/null
+++ b/src/3rdparty/freetype/builds/os2/os2-dev.mk
@@ -0,0 +1,30 @@
+#
+# FreeType 2 configuration rules for OS/2 + GCC
+#
+# Development version without optimizations.
+#
+
+
+# Copyright 1996-2000, 2003, 2006 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+DEVEL_DIR := $(TOP_DIR)/devel
+
+# include OS/2-specific definitions
+include $(TOP_DIR)/builds/os2/os2-def.mk
+
+# include gcc-specific definitions
+include $(TOP_DIR)/builds/compiler/gcc-dev.mk
+
+# include linking instructions
+include $(TOP_DIR)/builds/link_dos.mk
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/os2/os2-gcc.mk b/src/3rdparty/freetype/builds/os2/os2-gcc.mk
new file mode 100644
index 0000000..446073e
--- /dev/null
+++ b/src/3rdparty/freetype/builds/os2/os2-gcc.mk
@@ -0,0 +1,26 @@
+#
+# FreeType 2 configuration rules for the OS/2 + gcc
+#
+
+
+# Copyright 1996-2000 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+# include OS/2-specific definitions
+include $(TOP_DIR)/builds/os2/os2-def.mk
+
+# include gcc-specific definitions
+include $(TOP_DIR)/builds/compiler/gcc.mk
+
+# include linking instructions
+include $(TOP_DIR)/builds/link_dos.mk
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/symbian/bld.inf b/src/3rdparty/freetype/builds/symbian/bld.inf
new file mode 100644
index 0000000..e34b03c
--- /dev/null
+++ b/src/3rdparty/freetype/builds/symbian/bld.inf
@@ -0,0 +1,66 @@
+//
+// FreeType 2 project for the symbian platform
+//
+
+// Copyright 2008 by
+// David Turner, Robert Wilhelm, and Werner Lemberg.
+//
+// This file is part of the FreeType project, and may only be used, modified,
+// and distributed under the terms of the FreeType project license,
+// LICENSE.TXT. By continuing to use, modify, or distribute this file you
+// indicate that you have read the license and understand and accept it
+// fully.
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_MMPFILES
+freetype.mmp
+
+PRJ_EXPORTS
+../../include/ft2build.h
+../../include/freetype/config/ftconfig.h freetype/config/ftconfig.h
+../../include/freetype/config/ftheader.h freetype/config/ftheader.h
+../../include/freetype/config/ftmodule.h freetype/config/ftmodule.h
+../../include/freetype/config/ftoption.h freetype/config/ftoption.h
+../../include/freetype/config/ftstdlib.h freetype/config/ftstdlib.h
+../../include/freetype/freetype.h freetype/freetype.h
+../../include/freetype/ftbbox.h freetype/ftbbox.h
+../../include/freetype/ftbdf.h freetype/ftbdf.h
+../../include/freetype/ftbitmap.h freetype/ftbitmap.h
+../../include/freetype/ftcache.h freetype/ftcache.h
+../../include/freetype/ftchapters.h freetype/ftchapters.h
+../../include/freetype/fterrdef.h freetype/fterrdef.h
+../../include/freetype/fterrors.h freetype/fterrors.h
+../../include/freetype/ftgasp.h freetype/ftgasp.h
+../../include/freetype/ftglyph.h freetype/ftglyph.h
+../../include/freetype/ftgxval.h freetype/ftgxval.h
+../../include/freetype/ftgzip.h freetype/ftgzip.h
+../../include/freetype/ftimage.h freetype/ftimage.h
+../../include/freetype/ftincrem.h freetype/ftincrem.h
+../../include/freetype/ftlcdfil.h freetype/ftlcdfil.h
+../../include/freetype/ftlist.h freetype/ftlist.h
+../../include/freetype/ftlzw.h freetype/ftlzw.h
+../../include/freetype/ftmac.h freetype/ftmac.h
+../../include/freetype/ftmm.h freetype/ftmm.h
+../../include/freetype/ftmodapi.h freetype/ftmodapi.h
+../../include/freetype/ftmoderr.h freetype/ftmoderr.h
+../../include/freetype/ftotval.h freetype/ftotval.h
+../../include/freetype/ftoutln.h freetype/ftoutln.h
+../../include/freetype/ftpfr.h freetype/ftpfr.h
+../../include/freetype/ftrender.h freetype/ftrender.h
+../../include/freetype/ftsizes.h freetype/ftsizes.h
+../../include/freetype/ftsnames.h freetype/ftsnames.h
+../../include/freetype/ftstroke.h freetype/ftstroke.h
+../../include/freetype/ftsynth.h freetype/ftsynth.h
+../../include/freetype/ftsystem.h freetype/ftsystem.h
+../../include/freetype/fttrigon.h freetype/fttrigon.h
+../../include/freetype/fttypes.h freetype/fttypes.h
+../../include/freetype/ftwinfnt.h freetype/ftwinfnt.h
+../../include/freetype/ftxf86.h freetype/ftxf86.h
+../../include/freetype/t1tables.h freetype/t1tables.h
+../../include/freetype/ttnameid.h freetype/ttnameid.h
+../../include/freetype/tttables.h freetype/tttables.h
+../../include/freetype/tttags.h freetype/tttags.h
+../../include/freetype/ttunpat.h freetype/ttunpat.h
+
diff --git a/src/3rdparty/freetype/builds/symbian/freetype.mmp b/src/3rdparty/freetype/builds/symbian/freetype.mmp
new file mode 100644
index 0000000..259ac87
--- /dev/null
+++ b/src/3rdparty/freetype/builds/symbian/freetype.mmp
@@ -0,0 +1,136 @@
+//
+// FreeType 2 makefile for the symbian platform
+//
+
+// Copyright 2008 by
+// David Turner, Robert Wilhelm, and Werner Lemberg.
+//
+// This file is part of the FreeType project, and may only be used, modified,
+// and distributed under the terms of the FreeType project license,
+// LICENSE.TXT. By continuing to use, modify, or distribute this file you
+// indicate that you have read the license and understand and accept it
+// fully.
+
+target freetype.lib
+targettype lib
+
+macro NDEBUG
+macro FT2_BUILD_LIBRARY
+
+sourcepath ..\..\src\autofit
+
+source autofit.c
+
+sourcepath ..\..\src\base
+
+source ftbase.c
+source ftbbox.c
+source ftbdf.c
+source ftbitmap.c
+source ftgasp.c
+source ftglyph.c
+source ftinit.c
+source ftmm.c
+source ftpfr.c
+source ftstroke.c
+source ftsynth.c
+source ftsystem.c
+source fttype1.c
+source ftwinfnt.c
+
+sourcepath ..\..\src\bdf
+
+source bdf.c
+
+sourcepath ..\..\src\cache
+
+source ftcache.c
+
+sourcepath ..\..\src\cff
+
+source cff.c
+
+sourcepath ..\..\src\cid
+
+source type1cid.c
+
+sourcepath ..\..\src\gzip
+
+source ftgzip.c
+
+sourcepath ..\..\src\lzw
+
+source ftlzw.c
+
+sourcepath ..\..\src\pcf
+
+source pcf.c
+
+sourcepath ..\..\src\pfr
+
+source pfr.c
+
+sourcepath ..\..\src\psaux
+
+source psaux.c
+
+sourcepath ..\..\src\pshinter
+
+source pshinter.c
+
+sourcepath ..\..\src\psnames
+
+source psmodule.c
+
+sourcepath ..\..\src\raster
+
+source raster.c
+
+sourcepath ..\..\src\sfnt
+
+source sfnt.c
+
+sourcepath ..\..\src\smooth
+
+source smooth.c
+
+sourcepath ..\..\src\truetype
+
+source truetype.c
+
+sourcepath ..\..\src\type1
+
+source type1.c
+
+sourcepath ..\..\src\type42
+
+source type42.c
+
+sourcepath ..\..\src\winfonts
+
+source winfnt.c
+
+
+systeminclude ..\..\include
+systeminclude \epoc32\include\stdapis
+userinclude ..\..\src\autofit
+userinclude ..\..\src\bdf
+userinclude ..\..\src\cache
+userinclude ..\..\src\cff
+userinclude ..\..\src\cid
+userinclude ..\..\src\gxvalid
+userinclude ..\..\src\gzip
+userinclude ..\..\src\lzw
+userinclude ..\..\src\otvalid
+userinclude ..\..\src\pcf
+userinclude ..\..\src\pfr
+userinclude ..\..\src\psaux
+userinclude ..\..\src\pshinter
+userinclude ..\..\src\psnames
+userinclude ..\..\src\raster
+userinclude ..\..\src\sfnt
+userinclude ..\..\src\smooth
+userinclude ..\..\src\truetype
+userinclude ..\..\src\type1
+userinclude ..\..\src\type42
+userinclude ..\..\src\winfonts
diff --git a/src/3rdparty/freetype/builds/toplevel.mk b/src/3rdparty/freetype/builds/toplevel.mk
new file mode 100644
index 0000000..57b5ca5
--- /dev/null
+++ b/src/3rdparty/freetype/builds/toplevel.mk
@@ -0,0 +1,245 @@
+#
+# FreeType build system -- top-level sub-Makefile
+#
+
+
+# Copyright 1996-2000, 2001, 2003, 2006, 2008 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+# This file is designed for GNU Make, do not use it with another Make tool!
+#
+# It works as follows:
+#
+# - When invoked for the first time, this Makefile includes the rules found
+# in `PROJECT/builds/detect.mk'. They are in charge of detecting the
+# current platform.
+#
+# A summary of the detection is displayed, and the file `config.mk' is
+# created in the current directory.
+#
+# - When invoked later, this Makefile includes the rules found in
+# `config.mk'. This sub-Makefile defines some system-specific variables
+# (like compiler, compilation flags, object suffix, etc.), then includes
+# the rules found in `PROJECT/builds/PROJECT.mk', used to build the
+# library.
+#
+# See the comments in `builds/detect.mk' and `builds/PROJECT.mk' for more
+# details on host platform detection and library builds.
+
+
+.PHONY: all dist distclean modules setup
+
+
+# The `space' variable is used to avoid trailing spaces in defining the
+# `T' variable later.
+#
+empty :=
+space := $(empty) $(empty)
+
+
+# The main configuration file, defining the `XXX_MODULES' variables. We
+# prefer a `modules.cfg' file in OBJ_DIR over TOP_DIR.
+#
+ifndef MODULES_CFG
+ MODULES_CFG := $(TOP_DIR)/modules.cfg
+ ifneq ($(wildcard $(OBJ_DIR)/modules.cfg),)
+ MODULES_CFG := $(OBJ_DIR)/modules.cfg
+ endif
+endif
+
+
+# FTMODULE_H, as its name suggests, indicates where the FreeType module
+# class file resides.
+#
+FTMODULE_H ?= $(OBJ_DIR)/ftmodule.h
+
+
+include $(MODULES_CFG)
+
+
+# The list of modules we are using.
+#
+MODULES := $(FONT_MODULES) \
+ $(HINTING_MODULES) \
+ $(RASTER_MODULES) \
+ $(AUX_MODULES)
+
+
+CONFIG_MK ?= config.mk
+
+# If no configuration sub-makefile is present, or if `setup' is the target
+# to be built, run the auto-detection rules to figure out which
+# configuration rules file to use.
+#
+# Note that the configuration file is put in the current directory, which is
+# not necessarily $(TOP_DIR).
+
+# If `config.mk' is not present, set `check_platform'.
+#
+ifeq ($(wildcard $(CONFIG_MK)),)
+ check_platform := 1
+endif
+
+# If `setup' is one of the targets requested, set `check_platform'.
+#
+ifneq ($(findstring setup,$(MAKECMDGOALS)),)
+ check_platform := 1
+endif
+
+# Include the automatic host platform detection rules when we need to
+# check the platform.
+#
+ifdef check_platform
+
+ all modules: setup
+
+ include $(TOP_DIR)/builds/detect.mk
+
+ # This rule makes sense for Unix only to remove files created by a run
+ # of the configure script which hasn't been successful (so that no
+ # `config.mk' has been created). It uses the built-in $(RM) command of
+ # GNU make. Similarly, `nul' is created if e.g. `make setup win32' has
+ # been erroneously used.
+ #
+ # Note: This test is duplicated in `builds/unix/detect.mk'.
+ #
+ is_unix := $(strip $(wildcard /sbin/init) \
+ $(wildcard /usr/sbin/init) \
+ $(wildcard /hurd/auth))
+ ifneq ($(is_unix),)
+
+ distclean:
+ $(RM) builds/unix/config.cache
+ $(RM) builds/unix/config.log
+ $(RM) builds/unix/config.status
+ $(RM) builds/unix/unix-def.mk
+ $(RM) builds/unix/unix-cc.mk
+ $(RM) builds/unix/freetype2.pc
+ $(RM) nul
+
+ endif # test is_unix
+
+ # IMPORTANT:
+ #
+ # `setup' must be defined by the host platform detection rules to create
+ # the `config.mk' file in the current directory.
+
+else
+
+ # A configuration sub-Makefile is present -- simply run it.
+ #
+ all: single
+
+ BUILD_PROJECT := yes
+ include $(CONFIG_MK)
+
+endif # test check_platform
+
+
+# We always need the list of modules in ftmodule.h.
+#
+all setup: $(FTMODULE_H)
+
+
+# The `modules' target unconditionally rebuilds the module list.
+#
+modules:
+ $(FTMODULE_H_INIT)
+ $(FTMODULE_H_CREATE)
+ $(FTMODULE_H_DONE)
+
+include $(TOP_DIR)/builds/modules.mk
+
+
+# This target builds the tarballs.
+#
+# Not to be run by a normal user -- there are no attempts to make it
+# generic.
+
+# we check for `dist', not `distclean'
+ifneq ($(findstring distx,$(MAKECMDGOALS)x),)
+ FT_H := include/freetype/freetype.h
+
+ major := $(shell sed -n 's/.*FREETYPE_MAJOR.*\([0-9]\+\)/\1/p' < $(FT_H))
+ minor := $(shell sed -n 's/.*FREETYPE_MINOR.*\([0-9]\+\)/\1/p' < $(FT_H))
+ patch := $(shell sed -n 's/.*FREETYPE_PATCH.*\([0-9]\+\)/\1/p' < $(FT_H))
+
+ version := $(major).$(minor).$(patch)
+ winversion := $(major)$(minor)$(patch)
+endif
+
+dist:
+ -rm -rf tmp
+ rm -f freetype-$(version).tar.gz
+ rm -f freetype-$(version).tar.bz2
+ rm -f ft$(winversion).zip
+
+ for d in `find . -wholename '*/CVS' -prune \
+ -o -type f \
+ -o -print` ; do \
+ mkdir -p tmp/$$d ; \
+ done ;
+
+ currdir=`pwd` ; \
+ for f in `find . -wholename '*/CVS' -prune \
+ -o -name .cvsignore \
+ -o -type d \
+ -o -print` ; do \
+ ln -s $$currdir/$$f tmp/$$f ; \
+ done
+
+ @# Prevent generation of .pyc files. Python follows (soft) links if
+ @# the link's directory is write protected, so we have temporarily
+ @# disable write access here too.
+ chmod -w src/tools/docmaker
+
+ cd tmp ; \
+ $(MAKE) devel ; \
+ $(MAKE) do-dist
+
+ chmod +w src/tools/docmaker
+
+ mv tmp freetype-$(version)
+
+ tar cfh - freetype-$(version) \
+ | gzip -c > freetype-$(version).tar.gz
+ tar cfh - freetype-$(version) \
+ | bzip2 -c > freetype-$(version).tar.bz2
+
+ @# Use CR/LF for zip files.
+ zip -lr ft$(winversion).zip freetype-$(version)
+
+ rm -fr freetype-$(version)
+
+
+# The locations of the latest `config.guess' and `config.sub' versions (from
+# GNU `config' CVS), relative to the `tmp' directory used during `make dist'.
+#
+CONFIG_GUESS = ~/git/config/config.guess
+CONFIG_SUB = ~/git/config/config.sub
+
+
+# Don't say `make do-dist'. Always use `make dist' instead.
+#
+.PHONY: do-dist
+
+do-dist: distclean refdoc
+ @# Without removing the files, `autoconf' and friends follow links.
+ rm -f builds/unix/aclocal.m4
+ rm -f builds/unix/configure.ac
+ rm -f builds/unix/configure
+
+ sh autogen.sh
+ rm -rf builds/unix/autom4te.cache
+
+ cp $(CONFIG_GUESS) builds/unix
+ cp $(CONFIG_SUB) builds/unix
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/unix/aclocal.m4 b/src/3rdparty/freetype/builds/unix/aclocal.m4
new file mode 100644
index 0000000..f68c66c
--- /dev/null
+++ b/src/3rdparty/freetype/builds/unix/aclocal.m4
@@ -0,0 +1,7912 @@
+# generated automatically by aclocal 1.10.1 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+# 2006, 2007, 2008 Free Software Foundation, Inc.
+# Written by Gordon Matzigkeit, 1996
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+m4_define([_LT_COPYING], [dnl
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+# 2006, 2007, 2008 Free Software Foundation, Inc.
+# Written by Gordon Matzigkeit, 1996
+#
+# This file is part of GNU Libtool.
+#
+# GNU Libtool 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.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+])
+
+# serial 56 LT_INIT
+
+
+# LT_PREREQ(VERSION)
+# ------------------
+# Complain and exit if this libtool version is less that VERSION.
+m4_defun([LT_PREREQ],
+[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
+ [m4_default([$3],
+ [m4_fatal([Libtool version $1 or higher is required],
+ 63)])],
+ [$2])])
+
+
+# _LT_CHECK_BUILDDIR
+# ------------------
+# Complain if the absolute build directory name contains unusual characters
+m4_defun([_LT_CHECK_BUILDDIR],
+[case `pwd` in
+ *\ * | *\ *)
+ AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
+esac
+])
+
+
+# LT_INIT([OPTIONS])
+# ------------------
+AC_DEFUN([LT_INIT],
+[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
+AC_BEFORE([$0], [LT_LANG])dnl
+AC_BEFORE([$0], [LT_OUTPUT])dnl
+AC_BEFORE([$0], [LTDL_INIT])dnl
+m4_require([_LT_CHECK_BUILDDIR])dnl
+
+dnl Autoconf doesn't catch unexpanded LT_ macros by default:
+m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
+m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
+dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
+dnl unless we require an AC_DEFUNed macro:
+AC_REQUIRE([LTOPTIONS_VERSION])dnl
+AC_REQUIRE([LTSUGAR_VERSION])dnl
+AC_REQUIRE([LTVERSION_VERSION])dnl
+AC_REQUIRE([LTOBSOLETE_VERSION])dnl
+m4_require([_LT_PROG_LTMAIN])dnl
+
+dnl Parse OPTIONS
+_LT_SET_OPTIONS([$0], [$1])
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+_LT_SETUP
+
+# Only expand once:
+m4_define([LT_INIT])
+])# LT_INIT
+
+# Old names:
+AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
+AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
+dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
+
+
+# _LT_CC_BASENAME(CC)
+# -------------------
+# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
+m4_defun([_LT_CC_BASENAME],
+[for cc_temp in $1""; do
+ case $cc_temp in
+ compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
+ distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+])
+
+
+# _LT_FILEUTILS_DEFAULTS
+# ----------------------
+# It is okay to use these file commands and assume they have been set
+# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.
+m4_defun([_LT_FILEUTILS_DEFAULTS],
+[: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+])# _LT_FILEUTILS_DEFAULTS
+
+
+# _LT_SETUP
+# ---------
+m4_defun([_LT_SETUP],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+_LT_DECL([], [host_alias], [0], [The host system])dnl
+_LT_DECL([], [host], [0])dnl
+_LT_DECL([], [host_os], [0])dnl
+dnl
+_LT_DECL([], [build_alias], [0], [The build system])dnl
+_LT_DECL([], [build], [0])dnl
+_LT_DECL([], [build_os], [0])dnl
+dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+dnl
+AC_REQUIRE([AC_PROG_LN_S])dnl
+test -z "$LN_S" && LN_S="ln -s"
+_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
+dnl
+AC_REQUIRE([LT_CMD_MAX_LEN])dnl
+_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
+_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
+dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+m4_require([_LT_CMD_RELOAD])dnl
+m4_require([_LT_CHECK_MAGIC_METHOD])dnl
+m4_require([_LT_CMD_OLD_ARCHIVE])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+
+_LT_CONFIG_LIBTOOL_INIT([
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+])
+if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+
+_LT_CHECK_OBJDIR
+
+m4_require([_LT_TAG_COMPILER])dnl
+_LT_PROG_ECHO_BACKSLASH
+
+case $host_os in
+aix3*)
+ # AIX sometimes has problems with the GCC collect2 program. For some
+ # reason, if we set the COLLECT_NAMES environment variable, the problems
+ # vanish in a puff of smoke.
+ if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+ fi
+ ;;
+esac
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([["`\\]]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+_LT_CC_BASENAME([$compiler])
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+ _LT_PATH_MAGIC
+ fi
+ ;;
+esac
+
+# Use C for the default configuration in the libtool script
+LT_SUPPORTED_TAG([CC])
+_LT_LANG_C_CONFIG
+_LT_LANG_DEFAULT_CONFIG
+_LT_CONFIG_COMMANDS
+])# _LT_SETUP
+
+
+# _LT_PROG_LTMAIN
+# ---------------
+# Note that this code is called both from `configure', and `config.status'
+# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably,
+# `config.status' has no value for ac_aux_dir unless we are using Automake,
+# so we pass a copy along to make sure it has a sensible value anyway.
+m4_defun([_LT_PROG_LTMAIN],
+[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
+_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
+ltmain="$ac_aux_dir/ltmain.sh"
+])# _LT_PROG_LTMAIN
+
+
+
+# So that we can recreate a full libtool script including additional
+# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
+# in macros and then make a single call at the end using the `libtool'
+# label.
+
+
+# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
+# ----------------------------------------
+# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL_INIT],
+[m4_ifval([$1],
+ [m4_append([_LT_OUTPUT_LIBTOOL_INIT],
+ [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_INIT])
+
+
+# _LT_CONFIG_LIBTOOL([COMMANDS])
+# ------------------------------
+# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL],
+[m4_ifval([$1],
+ [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
+ [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
+
+
+# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
+# -----------------------------------------------------
+m4_defun([_LT_CONFIG_SAVE_COMMANDS],
+[_LT_CONFIG_LIBTOOL([$1])
+_LT_CONFIG_LIBTOOL_INIT([$2])
+])
+
+
+# _LT_FORMAT_COMMENT([COMMENT])
+# -----------------------------
+# Add leading comment marks to the start of each line, and a trailing
+# full-stop to the whole comment if one is not present already.
+m4_define([_LT_FORMAT_COMMENT],
+[m4_ifval([$1], [
+m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
+ [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
+)])
+
+
+
+
+
+# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
+# -------------------------------------------------------------------
+# CONFIGNAME is the name given to the value in the libtool script.
+# VARNAME is the (base) name used in the configure script.
+# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
+# VARNAME. Any other value will be used directly.
+m4_define([_LT_DECL],
+[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
+ [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
+ [m4_ifval([$1], [$1], [$2])])
+ lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
+ m4_ifval([$4],
+ [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
+ lt_dict_add_subkey([lt_decl_dict], [$2],
+ [tagged?], [m4_ifval([$5], [yes], [no])])])
+])
+
+
+# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
+# --------------------------------------------------------
+m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
+
+
+# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_tag_varnames],
+[_lt_decl_filter([tagged?], [yes], $@)])
+
+
+# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
+# ---------------------------------------------------------
+m4_define([_lt_decl_filter],
+[m4_case([$#],
+ [0], [m4_fatal([$0: too few arguments: $#])],
+ [1], [m4_fatal([$0: too few arguments: $#: $1])],
+ [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
+ [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
+ [lt_dict_filter([lt_decl_dict], $@)])[]dnl
+])
+
+
+# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
+# --------------------------------------------------
+m4_define([lt_decl_quote_varnames],
+[_lt_decl_filter([value], [1], $@)])
+
+
+# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_dquote_varnames],
+[_lt_decl_filter([value], [2], $@)])
+
+
+# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_varnames_tagged],
+[_$0(m4_quote(m4_default([$1], [[, ]])),
+ m4_quote(m4_if([$2], [],
+ m4_quote(lt_decl_tag_varnames),
+ m4_quote(m4_shift($@)))),
+ m4_split(m4_normalize(m4_quote(_LT_TAGS))))])
+m4_define([_lt_decl_varnames_tagged], [lt_combine([$1], [$2], [_], $3)])
+
+
+# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_all_varnames],
+[_$0(m4_quote(m4_default([$1], [[, ]])),
+ m4_if([$2], [],
+ m4_quote(lt_decl_varnames),
+ m4_quote(m4_shift($@))))[]dnl
+])
+m4_define([_lt_decl_all_varnames],
+[lt_join($@, lt_decl_varnames_tagged([$1],
+ lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
+])
+
+
+# _LT_CONFIG_STATUS_DECLARE([VARNAME])
+# ------------------------------------
+# Quote a variable value, and forward it to `config.status' so that its
+# declaration there will have the same value as in `configure'. VARNAME
+# must have a single quote delimited value for this to work.
+m4_define([_LT_CONFIG_STATUS_DECLARE],
+[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`'])
+
+
+# _LT_CONFIG_STATUS_DECLARATIONS
+# ------------------------------
+# We delimit libtool config variables with single quotes, so when
+# we write them to config.status, we have to be sure to quote all
+# embedded single quotes properly. In configure, this macro expands
+# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
+#
+# <var>='`$ECHO "X$<var>" | $Xsed -e "$delay_single_quote_subst"`'
+m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
+ [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAGS
+# ----------------
+# Output comment and list of tags supported by the script
+m4_defun([_LT_LIBTOOL_TAGS],
+[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
+available_tags="_LT_TAGS"dnl
+])
+
+
+# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
+# -----------------------------------
+# Extract the dictionary values for VARNAME (optionally with TAG) and
+# expand to a commented shell variable setting:
+#
+# # Some comment about what VAR is for.
+# visible_name=$lt_internal_name
+m4_define([_LT_LIBTOOL_DECLARE],
+[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
+ [description])))[]dnl
+m4_pushdef([_libtool_name],
+ m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
+m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
+ [0], [_libtool_name=[$]$1],
+ [1], [_libtool_name=$lt_[]$1],
+ [2], [_libtool_name=$lt_[]$1],
+ [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
+m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
+])
+
+
+# _LT_LIBTOOL_CONFIG_VARS
+# -----------------------
+# Produce commented declarations of non-tagged libtool config variables
+# suitable for insertion in the LIBTOOL CONFIG section of the `libtool'
+# script. Tagged libtool config variables (even for the LIBTOOL CONFIG
+# section) are produced by _LT_LIBTOOL_TAG_VARS.
+m4_defun([_LT_LIBTOOL_CONFIG_VARS],
+[m4_foreach([_lt_var],
+ m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
+ [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAG_VARS(TAG)
+# -------------------------
+m4_define([_LT_LIBTOOL_TAG_VARS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
+ [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
+
+
+# _LT_TAGVAR(VARNAME, [TAGNAME])
+# ------------------------------
+m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
+
+
+# _LT_CONFIG_COMMANDS
+# -------------------
+# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of
+# variables for single and double quote escaping we saved from calls
+# to _LT_DECL, we can put quote escaped variables declarations
+# into `config.status', and then the shell code to quote escape them in
+# for loops in `config.status'. Finally, any additional code accumulated
+# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
+m4_defun([_LT_CONFIG_COMMANDS],
+[AC_PROVIDE_IFELSE([LT_OUTPUT],
+ dnl If the libtool generation code has been placed in $CONFIG_LT,
+ dnl instead of duplicating it all over again into config.status,
+ dnl then we will have config.status run $CONFIG_LT later, so it
+ dnl needs to know what name is stored there:
+ [AC_CONFIG_COMMANDS([libtool],
+ [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
+ dnl If the libtool generation code is destined for config.status,
+ dnl expand the accumulated commands and init code now:
+ [AC_CONFIG_COMMANDS([libtool],
+ [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
+])#_LT_CONFIG_COMMANDS
+
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
+[
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+_LT_CONFIG_STATUS_DECLARATIONS
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# Quote evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_quote_varnames); do
+ case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+ *[[\\\\\\\`\\"\\\$]]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+# Double-quote double-evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_dquote_varnames); do
+ case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+ *[[\\\\\\\`\\"\\\$]]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+# Fix-up fallback echo if it was mangled by the above quoting rules.
+case \$lt_ECHO in
+*'\\\[$]0 --fallback-echo"')dnl "
+ lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\`
+ ;;
+esac
+
+_LT_OUTPUT_LIBTOOL_INIT
+])
+
+
+# LT_OUTPUT
+# ---------
+# This macro allows early generation of the libtool script (before
+# AC_OUTPUT is called), incase it is used in configure for compilation
+# tests.
+AC_DEFUN([LT_OUTPUT],
+[: ${CONFIG_LT=./config.lt}
+AC_MSG_NOTICE([creating $CONFIG_LT])
+cat >"$CONFIG_LT" <<_LTEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate a libtool stub with the current configuration.
+
+lt_cl_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AS_SHELL_SANITIZE
+_AS_PREPARE
+
+exec AS_MESSAGE_FD>&1
+exec AS_MESSAGE_LOG_FD>>config.log
+{
+ echo
+ AS_BOX([Running $as_me.])
+} >&AS_MESSAGE_LOG_FD
+
+lt_cl_help="\
+\`$as_me' creates a local libtool stub from the current configuration,
+for use in further configure time tests before the real libtool is
+generated.
+
+Usage: $[0] [[OPTIONS]]
+
+ -h, --help print this help, then exit
+ -V, --version print version number, then exit
+ -q, --quiet do not print progress messages
+ -d, --debug don't remove temporary files
+
+Report bugs to <bug-libtool@gnu.org>."
+
+lt_cl_version="\
+m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
+m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
+configured by $[0], generated by m4_PACKAGE_STRING.
+
+Copyright (C) 2008 Free Software Foundation, Inc.
+This config.lt script is free software; the Free Software Foundation
+gives unlimited permision to copy, distribute and modify it."
+
+while test $[#] != 0
+do
+ case $[1] in
+ --version | --v* | -V )
+ echo "$lt_cl_version"; exit 0 ;;
+ --help | --h* | -h )
+ echo "$lt_cl_help"; exit 0 ;;
+ --debug | --d* | -d )
+ debug=: ;;
+ --quiet | --q* | --silent | --s* | -q )
+ lt_cl_silent=: ;;
+
+ -*) AC_MSG_ERROR([unrecognized option: $[1]
+Try \`$[0] --help' for more information.]) ;;
+
+ *) AC_MSG_ERROR([unrecognized argument: $[1]
+Try \`$[0] --help' for more information.]) ;;
+ esac
+ shift
+done
+
+if $lt_cl_silent; then
+ exec AS_MESSAGE_FD>/dev/null
+fi
+_LTEOF
+
+cat >>"$CONFIG_LT" <<_LTEOF
+_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AC_MSG_NOTICE([creating $ofile])
+_LT_OUTPUT_LIBTOOL_COMMANDS
+AS_EXIT(0)
+_LTEOF
+chmod +x "$CONFIG_LT"
+
+# configure is writing to config.log, but config.lt does its own redirection,
+# appending to config.log, which fails on DOS, as config.log is still kept
+# open by configure. Here we exec the FD to /dev/null, effectively closing
+# config.log, so it can be properly (re)opened and appended to by config.lt.
+if test "$no_create" != yes; then
+ lt_cl_success=:
+ test "$silent" = yes &&
+ lt_config_lt_args="$lt_config_lt_args --quiet"
+ exec AS_MESSAGE_LOG_FD>/dev/null
+ $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
+ exec AS_MESSAGE_LOG_FD>>config.log
+ $lt_cl_success || AS_EXIT(1)
+fi
+])# LT_OUTPUT
+
+
+# _LT_CONFIG(TAG)
+# ---------------
+# If TAG is the built-in tag, create an initial libtool script with a
+# default configuration from the untagged config vars. Otherwise add code
+# to config.status for appending the configuration named by TAG from the
+# matching tagged config vars.
+m4_defun([_LT_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_CONFIG_SAVE_COMMANDS([
+ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
+ m4_if(_LT_TAG, [C], [
+ # See if we are running on zsh, and set the options which allow our
+ # commands through without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+ fi
+
+ cfgfile="${ofile}T"
+ trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+ $RM "$cfgfile"
+
+ cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+_LT_COPYING
+_LT_LIBTOOL_TAGS
+
+# ### BEGIN LIBTOOL CONFIG
+_LT_LIBTOOL_CONFIG_VARS
+_LT_LIBTOOL_TAG_VARS
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+ case $host_os in
+ aix3*)
+ cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program. For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
+_LT_EOF
+ ;;
+ esac
+
+ _LT_PROG_LTMAIN
+
+ # We use sed instead of cat because bash on DJGPP gets confused if
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+ sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ _LT_PROG_XSI_SHELLFNS
+
+ sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+],
+[cat <<_LT_EOF >> "$ofile"
+
+dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
+dnl in a comment (ie after a #).
+# ### BEGIN LIBTOOL TAG CONFIG: $1
+_LT_LIBTOOL_TAG_VARS(_LT_TAG)
+# ### END LIBTOOL TAG CONFIG: $1
+_LT_EOF
+])dnl /m4_if
+],
+[m4_if([$1], [], [
+ PACKAGE='$PACKAGE'
+ VERSION='$VERSION'
+ TIMESTAMP='$TIMESTAMP'
+ RM='$RM'
+ ofile='$ofile'], [])
+])dnl /_LT_CONFIG_SAVE_COMMANDS
+])# _LT_CONFIG
+
+
+# LT_SUPPORTED_TAG(TAG)
+# ---------------------
+# Trace this macro to discover what tags are supported by the libtool
+# --tag option, using:
+# autoconf --trace 'LT_SUPPORTED_TAG:$1'
+AC_DEFUN([LT_SUPPORTED_TAG], [])
+
+
+# C support is built-in for now
+m4_define([_LT_LANG_C_enabled], [])
+m4_define([_LT_TAGS], [])
+
+
+# LT_LANG(LANG)
+# -------------
+# Enable libtool support for the given language if not already enabled.
+AC_DEFUN([LT_LANG],
+[AC_BEFORE([$0], [LT_OUTPUT])dnl
+m4_case([$1],
+ [C], [_LT_LANG(C)],
+ [C++], [_LT_LANG(CXX)],
+ [Java], [_LT_LANG(GCJ)],
+ [Fortran 77], [_LT_LANG(F77)],
+ [Fortran], [_LT_LANG(FC)],
+ [Windows Resource], [_LT_LANG(RC)],
+ [m4_ifdef([_LT_LANG_]$1[_CONFIG],
+ [_LT_LANG($1)],
+ [m4_fatal([$0: unsupported language: "$1"])])])dnl
+])# LT_LANG
+
+
+# _LT_LANG(LANGNAME)
+# ------------------
+m4_defun([_LT_LANG],
+[m4_ifdef([_LT_LANG_]$1[_enabled], [],
+ [LT_SUPPORTED_TAG([$1])dnl
+ m4_append([_LT_TAGS], [$1 ])dnl
+ m4_define([_LT_LANG_]$1[_enabled], [])dnl
+ _LT_LANG_$1_CONFIG($1)])dnl
+])# _LT_LANG
+
+
+# _LT_LANG_DEFAULT_CONFIG
+# -----------------------
+m4_defun([_LT_LANG_DEFAULT_CONFIG],
+[AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [LT_LANG(CXX)],
+ [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_F77],
+ [LT_LANG(F77)],
+ [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_FC],
+ [LT_LANG(FC)],
+ [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
+
+dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
+dnl pulling things in needlessly.
+AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+ [LT_LANG(GCJ)],
+ [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+ [LT_LANG(GCJ)],
+ [AC_PROVIDE_IFELSE([LT_PROG_GCJ],
+ [LT_LANG(GCJ)],
+ [m4_ifdef([AC_PROG_GCJ],
+ [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
+ m4_ifdef([A][M_PROG_GCJ],
+ [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
+ m4_ifdef([LT_PROG_GCJ],
+ [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
+
+AC_PROVIDE_IFELSE([LT_PROG_RC],
+ [LT_LANG(RC)],
+ [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
+])# _LT_LANG_DEFAULT_CONFIG
+
+# Obsolete macros:
+AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
+AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
+AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
+AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
+dnl AC_DEFUN([AC_LIBTOOL_F77], [])
+dnl AC_DEFUN([AC_LIBTOOL_FC], [])
+dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
+
+
+# _LT_TAG_COMPILER
+# ----------------
+m4_defun([_LT_TAG_COMPILER],
+[AC_REQUIRE([AC_PROG_CC])dnl
+
+_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
+_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
+_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
+_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+])# _LT_TAG_COMPILER
+
+
+# _LT_COMPILER_BOILERPLATE
+# ------------------------
+# Check for compiler boilerplate output or warnings with
+# the simple compiler test code.
+m4_defun([_LT_COMPILER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+])# _LT_COMPILER_BOILERPLATE
+
+
+# _LT_LINKER_BOILERPLATE
+# ----------------------
+# Check for linker boilerplate output or warnings with
+# the simple link test code.
+m4_defun([_LT_LINKER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+])# _LT_LINKER_BOILERPLATE
+
+# _LT_REQUIRED_DARWIN_CHECKS
+# -------------------------
+m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
+ case $host_os in
+ rhapsody* | darwin*)
+ AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
+ AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
+ AC_CHECK_TOOL([LIPO], [lipo], [:])
+ AC_CHECK_TOOL([OTOOL], [otool], [:])
+ AC_CHECK_TOOL([OTOOL64], [otool64], [:])
+ _LT_DECL([], [DSYMUTIL], [1],
+ [Tool to manipulate archived DWARF debug symbol files on Mac OS X])
+ _LT_DECL([], [NMEDIT], [1],
+ [Tool to change global to local symbols on Mac OS X])
+ _LT_DECL([], [LIPO], [1],
+ [Tool to manipulate fat objects and archives on Mac OS X])
+ _LT_DECL([], [OTOOL], [1],
+ [ldd/readelf like tool for Mach-O binaries on Mac OS X])
+ _LT_DECL([], [OTOOL64], [1],
+ [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])
+
+ AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
+ [lt_cv_apple_cc_single_mod=no
+ if test -z "${LT_MULTI_MODULE}"; then
+ # By default we will add the -single_module flag. You can override
+ # by either setting the environment variable LT_MULTI_MODULE
+ # non-empty at configure time, or by adding -multi_module to the
+ # link flags.
+ rm -rf libconftest.dylib*
+ echo "int foo(void){return 1;}" > conftest.c
+ echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
+ $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+ _lt_result=$?
+ if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+ lt_cv_apple_cc_single_mod=yes
+ else
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ fi
+ rm -rf libconftest.dylib*
+ rm -f conftest.*
+ fi])
+ AC_CACHE_CHECK([for -exported_symbols_list linker flag],
+ [lt_cv_ld_exported_symbols_list],
+ [lt_cv_ld_exported_symbols_list=no
+ save_LDFLAGS=$LDFLAGS
+ echo "_main" > conftest.sym
+ LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+ [lt_cv_ld_exported_symbols_list=yes],
+ [lt_cv_ld_exported_symbols_list=no])
+ LDFLAGS="$save_LDFLAGS"
+ ])
+ case $host_os in
+ rhapsody* | darwin1.[[012]])
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+ darwin1.*)
+ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+ darwin*) # darwin 5.x on
+ # if running on 10.5 or later, the deployment target defaults
+ # to the OS version, if on x86, and 10.4, the deployment
+ # target defaults to 10.4. Don't you love it?
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+ 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+ 10.[[012]]*)
+ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+ 10.*)
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+ esac
+ ;;
+ esac
+ if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+ _lt_dar_single_mod='$single_module'
+ fi
+ if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+ _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+ else
+ _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ if test "$DSYMUTIL" != ":"; then
+ _lt_dsymutil='~$DSYMUTIL $lib || :'
+ else
+ _lt_dsymutil=
+ fi
+ ;;
+ esac
+])
+
+
+# _LT_DARWIN_LINKER_FEATURES
+# --------------------------
+# Checks for linker and compiler features on darwin
+m4_defun([_LT_DARWIN_LINKER_FEATURES],
+[
+ m4_require([_LT_REQUIRED_DARWIN_CHECKS])
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_automatic, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=''
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
+ if test "$GCC" = "yes"; then
+ output_verbose_link_cmd=echo
+ _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+ _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+ _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+ m4_if([$1], [CXX],
+[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then
+ _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
+ fi
+],[])
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+])
+
+# _LT_SYS_MODULE_PATH_AIX
+# -----------------------
+# Links a minimal program and checks the executable
+# for the system default hardcoded library path. In most cases,
+# this is /usr/lib:/lib, but when the MPI compilers are used
+# the location of the communication and MPI libs are included too.
+# If we don't find anything, use the default library path according
+# to the aix ld manual.
+m4_defun([_LT_SYS_MODULE_PATH_AIX],
+[m4_require([_LT_DECL_SED])dnl
+AC_LINK_IFELSE(AC_LANG_PROGRAM,[
+lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\(.*\)$/\1/
+ p
+ }
+ }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi],[])
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+])# _LT_SYS_MODULE_PATH_AIX
+
+
+# _LT_SHELL_INIT(ARG)
+# -------------------
+m4_define([_LT_SHELL_INIT],
+[ifdef([AC_DIVERSION_NOTICE],
+ [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
+ [AC_DIVERT_PUSH(NOTICE)])
+$1
+AC_DIVERT_POP
+])# _LT_SHELL_INIT
+
+
+# _LT_PROG_ECHO_BACKSLASH
+# -----------------------
+# Add some code to the start of the generated configure script which
+# will find an echo command which doesn't interpret backslashes.
+m4_defun([_LT_PROG_ECHO_BACKSLASH],
+[_LT_SHELL_INIT([
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$lt_ECHO in
+X*--fallback-echo)
+ # Remove one level of quotation (which was required for Make).
+ ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
+ ;;
+esac
+
+ECHO=${lt_ECHO-echo}
+if test "X[$]1" = X--no-reexec; then
+ # Discard the --no-reexec flag, and continue.
+ shift
+elif test "X[$]1" = X--fallback-echo; then
+ # Avoid inline document here, it may be left over
+ :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
+ # Yippee, $ECHO works!
+ :
+else
+ # Restart under the correct shell.
+ exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
+fi
+
+if test "X[$]1" = X--fallback-echo; then
+ # used as fallback echo
+ shift
+ cat <<_LT_EOF
+[$]*
+_LT_EOF
+ exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test -z "$lt_ECHO"; then
+ if test "X${echo_test_string+set}" != Xset; then
+ # find a string as large as possible, as long as the shell can cope with it
+ for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
+ # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+ if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
+ { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
+ then
+ break
+ fi
+ done
+ fi
+
+ if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ :
+ else
+ # The Solaris, AIX, and Digital Unix default echo programs unquote
+ # backslashes. This makes it impossible to quote backslashes using
+ # echo "$something" | sed 's/\\/\\\\/g'
+ #
+ # So, first we look for a working echo in the user's PATH.
+
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for dir in $PATH /usr/ucb; do
+ IFS="$lt_save_ifs"
+ if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+ test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ ECHO="$dir/echo"
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+
+ if test "X$ECHO" = Xecho; then
+ # We didn't find a better echo, so look for alternatives.
+ if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # This shell has a builtin print -r that does the trick.
+ ECHO='print -r'
+ elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
+ test "X$CONFIG_SHELL" != X/bin/ksh; then
+ # If we have ksh, try running configure again with it.
+ ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+ export ORIGINAL_CONFIG_SHELL
+ CONFIG_SHELL=/bin/ksh
+ export CONFIG_SHELL
+ exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
+ else
+ # Try using printf.
+ ECHO='printf %s\n'
+ if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # Cool, printf works
+ :
+ elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+ export CONFIG_SHELL
+ SHELL="$CONFIG_SHELL"
+ export SHELL
+ ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
+ elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
+ else
+ # maybe with a smaller string...
+ prev=:
+
+ for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
+ if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
+ then
+ break
+ fi
+ prev="$cmd"
+ done
+
+ if test "$prev" != 'sed 50q "[$]0"'; then
+ echo_test_string=`eval $prev`
+ export echo_test_string
+ exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
+ else
+ # Oops. We lost completely, so just stick with echo.
+ ECHO=echo
+ fi
+ fi
+ fi
+ fi
+ fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+lt_ECHO=$ECHO
+if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
+ lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
+fi
+
+AC_SUBST(lt_ECHO)
+])
+_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
+_LT_DECL([], [ECHO], [1],
+ [An echo program that does not interpret backslashes])
+])# _LT_PROG_ECHO_BACKSLASH
+
+
+# _LT_ENABLE_LOCK
+# ---------------
+m4_defun([_LT_ENABLE_LOCK],
+[AC_ARG_ENABLE([libtool-lock],
+ [AS_HELP_STRING([--disable-libtool-lock],
+ [avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *ELF-32*)
+ HPUX_IA64_MODE="32"
+ ;;
+ *ELF-64*)
+ HPUX_IA64_MODE="64"
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+*-*-irix6*)
+ # Find out which ABI we are using.
+ echo '[#]line __oline__ "configure"' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -melf32bsmip"
+ ;;
+ *N32*)
+ LD="${LD-ld} -melf32bmipn32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -melf64bmip"
+ ;;
+ esac
+ else
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -32"
+ ;;
+ *N32*)
+ LD="${LD-ld} -n32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -64"
+ ;;
+ esac
+ fi
+ fi
+ rm -rf conftest*
+ ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `/usr/bin/file conftest.o` in
+ *32-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_i386_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_i386"
+ ;;
+ ppc64-*linux*|powerpc64-*linux*)
+ LD="${LD-ld} -m elf32ppclinux"
+ ;;
+ s390x-*linux*)
+ LD="${LD-ld} -m elf_s390"
+ ;;
+ sparc64-*linux*)
+ LD="${LD-ld} -m elf32_sparc"
+ ;;
+ esac
+ ;;
+ *64-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_x86_64_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ ppc*-*linux*|powerpc*-*linux*)
+ LD="${LD-ld} -m elf64ppc"
+ ;;
+ s390*-*linux*|s390*-*tpf*)
+ LD="${LD-ld} -m elf64_s390"
+ ;;
+ sparc*-*linux*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+*-*-sco3.2v5*)
+ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+ SAVE_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -belf"
+ AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+ [AC_LANG_PUSH(C)
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+ AC_LANG_POP])
+ if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+ # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+ CFLAGS="$SAVE_CFLAGS"
+ fi
+ ;;
+sparc*-*solaris*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `/usr/bin/file conftest.o` in
+ *64-bit*)
+ case $lt_cv_prog_gnu_ld in
+ yes*) LD="${LD-ld} -m elf64_sparc" ;;
+ *)
+ if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+ LD="${LD-ld} -64"
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+esac
+
+need_locks="$enable_libtool_lock"
+])# _LT_ENABLE_LOCK
+
+
+# _LT_CMD_OLD_ARCHIVE
+# -------------------
+m4_defun([_LT_CMD_OLD_ARCHIVE],
+[AC_CHECK_TOOL(AR, ar, false)
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+_LT_DECL([], [AR], [1], [The archiver])
+_LT_DECL([], [AR_FLAGS], [1])
+
+AC_CHECK_TOOL(STRIP, strip, :)
+test -z "$STRIP" && STRIP=:
+_LT_DECL([], [STRIP], [1], [A symbol stripping program])
+
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+test -z "$RANLIB" && RANLIB=:
+_LT_DECL([], [RANLIB], [1],
+ [Commands used to install an old-style archive])
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+ case $host_os in
+ openbsd*)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+ ;;
+ *)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+ ;;
+ esac
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+_LT_DECL([], [old_postinstall_cmds], [2])
+_LT_DECL([], [old_postuninstall_cmds], [2])
+_LT_TAGDECL([], [old_archive_cmds], [2],
+ [Commands used to build an old-style archive])
+])# _LT_CMD_OLD_ARCHIVE
+
+
+# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([_LT_COMPILER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+ [$2=no
+ m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$3"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ $2=yes
+ fi
+ fi
+ $RM conftest*
+])
+
+if test x"[$]$2" = xyes; then
+ m4_if([$5], , :, [$5])
+else
+ m4_if([$6], , :, [$6])
+fi
+])# _LT_COMPILER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
+
+
+# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+# [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------
+# Check whether the given linker option works
+AC_DEFUN([_LT_LINKER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+ [$2=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $3"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&AS_MESSAGE_LOG_FD
+ $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ $2=yes
+ fi
+ else
+ $2=yes
+ fi
+ fi
+ $RM -r conftest*
+ LDFLAGS="$save_LDFLAGS"
+])
+
+if test x"[$]$2" = xyes; then
+ m4_if([$4], , :, [$4])
+else
+ m4_if([$5], , :, [$5])
+fi
+])# _LT_LINKER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
+
+
+# LT_CMD_MAX_LEN
+#---------------
+AC_DEFUN([LT_CMD_MAX_LEN],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# find the maximum length of command line arguments
+AC_MSG_CHECKING([the maximum length of command line arguments])
+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+ i=0
+ teststring="ABCD"
+
+ case $build_os in
+ msdosdjgpp*)
+ # On DJGPP, this test can blow up pretty badly due to problems in libc
+ # (any single argument exceeding 2000 bytes causes a buffer overrun
+ # during glob expansion). Even if it were fixed, the result of this
+ # check would be larger than it should be.
+ lt_cv_sys_max_cmd_len=12288; # 12K is about right
+ ;;
+
+ gnu*)
+ # Under GNU Hurd, this test is not required because there is
+ # no limit to the length of command line arguments.
+ # Libtool will interpret -1 as no limit whatsoever
+ lt_cv_sys_max_cmd_len=-1;
+ ;;
+
+ cygwin* | mingw*)
+ # On Win9x/ME, this test blows up -- it succeeds, but takes
+ # about 5 minutes as the teststring grows exponentially.
+ # Worse, since 9x/ME are not pre-emptively multitasking,
+ # you end up with a "frozen" computer, even though with patience
+ # the test eventually succeeds (with a max line length of 256k).
+ # Instead, let's just punt: use the minimum linelength reported by
+ # all of the supported platforms: 8192 (on NT/2K/XP).
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ amigaos*)
+ # On AmigaOS with pdksh, this test takes hours, literally.
+ # So we just punt and use a minimum line length of 8192.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+ # This has been around since 386BSD, at least. Likely further.
+ if test -x /sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+ elif test -x /usr/sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+ else
+ lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
+ fi
+ # And add a safety zone
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ ;;
+
+ interix*)
+ # We know the value 262144 and hardcode it with a safety zone (like BSD)
+ lt_cv_sys_max_cmd_len=196608
+ ;;
+
+ osf*)
+ # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+ # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+ # nice to cause kernel panics so lets avoid the loop below.
+ # First set a reasonable default.
+ lt_cv_sys_max_cmd_len=16384
+ #
+ if test -x /sbin/sysconfig; then
+ case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+ *1*) lt_cv_sys_max_cmd_len=-1 ;;
+ esac
+ fi
+ ;;
+ sco3.2v5*)
+ lt_cv_sys_max_cmd_len=102400
+ ;;
+ sysv5* | sco5v6* | sysv4.2uw2*)
+ kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+ if test -n "$kargmax"; then
+ lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'`
+ else
+ lt_cv_sys_max_cmd_len=32768
+ fi
+ ;;
+ *)
+ lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+ if test -n "$lt_cv_sys_max_cmd_len"; then
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ else
+ # Make teststring a little bigger before we do anything with it.
+ # a 1K string should be a reasonable start.
+ for i in 1 2 3 4 5 6 7 8 ; do
+ teststring=$teststring$teststring
+ done
+ SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+ # If test is not a shell built-in, we'll probably end up computing a
+ # maximum length that is only half of the actual maximum length, but
+ # we can't tell.
+ while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
+ = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+ test $i != 17 # 1/2 MB should be enough
+ do
+ i=`expr $i + 1`
+ teststring=$teststring$teststring
+ done
+ # Only check the string length outside the loop.
+ lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+ teststring=
+ # Add a significant safety factor because C++ compilers can tack on
+ # massive amounts of additional arguments before passing them to the
+ # linker. It appears as though 1/2 is a usable value.
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+ fi
+ ;;
+ esac
+])
+if test -n $lt_cv_sys_max_cmd_len ; then
+ AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+else
+ AC_MSG_RESULT(none)
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+_LT_DECL([], [max_cmd_len], [0],
+ [What is the maximum length of a command?])
+])# LT_CMD_MAX_LEN
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
+
+
+# _LT_HEADER_DLFCN
+# ----------------
+m4_defun([_LT_HEADER_DLFCN],
+[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
+])# _LT_HEADER_DLFCN
+
+
+# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ----------------------------------------------------------------
+m4_defun([_LT_TRY_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "$cross_compiling" = yes; then :
+ [$4]
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+[#line __oline__ "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ exit (status);
+}]
+_LT_EOF
+ if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) $1 ;;
+ x$lt_dlneed_uscore) $2 ;;
+ x$lt_dlunknown|x*) $3 ;;
+ esac
+ else :
+ # compilation failed
+ $3
+ fi
+fi
+rm -fr conftest*
+])# _LT_TRY_DLOPEN_SELF
+
+
+# LT_SYS_DLOPEN_SELF
+# ------------------
+AC_DEFUN([LT_SYS_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "x$enable_dlopen" != xyes; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen="load_add_on"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32*)
+ lt_cv_dlopen="LoadLibrary"
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen="dlopen"
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ AC_CHECK_LIB([dl], [dlopen],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
+ lt_cv_dlopen="dyld"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ])
+ ;;
+
+ *)
+ AC_CHECK_FUNC([shl_load],
+ [lt_cv_dlopen="shl_load"],
+ [AC_CHECK_LIB([dld], [shl_load],
+ [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
+ [AC_CHECK_FUNC([dlopen],
+ [lt_cv_dlopen="dlopen"],
+ [AC_CHECK_LIB([dl], [dlopen],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+ [AC_CHECK_LIB([svld], [dlopen],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+ [AC_CHECK_LIB([dld], [dld_link],
+ [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
+ ])
+ ])
+ ])
+ ])
+ ])
+ ;;
+ esac
+
+ if test "x$lt_cv_dlopen" != xno; then
+ enable_dlopen=yes
+ else
+ enable_dlopen=no
+ fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS="$CPPFLAGS"
+ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS="$LDFLAGS"
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS="$LIBS"
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ AC_CACHE_CHECK([whether a program can dlopen itself],
+ lt_cv_dlopen_self, [dnl
+ _LT_TRY_DLOPEN_SELF(
+ lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+ lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+ ])
+
+ if test "x$lt_cv_dlopen_self" = xyes; then
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+ AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+ lt_cv_dlopen_self_static, [dnl
+ _LT_TRY_DLOPEN_SELF(
+ lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+ lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross)
+ ])
+ fi
+
+ CPPFLAGS="$save_CPPFLAGS"
+ LDFLAGS="$save_LDFLAGS"
+ LIBS="$save_LIBS"
+ ;;
+ esac
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+_LT_DECL([dlopen_support], [enable_dlopen], [0],
+ [Whether dlopen is supported])
+_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
+ [Whether dlopen of programs is supported])
+_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
+ [Whether dlopen of statically linked programs is supported])
+])# LT_SYS_DLOPEN_SELF
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
+
+
+# _LT_COMPILER_C_O([TAGNAME])
+# ---------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler.
+# This macro does not hard code the compiler like AC_PROG_CC_C_O.
+m4_defun([_LT_COMPILER_C_O],
+[m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+ [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+ [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&AS_MESSAGE_LOG_FD
+ echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+ fi
+ fi
+ chmod u+w . 2>&AS_MESSAGE_LOG_FD
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+])
+_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
+ [Does compiler simultaneously support -c and -o options?])
+])# _LT_COMPILER_C_O
+
+
+# _LT_COMPILER_FILE_LOCKS([TAGNAME])
+# ----------------------------------
+# Check to see if we can do hard links to lock some files if needed
+m4_defun([_LT_COMPILER_FILE_LOCKS],
+[m4_require([_LT_ENABLE_LOCK])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_COMPILER_C_O([$1])
+
+hard_links="nottested"
+if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+ AC_MSG_CHECKING([if we can lock with hard links])
+ hard_links=yes
+ $RM conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ AC_MSG_RESULT([$hard_links])
+ if test "$hard_links" = no; then
+ AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
+])# _LT_COMPILER_FILE_LOCKS
+
+
+# _LT_CHECK_OBJDIR
+# ----------------
+m4_defun([_LT_CHECK_OBJDIR],
+[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+[rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+ lt_cv_objdir=.libs
+else
+ # MS-DOS does not allow filenames that begin with a dot.
+ lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null])
+objdir=$lt_cv_objdir
+_LT_DECL([], [objdir], [0],
+ [The name of the directory that contains temporary libtool files])dnl
+m4_pattern_allow([LT_OBJDIR])dnl
+AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/",
+ [Define to the sub-directory in which libtool stores uninstalled libraries.])
+])# _LT_CHECK_OBJDIR
+
+
+# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
+# --------------------------------------
+# Check hardcoding attributes.
+m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
+[AC_MSG_CHECKING([how to hardcode library paths into programs])
+_LT_TAGVAR(hardcode_action, $1)=
+if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
+ test -n "$_LT_TAGVAR(runpath_var, $1)" ||
+ test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
+
+ # We can hardcode non-existent directories.
+ if test "$_LT_TAGVAR(hardcode_direct, $1)" != no &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
+ test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then
+ # Linking always hardcodes the temporary library directory.
+ _LT_TAGVAR(hardcode_action, $1)=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ _LT_TAGVAR(hardcode_action, $1)=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ _LT_TAGVAR(hardcode_action, $1)=unsupported
+fi
+AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
+
+if test "$_LT_TAGVAR(hardcode_action, $1)" = relink ||
+ test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+_LT_TAGDECL([], [hardcode_action], [0],
+ [How to hardcode a shared library path into an executable])
+])# _LT_LINKER_HARDCODE_LIBPATH
+
+
+# _LT_CMD_STRIPLIB
+# ----------------
+m4_defun([_LT_CMD_STRIPLIB],
+[m4_require([_LT_DECL_EGREP])
+striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ AC_MSG_RESULT([yes])
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP" ; then
+ striplib="$STRIP -x"
+ old_striplib="$STRIP -S"
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ fi
+ ;;
+ *)
+ AC_MSG_RESULT([no])
+ ;;
+ esac
+fi
+_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
+_LT_DECL([], [striplib], [1])
+])# _LT_CMD_STRIPLIB
+
+
+# _LT_SYS_DYNAMIC_LINKER([TAG])
+# -----------------------------
+# PORTME Fill in your ld.so characteristics
+m4_defun([_LT_SYS_DYNAMIC_LINKER],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_MSG_CHECKING([dynamic linker characteristics])
+m4_if([$1],
+ [], [
+if test "$GCC" = yes; then
+ case $host_os in
+ darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+ *) lt_awk_arg="/^libraries:/" ;;
+ esac
+ lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ # Ok, now we have the path, separated by spaces, we can step through it
+ # and add multilib dir if necessary.
+ lt_tmp_lt_search_path_spec=
+ lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+ for lt_sys_path in $lt_search_path_spec; do
+ if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+ else
+ test -d "$lt_sys_path" && \
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+ fi
+ done
+ lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+ lt_foo="";
+ lt_count=0;
+ for (lt_i = NF; lt_i > 0; lt_i--) {
+ if ($lt_i != "" && $lt_i != ".") {
+ if ($lt_i == "..") {
+ lt_count++;
+ } else {
+ if (lt_count == 0) {
+ lt_foo="/" $lt_i lt_foo;
+ } else {
+ lt_count--;
+ }
+ }
+ }
+ }
+ if (lt_foo != "") { lt_freq[[lt_foo]]++; }
+ if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
+}'`
+ sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+
+aix[[4-9]]*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test "$host_cpu" = ia64; then
+ # AIX 5 supports IA64
+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line `#! .'. This would cause the generated library to
+ # depend on `.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[[01]] | aix4.[[01]].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ if test "$aix_use_runtimelinking" = yes; then
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ else
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='${libname}${release}.a $libname.a'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ fi
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ case $host_cpu in
+ powerpc)
+ # Since July 2007 AmigaOS4 officially supports .so libraries.
+ # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ ;;
+ m68k)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+ ;;
+ esac
+ ;;
+
+beos*)
+ library_names_spec='${libname}${shared_ext}'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi[[45]]*)
+ version_type=linux
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32*)
+ version_type=windows
+ shrext_cmds=".dll"
+ need_version=no
+ need_lib_prefix=no
+
+ case $GCC,$host_os in
+ yes,cygwin* | yes,mingw* | yes,pw32*)
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+ ;;
+ mingw*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
+ # It is most probably a Windows format PATH printed by
+ # mingw gcc, but we are running on Cygwin. Gcc prints its search
+ # path with ; separators, and with drive letters. We can handle the
+ # drive letters (cygwin fileutils understands them), so leave them,
+ # especially as we might pass files found there to a mingw objdump,
+ # which wouldn't understand a cygwinified path. Ahh.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
+ ;;
+
+ *)
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+ soname_spec='${libname}${release}${major}$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+m4_if([$1], [],[
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd1*)
+ dynamic_linker=no
+ ;;
+
+freebsd* | dragonfly*)
+ # DragonFly does not have aout. When/if they implement a new
+ # versioning mechanism, adjust this.
+ if test -x /usr/bin/objformat; then
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+ freebsd[[123]]*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[[01]]* | freebsdelf3.[[01]]*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
+ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ *) # from 4.6 on, and DragonFly
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+gnu*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case $host_cpu in
+ ia64*)
+ shrext_cmds='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ if test "X$HPUX_IA64_MODE" = X32; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ fi
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ hppa*64*)
+ shrext_cmds='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext_cmds='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555.
+ postinstall_cmds='chmod 555 $lib'
+ ;;
+
+interix[[3-9]]*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ version_type=linux
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ # Some binutils ld are patched to set DT_RUNPATH
+ save_LDFLAGS=$LDFLAGS
+ save_libdir=$libdir
+ eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
+ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+ [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
+ [shlibpath_overrides_runpath=yes])])
+ LDFLAGS=$save_LDFLAGS
+ libdir=$save_libdir
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+*nto* | *qnx*)
+ version_type=qnx
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='ldqnx.so'
+ ;;
+
+openbsd*)
+ version_type=sunos
+ sys_lib_dlsearch_path_spec="/usr/lib"
+ need_lib_prefix=no
+ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+ case $host_os in
+ openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+ *) need_version=no ;;
+ esac
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+ openbsd2.[[89]] | openbsd2.[[89]].*)
+ shlibpath_overrides_runpath=no
+ ;;
+ *)
+ shlibpath_overrides_runpath=yes
+ ;;
+ esac
+ else
+ shlibpath_overrides_runpath=yes
+ fi
+ ;;
+
+os2*)
+ libname_spec='$name'
+ shrext_cmds=".dll"
+ need_lib_prefix=no
+ library_names_spec='$libname${shared_ext} $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+ ;;
+
+rdos*)
+ dynamic_linker=no
+ ;;
+
+solaris*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux
+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+ soname_spec='$libname${shared_ext}.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ version_type=freebsd-elf
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ if test "$with_gnu_ld" = yes; then
+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ case $host_os in
+ sco3.2v5*)
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+ ;;
+ esac
+ fi
+ sys_lib_dlsearch_path_spec='/usr/lib'
+ ;;
+
+tpf*)
+ # TPF is a cross-target only. Preferred cross-host = GNU/Linux.
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_name_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+uts4*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+ sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+ sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+_LT_DECL([], [variables_saved_for_relink], [1],
+ [Variables whose values should be saved in libtool wrapper scripts and
+ restored at link time])
+_LT_DECL([], [need_lib_prefix], [0],
+ [Do we need the "lib" prefix for modules?])
+_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
+_LT_DECL([], [version_type], [0], [Library versioning type])
+_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable])
+_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
+_LT_DECL([], [shlibpath_overrides_runpath], [0],
+ [Is shlibpath searched before the hard-coded library search path?])
+_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
+_LT_DECL([], [library_names_spec], [1],
+ [[List of archive names. First name is the real one, the rest are links.
+ The last name is the one that the linker finds with -lNAME]])
+_LT_DECL([], [soname_spec], [1],
+ [[The coded name of the library, if different from the real name]])
+_LT_DECL([], [postinstall_cmds], [2],
+ [Command to use after installation of a shared archive])
+_LT_DECL([], [postuninstall_cmds], [2],
+ [Command to use after uninstallation of a shared archive])
+_LT_DECL([], [finish_cmds], [2],
+ [Commands used to finish a libtool library installation in a directory])
+_LT_DECL([], [finish_eval], [1],
+ [[As "finish_cmds", except a single script fragment to be evaled but
+ not shown]])
+_LT_DECL([], [hardcode_into_libs], [0],
+ [Whether we should hardcode library paths into libraries])
+_LT_DECL([], [sys_lib_search_path_spec], [2],
+ [Compile-time system search path for libraries])
+_LT_DECL([], [sys_lib_dlsearch_path_spec], [2],
+ [Run-time system search path for libraries])
+])# _LT_SYS_DYNAMIC_LINKER
+
+
+# _LT_PATH_TOOL_PREFIX(TOOL)
+# --------------------------
+# find a file program which can recognize shared library
+AC_DEFUN([_LT_PATH_TOOL_PREFIX],
+[m4_require([_LT_DECL_EGREP])dnl
+AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+[[\\/*] | ?:[\\/]*])
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word. This closes a longstanding sh security hole.
+ ac_dummy="m4_if([$2], , $PATH, [$2])"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$1; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/$1"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac])
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ AC_MSG_RESULT($MAGIC_CMD)
+else
+ AC_MSG_RESULT(no)
+fi
+_LT_DECL([], [MAGIC_CMD], [0],
+ [Used to examine libraries when file_magic_cmd begins with "file"])dnl
+])# _LT_PATH_TOOL_PREFIX
+
+# Old name:
+AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
+
+
+# _LT_PATH_MAGIC
+# --------------
+# find a file program which can recognize a shared library
+m4_defun([_LT_PATH_MAGIC],
+[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+ if test -n "$ac_tool_prefix"; then
+ _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+ else
+ MAGIC_CMD=:
+ fi
+fi
+])# _LT_PATH_MAGIC
+
+
+# LT_PATH_LD
+# ----------
+# find the pathname to the GNU or non-GNU linker
+AC_DEFUN([LT_PATH_LD],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+
+AC_ARG_WITH([gnu-ld],
+ [AS_HELP_STRING([--with-gnu-ld],
+ [assume the C compiler uses GNU ld @<:@default=no@:>@])],
+ [test "$withval" = no || with_gnu_ld=yes],
+ [with_gnu_ld=no])dnl
+
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ AC_MSG_CHECKING([for ld used by $CC])
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [[\\/]]* | ?:[[\\/]]*)
+ re_direlt='/[[^/]][[^/]]*/\.\./'
+ # Canonicalize the pathname of ld
+ ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+ while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ AC_MSG_CHECKING([for GNU ld])
+else
+ AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ lt_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some variants of GNU ld only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break
+ ;;
+ *)
+ test "$with_gnu_ld" != yes && break
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+else
+ lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+ AC_MSG_RESULT($LD)
+else
+ AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+_LT_PATH_LD_GNU
+AC_SUBST([LD])
+
+_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
+])# LT_PATH_LD
+
+# Old names:
+AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
+AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_LD], [])
+dnl AC_DEFUN([AC_PROG_LD], [])
+
+
+# _LT_PATH_LD_GNU
+#- --------------
+m4_defun([_LT_PATH_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ lt_cv_prog_gnu_ld=yes
+ ;;
+*)
+ lt_cv_prog_gnu_ld=no
+ ;;
+esac])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])# _LT_PATH_LD_GNU
+
+
+# _LT_CMD_RELOAD
+# --------------
+# find reload flag for linker
+# -- PORTME Some linkers may need a different reload flag.
+m4_defun([_LT_CMD_RELOAD],
+[AC_CACHE_CHECK([for $LD option to reload object files],
+ lt_cv_ld_reload_flag,
+ [lt_cv_ld_reload_flag='-r'])
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+ darwin*)
+ if test "$GCC" = yes; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+ else
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ fi
+ ;;
+esac
+_LT_DECL([], [reload_flag], [1], [How to create reloadable object files])dnl
+_LT_DECL([], [reload_cmds], [2])dnl
+])# _LT_CMD_RELOAD
+
+
+# _LT_CHECK_MAGIC_METHOD
+# ----------------------
+# how to check for library dependencies
+# -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_MAGIC_METHOD],
+[m4_require([_LT_DECL_EGREP])
+AC_CACHE_CHECK([how to recognize dependent libraries],
+lt_cv_deplibs_check_method,
+[lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[[4-9]]*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+beos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+bsdi[[45]]*)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+ lt_cv_file_magic_cmd='/usr/bin/file -L'
+ lt_cv_file_magic_test_file=/shlib/libc.so
+ ;;
+
+cygwin*)
+ # func_win32_libid is a shell function defined in ltmain.sh
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ ;;
+
+mingw* | pw32*)
+ # Base MSYS/MinGW do not provide the 'file' command needed by
+ # func_win32_libid shell function, so use a weaker test based on 'objdump',
+ # unless we find 'file', for example because we are cross-compiling.
+ if ( file / ) >/dev/null 2>&1; then
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+ lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
+ ;;
+
+darwin* | rhapsody*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+freebsd* | dragonfly*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ case $host_cpu in
+ i*86 )
+ # Not sure whether the presence of OpenBSD here was a mistake.
+ # Let's accept both of them until this is cleared up.
+ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+ ;;
+ esac
+ else
+ lt_cv_deplibs_check_method=pass_all
+ fi
+ ;;
+
+gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+hpux10.20* | hpux11*)
+ lt_cv_file_magic_cmd=/usr/bin/file
+ case $host_cpu in
+ ia64*)
+ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+ lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+ ;;
+ hppa*64*)
+ [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
+ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+ ;;
+ *)
+ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
+ ;;
+ esac
+ ;;
+
+interix[[3-9]]*)
+ # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $LD in
+ *-32|*"-32 ") libmagic=32-bit;;
+ *-n32|*"-n32 ") libmagic=N32;;
+ *-64|*"-64 ") libmagic=64-bit;;
+ *) libmagic=never-match;;
+ esac
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
+ fi
+ ;;
+
+newos6*)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=/usr/lib/libnls.so
+ ;;
+
+*nto* | *qnx*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+openbsd*)
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+ fi
+ ;;
+
+osf3* | osf4* | osf5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+rdos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+solaris*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv4 | sysv4.3*)
+ case $host_vendor in
+ motorola)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+ ;;
+ ncr)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ sequent)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+ ;;
+ sni)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+ siemens)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ pc)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ esac
+ ;;
+
+tpf*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+esac
+])
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+_LT_DECL([], [deplibs_check_method], [1],
+ [Method to check whether dependent libraries are shared objects])
+_LT_DECL([], [file_magic_cmd], [1],
+ [Command to use when deplibs_check_method == "file_magic"])
+])# _LT_CHECK_MAGIC_METHOD
+
+
+# LT_PATH_NM
+# ----------
+# find the pathname to a BSD- or MS-compatible name lister
+AC_DEFUN([LT_PATH_NM],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
+[if test -n "$NM"; then
+ # Let the user override the test.
+ lt_cv_path_NM="$NM"
+else
+ lt_nm_to_check="${ac_tool_prefix}nm"
+ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+ lt_nm_to_check="$lt_nm_to_check nm"
+ fi
+ for lt_tmp_nm in $lt_nm_to_check; do
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ tmp_nm="$ac_dir/$lt_tmp_nm"
+ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+ # Check to see if the nm accepts a BSD-compat flag.
+ # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+ # nm: unknown option "B" ignored
+ # Tru64's nm complains that /dev/null is an invalid object file
+ case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+ */dev/null* | *'Invalid file or object type'*)
+ lt_cv_path_NM="$tmp_nm -B"
+ break
+ ;;
+ *)
+ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+ */dev/null*)
+ lt_cv_path_NM="$tmp_nm -p"
+ break
+ ;;
+ *)
+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+ continue # so that we can try to find one that supports BSD flags
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+ done
+ : ${lt_cv_path_NM=no}
+fi])
+if test "$lt_cv_path_NM" != "no"; then
+ NM="$lt_cv_path_NM"
+else
+ # Didn't find any BSD compatible name lister, look for dumpbin.
+ AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :)
+ AC_SUBST([DUMPBIN])
+ if test "$DUMPBIN" != ":"; then
+ NM="$DUMPBIN"
+ fi
+fi
+test -z "$NM" && NM=nm
+AC_SUBST([NM])
+_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
+
+AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
+ [lt_cv_nm_interface="BSD nm"
+ echo "int some_variable = 0;" > conftest.$ac_ext
+ (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$ac_compile" 2>conftest.err)
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD)
+ cat conftest.out >&AS_MESSAGE_LOG_FD
+ if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+ lt_cv_nm_interface="MS dumpbin"
+ fi
+ rm -f conftest*])
+])# LT_PATH_NM
+
+# Old names:
+AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
+AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_NM], [])
+dnl AC_DEFUN([AC_PROG_NM], [])
+
+
+# LT_LIB_M
+# --------
+# check for math library
+AC_DEFUN([LT_LIB_M],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
+ # These system don't have libm, or don't need it
+ ;;
+*-ncr-sysv4.3*)
+ AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+ AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+ ;;
+*)
+ AC_CHECK_LIB(m, cos, LIBM="-lm")
+ ;;
+esac
+AC_SUBST([LIBM])
+])# LT_LIB_M
+
+# Old name:
+AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_CHECK_LIBM], [])
+
+
+# _LT_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------
+m4_defun([_LT_COMPILER_NO_RTTI],
+[m4_require([_LT_TAG_COMPILER])dnl
+
+_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+
+if test "$GCC" = yes; then
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+
+ _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+ lt_cv_prog_compiler_rtti_exceptions,
+ [-fno-rtti -fno-exceptions], [],
+ [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+fi
+_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
+ [Compiler flag to turn off builtin functions])
+])# _LT_COMPILER_NO_RTTI
+
+
+# _LT_CMD_GLOBAL_SYMBOLS
+# ----------------------
+m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+[
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+ symcode='[[BCDT]]'
+ ;;
+cygwin* | mingw* | pw32*)
+ symcode='[[ABCDGISTW]]'
+ ;;
+hpux*)
+ if test "$host_cpu" = ia64; then
+ symcode='[[ABCDEGRST]]'
+ fi
+ ;;
+irix* | nonstopux*)
+ symcode='[[BCDEGRST]]'
+ ;;
+osf*)
+ symcode='[[BCDEGQRST]]'
+ ;;
+solaris*)
+ symcode='[[BDRT]]'
+ ;;
+sco3.2v5*)
+ symcode='[[DT]]'
+ ;;
+sysv4.2uw2*)
+ symcode='[[DT]]'
+ ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+ symcode='[[ABDT]]'
+ ;;
+sysv4)
+ symcode='[[DFNSTU]]'
+ ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+ symcode='[[ABCDGIRSTW]]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+ opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+ ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+ # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+ symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+ # Write the raw and C identifiers.
+ if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ # Fake it for dumpbin and say T for any non-static function
+ # and D for any global variable.
+ # Also find C++ and __fastcall symbols from MSVC++,
+ # which start with @ or ?.
+ lt_cv_sys_global_symbol_pipe="$AWK ['"\
+" {last_section=section; section=\$ 3};"\
+" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+" \$ 0!~/External *\|/{next};"\
+" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+" {if(hide[section]) next};"\
+" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+" s[1]~/^[@?]/{print s[1], s[1]; next};"\
+" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+" ' prfx=^$ac_symprfx]"
+ else
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ fi
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+
+ rm -f conftest*
+ cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+ if AC_TRY_EVAL(ac_compile); then
+ # Now try to grab the symbols.
+ nlist=conftest.nm
+ if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
+ # Try sorting and uniquifying the output.
+ if sort "$nlist" | uniq > "$nlist"T; then
+ mv -f "$nlist"T "$nlist"
+ else
+ rm -f "$nlist"T
+ fi
+
+ # Make sure that we snagged all the symbols we need.
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+ # Now generate the symbol file.
+ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+ cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols. */
+const struct {
+ const char *name;
+ void *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[[]] =
+{
+ { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+ $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+ cat <<\_LT_EOF >> conftest.$ac_ext
+ {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+ lt_save_LIBS="$LIBS"
+ lt_save_CFLAGS="$CFLAGS"
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+ if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+ LIBS="$lt_save_LIBS"
+ CFLAGS="$lt_save_CFLAGS"
+ else
+ echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+ cat conftest.$ac_ext >&5
+ fi
+ rm -rf conftest* conftst*
+
+ # Do not use the global_symbol_pipe unless it works.
+ if test "$pipe_works" = yes; then
+ break
+ else
+ lt_cv_sys_global_symbol_pipe=
+ fi
+done
+])
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+ lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+ AC_MSG_RESULT(failed)
+else
+ AC_MSG_RESULT(ok)
+fi
+
+_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
+ [Take the output of nm and produce a listing of raw symbols and C names])
+_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
+ [Transform the output of nm in a proper C declaration])
+_LT_DECL([global_symbol_to_c_name_address],
+ [lt_cv_sys_global_symbol_to_c_name_address], [1],
+ [Transform the output of nm in a C name address pair])
+_LT_DECL([global_symbol_to_c_name_address_lib_prefix],
+ [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
+ [Transform the output of nm in a C name address pair when lib prefix is needed])
+]) # _LT_CMD_GLOBAL_SYMBOLS
+
+
+# _LT_COMPILER_PIC([TAGNAME])
+# ---------------------------
+m4_defun([_LT_COMPILER_PIC],
+[m4_require([_LT_TAG_COMPILER])dnl
+_LT_TAGVAR(lt_prog_compiler_wl, $1)=
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+_LT_TAGVAR(lt_prog_compiler_static, $1)=
+
+AC_MSG_CHECKING([for $compiler option to produce PIC])
+m4_if([$1], [CXX], [
+ # C++ specific cases for pic, static, wl, etc.
+ if test "$GXX" = yes; then
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ m68k)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ esac
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+ mingw* | cygwin* | os2* | pw32*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ m4_if([$1], [GCJ], [],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ ;;
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ ;;
+ *djgpp*)
+ # DJGPP does not support shared libraries at all
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ ;;
+ interix[[3-9]]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+ fi
+ ;;
+ hpux*)
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ ;;
+ *qnx* | *nto*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ else
+ case $host_os in
+ aix[[4-9]]*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ else
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+ chorus*)
+ case $cc_basename in
+ cxch68*)
+ # Green Hills C++ Compiler
+ # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+ ;;
+ esac
+ ;;
+ dgux*)
+ case $cc_basename in
+ ec++*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ ;;
+ ghcx*)
+ # Green Hills C++ Compiler
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ freebsd* | dragonfly*)
+ # FreeBSD uses GNU C++
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+ if test "$host_cpu" != ia64; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ fi
+ ;;
+ aCC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ ;;
+ esac
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ interix*)
+ # This is c89, which is MS Visual C++ (no shared libs)
+ # Anyone wants to do a port?
+ ;;
+ irix5* | irix6* | nonstopux*)
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ # CC pic flag -KPIC is the default.
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ linux* | k*bsd*-gnu)
+ case $cc_basename in
+ KCC*)
+ # KAI C++ Compiler
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ icpc* | ecpc* )
+ # Intel C++
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ pgCC* | pgcpp*)
+ # Portland Group C++ compiler
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ cxx*)
+ # Compaq C++
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ xlc* | xlC*)
+ # IBM XL 8.0 on PPC
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C++ 5.9
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ lynxos*)
+ ;;
+ m88k*)
+ ;;
+ mvs*)
+ case $cc_basename in
+ cxx*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ netbsd*)
+ ;;
+ *qnx* | *nto*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+ osf3* | osf4* | osf5*)
+ case $cc_basename in
+ KCC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+ ;;
+ RCC*)
+ # Rational C++ 2.4.1
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ cxx*)
+ # Digital/Compaq C++
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ psos*)
+ ;;
+ solaris*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ ;;
+ gcx*)
+ # Green Hills C++ Compiler
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ sunos4*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.x
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ lcc*)
+ # Lucid
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ esac
+ ;;
+ tandem*)
+ case $cc_basename in
+ NCC*)
+ # NonStop-UX NCC 3.20
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ vxworks*)
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+ esac
+ fi
+],
+[
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ m68k)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ esac
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | cygwin* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ m4_if([$1], [GCJ], [],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ ;;
+
+ hpux*)
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ ;;
+
+ interix[[3-9]]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ enable_shared=no
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+ fi
+ ;;
+
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ else
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+
+ mingw* | cygwin* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ m4_if([$1], [GCJ], [],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # PIC (with -KPIC) is the default.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ linux* | k*bsd*-gnu)
+ case $cc_basename in
+ icc* | ecc* | ifort*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ pgcc* | pgf77* | pgf90* | pgf95*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ ccc*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # All Alpha code is PIC.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ xl*)
+ # IBM XL C 8.0/Fortran 10.1 on PPC
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C 5.9
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ ;;
+ *Sun\ F*)
+ # Sun Fortran 8.3 passes all unrecognized flags to the linker
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ newsos6)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+
+ osf3* | osf4* | osf5*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # All OSF/1 code is PIC.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ rdos*)
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ solaris*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ case $cc_basename in
+ f77* | f90* | f95*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
+ esac
+ ;;
+
+ sunos4*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ unicos*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+
+ uts4*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ *)
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+ esac
+ fi
+])
+case $host_os in
+ # For platforms which do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
+ ;;
+esac
+AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
+_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
+ [How to pass a linker flag through the compiler])
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+ _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
+ [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
+ [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
+ [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
+ "" | " "*) ;;
+ *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+ esac],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+fi
+_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
+ [Additional compiler flags for building library objects])
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
+_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
+ _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
+ $lt_tmp_static_flag,
+ [],
+ [_LT_TAGVAR(lt_prog_compiler_static, $1)=])
+_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
+ [Compiler flag to prevent dynamic linking])
+])# _LT_COMPILER_PIC
+
+
+# _LT_LINKER_SHLIBS([TAGNAME])
+# ----------------------------
+# See if the linker supports building shared libraries.
+m4_defun([_LT_LINKER_SHLIBS],
+[AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+m4_if([$1], [CXX], [
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ case $host_os in
+ aix[[4-9]]*)
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ else
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ fi
+ ;;
+ pw32*)
+ _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+ ;;
+ cygwin* | mingw*)
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
+ *)
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
+ esac
+ _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+], [
+ runpath_var=
+ _LT_TAGVAR(allow_undefined_flag, $1)=
+ _LT_TAGVAR(always_export_symbols, $1)=no
+ _LT_TAGVAR(archive_cmds, $1)=
+ _LT_TAGVAR(archive_expsym_cmds, $1)=
+ _LT_TAGVAR(compiler_needs_object, $1)=no
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ _LT_TAGVAR(hardcode_automatic, $1)=no
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=
+ _LT_TAGVAR(hardcode_minus_L, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_TAGVAR(inherit_rpath, $1)=no
+ _LT_TAGVAR(link_all_deplibs, $1)=unknown
+ _LT_TAGVAR(module_cmds, $1)=
+ _LT_TAGVAR(module_expsym_cmds, $1)=
+ _LT_TAGVAR(old_archive_from_new_cmds, $1)=
+ _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+ _LT_TAGVAR(thread_safe_flag_spec, $1)=
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ _LT_TAGVAR(include_expsyms, $1)=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ` (' and `)$', so one must not match beginning or
+ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+ # as well as any symbol that contains `d'.
+ _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ # Exclude shared library initialization/finalization symbols.
+dnl Note also adjust exclude_expsyms for C++ above.
+ extract_expsyms_cmds=
+
+ case $host_os in
+ cygwin* | mingw* | pw32*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+ esac
+
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ if test "$with_gnu_ld" = yes; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='${wl}'
+
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ runpath_var=LD_RUN_PATH
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ supports_anon_versioning=no
+ case `$LD -v 2>&1` in
+ *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix[[3-9]]*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+_LT_EOF
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)=''
+ ;;
+ m68k)
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ esac
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+ # as there is no search path for DLLs.
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=no
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ interix[[3-9]]*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+
+ gnu* | linux* | tpf* | k*bsd*-gnu)
+ tmp_diet=no
+ if test "$host_os" = linux-dietlibc; then
+ case $cc_basename in
+ diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn)
+ esac
+ fi
+ if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+ && test "$tmp_diet" = no
+ then
+ tmp_addflag=
+ tmp_sharedflag='-shared'
+ case $cc_basename,$host_cpu in
+ pgcc*) # Portland Group C compiler
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag'
+ ;;
+ pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag -Mnomain' ;;
+ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
+ tmp_addflag=' -i_dynamic' ;;
+ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
+ tmp_addflag=' -i_dynamic -nofor_main' ;;
+ ifc* | ifort*) # Intel Fortran compiler
+ tmp_addflag=' -nofor_main' ;;
+ xl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ tmp_sharedflag='-qmkshrobj'
+ tmp_addflag= ;;
+ esac
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*) # Sun C 5.9
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ _LT_TAGVAR(compiler_needs_object, $1)=yes
+ tmp_sharedflag='-G' ;;
+ *Sun\ F*) # Sun Fortran 8.3
+ tmp_sharedflag='-G' ;;
+ esac
+ _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+ if test "x$supports_anon_versioning" = xyes; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+
+ case $cc_basename in
+ xlf*)
+ # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
+ _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+ if test "x$supports_anon_versioning" = xyes; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ esac
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris*)
+ if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ ;;
+ *)
+ # For security reasons, it is highly recommended that you always
+ # use absolute paths for naming shared libraries, and exclude the
+ # DT_RUNPATH tag from executables and libraries. But doing so
+ # requires that you compile everything twice, which is a pain.
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ sunos4*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+
+ if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then
+ runpath_var=
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ _LT_TAGVAR(hardcode_direct, $1)=unsupported
+ fi
+ ;;
+
+ aix[[4-9]]*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ else
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ fi
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ _LT_TAGVAR(archive_cmds, $1)=''
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[[012]]|aix4.[[012]].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ _LT_TAGVAR(hardcode_direct, $1)=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=
+ fi
+ ;;
+ esac
+ shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ _LT_SYS_MODULE_PATH_AIX
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+ _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ _LT_SYS_MODULE_PATH_AIX
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+ # Exported symbols can be pulled into shared objects from archives
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+ # This is similar to how AIX traditionally builds its shared libraries.
+ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)=''
+ ;;
+ m68k)
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ esac
+ ;;
+
+ bsdi[[45]]*)
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+ # FIXME: Should let the user specify the lib program.
+ _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
+ _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ ;;
+
+ darwin* | rhapsody*)
+ _LT_DARWIN_LINKER_FEATURES($1)
+ ;;
+
+ dgux*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ freebsd1*)
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ hpux9*)
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ ;;
+
+ hpux10*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ if test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ fi
+ ;;
+
+ hpux11*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ fi
+ if test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+ *)
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+ AC_LINK_IFELSE(int foo(void) {},
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+ )
+ LDFLAGS="$save_LDFLAGS"
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(inherit_rpath, $1)=yes
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ newsos6)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *nto* | *qnx*)
+ ;;
+
+ openbsd*)
+ if test -f /usr/libexec/ld.so; then
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ else
+ case $host_os in
+ openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ os2*)
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+ _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+ ;;
+
+ osf3*)
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ else
+ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+ # Both c and cxx compiler support -rpath directly
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+
+ solaris*)
+ _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
+ if test "$GCC" = yes; then
+ wlarc='${wl}'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+ wlarc=''
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+ ;;
+ *)
+ wlarc='${wl}'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ ;;
+ esac
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands `-z linker_flag'. GCC discards it without `$wl',
+ # but is careful enough not to reorder.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+ fi
+ ;;
+ esac
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ sunos4*)
+ if test "x$host_vendor" = xsequent; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ ;;
+ motorola)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv4.3*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ fi
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ uts4*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *)
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+
+ if test x$host_vendor = xsni; then
+ case $host in
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'
+ ;;
+ esac
+ fi
+ fi
+])
+AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
+
+_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
+_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
+_LT_DECL([], [extract_expsyms_cmds], [2],
+ [The commands to extract the exported symbol list from a shared archive])
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
+x|xyes)
+ # Assume -lc should be added
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $_LT_TAGVAR(archive_cmds, $1) in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ AC_MSG_CHECKING([whether -lc should be explicitly linked in])
+ $RM conftest*
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
+ pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
+ _LT_TAGVAR(allow_undefined_flag, $1)=
+ if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
+ then
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ else
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+ fi
+ _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $RM conftest*
+ AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)])
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
+ [Whether or not to add -lc for building shared libraries])
+_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
+ [enable_shared_with_static_runtimes], [0],
+ [Whether or not to disallow shared libs when runtime libs are static])
+_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
+ [Compiler flag to allow reflexive dlopens])
+_LT_TAGDECL([], [whole_archive_flag_spec], [1],
+ [Compiler flag to generate shared objects directly from archives])
+_LT_TAGDECL([], [compiler_needs_object], [1],
+ [Whether the compiler copes with passing no objects directly])
+_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
+ [Create an old-style archive from a shared archive])
+_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
+ [Create a temporary old-style archive to link instead of a shared archive])
+_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
+_LT_TAGDECL([], [archive_expsym_cmds], [2])
+_LT_TAGDECL([], [module_cmds], [2],
+ [Commands used to build a loadable module if different from building
+ a shared archive.])
+_LT_TAGDECL([], [module_expsym_cmds], [2])
+_LT_TAGDECL([], [with_gnu_ld], [1],
+ [Whether we are building with GNU ld or not])
+_LT_TAGDECL([], [allow_undefined_flag], [1],
+ [Flag that allows shared libraries with undefined symbols to be built])
+_LT_TAGDECL([], [no_undefined_flag], [1],
+ [Flag that enforces no undefined symbols])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
+ [Flag to hardcode $libdir into a binary during linking.
+ This must work even if $libdir does not exist])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1],
+ [[If ld is used when linking, flag to hardcode $libdir into a binary
+ during linking. This must work even if $libdir does not exist]])
+_LT_TAGDECL([], [hardcode_libdir_separator], [1],
+ [Whether we need a single "-rpath" flag with a separated argument])
+_LT_TAGDECL([], [hardcode_direct], [0],
+ [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+ DIR into the resulting binary])
+_LT_TAGDECL([], [hardcode_direct_absolute], [0],
+ [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+ DIR into the resulting binary and the resulting library dependency is
+ "absolute", i.e impossible to change by setting ${shlibpath_var} if the
+ library is relocated])
+_LT_TAGDECL([], [hardcode_minus_L], [0],
+ [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+ into the resulting binary])
+_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
+ [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+ into the resulting binary])
+_LT_TAGDECL([], [hardcode_automatic], [0],
+ [Set to "yes" if building a shared library automatically hardcodes DIR
+ into the library and all subsequent libraries and executables linked
+ against it])
+_LT_TAGDECL([], [inherit_rpath], [0],
+ [Set to yes if linker adds runtime paths of dependent libraries
+ to runtime path list])
+_LT_TAGDECL([], [link_all_deplibs], [0],
+ [Whether libtool must link a program against all its dependency libraries])
+_LT_TAGDECL([], [fix_srcfile_path], [1],
+ [Fix the shell variable $srcfile for the compiler])
+_LT_TAGDECL([], [always_export_symbols], [0],
+ [Set to "yes" if exported symbols are required])
+_LT_TAGDECL([], [export_symbols_cmds], [2],
+ [The commands to list exported symbols])
+_LT_TAGDECL([], [exclude_expsyms], [1],
+ [Symbols that should not be listed in the preloaded symbols])
+_LT_TAGDECL([], [include_expsyms], [1],
+ [Symbols that must always be exported])
+_LT_TAGDECL([], [prelink_cmds], [2],
+ [Commands necessary for linking programs (against libraries) with templates])
+_LT_TAGDECL([], [file_list_spec], [1],
+ [Specify filename containing input files])
+dnl FIXME: Not yet implemented
+dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
+dnl [Compiler flag to generate thread safe objects])
+])# _LT_LINKER_SHLIBS
+
+
+# _LT_LANG_C_CONFIG([TAG])
+# ------------------------
+# Ensure that the configuration variables for a C compiler are suitably
+# defined. These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_C_CONFIG],
+[m4_require([_LT_DECL_EGREP])dnl
+lt_save_CC="$CC"
+AC_LANG_PUSH(C)
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+_LT_TAG_COMPILER
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+if test -n "$compiler"; then
+ _LT_COMPILER_NO_RTTI($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+ LT_SYS_DLOPEN_SELF
+ _LT_CMD_STRIPLIB
+
+ # Report which library types will actually be built
+ AC_MSG_CHECKING([if libtool supports shared libraries])
+ AC_MSG_RESULT([$can_build_shared])
+
+ AC_MSG_CHECKING([whether to build shared libraries])
+ test "$can_build_shared" = "no" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+
+ aix[[4-9]]*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ esac
+ AC_MSG_RESULT([$enable_shared])
+
+ AC_MSG_CHECKING([whether to build static libraries])
+ # Make sure either enable_shared or enable_static is yes.
+ test "$enable_shared" = yes || enable_static=yes
+ AC_MSG_RESULT([$enable_static])
+
+ _LT_CONFIG($1)
+fi
+AC_LANG_POP
+CC="$lt_save_CC"
+])# _LT_LANG_C_CONFIG
+
+
+# _LT_PROG_CXX
+# ------------
+# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++
+# compiler, we have our own version here.
+m4_defun([_LT_PROG_CXX],
+[
+pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes])
+AC_PROG_CXX
+if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+ ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+ (test "X$CXX" != "Xg++"))) ; then
+ AC_PROG_CXXCPP
+else
+ _lt_caught_CXX_error=yes
+fi
+popdef([AC_MSG_ERROR])
+])# _LT_PROG_CXX
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([_LT_PROG_CXX], [])
+
+
+# _LT_LANG_CXX_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a C++ compiler are suitably
+# defined. These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_CXX_CONFIG],
+[AC_REQUIRE([_LT_PROG_CXX])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+
+AC_LANG_PUSH(C++)
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(compiler_needs_object, $1)=no
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working. Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_caught_CXX_error" != yes; then
+ # Code to be used in simple compile tests
+ lt_simple_compile_test_code="int some_variable = 0;"
+
+ # Code to be used in simple link tests
+ lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
+
+ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+ _LT_TAG_COMPILER
+
+ # save warnings/boilerplate of simple test code
+ _LT_COMPILER_BOILERPLATE
+ _LT_LINKER_BOILERPLATE
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC=$CC
+ lt_save_LD=$LD
+ lt_save_GCC=$GCC
+ GCC=$GXX
+ lt_save_with_gnu_ld=$with_gnu_ld
+ lt_save_path_LD=$lt_cv_path_LD
+ if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+ lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+ else
+ $as_unset lt_cv_prog_gnu_ld
+ fi
+ if test -n "${lt_cv_path_LDCXX+set}"; then
+ lt_cv_path_LD=$lt_cv_path_LDCXX
+ else
+ $as_unset lt_cv_path_LD
+ fi
+ test -z "${LDCXX+set}" || LD=$LDCXX
+ CC=${CXX-"c++"}
+ compiler=$CC
+ _LT_TAGVAR(compiler, $1)=$CC
+ _LT_CC_BASENAME([$compiler])
+
+ if test -n "$compiler"; then
+ # We don't want -fno-exception when compiling C++ code, so set the
+ # no_builtin_flag separately
+ if test "$GXX" = yes; then
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+ else
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+ fi
+
+ if test "$GXX" = yes; then
+ # Set up default GNU C++ configuration
+
+ LT_PATH_LD
+
+ # Check if GNU C++ uses GNU ld as the underlying linker, since the
+ # archiving commands below assume that GNU ld is being used.
+ if test "$with_gnu_ld" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+ # investigate it a little bit more. (MM)
+ wlarc='${wl}'
+
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+ $GREP 'no-whole-archive' > /dev/null; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ else
+ with_gnu_ld=no
+ wlarc=
+
+ # A generic and very simple default shared library creation
+ # command for GNU C++ for the case where it uses the native
+ # linker, instead of GNU ld. If possible, this setting should
+ # overridden to take advantage of the native linker features on
+ # the platform it is being used on.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+ fi
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+
+ else
+ GXX=no
+ with_gnu_ld=no
+ wlarc=
+ fi
+
+ # PORTME: fill in a description of your system's C++ link characteristics
+ AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ case $host_os in
+ aix3*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aix[[4-9]]*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+ for ld_flag in $LDFLAGS; do
+ case $ld_flag in
+ *-brtl*)
+ aix_use_runtimelinking=yes
+ break
+ ;;
+ esac
+ done
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ _LT_TAGVAR(archive_cmds, $1)=''
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+ if test "$GXX" = yes; then
+ case $host_os in aix4.[[012]]|aix4.[[012]].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ _LT_TAGVAR(hardcode_direct, $1)=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=
+ fi
+ esac
+ shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to
+ # export.
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+ # Determine the default libpath from the value encoded in an empty
+ # executable.
+ _LT_SYS_MODULE_PATH_AIX
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+ _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ _LT_SYS_MODULE_PATH_AIX
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+ # Exported symbols can be pulled into shared objects from archives
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+ # This is similar to how AIX traditionally builds its shared
+ # libraries.
+ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ chorus*)
+ case $cc_basename in
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+ # as there is no search path for DLLs.
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=no
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ darwin* | rhapsody*)
+ _LT_DARWIN_LINKER_FEATURES($1)
+ ;;
+
+ dgux*)
+ case $cc_basename in
+ ec++*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ ghcx*)
+ # Green Hills C++ Compiler
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ freebsd[[12]]*)
+ # C++ shared libraries reported to be fairly broken before
+ # switch to ELF
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ freebsd-elf*)
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ ;;
+
+ freebsd* | dragonfly*)
+ # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+ # conventions
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ ;;
+
+ gnu*)
+ ;;
+
+ hpux9*)
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+
+ case $cc_basename in
+ CC*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aCC*)
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ hpux10*|hpux11*)
+ if test $with_gnu_ld = no; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ ;;
+ *)
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ ;;
+ esac
+ fi
+ case $host_cpu in
+ hppa*64*|ia64*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+ *)
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+ ;;
+ esac
+
+ case $cc_basename in
+ CC*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aCC*)
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ if test $with_gnu_ld = no; then
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ fi
+ else
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ interix[[3-9]]*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+ irix5* | irix6*)
+ case $cc_basename in
+ CC*)
+ # SGI C++
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+
+ # Archives containing C++ object files must be created using
+ # "CC -ar", where "CC" is the IRIX C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ if test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
+ fi
+ fi
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+ esac
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(inherit_rpath, $1)=yes
+ ;;
+
+ linux* | k*bsd*-gnu)
+ case $cc_basename in
+ KCC*)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+ # Archives containing C++ object files must be created using
+ # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+ ;;
+ icpc* | ecpc* )
+ # Intel C++
+ with_gnu_ld=yes
+ # version 8.0 and above of icpc choke on multiply defined symbols
+ # if we add $predep_objects and $postdep_objects, however 7.1 and
+ # earlier do not add the objects themselves.
+ case `$CC -V 2>&1` in
+ *"Version 7."*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ ;;
+ *) # Version 8.0 or newer
+ tmp_idyn=
+ case $host_cpu in
+ ia64*) tmp_idyn=' -i_dynamic';;
+ esac
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ ;;
+ esac
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+ ;;
+ pgCC* | pgcpp*)
+ # Portland Group C++ compiler
+ case `$CC -V` in
+ *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*)
+ _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+ compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
+ _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
+ $RANLIB $oldlib'
+ _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+ ;;
+ *) # Version 6 will use weak symbols
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+ ;;
+ esac
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ ;;
+ cxx*)
+ # Compaq C++
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+ runpath_var=LD_RUN_PATH
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+ ;;
+ xl*)
+ # IBM XL 8.0 on PPC, with GNU ld
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ if test "x$supports_anon_versioning" = xyes; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C++ 5.9
+ _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ _LT_TAGVAR(compiler_needs_object, $1)=yes
+
+ # Not sure whether something based on
+ # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+ # would be better.
+ output_verbose_link_cmd='echo'
+
+ # Archives containing C++ object files must be created using
+ # "CC -xar", where "CC" is the Sun C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ lynxos*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ m88k*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ mvs*)
+ case $cc_basename in
+ cxx*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+ wlarc=
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ fi
+ # Workaround some broken pre-1.5 toolchains
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+ ;;
+
+ *nto* | *qnx*)
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ ;;
+
+ openbsd2*)
+ # C++ shared libraries are fairly broken
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ openbsd*)
+ if test -f /usr/libexec/ld.so; then
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ fi
+ output_verbose_link_cmd=echo
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ osf3* | osf4* | osf5*)
+ case $cc_basename in
+ KCC*)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Archives containing C++ object files must be created using
+ # the KAI C++ compiler.
+ case $host in
+ osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
+ *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
+ esac
+ ;;
+ RCC*)
+ # Rational C++ 2.4.1
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ cxx*)
+ case $host in
+ osf3*)
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ ;;
+ *)
+ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+ echo "-hidden">> $lib.exp~
+ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
+ $RM $lib.exp'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ ;;
+ esac
+
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+ ;;
+ *)
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ case $host in
+ osf3*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ ;;
+ esac
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+
+ else
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ psos*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ sunos4*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.x
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ lcc*)
+ # Lucid
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ solaris*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
+ _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands `-z linker_flag'.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+ ;;
+ esac
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+
+ output_verbose_link_cmd='echo'
+
+ # Archives containing C++ object files must be created using
+ # "CC -xar", where "CC" is the Sun C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+ ;;
+ gcx*)
+ # Green Hills C++ Compiler
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+ # The C++ compiler must be used to create the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+ ;;
+ *)
+ # GNU C++ compiler with Solaris linker
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+ if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+ else
+ # g++ 2.7 appears to require `-G' NOT `-shared' on this
+ # platform.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+ fi
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ ;;
+ esac
+ fi
+ ;;
+ esac
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var='LD_RUN_PATH'
+
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+
+ tandem*)
+ case $cc_basename in
+ NCC*)
+ # NonStop-UX NCC 3.20
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ vxworks*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+
+ AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+ test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+ _LT_TAGVAR(GCC, $1)="$GXX"
+ _LT_TAGVAR(LD, $1)="$LD"
+
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
+ _LT_SYS_HIDDEN_LIBDEPS($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+ fi # test -n "$compiler"
+
+ CC=$lt_save_CC
+ LDCXX=$LD
+ LD=$lt_save_LD
+ GCC=$lt_save_GCC
+ with_gnu_ld=$lt_save_with_gnu_ld
+ lt_cv_path_LDCXX=$lt_cv_path_LD
+ lt_cv_path_LD=$lt_save_path_LD
+ lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+ lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test "$_lt_caught_CXX_error" != yes
+
+AC_LANG_POP
+])# _LT_LANG_CXX_CONFIG
+
+
+# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
+# ---------------------------------
+# Figure out "hidden" library dependencies from verbose
+# compiler output when linking a shared library.
+# Parse the compiler output and extract the necessary
+# objects, libraries and library flags.
+m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+# Dependencies to place before and after the object being linked:
+_LT_TAGVAR(predep_objects, $1)=
+_LT_TAGVAR(postdep_objects, $1)=
+_LT_TAGVAR(predeps, $1)=
+_LT_TAGVAR(postdeps, $1)=
+_LT_TAGVAR(compiler_lib_search_path, $1)=
+
+dnl we can't use the lt_simple_compile_test_code here,
+dnl because it contains code intended for an executable,
+dnl not a library. It's possible we should let each
+dnl tag define a new lt_????_link_test_code variable,
+dnl but it's only used here...
+m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
+int a;
+void foo (void) { a = 0; }
+_LT_EOF
+], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+ Foo (void) { a = 0; }
+private:
+ int a;
+};
+_LT_EOF
+], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
+ subroutine foo
+ implicit none
+ integer*4 a
+ a=0
+ return
+ end
+_LT_EOF
+], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
+ subroutine foo
+ implicit none
+ integer a
+ a=0
+ return
+ end
+_LT_EOF
+], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
+public class foo {
+ private int a;
+ public void bar (void) {
+ a = 0;
+ }
+};
+_LT_EOF
+])
+dnl Parse the compiler output and extract the necessary
+dnl objects, libraries and library flags.
+if AC_TRY_EVAL(ac_compile); then
+ # Parse the compiler output and extract the necessary
+ # objects, libraries and library flags.
+
+ # Sentinel used to keep track of whether or not we are before
+ # the conftest object file.
+ pre_test_object_deps_done=no
+
+ for p in `eval "$output_verbose_link_cmd"`; do
+ case $p in
+
+ -L* | -R* | -l*)
+ # Some compilers place space between "-{L,R}" and the path.
+ # Remove the space.
+ if test $p = "-L" ||
+ test $p = "-R"; then
+ prev=$p
+ continue
+ else
+ prev=
+ fi
+
+ if test "$pre_test_object_deps_done" = no; then
+ case $p in
+ -L* | -R*)
+ # Internal compiler library paths should come after those
+ # provided the user. The postdeps already come after the
+ # user supplied libs so there is no need to process them.
+ if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
+ _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
+ else
+ _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
+ fi
+ ;;
+ # The "-l" case would never come before the object being
+ # linked, so don't bother handling this case.
+ esac
+ else
+ if test -z "$_LT_TAGVAR(postdeps, $1)"; then
+ _LT_TAGVAR(postdeps, $1)="${prev}${p}"
+ else
+ _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
+ fi
+ fi
+ ;;
+
+ *.$objext)
+ # This assumes that the test object file only shows up
+ # once in the compiler output.
+ if test "$p" = "conftest.$objext"; then
+ pre_test_object_deps_done=yes
+ continue
+ fi
+
+ if test "$pre_test_object_deps_done" = no; then
+ if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
+ _LT_TAGVAR(predep_objects, $1)="$p"
+ else
+ _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
+ fi
+ else
+ if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
+ _LT_TAGVAR(postdep_objects, $1)="$p"
+ else
+ _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
+ fi
+ fi
+ ;;
+
+ *) ;; # Ignore the rest.
+
+ esac
+ done
+
+ # Clean up.
+ rm -f a.out a.exe
+else
+ echo "libtool.m4: error: problem compiling $1 test program"
+fi
+
+$RM -f confest.$objext
+
+# PORTME: override above test on systems where it is broken
+m4_if([$1], [CXX],
+[case $host_os in
+interix[[3-9]]*)
+ # Interix 3.5 installs completely hosed .la files for C++, so rather than
+ # hack all around it, let's just trust "g++" to DTRT.
+ _LT_TAGVAR(predep_objects,$1)=
+ _LT_TAGVAR(postdep_objects,$1)=
+ _LT_TAGVAR(postdeps,$1)=
+ ;;
+
+linux*)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C++ 5.9
+
+ # The more standards-conforming stlport4 library is
+ # incompatible with the Cstd library. Avoid specifying
+ # it if it's in CXXFLAGS. Ignore libCrun as
+ # -library=stlport4 depends on it.
+ case " $CXX $CXXFLAGS " in
+ *" -library=stlport4 "*)
+ solaris_use_stlport4=yes
+ ;;
+ esac
+
+ if test "$solaris_use_stlport4" != yes; then
+ _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+ fi
+ ;;
+ esac
+ ;;
+
+solaris*)
+ case $cc_basename in
+ CC*)
+ # The more standards-conforming stlport4 library is
+ # incompatible with the Cstd library. Avoid specifying
+ # it if it's in CXXFLAGS. Ignore libCrun as
+ # -library=stlport4 depends on it.
+ case " $CXX $CXXFLAGS " in
+ *" -library=stlport4 "*)
+ solaris_use_stlport4=yes
+ ;;
+ esac
+
+ # Adding this requires a known-good setup of shared libraries for
+ # Sun compiler versions before 5.6, else PIC objects from an old
+ # archive will be linked into the output, leading to subtle bugs.
+ if test "$solaris_use_stlport4" != yes; then
+ _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+ fi
+ ;;
+ esac
+ ;;
+esac
+])
+
+case " $_LT_TAGVAR(postdeps, $1) " in
+*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+esac
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=
+if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
+fi
+_LT_TAGDECL([], [compiler_lib_search_dirs], [1],
+ [The directories searched by this compiler when creating a shared library])
+_LT_TAGDECL([], [predep_objects], [1],
+ [Dependencies to place before and after the objects being linked to
+ create a shared library])
+_LT_TAGDECL([], [postdep_objects], [1])
+_LT_TAGDECL([], [predeps], [1])
+_LT_TAGDECL([], [postdeps], [1])
+_LT_TAGDECL([], [compiler_lib_search_path], [1],
+ [The library search path used internally by the compiler when linking
+ a shared library])
+])# _LT_SYS_HIDDEN_LIBDEPS
+
+
+# _LT_PROG_F77
+# ------------
+# Since AC_PROG_F77 is broken, in that it returns the empty string
+# if there is no fortran compiler, we have our own version here.
+m4_defun([_LT_PROG_F77],
+[
+pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes])
+AC_PROG_F77
+if test -z "$F77" || test "X$F77" = "Xno"; then
+ _lt_disable_F77=yes
+fi
+popdef([AC_MSG_ERROR])
+])# _LT_PROG_F77
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([_LT_PROG_F77], [])
+
+
+# _LT_LANG_F77_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a Fortran 77 compiler are
+# suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_F77_CONFIG],
+[AC_REQUIRE([_LT_PROG_F77])dnl
+AC_LANG_PUSH(Fortran 77)
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the F77 compiler isn't working. Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_F77" != yes; then
+ # Code to be used in simple compile tests
+ lt_simple_compile_test_code="\
+ subroutine t
+ return
+ end
+"
+
+ # Code to be used in simple link tests
+ lt_simple_link_test_code="\
+ program t
+ end
+"
+
+ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+ _LT_TAG_COMPILER
+
+ # save warnings/boilerplate of simple test code
+ _LT_COMPILER_BOILERPLATE
+ _LT_LINKER_BOILERPLATE
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC="$CC"
+ lt_save_GCC=$GCC
+ CC=${F77-"f77"}
+ compiler=$CC
+ _LT_TAGVAR(compiler, $1)=$CC
+ _LT_CC_BASENAME([$compiler])
+ GCC=$G77
+ if test -n "$compiler"; then
+ AC_MSG_CHECKING([if libtool supports shared libraries])
+ AC_MSG_RESULT([$can_build_shared])
+
+ AC_MSG_CHECKING([whether to build shared libraries])
+ test "$can_build_shared" = "no" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+ aix[[4-9]]*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ esac
+ AC_MSG_RESULT([$enable_shared])
+
+ AC_MSG_CHECKING([whether to build static libraries])
+ # Make sure either enable_shared or enable_static is yes.
+ test "$enable_shared" = yes || enable_static=yes
+ AC_MSG_RESULT([$enable_static])
+
+ _LT_TAGVAR(GCC, $1)="$G77"
+ _LT_TAGVAR(LD, $1)="$LD"
+
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+ fi # test -n "$compiler"
+
+ GCC=$lt_save_GCC
+ CC="$lt_save_CC"
+fi # test "$_lt_disable_F77" != yes
+
+AC_LANG_POP
+])# _LT_LANG_F77_CONFIG
+
+
+# _LT_PROG_FC
+# -----------
+# Since AC_PROG_FC is broken, in that it returns the empty string
+# if there is no fortran compiler, we have our own version here.
+m4_defun([_LT_PROG_FC],
+[
+pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes])
+AC_PROG_FC
+if test -z "$FC" || test "X$FC" = "Xno"; then
+ _lt_disable_FC=yes
+fi
+popdef([AC_MSG_ERROR])
+])# _LT_PROG_FC
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([_LT_PROG_FC], [])
+
+
+# _LT_LANG_FC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for a Fortran compiler are
+# suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_FC_CONFIG],
+[AC_REQUIRE([_LT_PROG_FC])dnl
+AC_LANG_PUSH(Fortran)
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for fc test sources.
+ac_ext=${ac_fc_srcext-f}
+
+# Object file extension for compiled fc test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the FC compiler isn't working. Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_FC" != yes; then
+ # Code to be used in simple compile tests
+ lt_simple_compile_test_code="\
+ subroutine t
+ return
+ end
+"
+
+ # Code to be used in simple link tests
+ lt_simple_link_test_code="\
+ program t
+ end
+"
+
+ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+ _LT_TAG_COMPILER
+
+ # save warnings/boilerplate of simple test code
+ _LT_COMPILER_BOILERPLATE
+ _LT_LINKER_BOILERPLATE
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC="$CC"
+ lt_save_GCC=$GCC
+ CC=${FC-"f95"}
+ compiler=$CC
+ GCC=$ac_cv_fc_compiler_gnu
+
+ _LT_TAGVAR(compiler, $1)=$CC
+ _LT_CC_BASENAME([$compiler])
+
+ if test -n "$compiler"; then
+ AC_MSG_CHECKING([if libtool supports shared libraries])
+ AC_MSG_RESULT([$can_build_shared])
+
+ AC_MSG_CHECKING([whether to build shared libraries])
+ test "$can_build_shared" = "no" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+ aix[[4-9]]*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ esac
+ AC_MSG_RESULT([$enable_shared])
+
+ AC_MSG_CHECKING([whether to build static libraries])
+ # Make sure either enable_shared or enable_static is yes.
+ test "$enable_shared" = yes || enable_static=yes
+ AC_MSG_RESULT([$enable_static])
+
+ _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu"
+ _LT_TAGVAR(LD, $1)="$LD"
+
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
+ _LT_SYS_HIDDEN_LIBDEPS($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+ fi # test -n "$compiler"
+
+ GCC=$lt_save_GCC
+ CC="$lt_save_CC"
+fi # test "$_lt_disable_FC" != yes
+
+AC_LANG_POP
+])# _LT_LANG_FC_CONFIG
+
+
+# _LT_LANG_GCJ_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Java Compiler compiler
+# are suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_GCJ_CONFIG],
+[AC_REQUIRE([LT_PROG_GCJ])dnl
+AC_LANG_SAVE
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GCJ-"gcj"}
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)="$LD"
+_LT_CC_BASENAME([$compiler])
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+
+if test -n "$compiler"; then
+ _LT_COMPILER_NO_RTTI($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC="$lt_save_CC"
+])# _LT_LANG_GCJ_CONFIG
+
+
+# _LT_LANG_RC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for the Windows resource compiler
+# are suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_RC_CONFIG],
+[AC_REQUIRE([LT_PROG_RC])dnl
+AC_LANG_SAVE
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="$lt_simple_compile_test_code"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+lt_save_GCC=$GCC
+GCC=
+CC=${RC-"windres"}
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+
+if test -n "$compiler"; then
+ :
+ _LT_CONFIG($1)
+fi
+
+GCC=$lt_save_GCC
+AC_LANG_RESTORE
+CC="$lt_save_CC"
+])# _LT_LANG_RC_CONFIG
+
+
+# LT_PROG_GCJ
+# -----------
+AC_DEFUN([LT_PROG_GCJ],
+[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
+ [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
+ [AC_CHECK_TOOL(GCJ, gcj,)
+ test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+ AC_SUBST(GCJFLAGS)])])[]dnl
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
+
+
+# LT_PROG_RC
+# ----------
+AC_DEFUN([LT_PROG_RC],
+[AC_CHECK_TOOL(RC, windres,)
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_RC], [])
+
+
+# _LT_DECL_EGREP
+# --------------
+# If we don't have a new enough Autoconf to choose the best grep
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_EGREP],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_REQUIRE([AC_PROG_FGREP])dnl
+test -z "$GREP" && GREP=grep
+_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
+_LT_DECL([], [EGREP], [1], [An ERE matcher])
+_LT_DECL([], [FGREP], [1], [A literal string matcher])
+dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
+AC_SUBST([GREP])
+])
+
+
+# _LT_DECL_SED
+# ------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible. Prefer GNU sed if found.
+m4_defun([_LT_DECL_SED],
+[AC_PROG_SED
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
+_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
+ [Sed that helps us avoid accidentally triggering echo(1) options like -n])
+])# _LT_DECL_SED
+
+m4_ifndef([AC_PROG_SED], [
+# NOTE: This macro has been submitted for inclusion into #
+# GNU Autoconf as AC_PROG_SED. When it is available in #
+# a released version of Autoconf we should remove this #
+# macro and use it instead. #
+
+m4_defun([AC_PROG_SED],
+[AC_MSG_CHECKING([for a sed that does not truncate output])
+AC_CACHE_VAL(lt_cv_path_SED,
+[# Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for lt_ac_prog in sed gsed; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+ lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+ fi
+ done
+ done
+done
+IFS=$as_save_IFS
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+ test ! -f $lt_ac_sed && continue
+ cat /dev/null > conftest.in
+ lt_ac_count=0
+ echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+ # Check for GNU sed and select it if it is found.
+ if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+ lt_cv_path_SED=$lt_ac_sed
+ break
+ fi
+ while true; do
+ cat conftest.in conftest.in >conftest.tmp
+ mv conftest.tmp conftest.in
+ cp conftest.in conftest.nl
+ echo >>conftest.nl
+ $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+ cmp -s conftest.out conftest.nl || break
+ # 10000 chars as input seems more than enough
+ test $lt_ac_count -gt 10 && break
+ lt_ac_count=`expr $lt_ac_count + 1`
+ if test $lt_ac_count -gt $lt_ac_max; then
+ lt_ac_max=$lt_ac_count
+ lt_cv_path_SED=$lt_ac_sed
+ fi
+ done
+done
+])
+SED=$lt_cv_path_SED
+AC_SUBST([SED])
+AC_MSG_RESULT([$SED])
+])#AC_PROG_SED
+])#m4_ifndef
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_SED], [])
+
+
+# _LT_CHECK_SHELL_FEATURES
+# ------------------------
+# Find out whether the shell is Bourne or XSI compatible,
+# or has some other useful features.
+m4_defun([_LT_CHECK_SHELL_FEATURES],
+[AC_MSG_CHECKING([whether the shell understands some XSI constructs])
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+ test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+ = c,a/b,, \
+ && eval 'test $(( 1 + 1 )) -eq 2 \
+ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+ && xsi_shell=yes
+AC_MSG_RESULT([$xsi_shell])
+_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])
+
+AC_MSG_CHECKING([whether the shell understands "+="])
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \
+ >/dev/null 2>&1 \
+ && lt_shell_append=yes
+AC_MSG_RESULT([$lt_shell_append])
+_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append'])
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ lt_unset=unset
+else
+ lt_unset=false
+fi
+_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+ # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+ lt_SP2NL='tr \040 \012'
+ lt_NL2SP='tr \015\012 \040\040'
+ ;;
+ *) # EBCDIC based system
+ lt_SP2NL='tr \100 \n'
+ lt_NL2SP='tr \r\n \100\100'
+ ;;
+esac
+_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
+_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
+])# _LT_CHECK_SHELL_FEATURES
+
+
+# _LT_PROG_XSI_SHELLFNS
+# ---------------------
+# Bourne and XSI compatible variants of some useful shell functions.
+m4_defun([_LT_PROG_XSI_SHELLFNS],
+[case $xsi_shell in
+ yes)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+ case ${1} in
+ */*) func_dirname_result="${1%/*}${2}" ;;
+ * ) func_dirname_result="${3}" ;;
+ esac
+}
+
+# func_basename file
+func_basename ()
+{
+ func_basename_result="${1##*/}"
+}
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+# dirname: Compute the dirname of FILE. If nonempty,
+# add APPEND to the result, otherwise set result
+# to NONDIR_REPLACEMENT.
+# value returned in "$func_dirname_result"
+# basename: Compute filename of FILE.
+# value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+ case ${1} in
+ */*) func_dirname_result="${1%/*}${2}" ;;
+ * ) func_dirname_result="${3}" ;;
+ esac
+ func_basename_result="${1##*/}"
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+func_stripname ()
+{
+ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+ # positional parameters, so assign one to ordinary parameter first.
+ func_stripname_result=${3}
+ func_stripname_result=${func_stripname_result#"${1}"}
+ func_stripname_result=${func_stripname_result%"${2}"}
+}
+
+# func_opt_split
+func_opt_split ()
+{
+ func_opt_split_opt=${1%%=*}
+ func_opt_split_arg=${1#*=}
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+ case ${1} in
+ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+ *) func_lo2o_result=${1} ;;
+ esac
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+ func_xform_result=${1%.*}.lo
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+ func_arith_result=$(( $[*] ))
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+ func_len_result=${#1}
+}
+
+_LT_EOF
+ ;;
+ *) # Bourne compatible functions.
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+ # Extract subdirectory from the argument.
+ func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+ if test "X$func_dirname_result" = "X${1}"; then
+ func_dirname_result="${3}"
+ else
+ func_dirname_result="$func_dirname_result${2}"
+ fi
+}
+
+# func_basename file
+func_basename ()
+{
+ func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+dnl func_dirname_and_basename
+dnl A portable version of this function is already defined in general.m4sh
+dnl so there is no need for it here.
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+ case ${2} in
+ .*) func_stripname_result=`$ECHO "X${3}" \
+ | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
+ *) func_stripname_result=`$ECHO "X${3}" \
+ | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
+ esac
+}
+
+# sed scripts:
+my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q'
+my_sed_long_arg='1s/^-[[^=]]*=//'
+
+# func_opt_split
+func_opt_split ()
+{
+ func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
+ func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+ func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+ func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'`
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+ func_arith_result=`expr "$[@]"`
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+ func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len`
+}
+
+_LT_EOF
+esac
+
+case $lt_shell_append in
+ yes)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+ eval "$[1]+=\$[2]"
+}
+_LT_EOF
+ ;;
+ *)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+ eval "$[1]=\$$[1]\$[2]"
+}
+
+_LT_EOF
+ ;;
+ esac
+])
+
+# Helper functions for option handling. -*- Autoconf -*-
+#
+# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+# Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 6 ltoptions.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
+
+
+# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
+# ------------------------------------------
+m4_define([_LT_MANGLE_OPTION],
+[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
+
+
+# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
+# ---------------------------------------
+# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
+# matching handler defined, dispatch to it. Other OPTION-NAMEs are
+# saved as a flag.
+m4_define([_LT_SET_OPTION],
+[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
+m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
+ _LT_MANGLE_DEFUN([$1], [$2]),
+ [m4_warning([Unknown $1 option `$2'])])[]dnl
+])
+
+
+# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
+# ------------------------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+m4_define([_LT_IF_OPTION],
+[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
+
+
+# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
+# -------------------------------------------------------
+# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
+# are set.
+m4_define([_LT_UNLESS_OPTIONS],
+[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+ [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
+ [m4_define([$0_found])])])[]dnl
+m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
+])[]dnl
+])
+
+
+# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
+# ----------------------------------------
+# OPTION-LIST is a space-separated list of Libtool options associated
+# with MACRO-NAME. If any OPTION has a matching handler declared with
+# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
+# the unknown option and exit.
+m4_defun([_LT_SET_OPTIONS],
+[# Set options
+m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+ [_LT_SET_OPTION([$1], _LT_Option)])
+
+m4_if([$1],[LT_INIT],[
+ dnl
+ dnl Simply set some default values (i.e off) if boolean options were not
+ dnl specified:
+ _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
+ ])
+ _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
+ ])
+ dnl
+ dnl If no reference was made to various pairs of opposing options, then
+ dnl we run the default mode handler for the pair. For example, if neither
+ dnl `shared' nor `disable-shared' was passed, we enable building of shared
+ dnl archives by default:
+ _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
+ _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
+ _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
+ _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
+ [_LT_ENABLE_FAST_INSTALL])
+ ])
+])# _LT_SET_OPTIONS
+
+
+
+# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
+# -----------------------------------------
+m4_define([_LT_MANGLE_DEFUN],
+[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
+
+
+# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
+# -----------------------------------------------
+m4_define([LT_OPTION_DEFINE],
+[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
+])# LT_OPTION_DEFINE
+
+
+# dlopen
+# ------
+LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
+])
+
+AU_DEFUN([AC_LIBTOOL_DLOPEN],
+[_LT_SET_OPTION([LT_INIT], [dlopen])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `dlopen' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
+
+
+# win32-dll
+# ---------
+# Declare package support for building win32 dll's.
+LT_OPTION_DEFINE([LT_INIT], [win32-dll],
+[enable_win32_dll=yes
+
+case $host in
+*-*-cygwin* | *-*-mingw* | *-*-pw32*)
+ AC_CHECK_TOOL(AS, as, false)
+ AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+ AC_CHECK_TOOL(OBJDUMP, objdump, false)
+ ;;
+esac
+
+test -z "$AS" && AS=as
+_LT_DECL([], [AS], [0], [Assembler program])dnl
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl
+])# win32-dll
+
+AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+_LT_SET_OPTION([LT_INIT], [win32-dll])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `win32-dll' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
+
+
+# _LT_ENABLE_SHARED([DEFAULT])
+# ----------------------------
+# implement the --enable-shared flag, and supports the `shared' and
+# `disable-shared' LT_INIT options.
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_SHARED],
+[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([shared],
+ [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+ [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
+ *)
+ enable_shared=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
+
+ _LT_DECL([build_libtool_libs], [enable_shared], [0],
+ [Whether or not to build shared libraries])
+])# _LT_ENABLE_SHARED
+
+LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
+])
+
+AC_DEFUN([AC_DISABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], [disable-shared])
+])
+
+AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_SHARED], [])
+dnl AC_DEFUN([AM_DISABLE_SHARED], [])
+
+
+
+# _LT_ENABLE_STATIC([DEFAULT])
+# ----------------------------
+# implement the --enable-static flag, and support the `static' and
+# `disable-static' LT_INIT options.
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_STATIC],
+[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([static],
+ [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+ [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_static=yes ;;
+ no) enable_static=no ;;
+ *)
+ enable_static=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_static=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
+
+ _LT_DECL([build_old_libs], [enable_static], [0],
+ [Whether or not to build static libraries])
+])# _LT_ENABLE_STATIC
+
+LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
+])
+
+AC_DEFUN([AC_DISABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], [disable-static])
+])
+
+AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_STATIC], [])
+dnl AC_DEFUN([AM_DISABLE_STATIC], [])
+
+
+
+# _LT_ENABLE_FAST_INSTALL([DEFAULT])
+# ----------------------------------
+# implement the --enable-fast-install flag, and support the `fast-install'
+# and `disable-fast-install' LT_INIT options.
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_FAST_INSTALL],
+[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([fast-install],
+ [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+ [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_fast_install=yes ;;
+ no) enable_fast_install=no ;;
+ *)
+ enable_fast_install=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_fast_install=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
+
+_LT_DECL([fast_install], [enable_fast_install], [0],
+ [Whether or not to optimize for fast installation])dnl
+])# _LT_ENABLE_FAST_INSTALL
+
+LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
+
+# Old names:
+AU_DEFUN([AC_ENABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `fast-install' option into LT_INIT's first parameter.])
+])
+
+AU_DEFUN([AC_DISABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `disable-fast-install' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
+dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
+
+
+# _LT_WITH_PIC([MODE])
+# --------------------
+# implement the --with-pic flag, and support the `pic-only' and `no-pic'
+# LT_INIT options.
+# MODE is either `yes' or `no'. If omitted, it defaults to `both'.
+m4_define([_LT_WITH_PIC],
+[AC_ARG_WITH([pic],
+ [AS_HELP_STRING([--with-pic],
+ [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+ [pic_mode="$withval"],
+ [pic_mode=default])
+
+test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
+
+_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
+])# _LT_WITH_PIC
+
+LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
+
+# Old name:
+AU_DEFUN([AC_LIBTOOL_PICMODE],
+[_LT_SET_OPTION([LT_INIT], [pic-only])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `pic-only' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
+
+
+m4_define([_LTDL_MODE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
+ [m4_define([_LTDL_MODE], [nonrecursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [recursive],
+ [m4_define([_LTDL_MODE], [recursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [subproject],
+ [m4_define([_LTDL_MODE], [subproject])])
+
+m4_define([_LTDL_TYPE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [installable],
+ [m4_define([_LTDL_TYPE], [installable])])
+LT_OPTION_DEFINE([LTDL_INIT], [convenience],
+ [m4_define([_LTDL_TYPE], [convenience])])
+
+# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*-
+#
+# Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
+# Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 5 ltsugar.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
+
+
+# lt_join(SEP, ARG1, [ARG2...])
+# -----------------------------
+# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
+# associated separator.
+# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
+# versions in m4sugar had bugs.
+m4_define([lt_join],
+[m4_if([$#], [1], [],
+ [$#], [2], [[$2]],
+ [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
+m4_define([_lt_join],
+[m4_if([$#$2], [2], [],
+ [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
+
+
+# lt_car(LIST)
+# lt_cdr(LIST)
+# ------------
+# Manipulate m4 lists.
+# These macros are necessary as long as will still need to support
+# Autoconf-2.59 which quotes differently.
+m4_define([lt_car], [[$1]])
+m4_define([lt_cdr],
+[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
+ [$#], 1, [],
+ [m4_dquote(m4_shift($@))])])
+m4_define([lt_unquote], $1)
+
+
+# lt_append(MACRO-NAME, STRING, [SEPARATOR])
+# ------------------------------------------
+# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
+# Note that neither SEPARATOR nor STRING are expanded; they are appended
+# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
+# No SEPARATOR is output if MACRO-NAME was previously undefined (different
+# than defined and empty).
+#
+# This macro is needed until we can rely on Autoconf 2.62, since earlier
+# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
+m4_define([lt_append],
+[m4_define([$1],
+ m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
+
+
+
+# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
+# ----------------------------------------------------------
+# Produce a SEP delimited list of all paired combinations of elements of
+# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list
+# has the form PREFIXmINFIXSUFFIXn.
+m4_define([lt_combine],
+[m4_if([$2], [], [],
+ [m4_if([$4], [], [],
+ [lt_join(m4_quote(m4_default([$1], [[, ]])),
+ lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_prefix, [$2],
+ [m4_foreach(_Lt_suffix, lt_car([m4_shiftn(3, $@)]),
+ [_Lt_prefix[]$3[]_Lt_suffix ])])))))])])dnl
+])
+
+
+# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
+# -----------------------------------------------------------------------
+# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
+# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
+m4_define([lt_if_append_uniq],
+[m4_ifdef([$1],
+ [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
+ [lt_append([$1], [$2], [$3])$4],
+ [$5])],
+ [lt_append([$1], [$2], [$3])$4])])
+
+
+# lt_dict_add(DICT, KEY, VALUE)
+# -----------------------------
+m4_define([lt_dict_add],
+[m4_define([$1($2)], [$3])])
+
+
+# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
+# --------------------------------------------
+m4_define([lt_dict_add_subkey],
+[m4_define([$1($2:$3)], [$4])])
+
+
+# lt_dict_fetch(DICT, KEY, [SUBKEY])
+# ----------------------------------
+m4_define([lt_dict_fetch],
+[m4_ifval([$3],
+ m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
+ m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
+
+
+# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
+# -----------------------------------------------------------------
+m4_define([lt_if_dict_fetch],
+[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
+ [$5],
+ [$6])])
+
+
+# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
+# --------------------------------------------------------------
+m4_define([lt_dict_filter],
+[m4_if([$5], [], [],
+ [lt_join(m4_quote(m4_default([$4], [[, ]])),
+ lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
+ [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
+])
+
+# ltversion.m4 -- version numbers -*- Autoconf -*-
+#
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# Written by Scott James Remnant, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# Generated from ltversion.in.
+
+# serial 2976 ltversion.m4
+# This file is part of GNU Libtool
+
+m4_define([LT_PACKAGE_VERSION], [2.2.4])
+m4_define([LT_PACKAGE_REVISION], [1.2976])
+
+AC_DEFUN([LTVERSION_VERSION],
+[macro_version='2.2.4'
+macro_revision='1.2976'
+_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
+_LT_DECL(, macro_revision, 0)
+])
+
+# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*-
+#
+# Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
+# Written by Scott James Remnant, 2004.
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 4 lt~obsolete.m4
+
+# These exist entirely to fool aclocal when bootstrapping libtool.
+#
+# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
+# which have later been changed to m4_define as they aren't part of the
+# exported API, or moved to Autoconf or Automake where they belong.
+#
+# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN
+# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
+# using a macro with the same name in our local m4/libtool.m4 it'll
+# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
+# and doesn't know about Autoconf macros at all.)
+#
+# So we provide this file, which has a silly filename so it's always
+# included after everything else. This provides aclocal with the
+# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
+# because those macros already exist, or will be overwritten later.
+# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6.
+#
+# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
+# Yes, that means every name once taken will need to remain here until
+# we give up compatibility with versions before 1.7, at which point
+# we need to keep only those names which we still refer to.
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
+
+m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
+m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])])
+m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])])
+m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
+m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])])
+m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])])
+m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
+m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])])
+m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])])
+m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])])
+m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
+m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
+m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
+m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
+m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])])
+m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
+m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
+m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])])
+m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])])
+m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
+m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
+m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
+m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
+m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])])
+m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])])
+m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])])
+m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
+m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])])
+m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])])
+m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])])
+m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])])
+m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
+m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])])
+m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
+m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])])
+m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])])
+m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])])
+m4_ifndef([AC_LIBTOOL_RC], [AC_DEFUN([AC_LIBTOOL_RC])])
+m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
+m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
+m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
+m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
+m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
+m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
+m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])])
+m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
+
+m4_include([ft-munmap.m4])
diff --git a/src/3rdparty/freetype/builds/unix/config.guess b/src/3rdparty/freetype/builds/unix/config.guess
new file mode 100755
index 0000000..c7607c7
--- /dev/null
+++ b/src/3rdparty/freetype/builds/unix/config.guess
@@ -0,0 +1,1526 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+# Free Software Foundation, Inc.
+
+timestamp='2008-04-14'
+
+# This file 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., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Originally written by Per Bothner <per@bothner.com>.
+# Please send patches to <config-patches@gnu.org>. Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub. If it succeeds, it prints the system name on stdout, and
+# exits with 0. Otherwise, it exits with 1.
+#
+# The plan is that this can be called by configure scripts if you
+# don't specify an explicit build system type.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit ;;
+ --version | -v )
+ echo "$version" ; exit ;;
+ --help | --h* | -h )
+ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help" >&2
+ exit 1 ;;
+ * )
+ break ;;
+ esac
+done
+
+if test $# != 0; then
+ echo "$me: too many arguments$help" >&2
+ exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,) echo "int x;" > $dummy.c ;
+ for c in cc gcc c89 c99 ; do
+ if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+ CC_FOR_BUILD="$c"; break ;
+ fi ;
+ done ;
+ if test x"$CC_FOR_BUILD" = x ; then
+ CC_FOR_BUILD=no_compiler_found ;
+ fi
+ ;;
+ ,,*) CC_FOR_BUILD=$CC ;;
+ ,*,*) CC_FOR_BUILD=$HOST_CC ;;
+esac ; set_cc_for_build= ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+ PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+ *:NetBSD:*:*)
+ # NetBSD (nbsd) targets should (where applicable) match one or
+ # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+ # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
+ # switched to ELF, *-*-netbsd* would select the old
+ # object file format. This provides both forward
+ # compatibility and a consistent mechanism for selecting the
+ # object file format.
+ #
+ # Note: NetBSD doesn't particularly care about the vendor
+ # portion of the name. We always set it to "unknown".
+ sysctl="sysctl -n hw.machine_arch"
+ UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+ /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+ case "${UNAME_MACHINE_ARCH}" in
+ armeb) machine=armeb-unknown ;;
+ arm*) machine=arm-unknown ;;
+ sh3el) machine=shl-unknown ;;
+ sh3eb) machine=sh-unknown ;;
+ sh5el) machine=sh5le-unknown ;;
+ *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+ esac
+ # The Operating System including object format, if it has switched
+ # to ELF recently, or will in the future.
+ case "${UNAME_MACHINE_ARCH}" in
+ arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+ eval $set_cc_for_build
+ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep __ELF__ >/dev/null
+ then
+ # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+ # Return netbsd for either. FIX?
+ os=netbsd
+ else
+ os=netbsdelf
+ fi
+ ;;
+ *)
+ os=netbsd
+ ;;
+ esac
+ # The OS release
+ # Debian GNU/NetBSD machines have a different userland, and
+ # thus, need a distinct triplet. However, they do not need
+ # kernel version information, so it can be replaced with a
+ # suitable tag, in the style of linux-gnu.
+ case "${UNAME_VERSION}" in
+ Debian*)
+ release='-gnu'
+ ;;
+ *)
+ release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ ;;
+ esac
+ # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+ # contains redundant information, the shorter form:
+ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+ echo "${machine}-${os}${release}"
+ exit ;;
+ *:OpenBSD:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+ echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+ exit ;;
+ *:ekkoBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+ exit ;;
+ *:SolidBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+ exit ;;
+ macppc:MirBSD:*:*)
+ echo powerpc-unknown-mirbsd${UNAME_RELEASE}
+ exit ;;
+ *:MirBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+ exit ;;
+ alpha:OSF1:*:*)
+ case $UNAME_RELEASE in
+ *4.0)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+ ;;
+ *5.*)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+ ;;
+ esac
+ # According to Compaq, /usr/sbin/psrinfo has been available on
+ # OSF/1 and Tru64 systems produced since 1995. I hope that
+ # covers most systems running today. This code pipes the CPU
+ # types through head -n 1, so we only detect the type of CPU 0.
+ ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+ case "$ALPHA_CPU_TYPE" in
+ "EV4 (21064)")
+ UNAME_MACHINE="alpha" ;;
+ "EV4.5 (21064)")
+ UNAME_MACHINE="alpha" ;;
+ "LCA4 (21066/21068)")
+ UNAME_MACHINE="alpha" ;;
+ "EV5 (21164)")
+ UNAME_MACHINE="alphaev5" ;;
+ "EV5.6 (21164A)")
+ UNAME_MACHINE="alphaev56" ;;
+ "EV5.6 (21164PC)")
+ UNAME_MACHINE="alphapca56" ;;
+ "EV5.7 (21164PC)")
+ UNAME_MACHINE="alphapca57" ;;
+ "EV6 (21264)")
+ UNAME_MACHINE="alphaev6" ;;
+ "EV6.7 (21264A)")
+ UNAME_MACHINE="alphaev67" ;;
+ "EV6.8CB (21264C)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.8AL (21264B)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.8CX (21264D)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.9A (21264/EV69A)")
+ UNAME_MACHINE="alphaev69" ;;
+ "EV7 (21364)")
+ UNAME_MACHINE="alphaev7" ;;
+ "EV7.9 (21364A)")
+ UNAME_MACHINE="alphaev79" ;;
+ esac
+ # A Pn.n version is a patched version.
+ # A Vn.n version is a released version.
+ # A Tn.n version is a released field test version.
+ # A Xn.n version is an unreleased experimental baselevel.
+ # 1.2 uses "1.2" for uname -r.
+ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ exit ;;
+ Alpha\ *:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # Should we change UNAME_MACHINE based on the output of uname instead
+ # of the specific Alpha model?
+ echo alpha-pc-interix
+ exit ;;
+ 21064:Windows_NT:50:3)
+ echo alpha-dec-winnt3.5
+ exit ;;
+ Amiga*:UNIX_System_V:4.0:*)
+ echo m68k-unknown-sysv4
+ exit ;;
+ *:[Aa]miga[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-amigaos
+ exit ;;
+ *:[Mm]orph[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-morphos
+ exit ;;
+ *:OS/390:*:*)
+ echo i370-ibm-openedition
+ exit ;;
+ *:z/VM:*:*)
+ echo s390-ibm-zvmoe
+ exit ;;
+ *:OS400:*:*)
+ echo powerpc-ibm-os400
+ exit ;;
+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+ echo arm-acorn-riscix${UNAME_RELEASE}
+ exit ;;
+ arm:riscos:*:*|arm:RISCOS:*:*)
+ echo arm-unknown-riscos
+ exit ;;
+ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+ echo hppa1.1-hitachi-hiuxmpp
+ exit ;;
+ Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+ # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+ if test "`(/bin/universe) 2>/dev/null`" = att ; then
+ echo pyramid-pyramid-sysv3
+ else
+ echo pyramid-pyramid-bsd
+ fi
+ exit ;;
+ NILE*:*:*:dcosx)
+ echo pyramid-pyramid-svr4
+ exit ;;
+ DRS?6000:unix:4.0:6*)
+ echo sparc-icl-nx6
+ exit ;;
+ DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+ case `/usr/bin/uname -p` in
+ sparc) echo sparc-icl-nx7; exit ;;
+ esac ;;
+ sun4H:SunOS:5.*:*)
+ echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+ echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
+ echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:6*:*)
+ # According to config.sub, this is the proper way to canonicalize
+ # SunOS6. Hard to guess exactly what SunOS6 will be like, but
+ # it's likely to be more like Solaris than SunOS4.
+ echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:*:*)
+ case "`/usr/bin/arch -k`" in
+ Series*|S4*)
+ UNAME_RELEASE=`uname -v`
+ ;;
+ esac
+ # Japanese Language versions have a version number like `4.1.3-JL'.
+ echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+ exit ;;
+ sun3*:SunOS:*:*)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ exit ;;
+ sun*:*:4.2BSD:*)
+ UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+ test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+ case "`/bin/arch`" in
+ sun3)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ ;;
+ sun4)
+ echo sparc-sun-sunos${UNAME_RELEASE}
+ ;;
+ esac
+ exit ;;
+ aushp:SunOS:*:*)
+ echo sparc-auspex-sunos${UNAME_RELEASE}
+ exit ;;
+ # The situation for MiNT is a little confusing. The machine name
+ # can be virtually everything (everything which is not
+ # "atarist" or "atariste" at least should have a processor
+ # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
+ # to the lowercase version "mint" (or "freemint"). Finally
+ # the system name "TOS" denotes a system which is actually not
+ # MiNT. But MiNT is downward compatible to TOS, so this should
+ # be no problem.
+ atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+ echo m68k-milan-mint${UNAME_RELEASE}
+ exit ;;
+ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+ echo m68k-hades-mint${UNAME_RELEASE}
+ exit ;;
+ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+ echo m68k-unknown-mint${UNAME_RELEASE}
+ exit ;;
+ m68k:machten:*:*)
+ echo m68k-apple-machten${UNAME_RELEASE}
+ exit ;;
+ powerpc:machten:*:*)
+ echo powerpc-apple-machten${UNAME_RELEASE}
+ exit ;;
+ RISC*:Mach:*:*)
+ echo mips-dec-mach_bsd4.3
+ exit ;;
+ RISC*:ULTRIX:*:*)
+ echo mips-dec-ultrix${UNAME_RELEASE}
+ exit ;;
+ VAX*:ULTRIX*:*:*)
+ echo vax-dec-ultrix${UNAME_RELEASE}
+ exit ;;
+ 2020:CLIX:*:* | 2430:CLIX:*:*)
+ echo clipper-intergraph-clix${UNAME_RELEASE}
+ exit ;;
+ mips:*:*:UMIPS | mips:*:*:RISCos)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h> /* for printf() prototype */
+ int main (int argc, char *argv[]) {
+#else
+ int main (argc, argv) int argc; char *argv[]; {
+#endif
+ #if defined (host_mips) && defined (MIPSEB)
+ #if defined (SYSTYPE_SYSV)
+ printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_SVR4)
+ printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+ printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+ #endif
+ #endif
+ exit (-1);
+ }
+EOF
+ $CC_FOR_BUILD -o $dummy $dummy.c &&
+ dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+ SYSTEM_NAME=`$dummy $dummyarg` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ echo mips-mips-riscos${UNAME_RELEASE}
+ exit ;;
+ Motorola:PowerMAX_OS:*:*)
+ echo powerpc-motorola-powermax
+ exit ;;
+ Motorola:*:4.3:PL8-*)
+ echo powerpc-harris-powermax
+ exit ;;
+ Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+ echo powerpc-harris-powermax
+ exit ;;
+ Night_Hawk:Power_UNIX:*:*)
+ echo powerpc-harris-powerunix
+ exit ;;
+ m88k:CX/UX:7*:*)
+ echo m88k-harris-cxux7
+ exit ;;
+ m88k:*:4*:R4*)
+ echo m88k-motorola-sysv4
+ exit ;;
+ m88k:*:3*:R3*)
+ echo m88k-motorola-sysv3
+ exit ;;
+ AViiON:dgux:*:*)
+ # DG/UX returns AViiON for all architectures
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+ then
+ if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+ [ ${TARGET_BINARY_INTERFACE}x = x ]
+ then
+ echo m88k-dg-dgux${UNAME_RELEASE}
+ else
+ echo m88k-dg-dguxbcs${UNAME_RELEASE}
+ fi
+ else
+ echo i586-dg-dgux${UNAME_RELEASE}
+ fi
+ exit ;;
+ M88*:DolphinOS:*:*) # DolphinOS (SVR3)
+ echo m88k-dolphin-sysv3
+ exit ;;
+ M88*:*:R3*:*)
+ # Delta 88k system running SVR3
+ echo m88k-motorola-sysv3
+ exit ;;
+ XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+ echo m88k-tektronix-sysv3
+ exit ;;
+ Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+ echo m68k-tektronix-bsd
+ exit ;;
+ *:IRIX*:*:*)
+ echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+ exit ;;
+ ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+ echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
+ exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '
+ i*86:AIX:*:*)
+ echo i386-ibm-aix
+ exit ;;
+ ia64:AIX:*:*)
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+ exit ;;
+ *:AIX:2:3)
+ if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <sys/systemcfg.h>
+
+ main()
+ {
+ if (!__power_pc())
+ exit(1);
+ puts("powerpc-ibm-aix3.2.5");
+ exit(0);
+ }
+EOF
+ if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+ then
+ echo "$SYSTEM_NAME"
+ else
+ echo rs6000-ibm-aix3.2.5
+ fi
+ elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+ echo rs6000-ibm-aix3.2.4
+ else
+ echo rs6000-ibm-aix3.2
+ fi
+ exit ;;
+ *:AIX:*:[456])
+ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+ if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+ IBM_ARCH=rs6000
+ else
+ IBM_ARCH=powerpc
+ fi
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+ exit ;;
+ *:AIX:*:*)
+ echo rs6000-ibm-aix
+ exit ;;
+ ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+ echo romp-ibm-bsd4.4
+ exit ;;
+ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
+ echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
+ exit ;; # report: romp-ibm BSD 4.3
+ *:BOSX:*:*)
+ echo rs6000-bull-bosx
+ exit ;;
+ DPX/2?00:B.O.S.:*:*)
+ echo m68k-bull-sysv3
+ exit ;;
+ 9000/[34]??:4.3bsd:1.*:*)
+ echo m68k-hp-bsd
+ exit ;;
+ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+ echo m68k-hp-bsd4.4
+ exit ;;
+ 9000/[34678]??:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ case "${UNAME_MACHINE}" in
+ 9000/31? ) HP_ARCH=m68000 ;;
+ 9000/[34]?? ) HP_ARCH=m68k ;;
+ 9000/[678][0-9][0-9])
+ if [ -x /usr/bin/getconf ]; then
+ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+ case "${sc_cpu_version}" in
+ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+ 532) # CPU_PA_RISC2_0
+ case "${sc_kernel_bits}" in
+ 32) HP_ARCH="hppa2.0n" ;;
+ 64) HP_ARCH="hppa2.0w" ;;
+ '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
+ esac ;;
+ esac
+ fi
+ if [ "${HP_ARCH}" = "" ]; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+
+ #define _HPUX_SOURCE
+ #include <stdlib.h>
+ #include <unistd.h>
+
+ int main ()
+ {
+ #if defined(_SC_KERNEL_BITS)
+ long bits = sysconf(_SC_KERNEL_BITS);
+ #endif
+ long cpu = sysconf (_SC_CPU_VERSION);
+
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+ case CPU_PA_RISC2_0:
+ #if defined(_SC_KERNEL_BITS)
+ switch (bits)
+ {
+ case 64: puts ("hppa2.0w"); break;
+ case 32: puts ("hppa2.0n"); break;
+ default: puts ("hppa2.0"); break;
+ } break;
+ #else /* !defined(_SC_KERNEL_BITS) */
+ puts ("hppa2.0"); break;
+ #endif
+ default: puts ("hppa1.0"); break;
+ }
+ exit (0);
+ }
+EOF
+ (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+ test -z "$HP_ARCH" && HP_ARCH=hppa
+ fi ;;
+ esac
+ if [ ${HP_ARCH} = "hppa2.0w" ]
+ then
+ eval $set_cc_for_build
+
+ # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+ # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
+ # generating 64-bit code. GNU and HP use different nomenclature:
+ #
+ # $ CC_FOR_BUILD=cc ./config.guess
+ # => hppa2.0w-hp-hpux11.23
+ # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+ # => hppa64-hp-hpux11.23
+
+ if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+ grep __LP64__ >/dev/null
+ then
+ HP_ARCH="hppa2.0w"
+ else
+ HP_ARCH="hppa64"
+ fi
+ fi
+ echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+ exit ;;
+ ia64:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ echo ia64-hp-hpux${HPUX_REV}
+ exit ;;
+ 3050*:HI-UX:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <unistd.h>
+ int
+ main ()
+ {
+ long cpu = sysconf (_SC_CPU_VERSION);
+ /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+ true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
+ results, however. */
+ if (CPU_IS_PA_RISC (cpu))
+ {
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+ default: puts ("hppa-hitachi-hiuxwe2"); break;
+ }
+ }
+ else if (CPU_IS_HP_MC68K (cpu))
+ puts ("m68k-hitachi-hiuxwe2");
+ else puts ("unknown-hitachi-hiuxwe2");
+ exit (0);
+ }
+EOF
+ $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ echo unknown-hitachi-hiuxwe2
+ exit ;;
+ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+ echo hppa1.1-hp-bsd
+ exit ;;
+ 9000/8??:4.3bsd:*:*)
+ echo hppa1.0-hp-bsd
+ exit ;;
+ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+ echo hppa1.0-hp-mpeix
+ exit ;;
+ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+ echo hppa1.1-hp-osf
+ exit ;;
+ hp8??:OSF1:*:*)
+ echo hppa1.0-hp-osf
+ exit ;;
+ i*86:OSF1:*:*)
+ if [ -x /usr/sbin/sysversion ] ; then
+ echo ${UNAME_MACHINE}-unknown-osf1mk
+ else
+ echo ${UNAME_MACHINE}-unknown-osf1
+ fi
+ exit ;;
+ parisc*:Lites*:*:*)
+ echo hppa1.1-hp-lites
+ exit ;;
+ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+ echo c1-convex-bsd
+ exit ;;
+ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit ;;
+ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+ echo c34-convex-bsd
+ exit ;;
+ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+ echo c38-convex-bsd
+ exit ;;
+ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+ echo c4-convex-bsd
+ exit ;;
+ CRAY*Y-MP:*:*:*)
+ echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*[A-Z]90:*:*:*)
+ echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+ -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*TS:*:*:*)
+ echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*T3E:*:*:*)
+ echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*SV1:*:*:*)
+ echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ *:UNICOS/mp:*:*)
+ echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+ FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit ;;
+ 5000:UNIX_System_V:4.*:*)
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+ echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit ;;
+ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+ echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+ exit ;;
+ sparc*:BSD/OS:*:*)
+ echo sparc-unknown-bsdi${UNAME_RELEASE}
+ exit ;;
+ *:BSD/OS:*:*)
+ echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+ exit ;;
+ *:FreeBSD:*:*)
+ case ${UNAME_MACHINE} in
+ pc98)
+ echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ amd64)
+ echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ *)
+ echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ esac
+ exit ;;
+ i*:CYGWIN*:*)
+ echo ${UNAME_MACHINE}-pc-cygwin
+ exit ;;
+ *:MINGW*:*)
+ echo ${UNAME_MACHINE}-pc-mingw32
+ exit ;;
+ i*:windows32*:*)
+ # uname -m includes "-pc" on this system.
+ echo ${UNAME_MACHINE}-mingw32
+ exit ;;
+ i*:PW*:*)
+ echo ${UNAME_MACHINE}-pc-pw32
+ exit ;;
+ *:Interix*:[3456]*)
+ case ${UNAME_MACHINE} in
+ x86)
+ echo i586-pc-interix${UNAME_RELEASE}
+ exit ;;
+ EM64T | authenticamd)
+ echo x86_64-unknown-interix${UNAME_RELEASE}
+ exit ;;
+ IA64)
+ echo ia64-unknown-interix${UNAME_RELEASE}
+ exit ;;
+ esac ;;
+ [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+ echo i${UNAME_MACHINE}-pc-mks
+ exit ;;
+ i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+ # UNAME_MACHINE based on the output of uname instead of i386?
+ echo i586-pc-interix
+ exit ;;
+ i*:UWIN*:*)
+ echo ${UNAME_MACHINE}-pc-uwin
+ exit ;;
+ amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+ echo x86_64-unknown-cygwin
+ exit ;;
+ p*:CYGWIN*:*)
+ echo powerpcle-unknown-cygwin
+ exit ;;
+ prep*:SunOS:5.*:*)
+ echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ *:GNU:*:*)
+ # the GNU system
+ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+ exit ;;
+ *:GNU/*:*:*)
+ # other systems with GNU libc and userland
+ echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+ exit ;;
+ i*86:Minix:*:*)
+ echo ${UNAME_MACHINE}-pc-minix
+ exit ;;
+ arm*:Linux:*:*)
+ eval $set_cc_for_build
+ if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_EABI__
+ then
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ else
+ echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+ fi
+ exit ;;
+ avr32*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ cris:Linux:*:*)
+ echo cris-axis-linux-gnu
+ exit ;;
+ crisv32:Linux:*:*)
+ echo crisv32-axis-linux-gnu
+ exit ;;
+ frv:Linux:*:*)
+ echo frv-unknown-linux-gnu
+ exit ;;
+ ia64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ m32r*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ m68*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ mips:Linux:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #undef CPU
+ #undef mips
+ #undef mipsel
+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+ CPU=mipsel
+ #else
+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+ CPU=mips
+ #else
+ CPU=
+ #endif
+ #endif
+EOF
+ eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+ /^CPU/{
+ s: ::g
+ p
+ }'`"
+ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+ ;;
+ mips64:Linux:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #undef CPU
+ #undef mips64
+ #undef mips64el
+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+ CPU=mips64el
+ #else
+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+ CPU=mips64
+ #else
+ CPU=
+ #endif
+ #endif
+EOF
+ eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+ /^CPU/{
+ s: ::g
+ p
+ }'`"
+ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+ ;;
+ or32:Linux:*:*)
+ echo or32-unknown-linux-gnu
+ exit ;;
+ ppc:Linux:*:*)
+ echo powerpc-unknown-linux-gnu
+ exit ;;
+ ppc64:Linux:*:*)
+ echo powerpc64-unknown-linux-gnu
+ exit ;;
+ alpha:Linux:*:*)
+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+ EV5) UNAME_MACHINE=alphaev5 ;;
+ EV56) UNAME_MACHINE=alphaev56 ;;
+ PCA56) UNAME_MACHINE=alphapca56 ;;
+ PCA57) UNAME_MACHINE=alphapca56 ;;
+ EV6) UNAME_MACHINE=alphaev6 ;;
+ EV67) UNAME_MACHINE=alphaev67 ;;
+ EV68*) UNAME_MACHINE=alphaev68 ;;
+ esac
+ objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
+ if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+ echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+ exit ;;
+ parisc:Linux:*:* | hppa:Linux:*:*)
+ # Look for CPU level
+ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+ PA7*) echo hppa1.1-unknown-linux-gnu ;;
+ PA8*) echo hppa2.0-unknown-linux-gnu ;;
+ *) echo hppa-unknown-linux-gnu ;;
+ esac
+ exit ;;
+ parisc64:Linux:*:* | hppa64:Linux:*:*)
+ echo hppa64-unknown-linux-gnu
+ exit ;;
+ s390:Linux:*:* | s390x:Linux:*:*)
+ echo ${UNAME_MACHINE}-ibm-linux
+ exit ;;
+ sh64*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ sh*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ sparc:Linux:*:* | sparc64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ vax:Linux:*:*)
+ echo ${UNAME_MACHINE}-dec-linux-gnu
+ exit ;;
+ x86_64:Linux:*:*)
+ echo x86_64-unknown-linux-gnu
+ exit ;;
+ xtensa*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ i*86:Linux:*:*)
+ # The BFD linker knows what the default object file format is, so
+ # first see if it will tell us. cd to the root directory to prevent
+ # problems with other programs or directories called `ld' in the path.
+ # Set LC_ALL=C to ensure ld outputs messages in English.
+ ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
+ | sed -ne '/supported targets:/!d
+ s/[ ][ ]*/ /g
+ s/.*supported targets: *//
+ s/ .*//
+ p'`
+ case "$ld_supported_targets" in
+ elf32-i386)
+ TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
+ ;;
+ a.out-i386-linux)
+ echo "${UNAME_MACHINE}-pc-linux-gnuaout"
+ exit ;;
+ "")
+ # Either a pre-BFD a.out linker (linux-gnuoldld) or
+ # one that does not give us useful --help.
+ echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
+ exit ;;
+ esac
+ # Determine whether the default compiler is a.out or elf
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <features.h>
+ #ifdef __ELF__
+ # ifdef __GLIBC__
+ # if __GLIBC__ >= 2
+ LIBC=gnu
+ # else
+ LIBC=gnulibc1
+ # endif
+ # else
+ LIBC=gnulibc1
+ # endif
+ #else
+ #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
+ LIBC=gnu
+ #else
+ LIBC=gnuaout
+ #endif
+ #endif
+ #ifdef __dietlibc__
+ LIBC=dietlibc
+ #endif
+EOF
+ eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+ /^LIBC/{
+ s: ::g
+ p
+ }'`"
+ test x"${LIBC}" != x && {
+ echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+ exit
+ }
+ test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
+ ;;
+ i*86:DYNIX/ptx:4*:*)
+ # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+ # earlier versions are messed up and put the nodename in both
+ # sysname and nodename.
+ echo i386-sequent-sysv4
+ exit ;;
+ i*86:UNIX_SV:4.2MP:2.*)
+ # Unixware is an offshoot of SVR4, but it has its own version
+ # number series starting with 2...
+ # I am not positive that other SVR4 systems won't match this,
+ # I just have to hope. -- rms.
+ # Use sysv4.2uw... so that sysv4* matches it.
+ echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+ exit ;;
+ i*86:OS/2:*:*)
+ # If we were able to find `uname', then EMX Unix compatibility
+ # is probably installed.
+ echo ${UNAME_MACHINE}-pc-os2-emx
+ exit ;;
+ i*86:XTS-300:*:STOP)
+ echo ${UNAME_MACHINE}-unknown-stop
+ exit ;;
+ i*86:atheos:*:*)
+ echo ${UNAME_MACHINE}-unknown-atheos
+ exit ;;
+ i*86:syllable:*:*)
+ echo ${UNAME_MACHINE}-pc-syllable
+ exit ;;
+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+ echo i386-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ i*86:*DOS:*:*)
+ echo ${UNAME_MACHINE}-pc-msdosdjgpp
+ exit ;;
+ i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+ UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+ if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+ echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+ else
+ echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+ fi
+ exit ;;
+ i*86:*:5:[678]*)
+ # UnixWare 7.x, OpenUNIX and OpenServer 6.
+ case `/bin/uname -X | grep "^Machine"` in
+ *486*) UNAME_MACHINE=i486 ;;
+ *Pentium) UNAME_MACHINE=i586 ;;
+ *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+ esac
+ echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+ exit ;;
+ i*86:*:3.2:*)
+ if test -f /usr/options/cb.name; then
+ UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+ echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+ elif /bin/uname -X 2>/dev/null >/dev/null ; then
+ UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+ (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+ (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+ && UNAME_MACHINE=i586
+ (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+ && UNAME_MACHINE=i686
+ (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+ && UNAME_MACHINE=i686
+ echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+ else
+ echo ${UNAME_MACHINE}-pc-sysv32
+ fi
+ exit ;;
+ pc:*:*:*)
+ # Left here for compatibility:
+ # uname -m prints for DJGPP always 'pc', but it prints nothing about
+ # the processor, so we play safe by assuming i386.
+ echo i386-pc-msdosdjgpp
+ exit ;;
+ Intel:Mach:3*:*)
+ echo i386-pc-mach3
+ exit ;;
+ paragon:*:*:*)
+ echo i860-intel-osf1
+ exit ;;
+ i860:*:4.*:*) # i860-SVR4
+ if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+ echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+ else # Add other i860-SVR4 vendors below as they are discovered.
+ echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
+ fi
+ exit ;;
+ mini*:CTIX:SYS*5:*)
+ # "miniframe"
+ echo m68010-convergent-sysv
+ exit ;;
+ mc68k:UNIX:SYSTEM5:3.51m)
+ echo m68k-convergent-sysv
+ exit ;;
+ M680?0:D-NIX:5.3:*)
+ echo m68k-diab-dnix
+ exit ;;
+ M68*:*:R3V[5678]*:*)
+ test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+ 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+ OS_REL=''
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4; exit; } ;;
+ m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+ echo m68k-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ mc68030:UNIX_System_V:4.*:*)
+ echo m68k-atari-sysv4
+ exit ;;
+ TSUNAMI:LynxOS:2.*:*)
+ echo sparc-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ rs6000:LynxOS:2.*:*)
+ echo rs6000-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+ echo powerpc-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ SM[BE]S:UNIX_SV:*:*)
+ echo mips-dde-sysv${UNAME_RELEASE}
+ exit ;;
+ RM*:ReliantUNIX-*:*:*)
+ echo mips-sni-sysv4
+ exit ;;
+ RM*:SINIX-*:*:*)
+ echo mips-sni-sysv4
+ exit ;;
+ *:SINIX-*:*:*)
+ if uname -p 2>/dev/null >/dev/null ; then
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ echo ${UNAME_MACHINE}-sni-sysv4
+ else
+ echo ns32k-sni-sysv
+ fi
+ exit ;;
+ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+ # says <Richard.M.Bartel@ccMail.Census.GOV>
+ echo i586-unisys-sysv4
+ exit ;;
+ *:UNIX_System_V:4*:FTX*)
+ # From Gerald Hewes <hewes@openmarket.com>.
+ # How about differentiating between stratus architectures? -djm
+ echo hppa1.1-stratus-sysv4
+ exit ;;
+ *:*:*:FTX*)
+ # From seanf@swdc.stratus.com.
+ echo i860-stratus-sysv4
+ exit ;;
+ i*86:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ echo ${UNAME_MACHINE}-stratus-vos
+ exit ;;
+ *:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ echo hppa1.1-stratus-vos
+ exit ;;
+ mc68*:A/UX:*:*)
+ echo m68k-apple-aux${UNAME_RELEASE}
+ exit ;;
+ news*:NEWS-OS:6*:*)
+ echo mips-sony-newsos6
+ exit ;;
+ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+ if [ -d /usr/nec ]; then
+ echo mips-nec-sysv${UNAME_RELEASE}
+ else
+ echo mips-unknown-sysv${UNAME_RELEASE}
+ fi
+ exit ;;
+ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
+ echo powerpc-be-beos
+ exit ;;
+ BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
+ echo powerpc-apple-beos
+ exit ;;
+ BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
+ echo i586-pc-beos
+ exit ;;
+ BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
+ echo i586-pc-haiku
+ exit ;;
+ SX-4:SUPER-UX:*:*)
+ echo sx4-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-5:SUPER-UX:*:*)
+ echo sx5-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-6:SUPER-UX:*:*)
+ echo sx6-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-7:SUPER-UX:*:*)
+ echo sx7-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-8:SUPER-UX:*:*)
+ echo sx8-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-8R:SUPER-UX:*:*)
+ echo sx8r-nec-superux${UNAME_RELEASE}
+ exit ;;
+ Power*:Rhapsody:*:*)
+ echo powerpc-apple-rhapsody${UNAME_RELEASE}
+ exit ;;
+ *:Rhapsody:*:*)
+ echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+ exit ;;
+ *:Darwin:*:*)
+ UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+ case $UNAME_PROCESSOR in
+ unknown) UNAME_PROCESSOR=powerpc ;;
+ esac
+ echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+ exit ;;
+ *:procnto*:*:* | *:QNX:[0123456789]*:*)
+ UNAME_PROCESSOR=`uname -p`
+ if test "$UNAME_PROCESSOR" = "x86"; then
+ UNAME_PROCESSOR=i386
+ UNAME_MACHINE=pc
+ fi
+ echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+ exit ;;
+ *:QNX:*:4*)
+ echo i386-pc-qnx
+ exit ;;
+ NSE-?:NONSTOP_KERNEL:*:*)
+ echo nse-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ NSR-?:NONSTOP_KERNEL:*:*)
+ echo nsr-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ *:NonStop-UX:*:*)
+ echo mips-compaq-nonstopux
+ exit ;;
+ BS2000:POSIX*:*:*)
+ echo bs2000-siemens-sysv
+ exit ;;
+ DS/*:UNIX_System_V:*:*)
+ echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+ exit ;;
+ *:Plan9:*:*)
+ # "uname -m" is not consistent, so use $cputype instead. 386
+ # is converted to i386 for consistency with other x86
+ # operating systems.
+ if test "$cputype" = "386"; then
+ UNAME_MACHINE=i386
+ else
+ UNAME_MACHINE="$cputype"
+ fi
+ echo ${UNAME_MACHINE}-unknown-plan9
+ exit ;;
+ *:TOPS-10:*:*)
+ echo pdp10-unknown-tops10
+ exit ;;
+ *:TENEX:*:*)
+ echo pdp10-unknown-tenex
+ exit ;;
+ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+ echo pdp10-dec-tops20
+ exit ;;
+ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+ echo pdp10-xkl-tops20
+ exit ;;
+ *:TOPS-20:*:*)
+ echo pdp10-unknown-tops20
+ exit ;;
+ *:ITS:*:*)
+ echo pdp10-unknown-its
+ exit ;;
+ SEI:*:*:SEIUX)
+ echo mips-sei-seiux${UNAME_RELEASE}
+ exit ;;
+ *:DragonFly:*:*)
+ echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+ exit ;;
+ *:*VMS:*:*)
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ case "${UNAME_MACHINE}" in
+ A*) echo alpha-dec-vms ; exit ;;
+ I*) echo ia64-dec-vms ; exit ;;
+ V*) echo vax-dec-vms ; exit ;;
+ esac ;;
+ *:XENIX:*:SysV)
+ echo i386-pc-xenix
+ exit ;;
+ i*86:skyos:*:*)
+ echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+ exit ;;
+ i*86:rdos:*:*)
+ echo ${UNAME_MACHINE}-pc-rdos
+ exit ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+ /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
+ I don't know.... */
+ printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+ printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+ "4"
+#else
+ ""
+#endif
+ ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+ printf ("arm-acorn-riscix\n"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+ printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+ int version;
+ version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+ if (version < 4)
+ printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+ else
+ printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+ exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+ printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+ printf ("ns32k-encore-mach\n"); exit (0);
+#else
+ printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+ printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+ printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+ printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+ struct utsname un;
+
+ uname(&un);
+
+ if (strncmp(un.version, "V2", 2) == 0) {
+ printf ("i386-sequent-ptx2\n"); exit (0);
+ }
+ if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+ printf ("i386-sequent-ptx1\n"); exit (0);
+ }
+ printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+# include <sys/param.h>
+# if defined (BSD)
+# if BSD == 43
+ printf ("vax-dec-bsd4.3\n"); exit (0);
+# else
+# if BSD == 199006
+ printf ("vax-dec-bsd4.3reno\n"); exit (0);
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# endif
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# else
+ printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+ printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+ exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+ { echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+ case `getsysinfo -f cpu_type` in
+ c1*)
+ echo c1-convex-bsd
+ exit ;;
+ c2*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit ;;
+ c34*)
+ echo c34-convex-bsd
+ exit ;;
+ c38*)
+ echo c38-convex-bsd
+ exit ;;
+ c4*)
+ echo c4-convex-bsd
+ exit ;;
+ esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+and
+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches@gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo = `(hostinfo) 2>/dev/null`
+/bin/universe = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/src/3rdparty/freetype/builds/unix/config.sub b/src/3rdparty/freetype/builds/unix/config.sub
new file mode 100755
index 0000000..63bfff0
--- /dev/null
+++ b/src/3rdparty/freetype/builds/unix/config.sub
@@ -0,0 +1,1669 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+# Free Software Foundation, Inc.
+
+timestamp='2008-04-14'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine. It does not imply ALL GNU software can.
+#
+# This file 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., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Please send patches to <config-patches@gnu.org>. Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support. The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+ $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit ;;
+ --version | -v )
+ echo "$version" ; exit ;;
+ --help | --h* | -h )
+ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help"
+ exit 1 ;;
+
+ *local*)
+ # First pass through any local machine types.
+ echo $1
+ exit ;;
+
+ * )
+ break ;;
+ esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+ exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+ exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+ nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
+ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+ storm-chaos* | os2-emx* | rtmk-nova*)
+ os=-$maybe_os
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+ ;;
+ *)
+ basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+ if [ $basic_machine != $1 ]
+ then os=`echo $1 | sed 's/.*-/-/'`
+ else os=; fi
+ ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work. We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+ -sun*os*)
+ # Prevent following clause from handling this invalid input.
+ ;;
+ -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+ -apple | -axis | -knuth | -cray)
+ os=
+ basic_machine=$1
+ ;;
+ -sim | -cisco | -oki | -wec | -winbond)
+ os=
+ basic_machine=$1
+ ;;
+ -scout)
+ ;;
+ -wrs)
+ os=-vxworks
+ basic_machine=$1
+ ;;
+ -chorusos*)
+ os=-chorusos
+ basic_machine=$1
+ ;;
+ -chorusrdb)
+ os=-chorusrdb
+ basic_machine=$1
+ ;;
+ -hiux*)
+ os=-hiuxwe2
+ ;;
+ -sco6)
+ os=-sco5v6
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco5)
+ os=-sco3.2v5
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco4)
+ os=-sco3.2v4
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2.[4-9]*)
+ os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2v[4-9]*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco5v6*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco*)
+ os=-sco3.2v2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -udk*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -isc)
+ os=-isc2.2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -clix*)
+ basic_machine=clipper-intergraph
+ ;;
+ -isc*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -lynx*)
+ os=-lynxos
+ ;;
+ -ptx*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+ ;;
+ -windowsnt*)
+ os=`echo $os | sed -e 's/windowsnt/winnt/'`
+ ;;
+ -psos*)
+ os=-psos
+ ;;
+ -mint | -mint[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+ # Recognize the basic CPU types without company name.
+ # Some are omitted here because they have special meanings below.
+ 1750a | 580 \
+ | a29k \
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+ | am33_2.0 \
+ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+ | bfin \
+ | c4x | clipper \
+ | d10v | d30v | dlx | dsp16xx \
+ | fido | fr30 | frv \
+ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ | i370 | i860 | i960 | ia64 \
+ | ip2k | iq2000 \
+ | m32c | m32r | m32rle | m68000 | m68k | m88k \
+ | maxq | mb | microblaze | mcore | mep | metag \
+ | mips | mipsbe | mipseb | mipsel | mipsle \
+ | mips16 \
+ | mips64 | mips64el \
+ | mips64octeon | mips64octeonel \
+ | mips64orion | mips64orionel \
+ | mips64r5900 | mips64r5900el \
+ | mips64vr | mips64vrel \
+ | mips64vr4100 | mips64vr4100el \
+ | mips64vr4300 | mips64vr4300el \
+ | mips64vr5000 | mips64vr5000el \
+ | mips64vr5900 | mips64vr5900el \
+ | mipsisa32 | mipsisa32el \
+ | mipsisa32r2 | mipsisa32r2el \
+ | mipsisa64 | mipsisa64el \
+ | mipsisa64r2 | mipsisa64r2el \
+ | mipsisa64sb1 | mipsisa64sb1el \
+ | mipsisa64sr71k | mipsisa64sr71kel \
+ | mipstx39 | mipstx39el \
+ | mn10200 | mn10300 \
+ | mt \
+ | msp430 \
+ | nios | nios2 \
+ | ns16k | ns32k \
+ | or32 \
+ | pdp10 | pdp11 | pj | pjl \
+ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+ | pyramid \
+ | score \
+ | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+ | sh64 | sh64le \
+ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+ | spu | strongarm \
+ | tahoe | thumb | tic4x | tic80 | tron \
+ | v850 | v850e \
+ | we32k \
+ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
+ | z8k)
+ basic_machine=$basic_machine-unknown
+ ;;
+ m6811 | m68hc11 | m6812 | m68hc12)
+ # Motorola 68HC11/12.
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+ ;;
+ ms1)
+ basic_machine=mt-unknown
+ ;;
+
+ # We use `pc' rather than `unknown'
+ # because (1) that's what they normally are, and
+ # (2) the word "unknown" tends to confuse beginning users.
+ i*86 | x86_64)
+ basic_machine=$basic_machine-pc
+ ;;
+ # Object if more than one company name word.
+ *-*-*)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+ # Recognize the basic CPU types with company name.
+ 580-* \
+ | a29k-* \
+ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
+ | avr-* | avr32-* \
+ | bfin-* | bs2000-* \
+ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+ | clipper-* | craynv-* | cydra-* \
+ | d10v-* | d30v-* | dlx-* \
+ | elxsi-* \
+ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
+ | h8300-* | h8500-* \
+ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+ | i*86-* | i860-* | i960-* | ia64-* \
+ | ip2k-* | iq2000-* \
+ | m32c-* | m32r-* | m32rle-* \
+ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
+ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+ | mips16-* \
+ | mips64-* | mips64el-* \
+ | mips64octeon-* | mips64octeonel-* \
+ | mips64orion-* | mips64orionel-* \
+ | mips64r5900-* | mips64r5900el-* \
+ | mips64vr-* | mips64vrel-* \
+ | mips64vr4100-* | mips64vr4100el-* \
+ | mips64vr4300-* | mips64vr4300el-* \
+ | mips64vr5000-* | mips64vr5000el-* \
+ | mips64vr5900-* | mips64vr5900el-* \
+ | mipsisa32-* | mipsisa32el-* \
+ | mipsisa32r2-* | mipsisa32r2el-* \
+ | mipsisa64-* | mipsisa64el-* \
+ | mipsisa64r2-* | mipsisa64r2el-* \
+ | mipsisa64sb1-* | mipsisa64sb1el-* \
+ | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+ | mipstx39-* | mipstx39el-* \
+ | mmix-* \
+ | mt-* \
+ | msp430-* \
+ | nios-* | nios2-* \
+ | none-* | np1-* | ns16k-* | ns32k-* \
+ | orion-* \
+ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+ | pyramid-* \
+ | romp-* | rs6000-* \
+ | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
+ | sparclite-* \
+ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
+ | tahoe-* | thumb-* \
+ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \
+ | tron-* \
+ | v850-* | v850e-* | vax-* \
+ | we32k-* \
+ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
+ | xstormy16-* | xtensa*-* \
+ | ymp-* \
+ | z8k-*)
+ ;;
+ # Recognize the basic CPU types without company name, with glob match.
+ xtensa*)
+ basic_machine=$basic_machine-unknown
+ ;;
+ # Recognize the various machine names and aliases which stand
+ # for a CPU type and a company and sometimes even an OS.
+ 386bsd)
+ basic_machine=i386-unknown
+ os=-bsd
+ ;;
+ 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+ basic_machine=m68000-att
+ ;;
+ 3b*)
+ basic_machine=we32k-att
+ ;;
+ a29khif)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ abacus)
+ basic_machine=abacus-unknown
+ ;;
+ adobe68k)
+ basic_machine=m68010-adobe
+ os=-scout
+ ;;
+ alliant | fx80)
+ basic_machine=fx80-alliant
+ ;;
+ altos | altos3068)
+ basic_machine=m68k-altos
+ ;;
+ am29k)
+ basic_machine=a29k-none
+ os=-bsd
+ ;;
+ amd64)
+ basic_machine=x86_64-pc
+ ;;
+ amd64-*)
+ basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ amdahl)
+ basic_machine=580-amdahl
+ os=-sysv
+ ;;
+ amiga | amiga-*)
+ basic_machine=m68k-unknown
+ ;;
+ amigaos | amigados)
+ basic_machine=m68k-unknown
+ os=-amigaos
+ ;;
+ amigaunix | amix)
+ basic_machine=m68k-unknown
+ os=-sysv4
+ ;;
+ apollo68)
+ basic_machine=m68k-apollo
+ os=-sysv
+ ;;
+ apollo68bsd)
+ basic_machine=m68k-apollo
+ os=-bsd
+ ;;
+ aux)
+ basic_machine=m68k-apple
+ os=-aux
+ ;;
+ balance)
+ basic_machine=ns32k-sequent
+ os=-dynix
+ ;;
+ blackfin)
+ basic_machine=bfin-unknown
+ os=-linux
+ ;;
+ blackfin-*)
+ basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ c90)
+ basic_machine=c90-cray
+ os=-unicos
+ ;;
+ convex-c1)
+ basic_machine=c1-convex
+ os=-bsd
+ ;;
+ convex-c2)
+ basic_machine=c2-convex
+ os=-bsd
+ ;;
+ convex-c32)
+ basic_machine=c32-convex
+ os=-bsd
+ ;;
+ convex-c34)
+ basic_machine=c34-convex
+ os=-bsd
+ ;;
+ convex-c38)
+ basic_machine=c38-convex
+ os=-bsd
+ ;;
+ cray | j90)
+ basic_machine=j90-cray
+ os=-unicos
+ ;;
+ craynv)
+ basic_machine=craynv-cray
+ os=-unicosmp
+ ;;
+ cr16)
+ basic_machine=cr16-unknown
+ os=-elf
+ ;;
+ crds | unos)
+ basic_machine=m68k-crds
+ ;;
+ crisv32 | crisv32-* | etraxfs*)
+ basic_machine=crisv32-axis
+ ;;
+ cris | cris-* | etrax*)
+ basic_machine=cris-axis
+ ;;
+ crx)
+ basic_machine=crx-unknown
+ os=-elf
+ ;;
+ da30 | da30-*)
+ basic_machine=m68k-da30
+ ;;
+ decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+ basic_machine=mips-dec
+ ;;
+ decsystem10* | dec10*)
+ basic_machine=pdp10-dec
+ os=-tops10
+ ;;
+ decsystem20* | dec20*)
+ basic_machine=pdp10-dec
+ os=-tops20
+ ;;
+ delta | 3300 | motorola-3300 | motorola-delta \
+ | 3300-motorola | delta-motorola)
+ basic_machine=m68k-motorola
+ ;;
+ delta88)
+ basic_machine=m88k-motorola
+ os=-sysv3
+ ;;
+ dicos)
+ basic_machine=i686-pc
+ os=-dicos
+ ;;
+ djgpp)
+ basic_machine=i586-pc
+ os=-msdosdjgpp
+ ;;
+ dpx20 | dpx20-*)
+ basic_machine=rs6000-bull
+ os=-bosx
+ ;;
+ dpx2* | dpx2*-bull)
+ basic_machine=m68k-bull
+ os=-sysv3
+ ;;
+ ebmon29k)
+ basic_machine=a29k-amd
+ os=-ebmon
+ ;;
+ elxsi)
+ basic_machine=elxsi-elxsi
+ os=-bsd
+ ;;
+ encore | umax | mmax)
+ basic_machine=ns32k-encore
+ ;;
+ es1800 | OSE68k | ose68k | ose | OSE)
+ basic_machine=m68k-ericsson
+ os=-ose
+ ;;
+ fx2800)
+ basic_machine=i860-alliant
+ ;;
+ genix)
+ basic_machine=ns32k-ns
+ ;;
+ gmicro)
+ basic_machine=tron-gmicro
+ os=-sysv
+ ;;
+ go32)
+ basic_machine=i386-pc
+ os=-go32
+ ;;
+ h3050r* | hiux*)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ h8300hms)
+ basic_machine=h8300-hitachi
+ os=-hms
+ ;;
+ h8300xray)
+ basic_machine=h8300-hitachi
+ os=-xray
+ ;;
+ h8500hms)
+ basic_machine=h8500-hitachi
+ os=-hms
+ ;;
+ harris)
+ basic_machine=m88k-harris
+ os=-sysv3
+ ;;
+ hp300-*)
+ basic_machine=m68k-hp
+ ;;
+ hp300bsd)
+ basic_machine=m68k-hp
+ os=-bsd
+ ;;
+ hp300hpux)
+ basic_machine=m68k-hp
+ os=-hpux
+ ;;
+ hp3k9[0-9][0-9] | hp9[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k2[0-9][0-9] | hp9k31[0-9])
+ basic_machine=m68000-hp
+ ;;
+ hp9k3[2-9][0-9])
+ basic_machine=m68k-hp
+ ;;
+ hp9k6[0-9][0-9] | hp6[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k7[0-79][0-9] | hp7[0-79][0-9])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k78[0-9] | hp78[0-9])
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][13679] | hp8[0-9][13679])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][0-9] | hp8[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hppa-next)
+ os=-nextstep3
+ ;;
+ hppaosf)
+ basic_machine=hppa1.1-hp
+ os=-osf
+ ;;
+ hppro)
+ basic_machine=hppa1.1-hp
+ os=-proelf
+ ;;
+ i370-ibm* | ibm*)
+ basic_machine=i370-ibm
+ ;;
+# I'm not sure what "Sysv32" means. Should this be sysv3.2?
+ i*86v32)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv32
+ ;;
+ i*86v4*)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv4
+ ;;
+ i*86v)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv
+ ;;
+ i*86sol2)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-solaris2
+ ;;
+ i386mach)
+ basic_machine=i386-mach
+ os=-mach
+ ;;
+ i386-vsta | vsta)
+ basic_machine=i386-unknown
+ os=-vsta
+ ;;
+ iris | iris4d)
+ basic_machine=mips-sgi
+ case $os in
+ -irix*)
+ ;;
+ *)
+ os=-irix4
+ ;;
+ esac
+ ;;
+ isi68 | isi)
+ basic_machine=m68k-isi
+ os=-sysv
+ ;;
+ m68knommu)
+ basic_machine=m68k-unknown
+ os=-linux
+ ;;
+ m68knommu-*)
+ basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ m88k-omron*)
+ basic_machine=m88k-omron
+ ;;
+ magnum | m3230)
+ basic_machine=mips-mips
+ os=-sysv
+ ;;
+ merlin)
+ basic_machine=ns32k-utek
+ os=-sysv
+ ;;
+ mingw32)
+ basic_machine=i386-pc
+ os=-mingw32
+ ;;
+ mingw32ce)
+ basic_machine=arm-unknown
+ os=-mingw32ce
+ ;;
+ miniframe)
+ basic_machine=m68000-convergent
+ ;;
+ *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+ mips3*-*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+ ;;
+ mips3*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+ ;;
+ monitor)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ morphos)
+ basic_machine=powerpc-unknown
+ os=-morphos
+ ;;
+ msdos)
+ basic_machine=i386-pc
+ os=-msdos
+ ;;
+ ms1-*)
+ basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+ ;;
+ mvs)
+ basic_machine=i370-ibm
+ os=-mvs
+ ;;
+ ncr3000)
+ basic_machine=i486-ncr
+ os=-sysv4
+ ;;
+ netbsd386)
+ basic_machine=i386-unknown
+ os=-netbsd
+ ;;
+ netwinder)
+ basic_machine=armv4l-rebel
+ os=-linux
+ ;;
+ news | news700 | news800 | news900)
+ basic_machine=m68k-sony
+ os=-newsos
+ ;;
+ news1000)
+ basic_machine=m68030-sony
+ os=-newsos
+ ;;
+ news-3600 | risc-news)
+ basic_machine=mips-sony
+ os=-newsos
+ ;;
+ necv70)
+ basic_machine=v70-nec
+ os=-sysv
+ ;;
+ next | m*-next )
+ basic_machine=m68k-next
+ case $os in
+ -nextstep* )
+ ;;
+ -ns2*)
+ os=-nextstep2
+ ;;
+ *)
+ os=-nextstep3
+ ;;
+ esac
+ ;;
+ nh3000)
+ basic_machine=m68k-harris
+ os=-cxux
+ ;;
+ nh[45]000)
+ basic_machine=m88k-harris
+ os=-cxux
+ ;;
+ nindy960)
+ basic_machine=i960-intel
+ os=-nindy
+ ;;
+ mon960)
+ basic_machine=i960-intel
+ os=-mon960
+ ;;
+ nonstopux)
+ basic_machine=mips-compaq
+ os=-nonstopux
+ ;;
+ np1)
+ basic_machine=np1-gould
+ ;;
+ nsr-tandem)
+ basic_machine=nsr-tandem
+ ;;
+ op50n-* | op60c-*)
+ basic_machine=hppa1.1-oki
+ os=-proelf
+ ;;
+ openrisc | openrisc-*)
+ basic_machine=or32-unknown
+ ;;
+ os400)
+ basic_machine=powerpc-ibm
+ os=-os400
+ ;;
+ OSE68000 | ose68000)
+ basic_machine=m68000-ericsson
+ os=-ose
+ ;;
+ os68k)
+ basic_machine=m68k-none
+ os=-os68k
+ ;;
+ pa-hitachi)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ paragon)
+ basic_machine=i860-intel
+ os=-osf
+ ;;
+ parisc)
+ basic_machine=hppa-unknown
+ os=-linux
+ ;;
+ parisc-*)
+ basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ pbd)
+ basic_machine=sparc-tti
+ ;;
+ pbb)
+ basic_machine=m68k-tti
+ ;;
+ pc532 | pc532-*)
+ basic_machine=ns32k-pc532
+ ;;
+ pc98)
+ basic_machine=i386-pc
+ ;;
+ pc98-*)
+ basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentium | p5 | k5 | k6 | nexgen | viac3)
+ basic_machine=i586-pc
+ ;;
+ pentiumpro | p6 | 6x86 | athlon | athlon_*)
+ basic_machine=i686-pc
+ ;;
+ pentiumii | pentium2 | pentiumiii | pentium3)
+ basic_machine=i686-pc
+ ;;
+ pentium4)
+ basic_machine=i786-pc
+ ;;
+ pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+ basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumpro-* | p6-* | 6x86-* | athlon-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentium4-*)
+ basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pn)
+ basic_machine=pn-gould
+ ;;
+ power) basic_machine=power-ibm
+ ;;
+ ppc) basic_machine=powerpc-unknown
+ ;;
+ ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppcle | powerpclittle | ppc-le | powerpc-little)
+ basic_machine=powerpcle-unknown
+ ;;
+ ppcle-* | powerpclittle-*)
+ basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppc64) basic_machine=powerpc64-unknown
+ ;;
+ ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+ basic_machine=powerpc64le-unknown
+ ;;
+ ppc64le-* | powerpc64little-*)
+ basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ps2)
+ basic_machine=i386-ibm
+ ;;
+ pw32)
+ basic_machine=i586-unknown
+ os=-pw32
+ ;;
+ rdos)
+ basic_machine=i386-pc
+ os=-rdos
+ ;;
+ rom68k)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ rm[46]00)
+ basic_machine=mips-siemens
+ ;;
+ rtpc | rtpc-*)
+ basic_machine=romp-ibm
+ ;;
+ s390 | s390-*)
+ basic_machine=s390-ibm
+ ;;
+ s390x | s390x-*)
+ basic_machine=s390x-ibm
+ ;;
+ sa29200)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ sb1)
+ basic_machine=mipsisa64sb1-unknown
+ ;;
+ sb1el)
+ basic_machine=mipsisa64sb1el-unknown
+ ;;
+ sde)
+ basic_machine=mipsisa32-sde
+ os=-elf
+ ;;
+ sei)
+ basic_machine=mips-sei
+ os=-seiux
+ ;;
+ sequent)
+ basic_machine=i386-sequent
+ ;;
+ sh)
+ basic_machine=sh-hitachi
+ os=-hms
+ ;;
+ sh5el)
+ basic_machine=sh5le-unknown
+ ;;
+ sh64)
+ basic_machine=sh64-unknown
+ ;;
+ sparclite-wrs | simso-wrs)
+ basic_machine=sparclite-wrs
+ os=-vxworks
+ ;;
+ sps7)
+ basic_machine=m68k-bull
+ os=-sysv2
+ ;;
+ spur)
+ basic_machine=spur-unknown
+ ;;
+ st2000)
+ basic_machine=m68k-tandem
+ ;;
+ stratus)
+ basic_machine=i860-stratus
+ os=-sysv4
+ ;;
+ sun2)
+ basic_machine=m68000-sun
+ ;;
+ sun2os3)
+ basic_machine=m68000-sun
+ os=-sunos3
+ ;;
+ sun2os4)
+ basic_machine=m68000-sun
+ os=-sunos4
+ ;;
+ sun3os3)
+ basic_machine=m68k-sun
+ os=-sunos3
+ ;;
+ sun3os4)
+ basic_machine=m68k-sun
+ os=-sunos4
+ ;;
+ sun4os3)
+ basic_machine=sparc-sun
+ os=-sunos3
+ ;;
+ sun4os4)
+ basic_machine=sparc-sun
+ os=-sunos4
+ ;;
+ sun4sol2)
+ basic_machine=sparc-sun
+ os=-solaris2
+ ;;
+ sun3 | sun3-*)
+ basic_machine=m68k-sun
+ ;;
+ sun4)
+ basic_machine=sparc-sun
+ ;;
+ sun386 | sun386i | roadrunner)
+ basic_machine=i386-sun
+ ;;
+ sv1)
+ basic_machine=sv1-cray
+ os=-unicos
+ ;;
+ symmetry)
+ basic_machine=i386-sequent
+ os=-dynix
+ ;;
+ t3e)
+ basic_machine=alphaev5-cray
+ os=-unicos
+ ;;
+ t90)
+ basic_machine=t90-cray
+ os=-unicos
+ ;;
+ tic54x | c54x*)
+ basic_machine=tic54x-unknown
+ os=-coff
+ ;;
+ tic55x | c55x*)
+ basic_machine=tic55x-unknown
+ os=-coff
+ ;;
+ tic6x | c6x*)
+ basic_machine=tic6x-unknown
+ os=-coff
+ ;;
+ tile*)
+ basic_machine=tile-unknown
+ os=-linux-gnu
+ ;;
+ tx39)
+ basic_machine=mipstx39-unknown
+ ;;
+ tx39el)
+ basic_machine=mipstx39el-unknown
+ ;;
+ toad1)
+ basic_machine=pdp10-xkl
+ os=-tops20
+ ;;
+ tower | tower-32)
+ basic_machine=m68k-ncr
+ ;;
+ tpf)
+ basic_machine=s390x-ibm
+ os=-tpf
+ ;;
+ udi29k)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ ultra3)
+ basic_machine=a29k-nyu
+ os=-sym1
+ ;;
+ v810 | necv810)
+ basic_machine=v810-nec
+ os=-none
+ ;;
+ vaxv)
+ basic_machine=vax-dec
+ os=-sysv
+ ;;
+ vms)
+ basic_machine=vax-dec
+ os=-vms
+ ;;
+ vpp*|vx|vx-*)
+ basic_machine=f301-fujitsu
+ ;;
+ vxworks960)
+ basic_machine=i960-wrs
+ os=-vxworks
+ ;;
+ vxworks68)
+ basic_machine=m68k-wrs
+ os=-vxworks
+ ;;
+ vxworks29k)
+ basic_machine=a29k-wrs
+ os=-vxworks
+ ;;
+ w65*)
+ basic_machine=w65-wdc
+ os=-none
+ ;;
+ w89k-*)
+ basic_machine=hppa1.1-winbond
+ os=-proelf
+ ;;
+ xbox)
+ basic_machine=i686-pc
+ os=-mingw32
+ ;;
+ xps | xps100)
+ basic_machine=xps100-honeywell
+ ;;
+ ymp)
+ basic_machine=ymp-cray
+ os=-unicos
+ ;;
+ z8k-*-coff)
+ basic_machine=z8k-unknown
+ os=-sim
+ ;;
+ none)
+ basic_machine=none-none
+ os=-none
+ ;;
+
+# Here we handle the default manufacturer of certain CPU types. It is in
+# some cases the only manufacturer, in others, it is the most popular.
+ w89k)
+ basic_machine=hppa1.1-winbond
+ ;;
+ op50n)
+ basic_machine=hppa1.1-oki
+ ;;
+ op60c)
+ basic_machine=hppa1.1-oki
+ ;;
+ romp)
+ basic_machine=romp-ibm
+ ;;
+ mmix)
+ basic_machine=mmix-knuth
+ ;;
+ rs6000)
+ basic_machine=rs6000-ibm
+ ;;
+ vax)
+ basic_machine=vax-dec
+ ;;
+ pdp10)
+ # there are many clones, so DEC is not a safe bet
+ basic_machine=pdp10-unknown
+ ;;
+ pdp11)
+ basic_machine=pdp11-dec
+ ;;
+ we32k)
+ basic_machine=we32k-att
+ ;;
+ sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele)
+ basic_machine=sh-unknown
+ ;;
+ sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
+ basic_machine=sparc-sun
+ ;;
+ cydra)
+ basic_machine=cydra-cydrome
+ ;;
+ orion)
+ basic_machine=orion-highlevel
+ ;;
+ orion105)
+ basic_machine=clipper-highlevel
+ ;;
+ mac | mpw | mac-mpw)
+ basic_machine=m68k-apple
+ ;;
+ pmac | pmac-mpw)
+ basic_machine=powerpc-apple
+ ;;
+ *-unknown)
+ # Make sure to match an already-canonicalized machine name.
+ ;;
+ *)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+ *-digital*)
+ basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+ ;;
+ *-commodore*)
+ basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+ ;;
+ *)
+ ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+ # First match some system type aliases
+ # that might get confused with valid system types.
+ # -solaris* is a basic system type, with this one exception.
+ -solaris1 | -solaris1.*)
+ os=`echo $os | sed -e 's|solaris1|sunos4|'`
+ ;;
+ -solaris)
+ os=-solaris2
+ ;;
+ -svr4*)
+ os=-sysv4
+ ;;
+ -unixware*)
+ os=-sysv4.2uw
+ ;;
+ -gnu/linux*)
+ os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+ ;;
+ # First accept the basic system types.
+ # The portable systems comes first.
+ # Each alternative MUST END IN A *, to match a version number.
+ # -sysv* is not here because it comes later, after sysvr4.
+ -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
+ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+ | -aos* \
+ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+ | -openbsd* | -solidbsd* \
+ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ | -chorusos* | -chorusrdb* \
+ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+ | -uxpv* | -beos* | -mpeix* | -udk* \
+ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+ | -skyos* | -haiku* | -rdos* | -toppers* | -drops*)
+ # Remember, each alternative MUST END IN *, to match a version number.
+ ;;
+ -qnx*)
+ case $basic_machine in
+ x86-* | i*86-*)
+ ;;
+ *)
+ os=-nto$os
+ ;;
+ esac
+ ;;
+ -nto-qnx*)
+ ;;
+ -nto*)
+ os=`echo $os | sed -e 's|nto|nto-qnx|'`
+ ;;
+ -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
+ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+ ;;
+ -mac*)
+ os=`echo $os | sed -e 's|mac|macos|'`
+ ;;
+ -linux-dietlibc)
+ os=-linux-dietlibc
+ ;;
+ -linux*)
+ os=`echo $os | sed -e 's|linux|linux-gnu|'`
+ ;;
+ -sunos5*)
+ os=`echo $os | sed -e 's|sunos5|solaris2|'`
+ ;;
+ -sunos6*)
+ os=`echo $os | sed -e 's|sunos6|solaris3|'`
+ ;;
+ -opened*)
+ os=-openedition
+ ;;
+ -os400*)
+ os=-os400
+ ;;
+ -wince*)
+ os=-wince
+ ;;
+ -osfrose*)
+ os=-osfrose
+ ;;
+ -osf*)
+ os=-osf
+ ;;
+ -utek*)
+ os=-bsd
+ ;;
+ -dynix*)
+ os=-bsd
+ ;;
+ -acis*)
+ os=-aos
+ ;;
+ -atheos*)
+ os=-atheos
+ ;;
+ -syllable*)
+ os=-syllable
+ ;;
+ -386bsd)
+ os=-bsd
+ ;;
+ -ctix* | -uts*)
+ os=-sysv
+ ;;
+ -nova*)
+ os=-rtmk-nova
+ ;;
+ -ns2 )
+ os=-nextstep2
+ ;;
+ -nsk*)
+ os=-nsk
+ ;;
+ # Preserve the version number of sinix5.
+ -sinix5.*)
+ os=`echo $os | sed -e 's|sinix|sysv|'`
+ ;;
+ -sinix*)
+ os=-sysv4
+ ;;
+ -tpf*)
+ os=-tpf
+ ;;
+ -triton*)
+ os=-sysv3
+ ;;
+ -oss*)
+ os=-sysv3
+ ;;
+ -svr4)
+ os=-sysv4
+ ;;
+ -svr3)
+ os=-sysv3
+ ;;
+ -sysvr4)
+ os=-sysv4
+ ;;
+ # This must come after -sysvr4.
+ -sysv*)
+ ;;
+ -ose*)
+ os=-ose
+ ;;
+ -es1800*)
+ os=-ose
+ ;;
+ -xenix)
+ os=-xenix
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ os=-mint
+ ;;
+ -aros*)
+ os=-aros
+ ;;
+ -kaos*)
+ os=-kaos
+ ;;
+ -zvmoe)
+ os=-zvmoe
+ ;;
+ -dicos*)
+ os=-dicos
+ ;;
+ -none)
+ ;;
+ *)
+ # Get rid of the `-' at the beginning of $os.
+ os=`echo $os | sed 's/[^-]*-//'`
+ echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system. Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+ score-*)
+ os=-elf
+ ;;
+ spu-*)
+ os=-elf
+ ;;
+ *-acorn)
+ os=-riscix1.2
+ ;;
+ arm*-rebel)
+ os=-linux
+ ;;
+ arm*-semi)
+ os=-aout
+ ;;
+ c4x-* | tic4x-*)
+ os=-coff
+ ;;
+ # This must come before the *-dec entry.
+ pdp10-*)
+ os=-tops20
+ ;;
+ pdp11-*)
+ os=-none
+ ;;
+ *-dec | vax-*)
+ os=-ultrix4.2
+ ;;
+ m68*-apollo)
+ os=-domain
+ ;;
+ i386-sun)
+ os=-sunos4.0.2
+ ;;
+ m68000-sun)
+ os=-sunos3
+ # This also exists in the configure program, but was not the
+ # default.
+ # os=-sunos4
+ ;;
+ m68*-cisco)
+ os=-aout
+ ;;
+ mep-*)
+ os=-elf
+ ;;
+ mips*-cisco)
+ os=-elf
+ ;;
+ mips*-*)
+ os=-elf
+ ;;
+ or32-*)
+ os=-coff
+ ;;
+ *-tti) # must be before sparc entry or we get the wrong os.
+ os=-sysv3
+ ;;
+ sparc-* | *-sun)
+ os=-sunos4.1.1
+ ;;
+ *-be)
+ os=-beos
+ ;;
+ *-haiku)
+ os=-haiku
+ ;;
+ *-ibm)
+ os=-aix
+ ;;
+ *-knuth)
+ os=-mmixware
+ ;;
+ *-wec)
+ os=-proelf
+ ;;
+ *-winbond)
+ os=-proelf
+ ;;
+ *-oki)
+ os=-proelf
+ ;;
+ *-hp)
+ os=-hpux
+ ;;
+ *-hitachi)
+ os=-hiux
+ ;;
+ i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+ os=-sysv
+ ;;
+ *-cbm)
+ os=-amigaos
+ ;;
+ *-dg)
+ os=-dgux
+ ;;
+ *-dolphin)
+ os=-sysv3
+ ;;
+ m68k-ccur)
+ os=-rtu
+ ;;
+ m88k-omron*)
+ os=-luna
+ ;;
+ *-next )
+ os=-nextstep
+ ;;
+ *-sequent)
+ os=-ptx
+ ;;
+ *-crds)
+ os=-unos
+ ;;
+ *-ns)
+ os=-genix
+ ;;
+ i370-*)
+ os=-mvs
+ ;;
+ *-next)
+ os=-nextstep3
+ ;;
+ *-gould)
+ os=-sysv
+ ;;
+ *-highlevel)
+ os=-bsd
+ ;;
+ *-encore)
+ os=-bsd
+ ;;
+ *-sgi)
+ os=-irix
+ ;;
+ *-siemens)
+ os=-sysv4
+ ;;
+ *-masscomp)
+ os=-rtu
+ ;;
+ f30[01]-fujitsu | f700-fujitsu)
+ os=-uxpv
+ ;;
+ *-rom68k)
+ os=-coff
+ ;;
+ *-*bug)
+ os=-coff
+ ;;
+ *-apple)
+ os=-macos
+ ;;
+ *-atari*)
+ os=-mint
+ ;;
+ *)
+ os=-none
+ ;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer. We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+ *-unknown)
+ case $os in
+ -riscix*)
+ vendor=acorn
+ ;;
+ -sunos*)
+ vendor=sun
+ ;;
+ -aix*)
+ vendor=ibm
+ ;;
+ -beos*)
+ vendor=be
+ ;;
+ -hpux*)
+ vendor=hp
+ ;;
+ -mpeix*)
+ vendor=hp
+ ;;
+ -hiux*)
+ vendor=hitachi
+ ;;
+ -unos*)
+ vendor=crds
+ ;;
+ -dgux*)
+ vendor=dg
+ ;;
+ -luna*)
+ vendor=omron
+ ;;
+ -genix*)
+ vendor=ns
+ ;;
+ -mvs* | -opened*)
+ vendor=ibm
+ ;;
+ -os400*)
+ vendor=ibm
+ ;;
+ -ptx*)
+ vendor=sequent
+ ;;
+ -tpf*)
+ vendor=ibm
+ ;;
+ -vxsim* | -vxworks* | -windiss*)
+ vendor=wrs
+ ;;
+ -aux*)
+ vendor=apple
+ ;;
+ -hms*)
+ vendor=hitachi
+ ;;
+ -mpw* | -macos*)
+ vendor=apple
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ vendor=atari
+ ;;
+ -vos*)
+ vendor=stratus
+ ;;
+ esac
+ basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+ ;;
+esac
+
+echo $basic_machine$os
+exit
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/src/3rdparty/freetype/builds/unix/configure b/src/3rdparty/freetype/builds/unix/configure
new file mode 100755
index 0000000..a7efaf5
--- /dev/null
+++ b/src/3rdparty/freetype/builds/unix/configure
@@ -0,0 +1,15767 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.62 for FreeType 2.3.6.
+#
+# Report bugs to <freetype@nongnu.org>.
+#
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## --------------------- ##
+## M4sh Initialization. ##
+## --------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in
+ *posix*) set -o posix ;;
+esac
+
+fi
+
+
+
+
+# PATH needs CR
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ as_unset=unset
+else
+ as_unset=false
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+case $0 in
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ { (exit 1); exit 1; }
+fi
+
+# Work around bugs in pre-3.0 UWIN ksh.
+for as_var in ENV MAIL MAILPATH
+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# CDPATH.
+$as_unset CDPATH
+
+
+if test "x$CONFIG_SHELL" = x; then
+ if (eval ":") 2>/dev/null; then
+ as_have_required=yes
+else
+ as_have_required=no
+fi
+
+ if test $as_have_required = yes && (eval ":
+(as_func_return () {
+ (exit \$1)
+}
+as_func_success () {
+ as_func_return 0
+}
+as_func_failure () {
+ as_func_return 1
+}
+as_func_ret_success () {
+ return 0
+}
+as_func_ret_failure () {
+ return 1
+}
+
+exitcode=0
+if as_func_success; then
+ :
+else
+ exitcode=1
+ echo as_func_success failed.
+fi
+
+if as_func_failure; then
+ exitcode=1
+ echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+ :
+else
+ exitcode=1
+ echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+ exitcode=1
+ echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
+ :
+else
+ exitcode=1
+ echo positional parameters were not saved.
+fi
+
+test \$exitcode = 0) || { (exit 1); exit 1; }
+
+(
+ as_lineno_1=\$LINENO
+ as_lineno_2=\$LINENO
+ test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" &&
+ test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; }
+") 2> /dev/null; then
+ :
+else
+ as_candidate_shells=
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ case $as_dir in
+ /*)
+ for as_base in sh bash ksh sh5; do
+ as_candidate_shells="$as_candidate_shells $as_dir/$as_base"
+ done;;
+ esac
+done
+IFS=$as_save_IFS
+
+
+ for as_shell in $as_candidate_shells $SHELL; do
+ # Try only shells that exist, to save several forks.
+ if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+ { ("$as_shell") 2> /dev/null <<\_ASEOF
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in
+ *posix*) set -o posix ;;
+esac
+
+fi
+
+
+:
+_ASEOF
+}; then
+ CONFIG_SHELL=$as_shell
+ as_have_required=yes
+ if { "$as_shell" 2> /dev/null <<\_ASEOF
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in
+ *posix*) set -o posix ;;
+esac
+
+fi
+
+
+:
+(as_func_return () {
+ (exit $1)
+}
+as_func_success () {
+ as_func_return 0
+}
+as_func_failure () {
+ as_func_return 1
+}
+as_func_ret_success () {
+ return 0
+}
+as_func_ret_failure () {
+ return 1
+}
+
+exitcode=0
+if as_func_success; then
+ :
+else
+ exitcode=1
+ echo as_func_success failed.
+fi
+
+if as_func_failure; then
+ exitcode=1
+ echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+ :
+else
+ exitcode=1
+ echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+ exitcode=1
+ echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = "$1" ); then
+ :
+else
+ exitcode=1
+ echo positional parameters were not saved.
+fi
+
+test $exitcode = 0) || { (exit 1); exit 1; }
+
+(
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; }
+
+_ASEOF
+}; then
+ break
+fi
+
+fi
+
+ done
+
+ if test "x$CONFIG_SHELL" != x; then
+ for as_var in BASH_ENV ENV
+ do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+ done
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+fi
+
+
+ if test $as_have_required = no; then
+ echo This script requires a shell more modern than all the
+ echo shells that I found on your system. Please install a
+ echo modern shell, or manually run the script under such a
+ echo shell if you do have one.
+ { (exit 1); exit 1; }
+fi
+
+
+fi
+
+fi
+
+
+
+(eval "as_func_return () {
+ (exit \$1)
+}
+as_func_success () {
+ as_func_return 0
+}
+as_func_failure () {
+ as_func_return 1
+}
+as_func_ret_success () {
+ return 0
+}
+as_func_ret_failure () {
+ return 1
+}
+
+exitcode=0
+if as_func_success; then
+ :
+else
+ exitcode=1
+ echo as_func_success failed.
+fi
+
+if as_func_failure; then
+ exitcode=1
+ echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+ :
+else
+ exitcode=1
+ echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+ exitcode=1
+ echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
+ :
+else
+ exitcode=1
+ echo positional parameters were not saved.
+fi
+
+test \$exitcode = 0") || {
+ echo No shell found that supports shell functions.
+ echo Please tell bug-autoconf@gnu.org about your system,
+ echo including any error possibly output before this message.
+ echo This can help us improve future autoconf versions.
+ echo Configuration will now proceed without shell functions.
+}
+
+
+
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
+
+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+ # uniformly replaced by the line number. The first 'sed' inserts a
+ # line-number line after each line using $LINENO; the second 'sed'
+ # does the real work. The second script uses 'N' to pair each
+ # line-number line with the line containing $LINENO, and appends
+ # trailing '-' during substitution so that $LINENO is not a special
+ # case at line end.
+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+ # scripts with optimization help from Paolo Bonzini. Blame Lee
+ # E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
+ sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
+ N
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ t loop
+ s/-\n.*//
+ ' >$as_me.lineno &&
+ chmod +x "$as_me.lineno" ||
+ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+ { (exit 1); exit 1; }; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
+ # Exit status is that of the last command.
+ exit
+}
+
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in
+-n*)
+ case `echo 'x\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ *) ECHO_C='\c';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -p'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -p'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -p'
+ fi
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p=:
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+ as_test_x='test -x'
+else
+ if ls -dL / >/dev/null 2>&1; then
+ as_ls_L_option=L
+ else
+ as_ls_L_option=
+ fi
+ as_test_x='
+ eval sh -c '\''
+ if test -d "$1"; then
+ test -d "$1/.";
+ else
+ case $1 in
+ -*)set "./$1";;
+ esac;
+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+ ???[sx]*):;;*)false;;esac;fi
+ '\'' sh
+ '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+
+
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$lt_ECHO in
+X*--fallback-echo)
+ # Remove one level of quotation (which was required for Make).
+ ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','`
+ ;;
+esac
+
+ECHO=${lt_ECHO-echo}
+if test "X$1" = X--no-reexec; then
+ # Discard the --no-reexec flag, and continue.
+ shift
+elif test "X$1" = X--fallback-echo; then
+ # Avoid inline document here, it may be left over
+ :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
+ # Yippee, $ECHO works!
+ :
+else
+ # Restart under the correct shell.
+ exec $SHELL "$0" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+ # used as fallback echo
+ shift
+ cat <<_LT_EOF
+$*
+_LT_EOF
+ exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test -z "$lt_ECHO"; then
+ if test "X${echo_test_string+set}" != Xset; then
+ # find a string as large as possible, as long as the shell can cope with it
+ for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
+ # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+ if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
+ { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
+ then
+ break
+ fi
+ done
+ fi
+
+ if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ :
+ else
+ # The Solaris, AIX, and Digital Unix default echo programs unquote
+ # backslashes. This makes it impossible to quote backslashes using
+ # echo "$something" | sed 's/\\/\\\\/g'
+ #
+ # So, first we look for a working echo in the user's PATH.
+
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for dir in $PATH /usr/ucb; do
+ IFS="$lt_save_ifs"
+ if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+ test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ ECHO="$dir/echo"
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+
+ if test "X$ECHO" = Xecho; then
+ # We didn't find a better echo, so look for alternatives.
+ if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # This shell has a builtin print -r that does the trick.
+ ECHO='print -r'
+ elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
+ test "X$CONFIG_SHELL" != X/bin/ksh; then
+ # If we have ksh, try running configure again with it.
+ ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+ export ORIGINAL_CONFIG_SHELL
+ CONFIG_SHELL=/bin/ksh
+ export CONFIG_SHELL
+ exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
+ else
+ # Try using printf.
+ ECHO='printf %s\n'
+ if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # Cool, printf works
+ :
+ elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+ export CONFIG_SHELL
+ SHELL="$CONFIG_SHELL"
+ export SHELL
+ ECHO="$CONFIG_SHELL $0 --fallback-echo"
+ elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ ECHO="$CONFIG_SHELL $0 --fallback-echo"
+ else
+ # maybe with a smaller string...
+ prev=:
+
+ for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
+ if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
+ then
+ break
+ fi
+ prev="$cmd"
+ done
+
+ if test "$prev" != 'sed 50q "$0"'; then
+ echo_test_string=`eval $prev`
+ export echo_test_string
+ exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
+ else
+ # Oops. We lost completely, so just stick with echo.
+ ECHO=echo
+ fi
+ fi
+ fi
+ fi
+ fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+lt_ECHO=$ECHO
+if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
+ lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
+fi
+
+
+
+
+exec 7<&0 </dev/null 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Identity of this package.
+PACKAGE_NAME='FreeType'
+PACKAGE_TARNAME='freetype'
+PACKAGE_VERSION='2.3.6'
+PACKAGE_STRING='FreeType 2.3.6'
+PACKAGE_BUGREPORT='freetype@nongnu.org'
+
+ac_unique_file="ftconfig.in"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+# include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='SHELL
+PATH_SEPARATOR
+PACKAGE_NAME
+PACKAGE_TARNAME
+PACKAGE_VERSION
+PACKAGE_STRING
+PACKAGE_BUGREPORT
+exec_prefix
+prefix
+program_transform_name
+bindir
+sbindir
+libexecdir
+datarootdir
+datadir
+sysconfdir
+sharedstatedir
+localstatedir
+includedir
+oldincludedir
+docdir
+infodir
+htmldir
+dvidir
+pdfdir
+psdir
+libdir
+localedir
+mandir
+DEFS
+ECHO_C
+ECHO_N
+ECHO_T
+LIBS
+build_alias
+host_alias
+target_alias
+version_info
+ft_version
+build
+build_cpu
+build_vendor
+build_os
+host
+host_cpu
+host_vendor
+host_os
+target
+target_cpu
+target_vendor
+target_os
+CC
+CFLAGS
+LDFLAGS
+CPPFLAGS
+ac_ct_CC
+EXEEXT
+OBJEXT
+CPP
+CC_BUILD
+EXEEXT_BUILD
+XX_CFLAGS
+XX_ANSIFLAGS
+RMF
+RMDIR
+INSTALL_PROGRAM
+INSTALL_SCRIPT
+INSTALL_DATA
+GREP
+EGREP
+FTSYS_SRC
+LIBZ
+FT2_EXTRA_LIBS
+SYSTEM_ZLIB
+AS
+DLLTOOL
+OBJDUMP
+LIBTOOL
+SED
+FGREP
+LD
+DUMPBIN
+ac_ct_DUMPBIN
+NM
+LN_S
+AR
+STRIP
+RANLIB
+lt_ECHO
+DSYMUTIL
+NMEDIT
+LIPO
+OTOOL
+OTOOL64
+hardcode_libdir_flag_spec
+wl
+build_libtool_libs
+LIBOBJS
+LTLIBOBJS'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+with_zlib
+with_old_mac_fonts
+with_fsspec
+with_fsref
+with_quickdraw_toolbox
+with_quickdraw_carbon
+with_ats
+enable_shared
+enable_static
+with_pic
+enable_fast_install
+with_gnu_ld
+enable_libtool_lock
+'
+ ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CPP'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval $ac_prev=\$ac_option
+ ac_prev=
+ continue
+ fi
+
+ case $ac_option in
+ *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+ *) ac_optarg=yes ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case $ac_dashdash$ac_option in
+ --)
+ ac_dashdash=yes ;;
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir=$ac_optarg ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build_alias ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build_alias=$ac_optarg ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file=$ac_optarg ;;
+
+ --config-cache | -C)
+ cache_file=config.cache ;;
+
+ -datadir | --datadir | --datadi | --datad)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=*)
+ datadir=$ac_optarg ;;
+
+ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+ | --dataroo | --dataro | --datar)
+ ac_prev=datarootdir ;;
+ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+ datarootdir=$ac_optarg ;;
+
+ -disable-* | --disable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2
+ { (exit 1); exit 1; }; }
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=no ;;
+
+ -docdir | --docdir | --docdi | --doc | --do)
+ ac_prev=docdir ;;
+ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+ docdir=$ac_optarg ;;
+
+ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+ ac_prev=dvidir ;;
+ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+ dvidir=$ac_optarg ;;
+
+ -enable-* | --enable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2
+ { (exit 1); exit 1; }; }
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=\$ac_optarg ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix=$ac_optarg ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he | -h)
+ ac_init_help=long ;;
+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+ ac_init_help=recursive ;;
+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+ ac_init_help=short ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host_alias ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host_alias=$ac_optarg ;;
+
+ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+ ac_prev=htmldir ;;
+ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+ | --ht=*)
+ htmldir=$ac_optarg ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir=$ac_optarg ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir=$ac_optarg ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir=$ac_optarg ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir=$ac_optarg ;;
+
+ -localedir | --localedir | --localedi | --localed | --locale)
+ ac_prev=localedir ;;
+ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+ localedir=$ac_optarg ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst | --locals)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+ localstatedir=$ac_optarg ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir=$ac_optarg ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c | -n)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir=$ac_optarg ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix=$ac_optarg ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix=$ac_optarg ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix=$ac_optarg ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name=$ac_optarg ;;
+
+ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+ ac_prev=pdfdir ;;
+ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+ pdfdir=$ac_optarg ;;
+
+ -psdir | --psdir | --psdi | --psd | --ps)
+ ac_prev=psdir ;;
+ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+ psdir=$ac_optarg ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir=$ac_optarg ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir=$ac_optarg ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site=$ac_optarg ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir=$ac_optarg ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir=$ac_optarg ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target_alias ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target_alias=$ac_optarg ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
+
+ -with-* | --with-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2
+ { (exit 1); exit 1; }; }
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=\$ac_optarg ;;
+
+ -without-* | --without-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2
+ { (exit 1); exit 1; }; }
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=no ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes=$ac_optarg ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries=$ac_optarg ;;
+
+ -*) { $as_echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+ { (exit 1); exit 1; }; }
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+ { $as_echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+ { (exit 1); exit 1; }; }
+ eval $ac_envvar=\$ac_optarg
+ export $ac_envvar ;;
+
+ *)
+ # FIXME: should be removed in autoconf 3.0.
+ $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ { $as_echo "$as_me: error: missing argument to $ac_option" >&2
+ { (exit 1); exit 1; }; }
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+ case $enable_option_checking in
+ no) ;;
+ fatal) { $as_echo "$as_me: error: Unrecognized options: $ac_unrecognized_opts" >&2
+ { (exit 1); exit 1; }; } ;;
+ *) $as_echo "$as_me: WARNING: Unrecognized options: $ac_unrecognized_opts" >&2 ;;
+ esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
+ datadir sysconfdir sharedstatedir localstatedir includedir \
+ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+ libdir localedir mandir
+do
+ eval ac_val=\$$ac_var
+ # Remove trailing slashes.
+ case $ac_val in
+ */ )
+ ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+ eval $ac_var=\$ac_val;;
+ esac
+ # Be sure to have absolute directory names.
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) continue;;
+ NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+ esac
+ { $as_echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+ { (exit 1); exit 1; }; }
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+ If a cross compiler is detected then cross compile mode will be used." >&2
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+ { $as_echo "$as_me: error: Working directory cannot be determined" >&2
+ { (exit 1); exit 1; }; }
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+ { $as_echo "$as_me: error: pwd does not report name of working directory" >&2
+ { (exit 1); exit 1; }; }
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then the parent directory.
+ ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_myself" : 'X\(//\)[^/]' \| \
+ X"$as_myself" : 'X\(//\)$' \| \
+ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ srcdir=$ac_confdir
+ if test ! -r "$srcdir/$ac_unique_file"; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+ { $as_echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+ { (exit 1); exit 1; }; }
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+ cd "$srcdir" && test -r "./$ac_unique_file" || { $as_echo "$as_me: error: $ac_msg" >&2
+ { (exit 1); exit 1; }; }
+ pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+ srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+ eval ac_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_env_${ac_var}_value=\$${ac_var}
+ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat <<_ACEOF
+\`configure' configures FreeType 2.3.6 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE. See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --help=short display options specific to this package
+ --help=recursive display the short help of all the included packages
+ -V, --version display version information and exit
+ -q, --quiet, --silent do not print \`checking...' messages
+ --cache-file=FILE cache test results in FILE [disabled]
+ -C, --config-cache alias for \`--cache-file=config.cache'
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
+ --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
+ --infodir=DIR info documentation [DATAROOTDIR/info]
+ --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
+ --mandir=DIR man documentation [DATAROOTDIR/man]
+ --docdir=DIR documentation root [DATAROOTDIR/doc/freetype]
+ --htmldir=DIR html documentation [DOCDIR]
+ --dvidir=DIR dvi documentation [DOCDIR]
+ --pdfdir=DIR pdf documentation [DOCDIR]
+ --psdir=DIR ps documentation [DOCDIR]
+_ACEOF
+
+ cat <<\_ACEOF
+
+System types:
+ --build=BUILD configure for building on BUILD [guessed]
+ --host=HOST cross-compile to build programs to run on HOST [BUILD]
+ --target=TARGET configure for building compilers for TARGET [HOST]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+ case $ac_init_help in
+ short | recursive ) echo "Configuration of FreeType 2.3.6:";;
+ esac
+ cat <<\_ACEOF
+
+Optional Features:
+ --disable-option-checking ignore unrecognized --enable/--with options
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --enable-shared[=PKGS] build shared libraries [default=yes]
+ --enable-static[=PKGS] build static libraries [default=yes]
+ --enable-fast-install[=PKGS]
+ optimize for fast installation [default=yes]
+ --disable-libtool-lock avoid locking (might break parallel builds)
+
+Optional Packages:
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --without-zlib use internal zlib instead of system-wide
+ --with-old-mac-fonts allow Mac resource-based fonts to be used
+ --with-fsspec use obsolete FSSpec API of MacOS, if available
+ (default=yes)
+ --with-fsref use Carbon FSRef API of MacOS, if available
+ (default=yes)
+ --with-quickdraw-toolbox
+ use MacOS QuickDraw in ToolBox, if available
+ (default=yes)
+ --with-quickdraw-carbon use MacOS QuickDraw in Carbon, if available
+ (default=yes)
+ --with-ats use AppleTypeService, if available (default=yes)
+ --with-pic try to use only PIC/non-PIC objects [default=use
+ both]
+ --with-gnu-ld assume the C compiler uses GNU ld [default=no]
+
+Some influential environment variables:
+ CC C compiler command
+ CFLAGS C compiler flags
+ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>
+ LIBS libraries to pass to the linker, e.g. -l<library>
+ CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
+ you have headers in a nonstandard directory <include dir>
+ CPP C preprocessor
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <freetype@nongnu.org>.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d "$ac_dir" ||
+ { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+ continue
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+ cd "$ac_dir" || { ac_status=$?; continue; }
+ # Check for guested configure.
+ if test -f "$ac_srcdir/configure.gnu"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+ elif test -f "$ac_srcdir/configure"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure" --help=recursive
+ else
+ $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi || ac_status=$?
+ cd "$ac_pwd" || { ac_status=$?; break; }
+ done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+ cat <<\_ACEOF
+FreeType configure 2.3.6
+generated by GNU Autoconf 2.62
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+ exit
+fi
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by FreeType $as_me 2.3.6, which was
+generated by GNU Autoconf 2.62. Invocation command line was
+
+ $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ $as_echo "PATH: $as_dir"
+done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+ for ac_arg
+ do
+ case $ac_arg in
+ -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ continue ;;
+ *\'*)
+ ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ case $ac_pass in
+ 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+ 2)
+ ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+ if test $ac_must_keep_next = true; then
+ ac_must_keep_next=false # Got value, back to normal.
+ else
+ case $ac_arg in
+ *=* | --config-cache | -C | -disable-* | --disable-* \
+ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+ | -with-* | --with-* | -without-* | --without-* | --x)
+ case "$ac_configure_args0 " in
+ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+ esac
+ ;;
+ -* ) ac_must_keep_next=true ;;
+ esac
+ fi
+ ac_configure_args="$ac_configure_args '$ac_arg'"
+ ;;
+ esac
+ done
+done
+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log. We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+ # Save into config.log some information that might help in debugging.
+ {
+ echo
+
+ cat <<\_ASBOX
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+_ASBOX
+ echo
+ # The following way of writing the cache mishandles newlines in values,
+(
+ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+$as_echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) $as_unset $ac_var ;;
+ esac ;;
+ esac
+ done
+ (set) 2>&1 |
+ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ sed -n \
+ "s/'\''/'\''\\\\'\'''\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+ ;; #(
+ *)
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+)
+ echo
+
+ cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+ echo
+ for ac_var in $ac_subst_vars
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+
+ if test -n "$ac_subst_files"; then
+ cat <<\_ASBOX
+## ------------------- ##
+## File substitutions. ##
+## ------------------- ##
+_ASBOX
+ echo
+ for ac_var in $ac_subst_files
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+ fi
+
+ if test -s confdefs.h; then
+ cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+ echo
+ cat confdefs.h
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ $as_echo "$as_me: caught signal $ac_signal"
+ $as_echo "$as_me: exit $exit_status"
+ } >&5
+ rm -f core *.core core.conftest.* &&
+ rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+ exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+ ac_site_file1=$CONFIG_SITE
+elif test "x$prefix" != xNONE; then
+ ac_site_file1=$prefix/share/config.site
+ ac_site_file2=$prefix/etc/config.site
+else
+ ac_site_file1=$ac_default_prefix/share/config.site
+ ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+ test "x$ac_site_file" = xNONE && continue
+ if test -r "$ac_site_file"; then
+ { $as_echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+ sed 's/^/| /' "$ac_site_file" >&5
+ . "$ac_site_file"
+ fi
+done
+
+if test -r "$cache_file"; then
+ # Some versions of bash will fail to source /dev/null (special
+ # files actually), so we avoid doing that.
+ if test -f "$cache_file"; then
+ { $as_echo "$as_me:$LINENO: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . "$cache_file";;
+ *) . "./$cache_file";;
+ esac
+ fi
+else
+ { $as_echo "$as_me:$LINENO: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+ eval ac_old_val=\$ac_cv_env_${ac_var}_value
+ eval ac_new_val=\$ac_env_${ac_var}_value
+ case $ac_old_set,$ac_new_set in
+ set,)
+ { $as_echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { $as_echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,);;
+ *)
+ if test "x$ac_old_val" != "x$ac_new_val"; then
+ # differences in whitespace do not lead to failure.
+ ac_old_val_w=`echo x $ac_old_val`
+ ac_new_val_w=`echo x $ac_new_val`
+ if test "$ac_old_val_w" != "$ac_new_val_w"; then
+ { $as_echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ ac_cache_corrupted=:
+ else
+ { $as_echo "$as_me:$LINENO: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+ eval $ac_var=\$ac_old_val
+ fi
+ { $as_echo "$as_me:$LINENO: former value: \`$ac_old_val'" >&5
+$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
+ { $as_echo "$as_me:$LINENO: current value: \`$ac_new_val'" >&5
+$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *) ac_arg=$ac_var=$ac_new_val ;;
+ esac
+ case " $ac_configure_args " in
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+ *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { $as_echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ { { $as_echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+$as_echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+# Don't forget to update docs/VERSION.DLL!
+
+version_info='9:17:3'
+
+ft_version=`echo $version_info | tr : .`
+
+
+
+# checks for system type
+
+ac_aux_dir=
+for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
+ if test -f "$ac_dir/install-sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f "$ac_dir/install.sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ elif test -f "$ac_dir/shtool"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/shtool install -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ { { $as_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5
+$as_echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
+
+
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+ { { $as_echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5
+$as_echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;}
+ { (exit 1); exit 1; }; }
+
+{ $as_echo "$as_me:$LINENO: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if test "${ac_cv_build+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+ ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+ { { $as_echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
+$as_echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
+ { (exit 1); exit 1; }; }
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+ { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5
+$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;}
+ { (exit 1); exit 1; }; }
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical build" >&5
+$as_echo "$as_me: error: invalid value of canonical build" >&2;}
+ { (exit 1); exit 1; }; };;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:$LINENO: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if test "${ac_cv_host+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test "x$host_alias" = x; then
+ ac_cv_host=$ac_cv_build
+else
+ ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+ { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5
+$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical host" >&5
+$as_echo "$as_me: error: invalid value of canonical host" >&2;}
+ { (exit 1); exit 1; }; };;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:$LINENO: checking target system type" >&5
+$as_echo_n "checking target system type... " >&6; }
+if test "${ac_cv_target+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test "x$target_alias" = x; then
+ ac_cv_target=$ac_cv_host
+else
+ ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` ||
+ { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&5
+$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_target" >&5
+$as_echo "$ac_cv_target" >&6; }
+case $ac_cv_target in
+*-*-*) ;;
+*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical target" >&5
+$as_echo "$as_me: error: invalid value of canonical target" >&2;}
+ { (exit 1); exit 1; }; };;
+esac
+target=$ac_cv_target
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_target
+shift
+target_cpu=$1
+target_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+target_os=$*
+IFS=$ac_save_IFS
+case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac
+
+
+# The aliases save the names the user supplied, while $host etc.
+# will get canonicalized.
+test -n "$target_alias" &&
+ test "$program_prefix$program_suffix$program_transform_name" = \
+ NONENONEs,x,x, &&
+ program_prefix=${target_alias}-
+
+
+# checks for programs
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ fi
+fi
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+ fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl.exe
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl.exe
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CC" && break
+done
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:$LINENO: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+{ (ac_try="$ac_compiler --version >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compiler --version >&5") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (ac_try="$ac_compiler -v >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compiler -v >&5") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (ac_try="$ac_compiler -V >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compiler -V >&5") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ $as_echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+ esac
+done
+rm -f $ac_rmfiles
+
+if { (ac_try="$ac_link_default"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link_default") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile. We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+ ;;
+ [ab].out )
+ # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* )
+ if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+ then :; else
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ fi
+ # We set ac_cv_exeext here because the later test for it is not
+ # safe: cross compilers may not add the suffix if given an `-o'
+ # argument, so we may need to know it at that point already.
+ # Even if this section looks crufty: it has the advantage of
+ # actually working.
+ break;;
+ * )
+ break;;
+ esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+ ac_file=''
+fi
+
+{ $as_echo "$as_me:$LINENO: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+if test -z "$ac_file"; then
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:$LINENO: error: C compiler cannot create executables
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: C compiler cannot create executables
+See \`config.log' for more details." >&2;}
+ { (exit 77); exit 77; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+
+# Check that the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+ if { ac_try='./$ac_file'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ cross_compiling=no
+ else
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ { { $as_echo "$as_me:$LINENO: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+ fi
+fi
+{ $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+# Check that the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+{ $as_echo "$as_me:$LINENO: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+{ $as_echo "$as_me:$LINENO: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ break;;
+ * ) break;;
+ esac
+done
+else
+ { { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest$ac_cv_exeext
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+{ $as_echo "$as_me:$LINENO: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if test "${ac_cv_objext+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ for ac_file in conftest.o conftest.obj conftest.*; do
+ test -f "$ac_file" || continue;
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+done
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_compiler_gnu=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_compiler_gnu=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ ac_save_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ ac_cv_prog_cc_g=no
+ CFLAGS="-g"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_prog_cc_g=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ CFLAGS=""
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ :
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_prog_cc_g=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+{ $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not '\xHH' hex character constants.
+ These don't provoke an error unfortunately, instead are silently treated
+ as 'x'. The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
+ array size at least. It's necessary to write '\x00'==0 to get something
+ that's true only with -std. */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
+ ;
+ return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_prog_cc_c89=$ac_arg
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext
+ test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+ x)
+ { $as_echo "$as_me:$LINENO: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+ xno)
+ { $as_echo "$as_me:$LINENO: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+ *)
+ CC="$CC $ac_cv_prog_cc_c89"
+ { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+fi
+if test -z "$CPP"; then
+ if test "${ac_cv_prog_CPP+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ # Double quotes because CPP needs to be expanded
+ for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+ do
+ ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ :
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Broken: fails on valid input.
+continue
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ # Broken: success on invalid input.
+continue
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+ break
+fi
+
+ done
+ ac_cv_prog_CPP=$CPP
+
+fi
+ CPP=$ac_cv_prog_CPP
+else
+ ac_cv_prog_CPP=$CPP
+fi
+{ $as_echo "$as_me:$LINENO: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ :
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Broken: fails on valid input.
+continue
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ # Broken: success on invalid input.
+continue
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+ :
+else
+ { { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+# checks for native programs to generate building tool
+
+if test ${cross_compiling} = yes; then
+ # Extract the first word of "${build}-gcc", so it can be a program name with args.
+set dummy ${build}-gcc; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC_BUILD+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC_BUILD"; then
+ ac_cv_prog_CC_BUILD="$CC_BUILD" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC_BUILD="${build}-gcc"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC_BUILD=$ac_cv_prog_CC_BUILD
+if test -n "$CC_BUILD"; then
+ { $as_echo "$as_me:$LINENO: result: $CC_BUILD" >&5
+$as_echo "$CC_BUILD" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -z "${CC_BUILD}" && # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC_BUILD+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC_BUILD"; then
+ ac_cv_prog_CC_BUILD="$CC_BUILD" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC_BUILD="gcc"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC_BUILD=$ac_cv_prog_CC_BUILD
+if test -n "$CC_BUILD"; then
+ { $as_echo "$as_me:$LINENO: result: $CC_BUILD" >&5
+$as_echo "$CC_BUILD" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -z "${CC_BUILD}" && # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC_BUILD+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC_BUILD"; then
+ ac_cv_prog_CC_BUILD="$CC_BUILD" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC_BUILD="cc"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC_BUILD
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC_BUILD to just the basename; use the full file name.
+ shift
+ ac_cv_prog_CC_BUILD="$as_dir/$ac_word${1+' '}$@"
+ fi
+fi
+fi
+fi
+CC_BUILD=$ac_cv_prog_CC_BUILD
+if test -n "$CC_BUILD"; then
+ { $as_echo "$as_me:$LINENO: result: $CC_BUILD" >&5
+$as_echo "$CC_BUILD" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -z "${CC_BUILD}" && { { $as_echo "$as_me:$LINENO: error: cannot find native C compiler" >&5
+$as_echo "$as_me: error: cannot find native C compiler" >&2;}
+ { (exit 1); exit 1; }; }
+
+ { $as_echo "$as_me:$LINENO: checking for suffix of native executables" >&5
+$as_echo_n "checking for suffix of native executables... " >&6; }
+ rm -f a.* b.* a_out.exe conftest.*
+ echo > conftest.c "int main() { return 0;}"
+ ${CC_BUILD} conftest.c || { { $as_echo "$as_me:$LINENO: error: native C compiler is not working" >&5
+$as_echo "$as_me: error: native C compiler is not working" >&2;}
+ { (exit 1); exit 1; }; }
+ rm -f conftest.c
+ if test -x a.out -o -x b.out -o -x conftest; then
+ EXEEXT_BUILD=""
+ elif test -x a_out.exe -o -x conftest.exe; then
+ EXEEXT_BUILD=".exe"
+ elif test -x conftest.* ; then
+ EXEEXT_BUILD=`echo conftest.* | sed -n '1s/^.*\.//g'`
+ fi
+ { $as_echo "$as_me:$LINENO: result: $EXEEXT_BUILD" >&5
+$as_echo "$EXEEXT_BUILD" >&6; }
+else
+ CC_BUILD=${CC}
+ EXEEXT_BUILD=${EXEEXT}
+fi
+
+
+if test ! -z ${EXEEXT_BUILD}; then
+ EXEEXT_BUILD=."${EXEEXT_BUILD}"
+fi
+
+
+
+
+
+# get compiler flags right
+
+if test "x$CC" = xgcc; then
+ XX_CFLAGS="-Wall"
+ XX_ANSIFLAGS="-pedantic -ansi"
+else
+ case "$host" in
+ *-dec-osf*)
+ CFLAGS=
+ XX_CFLAGS="-std1 -g3"
+ XX_ANSIFLAGS=
+ ;;
+ *)
+ XX_CFLAGS=
+ XX_ANSIFLAGS=
+ ;;
+ esac
+fi
+
+
+
+
+# auxiliary programs
+
+# Extract the first word of "rm", so it can be a program name with args.
+set dummy rm; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_RMF+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$RMF"; then
+ ac_cv_prog_RMF="$RMF" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_RMF="rm -f"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+RMF=$ac_cv_prog_RMF
+if test -n "$RMF"; then
+ { $as_echo "$as_me:$LINENO: result: $RMF" >&5
+$as_echo "$RMF" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# Extract the first word of "rmdir", so it can be a program name with args.
+set dummy rmdir; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_RMDIR+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$RMDIR"; then
+ ac_cv_prog_RMDIR="$RMDIR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_RMDIR="rmdir"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+RMDIR=$ac_cv_prog_RMDIR
+if test -n "$RMDIR"; then
+ { $as_echo "$as_me:$LINENO: result: $RMDIR" >&5
+$as_echo "$RMDIR" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+
+# Since this file will be finally moved to another directory we make
+# the path of the install script absolute. This small code snippet has
+# been taken from automake's `ylwrap' script.
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+ ./ | .// | /cC/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ rm -rf conftest.one conftest.two conftest.dir
+ echo one > conftest.one
+ echo two > conftest.two
+ mkdir conftest.dir
+ if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+ test -s conftest.one && test -s conftest.two &&
+ test -s conftest.dir/conftest.one &&
+ test -s conftest.dir/conftest.two
+ then
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+
+done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL=$ac_cv_path_install
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ INSTALL=$ac_install_sh
+ fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+case "$INSTALL" in
+/*)
+ ;;
+*/*)
+ INSTALL="`pwd`/$INSTALL" ;;
+esac
+
+
+# checks for header files
+
+
+
+{ $as_echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if test "${ac_cv_path_GREP+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$GREP"; then
+ ac_path_GREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in grep ggrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+ # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'GREP' >> "conftest.nl"
+ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ ac_count=`expr $ac_count + 1`
+ if test $ac_count -gt ${ac_path_GREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_GREP="$ac_path_GREP"
+ ac_path_GREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_GREP_found && break 3
+ done
+ done
+done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_GREP"; then
+ { { $as_echo "$as_me:$LINENO: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+$as_echo "$as_me: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+else
+ ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ $as_echo "$as_me:$LINENO: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if test "${ac_cv_path_EGREP+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+ then ac_cv_path_EGREP="$GREP -E"
+ else
+ if test -z "$EGREP"; then
+ ac_path_EGREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in egrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+ # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'EGREP' >> "conftest.nl"
+ "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ ac_count=`expr $ac_count + 1`
+ if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_EGREP="$ac_path_EGREP"
+ ac_path_EGREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_EGREP_found && break 3
+ done
+ done
+done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_EGREP"; then
+ { { $as_echo "$as_me:$LINENO: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+$as_echo "$as_me: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+else
+ ac_cv_path_EGREP=$EGREP
+fi
+
+ fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if test "${ac_cv_header_stdc+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_header_stdc=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_header_stdc=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "memchr" >/dev/null 2>&1; then
+ :
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "free" >/dev/null 2>&1; then
+ :
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+ if test "$cross_compiling" = yes; then
+ :
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+ (('a' <= (c) && (c) <= 'i') \
+ || ('j' <= (c) && (c) <= 'r') \
+ || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+ int i;
+ for (i = 0; i < 256; i++)
+ if (XOR (islower (i), ISLOWER (i))
+ || toupper (i) != TOUPPER (i))
+ return 2;
+ return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
+
+
+
+
+
+
+
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+ inttypes.h stdint.h unistd.h
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ eval "$as_ac_Header=yes"
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_Header=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if test `eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+for ac_header in fcntl.h unistd.h
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+ # Is the header compilable?
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_header_compiler=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ ac_header_preproc=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ ( cat <<\_ASBOX
+## ---------------------------------- ##
+## Report this to freetype@nongnu.org ##
+## ---------------------------------- ##
+_ASBOX
+ ) | sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+
+fi
+if test `eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+# checks for typedefs, structures, and compiler characteristics
+
+{ $as_echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5
+$as_echo_n "checking for an ANSI C-conforming const... " >&6; }
+if test "${ac_cv_c_const+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+/* FIXME: Include the comments suggested by Paul. */
+#ifndef __cplusplus
+ /* Ultrix mips cc rejects this. */
+ typedef int charset[2];
+ const charset cs;
+ /* SunOS 4.1.1 cc rejects this. */
+ char const *const *pcpcc;
+ char **ppc;
+ /* NEC SVR4.0.2 mips cc rejects this. */
+ struct point {int x, y;};
+ static struct point const zero = {0,0};
+ /* AIX XL C 1.02.0.0 rejects this.
+ It does not let you subtract one const X* pointer from another in
+ an arm of an if-expression whose if-part is not a constant
+ expression */
+ const char *g = "string";
+ pcpcc = &g + (g ? g-g : 0);
+ /* HPUX 7.0 cc rejects these. */
+ ++pcpcc;
+ ppc = (char**) pcpcc;
+ pcpcc = (char const *const *) ppc;
+ { /* SCO 3.2v4 cc rejects this. */
+ char *t;
+ char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+ *t++ = 0;
+ if (s) return 0;
+ }
+ { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
+ int x[] = {25, 17};
+ const int *foo = &x[0];
+ ++foo;
+ }
+ { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+ typedef const int *iptr;
+ iptr p = 0;
+ ++p;
+ }
+ { /* AIX XL C 1.02.0.0 rejects this saying
+ "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+ struct s { int j; const int *ap[3]; };
+ struct s *b; b->j = 5;
+ }
+ { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+ const int foo = 10;
+ if (!foo) return 0;
+ }
+ return !cs[0] && !zero.x;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_c_const=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_c_const=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5
+$as_echo "$ac_cv_c_const" >&6; }
+if test $ac_cv_c_const = no; then
+
+cat >>confdefs.h <<\_ACEOF
+#define const /**/
+_ACEOF
+
+fi
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:$LINENO: checking size of int" >&5
+$as_echo_n "checking size of int... " >&6; }
+if test "${ac_cv_sizeof_int+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test "$cross_compiling" = yes; then
+ # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (int))) >= 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_lo=0 ac_mid=0
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (int))) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_hi=$ac_mid; break
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_lo=`expr $ac_mid + 1`
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (int))) < 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_hi=-1 ac_mid=-1
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (int))) >= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_lo=$ac_mid; break
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_hi=`expr '(' $ac_mid ')' - 1`
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_lo= ac_hi=
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (int))) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_hi=$ac_mid
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_int=$ac_lo;;
+'') if test "$ac_cv_type_int" = yes; then
+ { { $as_echo "$as_me:$LINENO: error: cannot compute sizeof (int)
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: cannot compute sizeof (int)
+See \`config.log' for more details." >&2;}
+ { (exit 77); exit 77; }; }
+ else
+ ac_cv_sizeof_int=0
+ fi ;;
+esac
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+static long int longval () { return (long int) (sizeof (int)); }
+static unsigned long int ulongval () { return (long int) (sizeof (int)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ return 1;
+ if (((long int) (sizeof (int))) < 0)
+ {
+ long int i = longval ();
+ if (i != ((long int) (sizeof (int))))
+ return 1;
+ fprintf (f, "%ld", i);
+ }
+ else
+ {
+ unsigned long int i = ulongval ();
+ if (i != ((long int) (sizeof (int))))
+ return 1;
+ fprintf (f, "%lu", i);
+ }
+ /* Do not output a trailing newline, as this causes \r\n confusion
+ on some platforms. */
+ return ferror (f) || fclose (f) != 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_sizeof_int=`cat conftest.val`
+else
+ $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+if test "$ac_cv_type_int" = yes; then
+ { { $as_echo "$as_me:$LINENO: error: cannot compute sizeof (int)
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: cannot compute sizeof (int)
+See \`config.log' for more details." >&2;}
+ { (exit 77); exit 77; }; }
+ else
+ ac_cv_sizeof_int=0
+ fi
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.val
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5
+$as_echo "$ac_cv_sizeof_int" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_INT $ac_cv_sizeof_int
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:$LINENO: checking size of long" >&5
+$as_echo_n "checking size of long... " >&6; }
+if test "${ac_cv_sizeof_long+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test "$cross_compiling" = yes; then
+ # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (long))) >= 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_lo=0 ac_mid=0
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (long))) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_hi=$ac_mid; break
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_lo=`expr $ac_mid + 1`
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (long))) < 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_hi=-1 ac_mid=-1
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (long))) >= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_lo=$ac_mid; break
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_hi=`expr '(' $ac_mid ')' - 1`
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_lo= ac_hi=
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (long))) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_hi=$ac_mid
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_long=$ac_lo;;
+'') if test "$ac_cv_type_long" = yes; then
+ { { $as_echo "$as_me:$LINENO: error: cannot compute sizeof (long)
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: cannot compute sizeof (long)
+See \`config.log' for more details." >&2;}
+ { (exit 77); exit 77; }; }
+ else
+ ac_cv_sizeof_long=0
+ fi ;;
+esac
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+static long int longval () { return (long int) (sizeof (long)); }
+static unsigned long int ulongval () { return (long int) (sizeof (long)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ return 1;
+ if (((long int) (sizeof (long))) < 0)
+ {
+ long int i = longval ();
+ if (i != ((long int) (sizeof (long))))
+ return 1;
+ fprintf (f, "%ld", i);
+ }
+ else
+ {
+ unsigned long int i = ulongval ();
+ if (i != ((long int) (sizeof (long))))
+ return 1;
+ fprintf (f, "%lu", i);
+ }
+ /* Do not output a trailing newline, as this causes \r\n confusion
+ on some platforms. */
+ return ferror (f) || fclose (f) != 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_sizeof_long=`cat conftest.val`
+else
+ $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+if test "$ac_cv_type_long" = yes; then
+ { { $as_echo "$as_me:$LINENO: error: cannot compute sizeof (long)
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: cannot compute sizeof (long)
+See \`config.log' for more details." >&2;}
+ { (exit 77); exit 77; }; }
+ else
+ ac_cv_sizeof_long=0
+ fi
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.val
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5
+$as_echo "$ac_cv_sizeof_long" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_LONG $ac_cv_sizeof_long
+_ACEOF
+
+
+
+
+# checks for library functions
+
+# Here we check whether we can use our mmap file component.
+
+
+
+for ac_header in stdlib.h unistd.h
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+ # Is the header compilable?
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_header_compiler=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ ac_header_preproc=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ ( cat <<\_ASBOX
+## ---------------------------------- ##
+## Report this to freetype@nongnu.org ##
+## ---------------------------------- ##
+_ASBOX
+ ) | sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+
+fi
+if test `eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_func in getpagesize
+do
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* 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 defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ eval "$as_ac_var=yes"
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_var=no"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if test `eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+{ $as_echo "$as_me:$LINENO: checking for working mmap" >&5
+$as_echo_n "checking for working mmap... " >&6; }
+if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test "$cross_compiling" = yes; then
+ ac_cv_func_mmap_fixed_mapped=no
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+/* malloc might have been renamed as rpl_malloc. */
+#undef malloc
+
+/* Thanks to Mike Haertel and Jim Avera for this test.
+ Here is a matrix of mmap possibilities:
+ mmap private not fixed
+ mmap private fixed at somewhere currently unmapped
+ mmap private fixed at somewhere already mapped
+ mmap shared not fixed
+ mmap shared fixed at somewhere currently unmapped
+ mmap shared fixed at somewhere already mapped
+ For private mappings, we should verify that changes cannot be read()
+ back from the file, nor mmap's back from the file at a different
+ address. (There have been systems where private was not correctly
+ implemented like the infamous i386 svr4.0, and systems where the
+ VM page cache was not coherent with the file system buffer cache
+ like early versions of FreeBSD and possibly contemporary NetBSD.)
+ For shared mappings, we should conversely verify that changes get
+ propagated back to all the places they're supposed to be.
+
+ Grep wants private fixed already mapped.
+ The main things grep needs to know about mmap are:
+ * does it exist and is it safe to write into the mmap'd area
+ * how to use it (BSD variants) */
+
+#include <fcntl.h>
+#include <sys/mman.h>
+
+#if !defined STDC_HEADERS && !defined HAVE_STDLIB_H
+char *malloc ();
+#endif
+
+/* This mess was copied from the GNU getpagesize.h. */
+#ifndef HAVE_GETPAGESIZE
+/* Assume that all systems that can run configure have sys/param.h. */
+# ifndef HAVE_SYS_PARAM_H
+# define HAVE_SYS_PARAM_H 1
+# endif
+
+# ifdef _SC_PAGESIZE
+# define getpagesize() sysconf(_SC_PAGESIZE)
+# else /* no _SC_PAGESIZE */
+# ifdef HAVE_SYS_PARAM_H
+# include <sys/param.h>
+# ifdef EXEC_PAGESIZE
+# define getpagesize() EXEC_PAGESIZE
+# else /* no EXEC_PAGESIZE */
+# ifdef NBPG
+# define getpagesize() NBPG * CLSIZE
+# ifndef CLSIZE
+# define CLSIZE 1
+# endif /* no CLSIZE */
+# else /* no NBPG */
+# ifdef NBPC
+# define getpagesize() NBPC
+# else /* no NBPC */
+# ifdef PAGESIZE
+# define getpagesize() PAGESIZE
+# endif /* PAGESIZE */
+# endif /* no NBPC */
+# endif /* no NBPG */
+# endif /* no EXEC_PAGESIZE */
+# else /* no HAVE_SYS_PARAM_H */
+# define getpagesize() 8192 /* punt totally */
+# endif /* no HAVE_SYS_PARAM_H */
+# endif /* no _SC_PAGESIZE */
+
+#endif /* no HAVE_GETPAGESIZE */
+
+int
+main ()
+{
+ char *data, *data2, *data3;
+ int i, pagesize;
+ int fd;
+
+ pagesize = getpagesize ();
+
+ /* First, make a file with some known garbage in it. */
+ data = (char *) malloc (pagesize);
+ if (!data)
+ return 1;
+ for (i = 0; i < pagesize; ++i)
+ *(data + i) = rand ();
+ umask (0);
+ fd = creat ("conftest.mmap", 0600);
+ if (fd < 0)
+ return 1;
+ if (write (fd, data, pagesize) != pagesize)
+ return 1;
+ close (fd);
+
+ /* Next, try to mmap the file at a fixed address which already has
+ something else allocated at it. If we can, also make sure that
+ we see the same garbage. */
+ fd = open ("conftest.mmap", O_RDWR);
+ if (fd < 0)
+ return 1;
+ data2 = (char *) malloc (2 * pagesize);
+ if (!data2)
+ return 1;
+ data2 += (pagesize - ((long int) data2 & (pagesize - 1))) & (pagesize - 1);
+ if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE,
+ MAP_PRIVATE | MAP_FIXED, fd, 0L))
+ return 1;
+ for (i = 0; i < pagesize; ++i)
+ if (*(data + i) != *(data2 + i))
+ return 1;
+
+ /* Finally, make sure that changes to the mapped area do not
+ percolate back to the file as seen by read(). (This is a bug on
+ some variants of i386 svr4.0.) */
+ for (i = 0; i < pagesize; ++i)
+ *(data2 + i) = *(data2 + i) + 1;
+ data3 = (char *) malloc (pagesize);
+ if (!data3)
+ return 1;
+ if (read (fd, data3, pagesize) != pagesize)
+ return 1;
+ for (i = 0; i < pagesize; ++i)
+ if (*(data + i) != *(data3 + i))
+ return 1;
+ close (fd);
+ return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_mmap_fixed_mapped=yes
+else
+ $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_func_mmap_fixed_mapped=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5
+$as_echo "$ac_cv_func_mmap_fixed_mapped" >&6; }
+if test $ac_cv_func_mmap_fixed_mapped = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_MMAP 1
+_ACEOF
+
+fi
+rm -f conftest.mmap
+
+if test "$ac_cv_func_mmap_fixed_mapped" != yes; then
+ FTSYS_SRC='$(BASE_DIR)/ftsystem.c'
+else
+ FTSYS_SRC='$(BUILD_DIR)/ftsystem.c'
+
+ { $as_echo "$as_me:$LINENO: checking whether munmap is declared" >&5
+$as_echo_n "checking whether munmap is declared... " >&6; }
+if test "${ac_cv_have_decl_munmap+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <sys/mman.h>
+
+
+
+int
+main ()
+{
+#ifndef munmap
+ (void) munmap;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_have_decl_munmap=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_have_decl_munmap=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_munmap" >&5
+$as_echo "$ac_cv_have_decl_munmap" >&6; }
+if test $ac_cv_have_decl_munmap = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MUNMAP 1
+_ACEOF
+
+
+else
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MUNMAP 0
+_ACEOF
+
+
+fi
+
+
+
+ { $as_echo "$as_me:$LINENO: checking for munmap's first parameter type" >&5
+$as_echo_n "checking for munmap's first parameter type... " >&6; }
+ cat >conftest.$ac_ext <<_ACEOF
+
+ /* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+
+#include <unistd.h>
+#include <sys/mman.h>
+int munmap(void *, size_t);
+
+
+
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ { $as_echo "$as_me:$LINENO: result: void *" >&5
+$as_echo "void *" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define MUNMAP_USES_VOIDP /**/
+_ACEOF
+
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ { $as_echo "$as_me:$LINENO: result: char *" >&5
+$as_echo "char *" >&6; }
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+
+
+
+
+for ac_func in memcpy memmove
+do
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* 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 defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ eval "$as_ac_var=yes"
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_var=no"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if test `eval 'as_val=${'$as_ac_var'}
+ $as_echo "$as_val"'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+
+# Check for system zlib
+
+# don't quote AS_HELP_STRING!
+
+# Check whether --with-zlib was given.
+if test "${with_zlib+set}" = set; then
+ withval=$with_zlib;
+fi
+
+if test x$with_zlib != xno && test -z "$LIBZ"; then
+ { $as_echo "$as_me:$LINENO: checking for gzsetparams in -lz" >&5
+$as_echo_n "checking for gzsetparams in -lz... " >&6; }
+if test "${ac_cv_lib_z_gzsetparams+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lz $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char gzsetparams ();
+int
+main ()
+{
+return gzsetparams ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ ac_cv_lib_z_gzsetparams=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_lib_z_gzsetparams=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_z_gzsetparams" >&5
+$as_echo "$ac_cv_lib_z_gzsetparams" >&6; }
+if test $ac_cv_lib_z_gzsetparams = yes; then
+ if test "${ac_cv_header_zlib_h+set}" = set; then
+ { $as_echo "$as_me:$LINENO: checking for zlib.h" >&5
+$as_echo_n "checking for zlib.h... " >&6; }
+if test "${ac_cv_header_zlib_h+set}" = set; then
+ $as_echo_n "(cached) " >&6
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_zlib_h" >&5
+$as_echo "$ac_cv_header_zlib_h" >&6; }
+else
+ # Is the header compilable?
+{ $as_echo "$as_me:$LINENO: checking zlib.h usability" >&5
+$as_echo_n "checking zlib.h usability... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <zlib.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_header_compiler=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:$LINENO: checking zlib.h presence" >&5
+$as_echo_n "checking zlib.h presence... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <zlib.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ ac_header_preproc=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { $as_echo "$as_me:$LINENO: WARNING: zlib.h: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: zlib.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: zlib.h: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: zlib.h: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { $as_echo "$as_me:$LINENO: WARNING: zlib.h: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: zlib.h: present but cannot be compiled" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: zlib.h: check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: zlib.h: check for missing prerequisite headers?" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: zlib.h: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: zlib.h: see the Autoconf documentation" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: zlib.h: section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: zlib.h: section \"Present But Cannot Be Compiled\"" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: zlib.h: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: zlib.h: proceeding with the preprocessor's result" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: zlib.h: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: zlib.h: in the future, the compiler will take precedence" >&2;}
+ ( cat <<\_ASBOX
+## ---------------------------------- ##
+## Report this to freetype@nongnu.org ##
+## ---------------------------------- ##
+_ASBOX
+ ) | sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+{ $as_echo "$as_me:$LINENO: checking for zlib.h" >&5
+$as_echo_n "checking for zlib.h... " >&6; }
+if test "${ac_cv_header_zlib_h+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_header_zlib_h=$ac_header_preproc
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_zlib_h" >&5
+$as_echo "$ac_cv_header_zlib_h" >&6; }
+
+fi
+if test $ac_cv_header_zlib_h = yes; then
+ LIBZ='-lz'
+fi
+
+
+fi
+
+fi
+if test x$with_zlib != xno && test -n "$LIBZ"; then
+ CFLAGS="$CFLAGS -DFT_CONFIG_OPTION_SYSTEM_ZLIB"
+ LDFLAGS="$LDFLAGS $LIBZ"
+ SYSTEM_ZLIB=yes
+fi
+
+
+# Whether to use Mac OS resource-based fonts.
+
+# don't quote AS_HELP_STRING!
+
+# Check whether --with-old-mac-fonts was given.
+if test "${with_old_mac_fonts+set}" = set; then
+ withval=$with_old_mac_fonts;
+fi
+
+if test x$with_old_mac_fonts = xyes; then
+ orig_LDFLAGS="${LDFLAGS}"
+ { $as_echo "$as_me:$LINENO: checking CoreServices & ApplicationServices of Mac OS X" >&5
+$as_echo_n "checking CoreServices & ApplicationServices of Mac OS X... " >&6; }
+ FT2_EXTRA_LIBS="-Wl,-framework,CoreServices -Wl,-framework,ApplicationServices"
+ LDFLAGS="$LDFLAGS $FT2_EXTRA_LIBS"
+ cat >conftest.$ac_ext <<_ACEOF
+
+ /* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+
+#if defined(__GNUC__) && defined(__APPLE_CC__)
+# include <Carbon/Carbon.h>
+# include <ApplicationServices/ApplicationServices.h>
+#else
+# include <ConditionalMacros.h>
+# include <Files.h>
+#endif
+
+
+int
+main ()
+{
+
+
+ short res = 0;
+
+
+ UseResFile( res );
+
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ { $as_echo "$as_me:$LINENO: result: ok" >&5
+$as_echo "ok" >&6; }
+ { $as_echo "$as_me:$LINENO: checking OS_INLINE macro is ANSI compatible" >&5
+$as_echo_n "checking OS_INLINE macro is ANSI compatible... " >&6; }
+ orig_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $XX_CFLAGS $XX_ANSIFLAGS"
+ cat >conftest.$ac_ext <<_ACEOF
+
+ /* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+
+#if defined(__GNUC__) && defined(__APPLE_CC__)
+# include <Carbon/Carbon.h>
+# include <ApplicationServices/ApplicationServices.h>
+#else
+# include <ConditionalMacros.h>
+# include <Files.h>
+#endif
+
+
+int
+main ()
+{
+
+
+ /* OSHostByteOrder() is typed as OS_INLINE */
+ int32_t os_byte_order = OSHostByteOrder();
+
+
+ if ( OSBigEndian != os_byte_order )
+ return 1;
+
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ { $as_echo "$as_me:$LINENO: result: ok" >&5
+$as_echo "ok" >&6; }
+ CFLAGS="$orig_CFLAGS"
+ CFLAGS="$CFLAGS -DHAVE_ANSI_OS_INLINE=1"
+
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ { $as_echo "$as_me:$LINENO: result: no, ANSI incompatible" >&5
+$as_echo "no, ANSI incompatible" >&6; }
+ CFLAGS="$orig_CFLAGS"
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ { $as_echo "$as_me:$LINENO: result: not found" >&5
+$as_echo "not found" >&6; }
+ LDFLAGS="${orig_LDFLAGS}"
+ CFLAGS="$CFLAGS -DDARWIN_NO_CARBON"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+else
+ case x$target_os in
+ xdarwin*)
+ CFLAGS="$CFLAGS -DDARWIN_NO_CARBON"
+ ;;
+ *) ;;
+ esac
+fi
+
+
+# Whether to use FileManager which is deprecated since Mac OS X 10.4.
+
+
+# Check whether --with-fsspec was given.
+if test "${with_fsspec+set}" = set; then
+ withval=$with_fsspec;
+fi
+
+if test x$with_fsspec = xno; then
+ CFLAGS="$CFLAGS -DHAVE_FSSPEC=0"
+elif test x$with_old_mac_fonts = xyes -a x$with_fsspec != x; then
+ { $as_echo "$as_me:$LINENO: checking FSSpec-based FileManager" >&5
+$as_echo_n "checking FSSpec-based FileManager... " >&6; }
+ cat >conftest.$ac_ext <<_ACEOF
+
+ /* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+
+#if defined(__GNUC__) && defined(__APPLE_CC__)
+# include <Carbon/Carbon.h>
+# include <ApplicationServices/ApplicationServices.h>
+#else
+# include <ConditionalMacros.h>
+# include <Files.h>
+#endif
+
+
+int
+main ()
+{
+
+
+ FCBPBPtr paramBlock;
+ short vRefNum;
+ long dirID;
+ ConstStr255Param fileName;
+ FSSpec* spec;
+
+
+ /* FSSpec functions: deprecated since Mac OS X 10.4 */
+ PBGetFCBInfoSync( paramBlock );
+ FSMakeFSSpec( vRefNum, dirID, fileName, spec );
+
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ { $as_echo "$as_me:$LINENO: result: ok" >&5
+$as_echo "ok" >&6; }
+ CFLAGS="$CFLAGS -DHAVE_FSSPEC=1"
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ { $as_echo "$as_me:$LINENO: result: not found" >&5
+$as_echo "not found" >&6; }
+ CFLAGS="$CFLAGS -DHAVE_FSSPEC=0"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+
+
+# Whether to use FileManager in Carbon since MacOS 9.x.
+
+
+# Check whether --with-fsref was given.
+if test "${with_fsref+set}" = set; then
+ withval=$with_fsref;
+fi
+
+if test x$with_fsref = xno; then
+ { $as_echo "$as_me:$LINENO: WARNING:
+*** WARNING
+ FreeType2 built without FSRef API cannot load
+ data-fork fonts on MacOS, except of XXX.dfont.
+ " >&5
+$as_echo "$as_me: WARNING:
+*** WARNING
+ FreeType2 built without FSRef API cannot load
+ data-fork fonts on MacOS, except of XXX.dfont.
+ " >&2;}
+ CFLAGS="$CFLAGS -DHAVE_FSREF=0"
+elif test x$with_old_mac_fonts = xyes -a x$with_fsref != x; then
+ { $as_echo "$as_me:$LINENO: checking FSRef-based FileManager" >&5
+$as_echo_n "checking FSRef-based FileManager... " >&6; }
+ cat >conftest.$ac_ext <<_ACEOF
+
+ /* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+
+#if defined(__GNUC__) && defined(__APPLE_CC__)
+# include <Carbon/Carbon.h>
+# include <ApplicationServices/ApplicationServices.h>
+#else
+# include <ConditionalMacros.h>
+# include <Files.h>
+#endif
+
+
+int
+main ()
+{
+
+
+ short vRefNum;
+ long dirID;
+ ConstStr255Param fileName;
+
+ Boolean* isDirectory;
+ UInt8* path;
+ SInt16 desiredRefNum;
+ SInt16* iterator;
+ SInt16* actualRefNum;
+ HFSUniStr255* outForkName;
+ FSVolumeRefNum volume;
+ FSCatalogInfoBitmap whichInfo;
+ FSCatalogInfo* catalogInfo;
+ FSForkInfo* forkInfo;
+ FSRef* ref;
+
+#if HAVE_FSSPEC
+ FSSpec* spec;
+#endif
+
+ /* FSRef functions: no need to check? */
+ FSGetForkCBInfo( desiredRefNum, volume, iterator,
+ actualRefNum, forkInfo, ref,
+ outForkName );
+ FSPathMakeRef( path, ref, isDirectory );
+
+#if HAVE_FSSPEC
+ FSpMakeFSRef ( spec, ref );
+ FSGetCatalogInfo( ref, whichInfo, catalogInfo,
+ outForkName, spec, ref );
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ { $as_echo "$as_me:$LINENO: result: ok" >&5
+$as_echo "ok" >&6; }
+ CFLAGS="$CFLAGS -DHAVE_FSREF=1"
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ { $as_echo "$as_me:$LINENO: result: not found" >&5
+$as_echo "not found" >&6; }
+ CFLAGS="$CFLAGS -DHAVE_FSREF=0"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+
+
+# Whether to use QuickDraw API in ToolBox which is deprecated since
+# Mac OS X 10.4.
+
+
+# Check whether --with-quickdraw-toolbox was given.
+if test "${with_quickdraw_toolbox+set}" = set; then
+ withval=$with_quickdraw_toolbox;
+fi
+
+if test x$with_quickdraw_toolbox = xno; then
+ CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_TOOLBOX=0"
+elif test x$with_old_mac_fonts = xyes -a x$with_quickdraw_toolbox != x; then
+ { $as_echo "$as_me:$LINENO: checking QuickDraw FontManager functions in ToolBox" >&5
+$as_echo_n "checking QuickDraw FontManager functions in ToolBox... " >&6; }
+ cat >conftest.$ac_ext <<_ACEOF
+
+ /* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+
+#if defined(__GNUC__) && defined(__APPLE_CC__)
+# include <Carbon/Carbon.h>
+# include <ApplicationServices/ApplicationServices.h>
+#else
+# include <ConditionalMacros.h>
+# include <Fonts.h>
+#endif
+
+
+int
+main ()
+{
+
+
+ Str255 familyName;
+ SInt16 familyID = 0;
+ FMInput* fmIn = NULL;
+ FMOutput* fmOut = NULL;
+
+
+ GetFontName( familyID, familyName );
+ GetFNum( familyName, &familyID );
+ fmOut = FMSwapFont( fmIn );
+
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ { $as_echo "$as_me:$LINENO: result: ok" >&5
+$as_echo "ok" >&6; }
+ CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_TOOLBOX=1"
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ { $as_echo "$as_me:$LINENO: result: not found" >&5
+$as_echo "not found" >&6; }
+ CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_TOOLBOX=0"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+
+
+# Whether to use QuickDraw API in Carbon which is deprecated since
+# Mac OS X 10.4.
+
+
+# Check whether --with-quickdraw-carbon was given.
+if test "${with_quickdraw_carbon+set}" = set; then
+ withval=$with_quickdraw_carbon;
+fi
+
+if test x$with_quickdraw_carbon = xno; then
+ CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_CARBON=0"
+elif test x$with_old_mac_fonts = xyes -a x$with_quickdraw_carbon != x; then
+ { $as_echo "$as_me:$LINENO: checking QuickDraw FontManager functions in Carbon" >&5
+$as_echo_n "checking QuickDraw FontManager functions in Carbon... " >&6; }
+ cat >conftest.$ac_ext <<_ACEOF
+
+ /* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+
+#if defined(__GNUC__) && defined(__APPLE_CC__)
+# include <Carbon/Carbon.h>
+# include <ApplicationServices/ApplicationServices.h>
+#else
+# include <ConditionalMacros.h>
+# include <Fonts.h>
+#endif
+
+
+int
+main ()
+{
+
+
+ FMFontFamilyIterator famIter;
+ FMFontFamily family;
+ Str255 famNameStr;
+ FMFontFamilyInstanceIterator instIter;
+ FMFontStyle style;
+ FMFontSize size;
+ FMFont font;
+ FSSpec* pathSpec;
+
+
+ FMCreateFontFamilyIterator( NULL, NULL, kFMUseGlobalScopeOption,
+ &famIter );
+ FMGetNextFontFamily( &famIter, &family );
+ FMGetFontFamilyName( family, famNameStr );
+ FMCreateFontFamilyInstanceIterator( family, &instIter );
+ FMGetNextFontFamilyInstance( &instIter, &font, &style, &size );
+ FMDisposeFontFamilyInstanceIterator( &instIter );
+ FMDisposeFontFamilyIterator( &famIter );
+ FMGetFontContainer( font, pathSpec );
+
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ { $as_echo "$as_me:$LINENO: result: ok" >&5
+$as_echo "ok" >&6; }
+ CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_CARBON=1"
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ { $as_echo "$as_me:$LINENO: result: not found" >&5
+$as_echo "not found" >&6; }
+ CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_CARBON=0"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+
+
+# Whether to use AppleTypeService since Mac OS X.
+
+# don't quote AS_HELP_STRING!
+
+# Check whether --with-ats was given.
+if test "${with_ats+set}" = set; then
+ withval=$with_ats;
+fi
+
+if test x$with_ats = xno; then
+ CFLAGS="$CFLAGS -DHAVE_ATS=0"
+elif test x$with_old_mac_fonts = xyes -a x$with_ats != x ; then
+ { $as_echo "$as_me:$LINENO: checking AppleTypeService functions" >&5
+$as_echo_n "checking AppleTypeService functions... " >&6; }
+ cat >conftest.$ac_ext <<_ACEOF
+
+ /* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+
+#include <Carbon/Carbon.h>
+
+
+int
+main ()
+{
+
+
+ FSSpec* pathSpec;
+
+
+ ATSFontFindFromName( NULL, kATSOptionFlagsUnRestrictedScope );
+#if HAVE_FSSPEC
+ ATSFontGetFileSpecification( 0, pathSpec );
+#endif
+
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ { $as_echo "$as_me:$LINENO: result: ok" >&5
+$as_echo "ok" >&6; }
+ CFLAGS="$CFLAGS -DHAVE_ATS=1"
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ { $as_echo "$as_me:$LINENO: result: not found" >&5
+$as_echo "not found" >&6; }
+ CFLAGS="$CFLAGS -DHAVE_ATS=0"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+
+case "$CFLAGS" in
+ *HAVE_FSSPEC* | *HAVE_FSREF* | *HAVE_QUICKDRAW* | *HAVE_ATS* )
+ { $as_echo "$as_me:$LINENO: WARNING:
+*** WARNING
+ FSSpec/FSRef/QuickDraw/ATS options are explicitly given,
+ thus it is recommended to replace src/base/ftmac.c by builds/mac/ftmac.c.
+ " >&5
+$as_echo "$as_me: WARNING:
+*** WARNING
+ FSSpec/FSRef/QuickDraw/ATS options are explicitly given,
+ thus it is recommended to replace src/base/ftmac.c by builds/mac/ftmac.c.
+ " >&2;}
+ CFLAGS="$CFLAGS "'-I$(TOP_DIR)/builds/mac/'
+ ;;
+ *)
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+case `pwd` in
+ *\ * | *\ *)
+ { $as_echo "$as_me:$LINENO: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
+$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
+esac
+
+
+
+macro_version='2.2.4'
+macro_revision='1.2976'
+
+
+
+
+
+
+
+
+
+
+
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+{ $as_echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5
+$as_echo_n "checking for a sed that does not truncate output... " >&6; }
+if test "${ac_cv_path_SED+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+ for ac_i in 1 2 3 4 5 6 7; do
+ ac_script="$ac_script$as_nl$ac_script"
+ done
+ echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+ $as_unset ac_script || ac_script=
+ if test -z "$SED"; then
+ ac_path_SED_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in sed gsed; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue
+# Check for GNU ac_path_SED and select it if it is found.
+ # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+ ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo '' >> "conftest.nl"
+ "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ ac_count=`expr $ac_count + 1`
+ if test $ac_count -gt ${ac_path_SED_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_SED="$ac_path_SED"
+ ac_path_SED_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_SED_found && break 3
+ done
+ done
+done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_SED"; then
+ { { $as_echo "$as_me:$LINENO: error: no acceptable sed could be found in \$PATH" >&5
+$as_echo "$as_me: error: no acceptable sed could be found in \$PATH" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+else
+ ac_cv_path_SED=$SED
+fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_SED" >&5
+$as_echo "$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+ rm -f conftest.sed
+
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:$LINENO: checking for fgrep" >&5
+$as_echo_n "checking for fgrep... " >&6; }
+if test "${ac_cv_path_FGREP+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
+ then ac_cv_path_FGREP="$GREP -F"
+ else
+ if test -z "$FGREP"; then
+ ac_path_FGREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in fgrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue
+# Check for GNU ac_path_FGREP and select it if it is found.
+ # Check for GNU $ac_path_FGREP
+case `"$ac_path_FGREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'FGREP' >> "conftest.nl"
+ "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ ac_count=`expr $ac_count + 1`
+ if test $ac_count -gt ${ac_path_FGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_FGREP="$ac_path_FGREP"
+ ac_path_FGREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_FGREP_found && break 3
+ done
+ done
+done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_FGREP"; then
+ { { $as_echo "$as_me:$LINENO: error: no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+$as_echo "$as_me: error: no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+else
+ ac_cv_path_FGREP=$FGREP
+fi
+
+ fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_FGREP" >&5
+$as_echo "$ac_cv_path_FGREP" >&6; }
+ FGREP="$ac_cv_path_FGREP"
+
+
+test -z "$GREP" && GREP=grep
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then
+ withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+ with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ { $as_echo "$as_me:$LINENO: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [\\/]* | ?:[\\/]*)
+ re_direlt='/[^/][^/]*/\.\./'
+ # Canonicalize the pathname of ld
+ ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+ while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ { $as_echo "$as_me:$LINENO: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+ { $as_echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if test "${lt_cv_path_LD+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$LD"; then
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ lt_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some variants of GNU ld only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break
+ ;;
+ *)
+ test "$with_gnu_ld" != yes && break
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+else
+ lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+ { $as_echo "$as_me:$LINENO: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && { { $as_echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
+$as_echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
+ { (exit 1); exit 1; }; }
+{ $as_echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if test "${lt_cv_prog_gnu_ld+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ lt_cv_prog_gnu_ld=yes
+ ;;
+*)
+ lt_cv_prog_gnu_ld=no
+ ;;
+esac
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
+$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:$LINENO: checking for BSD- or MS-compatible name lister (nm)" >&5
+$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
+if test "${lt_cv_path_NM+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$NM"; then
+ # Let the user override the test.
+ lt_cv_path_NM="$NM"
+else
+ lt_nm_to_check="${ac_tool_prefix}nm"
+ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+ lt_nm_to_check="$lt_nm_to_check nm"
+ fi
+ for lt_tmp_nm in $lt_nm_to_check; do
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ tmp_nm="$ac_dir/$lt_tmp_nm"
+ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+ # Check to see if the nm accepts a BSD-compat flag.
+ # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+ # nm: unknown option "B" ignored
+ # Tru64's nm complains that /dev/null is an invalid object file
+ case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+ */dev/null* | *'Invalid file or object type'*)
+ lt_cv_path_NM="$tmp_nm -B"
+ break
+ ;;
+ *)
+ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+ */dev/null*)
+ lt_cv_path_NM="$tmp_nm -p"
+ break
+ ;;
+ *)
+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+ continue # so that we can try to find one that supports BSD flags
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+ done
+ : ${lt_cv_path_NM=no}
+fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5
+$as_echo "$lt_cv_path_NM" >&6; }
+if test "$lt_cv_path_NM" != "no"; then
+ NM="$lt_cv_path_NM"
+else
+ # Didn't find any BSD compatible name lister, look for dumpbin.
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_DUMPBIN+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$DUMPBIN"; then
+ ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+DUMPBIN=$ac_cv_prog_DUMPBIN
+if test -n "$DUMPBIN"; then
+ { $as_echo "$as_me:$LINENO: result: $DUMPBIN" >&5
+$as_echo "$DUMPBIN" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$DUMPBIN" && break
+ done
+fi
+if test -z "$DUMPBIN"; then
+ ac_ct_DUMPBIN=$DUMPBIN
+ for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_DUMPBIN"; then
+ ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
+if test -n "$ac_ct_DUMPBIN"; then
+ { $as_echo "$as_me:$LINENO: result: $ac_ct_DUMPBIN" >&5
+$as_echo "$ac_ct_DUMPBIN" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_DUMPBIN" && break
+done
+
+ if test "x$ac_ct_DUMPBIN" = x; then
+ DUMPBIN=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ DUMPBIN=$ac_ct_DUMPBIN
+ fi
+fi
+
+
+ if test "$DUMPBIN" != ":"; then
+ NM="$DUMPBIN"
+ fi
+fi
+test -z "$NM" && NM=nm
+
+
+
+
+
+
+{ $as_echo "$as_me:$LINENO: checking the name lister ($NM) interface" >&5
+$as_echo_n "checking the name lister ($NM) interface... " >&6; }
+if test "${lt_cv_nm_interface+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_nm_interface="BSD nm"
+ echo "int some_variable = 0;" > conftest.$ac_ext
+ (eval echo "\"\$as_me:7173: $ac_compile\"" >&5)
+ (eval "$ac_compile" 2>conftest.err)
+ cat conftest.err >&5
+ (eval echo "\"\$as_me:7176: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+ (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+ cat conftest.err >&5
+ (eval echo "\"\$as_me:7179: output\"" >&5)
+ cat conftest.out >&5
+ if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+ lt_cv_nm_interface="MS dumpbin"
+ fi
+ rm -f conftest*
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_nm_interface" >&5
+$as_echo "$lt_cv_nm_interface" >&6; }
+
+{ $as_echo "$as_me:$LINENO: checking whether ln -s works" >&5
+$as_echo_n "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+ { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no, using $LN_S" >&5
+$as_echo "no, using $LN_S" >&6; }
+fi
+
+# find the maximum length of command line arguments
+{ $as_echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5
+$as_echo_n "checking the maximum length of command line arguments... " >&6; }
+if test "${lt_cv_sys_max_cmd_len+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ i=0
+ teststring="ABCD"
+
+ case $build_os in
+ msdosdjgpp*)
+ # On DJGPP, this test can blow up pretty badly due to problems in libc
+ # (any single argument exceeding 2000 bytes causes a buffer overrun
+ # during glob expansion). Even if it were fixed, the result of this
+ # check would be larger than it should be.
+ lt_cv_sys_max_cmd_len=12288; # 12K is about right
+ ;;
+
+ gnu*)
+ # Under GNU Hurd, this test is not required because there is
+ # no limit to the length of command line arguments.
+ # Libtool will interpret -1 as no limit whatsoever
+ lt_cv_sys_max_cmd_len=-1;
+ ;;
+
+ cygwin* | mingw*)
+ # On Win9x/ME, this test blows up -- it succeeds, but takes
+ # about 5 minutes as the teststring grows exponentially.
+ # Worse, since 9x/ME are not pre-emptively multitasking,
+ # you end up with a "frozen" computer, even though with patience
+ # the test eventually succeeds (with a max line length of 256k).
+ # Instead, let's just punt: use the minimum linelength reported by
+ # all of the supported platforms: 8192 (on NT/2K/XP).
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ amigaos*)
+ # On AmigaOS with pdksh, this test takes hours, literally.
+ # So we just punt and use a minimum line length of 8192.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+ # This has been around since 386BSD, at least. Likely further.
+ if test -x /sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+ elif test -x /usr/sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+ else
+ lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
+ fi
+ # And add a safety zone
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ ;;
+
+ interix*)
+ # We know the value 262144 and hardcode it with a safety zone (like BSD)
+ lt_cv_sys_max_cmd_len=196608
+ ;;
+
+ osf*)
+ # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+ # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+ # nice to cause kernel panics so lets avoid the loop below.
+ # First set a reasonable default.
+ lt_cv_sys_max_cmd_len=16384
+ #
+ if test -x /sbin/sysconfig; then
+ case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+ *1*) lt_cv_sys_max_cmd_len=-1 ;;
+ esac
+ fi
+ ;;
+ sco3.2v5*)
+ lt_cv_sys_max_cmd_len=102400
+ ;;
+ sysv5* | sco5v6* | sysv4.2uw2*)
+ kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+ if test -n "$kargmax"; then
+ lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'`
+ else
+ lt_cv_sys_max_cmd_len=32768
+ fi
+ ;;
+ *)
+ lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+ if test -n "$lt_cv_sys_max_cmd_len"; then
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ else
+ # Make teststring a little bigger before we do anything with it.
+ # a 1K string should be a reasonable start.
+ for i in 1 2 3 4 5 6 7 8 ; do
+ teststring=$teststring$teststring
+ done
+ SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+ # If test is not a shell built-in, we'll probably end up computing a
+ # maximum length that is only half of the actual maximum length, but
+ # we can't tell.
+ while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
+ = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+ test $i != 17 # 1/2 MB should be enough
+ do
+ i=`expr $i + 1`
+ teststring=$teststring$teststring
+ done
+ # Only check the string length outside the loop.
+ lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+ teststring=
+ # Add a significant safety factor because C++ compilers can tack on
+ # massive amounts of additional arguments before passing them to the
+ # linker. It appears as though 1/2 is a usable value.
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+ fi
+ ;;
+ esac
+
+fi
+
+if test -n $lt_cv_sys_max_cmd_len ; then
+ { $as_echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5
+$as_echo "$lt_cv_sys_max_cmd_len" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: none" >&5
+$as_echo "none" >&6; }
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+
+
+
+
+
+: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+
+{ $as_echo "$as_me:$LINENO: checking whether the shell understands some XSI constructs" >&5
+$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; }
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+ test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+ = c,a/b,, \
+ && eval 'test $(( 1 + 1 )) -eq 2 \
+ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+ && xsi_shell=yes
+{ $as_echo "$as_me:$LINENO: result: $xsi_shell" >&5
+$as_echo "$xsi_shell" >&6; }
+
+
+{ $as_echo "$as_me:$LINENO: checking whether the shell understands \"+=\"" >&5
+$as_echo_n "checking whether the shell understands \"+=\"... " >&6; }
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \
+ >/dev/null 2>&1 \
+ && lt_shell_append=yes
+{ $as_echo "$as_me:$LINENO: result: $lt_shell_append" >&5
+$as_echo "$lt_shell_append" >&6; }
+
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ lt_unset=unset
+else
+ lt_unset=false
+fi
+
+
+
+
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+ # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+ lt_SP2NL='tr \040 \012'
+ lt_NL2SP='tr \015\012 \040\040'
+ ;;
+ *) # EBCDIC based system
+ lt_SP2NL='tr \100 \n'
+ lt_NL2SP='tr \r\n \100\100'
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5
+$as_echo_n "checking for $LD option to reload object files... " >&6; }
+if test "${lt_cv_ld_reload_flag+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_ld_reload_flag='-r'
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5
+$as_echo "$lt_cv_ld_reload_flag" >&6; }
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+ darwin*)
+ if test "$GCC" = yes; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+ else
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ fi
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:$LINENO: checking how to recognize dependent libraries" >&5
+$as_echo_n "checking how to recognize dependent libraries... " >&6; }
+if test "${lt_cv_deplibs_check_method+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[4-9]*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+beos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+bsdi[45]*)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+ lt_cv_file_magic_cmd='/usr/bin/file -L'
+ lt_cv_file_magic_test_file=/shlib/libc.so
+ ;;
+
+cygwin*)
+ # func_win32_libid is a shell function defined in ltmain.sh
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ ;;
+
+mingw* | pw32*)
+ # Base MSYS/MinGW do not provide the 'file' command needed by
+ # func_win32_libid shell function, so use a weaker test based on 'objdump',
+ # unless we find 'file', for example because we are cross-compiling.
+ if ( file / ) >/dev/null 2>&1; then
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+ lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
+ ;;
+
+darwin* | rhapsody*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+freebsd* | dragonfly*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ case $host_cpu in
+ i*86 )
+ # Not sure whether the presence of OpenBSD here was a mistake.
+ # Let's accept both of them until this is cleared up.
+ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+ ;;
+ esac
+ else
+ lt_cv_deplibs_check_method=pass_all
+ fi
+ ;;
+
+gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+hpux10.20* | hpux11*)
+ lt_cv_file_magic_cmd=/usr/bin/file
+ case $host_cpu in
+ ia64*)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+ lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+ ;;
+ hppa*64*)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'
+ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+ ;;
+ *)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
+ ;;
+ esac
+ ;;
+
+interix[3-9]*)
+ # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $LD in
+ *-32|*"-32 ") libmagic=32-bit;;
+ *-n32|*"-n32 ") libmagic=N32;;
+ *-64|*"-64 ") libmagic=64-bit;;
+ *) libmagic=never-match;;
+ esac
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
+ fi
+ ;;
+
+newos6*)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=/usr/lib/libnls.so
+ ;;
+
+*nto* | *qnx*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+openbsd*)
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+ fi
+ ;;
+
+osf3* | osf4* | osf5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+rdos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+solaris*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv4 | sysv4.3*)
+ case $host_vendor in
+ motorola)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+ ;;
+ ncr)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ sequent)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+ ;;
+ sni)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+ siemens)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ pc)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ esac
+ ;;
+
+tpf*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+esac
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5
+$as_echo "$lt_cv_deplibs_check_method" >&6; }
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_AR+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$AR"; then
+ ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_AR="${ac_tool_prefix}ar"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+ { $as_echo "$as_me:$LINENO: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_AR"; then
+ ac_ct_AR=$AR
+ # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_AR+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_AR"; then
+ ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_AR="ar"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+ { $as_echo "$as_me:$LINENO: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_AR" = x; then
+ AR="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ AR=$ac_ct_AR
+ fi
+else
+ AR="$ac_cv_prog_AR"
+fi
+
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_STRIP+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ { $as_echo "$as_me:$LINENO: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+test -z "$STRIP" && STRIP=:
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_RANLIB+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$RANLIB"; then
+ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+ { $as_echo "$as_me:$LINENO: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+ ac_ct_RANLIB=$RANLIB
+ # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_RANLIB"; then
+ ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_RANLIB="ranlib"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+ { $as_echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_RANLIB" = x; then
+ RANLIB=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ RANLIB=$ac_ct_RANLIB
+ fi
+else
+ RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+test -z "$RANLIB" && RANLIB=:
+
+
+
+
+
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+ case $host_os in
+ openbsd*)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+ ;;
+ *)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+ ;;
+ esac
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+{ $as_echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5
+$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
+if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+ symcode='[BCDT]'
+ ;;
+cygwin* | mingw* | pw32*)
+ symcode='[ABCDGISTW]'
+ ;;
+hpux*)
+ if test "$host_cpu" = ia64; then
+ symcode='[ABCDEGRST]'
+ fi
+ ;;
+irix* | nonstopux*)
+ symcode='[BCDEGRST]'
+ ;;
+osf*)
+ symcode='[BCDEGQRST]'
+ ;;
+solaris*)
+ symcode='[BDRT]'
+ ;;
+sco3.2v5*)
+ symcode='[DT]'
+ ;;
+sysv4.2uw2*)
+ symcode='[DT]'
+ ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+ symcode='[ABDT]'
+ ;;
+sysv4)
+ symcode='[DFNSTU]'
+ ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+ symcode='[ABCDGIRSTW]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+ opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+ ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+ # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+ symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+ # Write the raw and C identifiers.
+ if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ # Fake it for dumpbin and say T for any non-static function
+ # and D for any global variable.
+ # Also find C++ and __fastcall symbols from MSVC++,
+ # which start with @ or ?.
+ lt_cv_sys_global_symbol_pipe="$AWK '"\
+" {last_section=section; section=\$ 3};"\
+" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+" \$ 0!~/External *\|/{next};"\
+" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+" {if(hide[section]) next};"\
+" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+" s[1]~/^[@?]/{print s[1], s[1]; next};"\
+" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+" ' prfx=^$ac_symprfx"
+ else
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ fi
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+
+ rm -f conftest*
+ cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ # Now try to grab the symbols.
+ nlist=conftest.nm
+ if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5
+ (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && test -s "$nlist"; then
+ # Try sorting and uniquifying the output.
+ if sort "$nlist" | uniq > "$nlist"T; then
+ mv -f "$nlist"T "$nlist"
+ else
+ rm -f "$nlist"T
+ fi
+
+ # Make sure that we snagged all the symbols we need.
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+ # Now generate the symbol file.
+ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+ cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols. */
+const struct {
+ const char *name;
+ void *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[] =
+{
+ { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+ $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+ cat <<\_LT_EOF >> conftest.$ac_ext
+ {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+ lt_save_LIBS="$LIBS"
+ lt_save_CFLAGS="$CFLAGS"
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+ LIBS="$lt_save_LIBS"
+ CFLAGS="$lt_save_CFLAGS"
+ else
+ echo "cannot find nm_test_func in $nlist" >&5
+ fi
+ else
+ echo "cannot find nm_test_var in $nlist" >&5
+ fi
+ else
+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+ fi
+ else
+ echo "$progname: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ fi
+ rm -rf conftest* conftst*
+
+ # Do not use the global_symbol_pipe unless it works.
+ if test "$pipe_works" = yes; then
+ break
+ else
+ lt_cv_sys_global_symbol_pipe=
+ fi
+done
+
+fi
+
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+ lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+ { $as_echo "$as_me:$LINENO: result: failed" >&5
+$as_echo "failed" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: ok" >&5
+$as_echo "ok" >&6; }
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --enable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then
+ enableval=$enable_libtool_lock;
+fi
+
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *ELF-32*)
+ HPUX_IA64_MODE="32"
+ ;;
+ *ELF-64*)
+ HPUX_IA64_MODE="64"
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+*-*-irix6*)
+ # Find out which ABI we are using.
+ echo '#line 8289 "configure"' > conftest.$ac_ext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -melf32bsmip"
+ ;;
+ *N32*)
+ LD="${LD-ld} -melf32bmipn32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -melf64bmip"
+ ;;
+ esac
+ else
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -32"
+ ;;
+ *N32*)
+ LD="${LD-ld} -n32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -64"
+ ;;
+ esac
+ fi
+ fi
+ rm -rf conftest*
+ ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ case `/usr/bin/file conftest.o` in
+ *32-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_i386_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_i386"
+ ;;
+ ppc64-*linux*|powerpc64-*linux*)
+ LD="${LD-ld} -m elf32ppclinux"
+ ;;
+ s390x-*linux*)
+ LD="${LD-ld} -m elf_s390"
+ ;;
+ sparc64-*linux*)
+ LD="${LD-ld} -m elf32_sparc"
+ ;;
+ esac
+ ;;
+ *64-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_x86_64_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ ppc*-*linux*|powerpc*-*linux*)
+ LD="${LD-ld} -m elf64ppc"
+ ;;
+ s390*-*linux*|s390*-*tpf*)
+ LD="${LD-ld} -m elf64_s390"
+ ;;
+ sparc*-*linux*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+*-*-sco3.2v5*)
+ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+ SAVE_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -belf"
+ { $as_echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5
+$as_echo_n "checking whether the C compiler needs -belf... " >&6; }
+if test "${lt_cv_cc_needs_belf+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ lt_cv_cc_needs_belf=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ lt_cv_cc_needs_belf=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5
+$as_echo "$lt_cv_cc_needs_belf" >&6; }
+ if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+ # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+ CFLAGS="$SAVE_CFLAGS"
+ fi
+ ;;
+sparc*-*solaris*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ case `/usr/bin/file conftest.o` in
+ *64-bit*)
+ case $lt_cv_prog_gnu_ld in
+ yes*) LD="${LD-ld} -m elf64_sparc" ;;
+ *)
+ if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+ LD="${LD-ld} -64"
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+esac
+
+need_locks="$enable_libtool_lock"
+
+
+ case $host_os in
+ rhapsody* | darwin*)
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_DSYMUTIL+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$DSYMUTIL"; then
+ ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+DSYMUTIL=$ac_cv_prog_DSYMUTIL
+if test -n "$DSYMUTIL"; then
+ { $as_echo "$as_me:$LINENO: result: $DSYMUTIL" >&5
+$as_echo "$DSYMUTIL" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DSYMUTIL"; then
+ ac_ct_DSYMUTIL=$DSYMUTIL
+ # Extract the first word of "dsymutil", so it can be a program name with args.
+set dummy dsymutil; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_DSYMUTIL"; then
+ ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
+if test -n "$ac_ct_DSYMUTIL"; then
+ { $as_echo "$as_me:$LINENO: result: $ac_ct_DSYMUTIL" >&5
+$as_echo "$ac_ct_DSYMUTIL" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_DSYMUTIL" = x; then
+ DSYMUTIL=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ DSYMUTIL=$ac_ct_DSYMUTIL
+ fi
+else
+ DSYMUTIL="$ac_cv_prog_DSYMUTIL"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
+set dummy ${ac_tool_prefix}nmedit; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_NMEDIT+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$NMEDIT"; then
+ ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+NMEDIT=$ac_cv_prog_NMEDIT
+if test -n "$NMEDIT"; then
+ { $as_echo "$as_me:$LINENO: result: $NMEDIT" >&5
+$as_echo "$NMEDIT" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_NMEDIT"; then
+ ac_ct_NMEDIT=$NMEDIT
+ # Extract the first word of "nmedit", so it can be a program name with args.
+set dummy nmedit; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_NMEDIT"; then
+ ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_NMEDIT="nmedit"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
+if test -n "$ac_ct_NMEDIT"; then
+ { $as_echo "$as_me:$LINENO: result: $ac_ct_NMEDIT" >&5
+$as_echo "$ac_ct_NMEDIT" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_NMEDIT" = x; then
+ NMEDIT=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ NMEDIT=$ac_ct_NMEDIT
+ fi
+else
+ NMEDIT="$ac_cv_prog_NMEDIT"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
+set dummy ${ac_tool_prefix}lipo; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_LIPO+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$LIPO"; then
+ ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+LIPO=$ac_cv_prog_LIPO
+if test -n "$LIPO"; then
+ { $as_echo "$as_me:$LINENO: result: $LIPO" >&5
+$as_echo "$LIPO" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_LIPO"; then
+ ac_ct_LIPO=$LIPO
+ # Extract the first word of "lipo", so it can be a program name with args.
+set dummy lipo; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_LIPO"; then
+ ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_LIPO="lipo"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO
+if test -n "$ac_ct_LIPO"; then
+ { $as_echo "$as_me:$LINENO: result: $ac_ct_LIPO" >&5
+$as_echo "$ac_ct_LIPO" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_LIPO" = x; then
+ LIPO=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ LIPO=$ac_ct_LIPO
+ fi
+else
+ LIPO="$ac_cv_prog_LIPO"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_OTOOL+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$OTOOL"; then
+ ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL=$ac_cv_prog_OTOOL
+if test -n "$OTOOL"; then
+ { $as_echo "$as_me:$LINENO: result: $OTOOL" >&5
+$as_echo "$OTOOL" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL"; then
+ ac_ct_OTOOL=$OTOOL
+ # Extract the first word of "otool", so it can be a program name with args.
+set dummy otool; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_OTOOL"; then
+ ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_OTOOL="otool"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL
+if test -n "$ac_ct_OTOOL"; then
+ { $as_echo "$as_me:$LINENO: result: $ac_ct_OTOOL" >&5
+$as_echo "$ac_ct_OTOOL" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_OTOOL" = x; then
+ OTOOL=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ OTOOL=$ac_ct_OTOOL
+ fi
+else
+ OTOOL="$ac_cv_prog_OTOOL"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool64; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_OTOOL64+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$OTOOL64"; then
+ ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL64=$ac_cv_prog_OTOOL64
+if test -n "$OTOOL64"; then
+ { $as_echo "$as_me:$LINENO: result: $OTOOL64" >&5
+$as_echo "$OTOOL64" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL64"; then
+ ac_ct_OTOOL64=$OTOOL64
+ # Extract the first word of "otool64", so it can be a program name with args.
+set dummy otool64; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_OTOOL64"; then
+ ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_OTOOL64="otool64"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
+if test -n "$ac_ct_OTOOL64"; then
+ { $as_echo "$as_me:$LINENO: result: $ac_ct_OTOOL64" >&5
+$as_echo "$ac_ct_OTOOL64" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_OTOOL64" = x; then
+ OTOOL64=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ OTOOL64=$ac_ct_OTOOL64
+ fi
+else
+ OTOOL64="$ac_cv_prog_OTOOL64"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:$LINENO: checking for -single_module linker flag" >&5
+$as_echo_n "checking for -single_module linker flag... " >&6; }
+if test "${lt_cv_apple_cc_single_mod+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_apple_cc_single_mod=no
+ if test -z "${LT_MULTI_MODULE}"; then
+ # By default we will add the -single_module flag. You can override
+ # by either setting the environment variable LT_MULTI_MODULE
+ # non-empty at configure time, or by adding -multi_module to the
+ # link flags.
+ rm -rf libconftest.dylib*
+ echo "int foo(void){return 1;}" > conftest.c
+ echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&5
+ $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+ _lt_result=$?
+ if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+ lt_cv_apple_cc_single_mod=yes
+ else
+ cat conftest.err >&5
+ fi
+ rm -rf libconftest.dylib*
+ rm -f conftest.*
+ fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_apple_cc_single_mod" >&5
+$as_echo "$lt_cv_apple_cc_single_mod" >&6; }
+ { $as_echo "$as_me:$LINENO: checking for -exported_symbols_list linker flag" >&5
+$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
+if test "${lt_cv_ld_exported_symbols_list+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_ld_exported_symbols_list=no
+ save_LDFLAGS=$LDFLAGS
+ echo "_main" > conftest.sym
+ LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ lt_cv_ld_exported_symbols_list=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ lt_cv_ld_exported_symbols_list=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_ld_exported_symbols_list" >&5
+$as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
+ case $host_os in
+ rhapsody* | darwin1.[012])
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+ darwin1.*)
+ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+ darwin*) # darwin 5.x on
+ # if running on 10.5 or later, the deployment target defaults
+ # to the OS version, if on x86, and 10.4, the deployment
+ # target defaults to 10.4. Don't you love it?
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+ 10.0,*86*-darwin8*|10.0,*-darwin[91]*)
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+ 10.[012]*)
+ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+ 10.*)
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+ esac
+ ;;
+ esac
+ if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+ _lt_dar_single_mod='$single_module'
+ fi
+ if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+ _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+ else
+ _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ if test "$DSYMUTIL" != ":"; then
+ _lt_dsymutil='~$DSYMUTIL $lib || :'
+ else
+ _lt_dsymutil=
+ fi
+ ;;
+ esac
+
+
+for ac_header in dlfcn.h
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ eval "$as_ac_Header=yes"
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_Header=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'`
+ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if test `eval 'as_val=${'$as_ac_Header'}
+ $as_echo "$as_val"'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+# Set options
+enable_win32_dll=yes
+
+case $host in
+*-*-cygwin* | *-*-mingw* | *-*-pw32*)
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args.
+set dummy ${ac_tool_prefix}as; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_AS+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$AS"; then
+ ac_cv_prog_AS="$AS" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_AS="${ac_tool_prefix}as"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+AS=$ac_cv_prog_AS
+if test -n "$AS"; then
+ { $as_echo "$as_me:$LINENO: result: $AS" >&5
+$as_echo "$AS" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_AS"; then
+ ac_ct_AS=$AS
+ # Extract the first word of "as", so it can be a program name with args.
+set dummy as; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_AS+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_AS"; then
+ ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_AS="as"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AS=$ac_cv_prog_ac_ct_AS
+if test -n "$ac_ct_AS"; then
+ { $as_echo "$as_me:$LINENO: result: $ac_ct_AS" >&5
+$as_echo "$ac_ct_AS" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_AS" = x; then
+ AS="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ AS=$ac_ct_AS
+ fi
+else
+ AS="$ac_cv_prog_AS"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dlltool; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_DLLTOOL+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$DLLTOOL"; then
+ ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+DLLTOOL=$ac_cv_prog_DLLTOOL
+if test -n "$DLLTOOL"; then
+ { $as_echo "$as_me:$LINENO: result: $DLLTOOL" >&5
+$as_echo "$DLLTOOL" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DLLTOOL"; then
+ ac_ct_DLLTOOL=$DLLTOOL
+ # Extract the first word of "dlltool", so it can be a program name with args.
+set dummy dlltool; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_DLLTOOL+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_DLLTOOL"; then
+ ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_DLLTOOL="dlltool"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
+if test -n "$ac_ct_DLLTOOL"; then
+ { $as_echo "$as_me:$LINENO: result: $ac_ct_DLLTOOL" >&5
+$as_echo "$ac_ct_DLLTOOL" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_DLLTOOL" = x; then
+ DLLTOOL="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ DLLTOOL=$ac_ct_DLLTOOL
+ fi
+else
+ DLLTOOL="$ac_cv_prog_DLLTOOL"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+set dummy ${ac_tool_prefix}objdump; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_OBJDUMP+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$OBJDUMP"; then
+ ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+OBJDUMP=$ac_cv_prog_OBJDUMP
+if test -n "$OBJDUMP"; then
+ { $as_echo "$as_me:$LINENO: result: $OBJDUMP" >&5
+$as_echo "$OBJDUMP" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OBJDUMP"; then
+ ac_ct_OBJDUMP=$OBJDUMP
+ # Extract the first word of "objdump", so it can be a program name with args.
+set dummy objdump; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_OBJDUMP"; then
+ ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_OBJDUMP="objdump"
+ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
+if test -n "$ac_ct_OBJDUMP"; then
+ { $as_echo "$as_me:$LINENO: result: $ac_ct_OBJDUMP" >&5
+$as_echo "$ac_ct_OBJDUMP" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_OBJDUMP" = x; then
+ OBJDUMP="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ OBJDUMP=$ac_ct_OBJDUMP
+ fi
+else
+ OBJDUMP="$ac_cv_prog_OBJDUMP"
+fi
+
+ ;;
+esac
+
+test -z "$AS" && AS=as
+
+
+
+
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+
+
+
+
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+
+
+
+
+
+
+
+ enable_dlopen=no
+
+
+
+ # Check whether --enable-shared was given.
+if test "${enable_shared+set}" = set; then
+ enableval=$enable_shared; p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
+ *)
+ enable_shared=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
+else
+ enable_shared=yes
+fi
+
+
+
+
+
+
+
+
+
+ # Check whether --enable-static was given.
+if test "${enable_static+set}" = set; then
+ enableval=$enable_static; p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_static=yes ;;
+ no) enable_static=no ;;
+ *)
+ enable_static=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_static=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
+else
+ enable_static=yes
+fi
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-pic was given.
+if test "${with_pic+set}" = set; then
+ withval=$with_pic; pic_mode="$withval"
+else
+ pic_mode=default
+fi
+
+
+test -z "$pic_mode" && pic_mode=default
+
+
+
+
+
+
+
+ # Check whether --enable-fast-install was given.
+if test "${enable_fast_install+set}" = set; then
+ enableval=$enable_fast_install; p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_fast_install=yes ;;
+ no) enable_fast_install=no ;;
+ *)
+ enable_fast_install=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_fast_install=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
+else
+ enable_fast_install=yes
+fi
+
+
+
+
+
+
+
+
+
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+test -z "$LN_S" && LN_S="ln -s"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+
+{ $as_echo "$as_me:$LINENO: checking for objdir" >&5
+$as_echo_n "checking for objdir... " >&6; }
+if test "${lt_cv_objdir+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+ lt_cv_objdir=.libs
+else
+ # MS-DOS does not allow filenames that begin with a dot.
+ lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5
+$as_echo "$lt_cv_objdir" >&6; }
+objdir=$lt_cv_objdir
+
+
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define LT_OBJDIR "$lt_cv_objdir/"
+_ACEOF
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+case $host_os in
+aix3*)
+ # AIX sometimes has problems with the GCC collect2 program. For some
+ # reason, if we set the COLLECT_NAMES environment variable, the problems
+ # vanish in a puff of smoke.
+ if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+ fi
+ ;;
+esac
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+for cc_temp in $compiler""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+ { $as_echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5
+$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ case $MAGIC_CMD in
+[\\/*] | ?:[\\/]*)
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/${ac_tool_prefix}file; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ { $as_echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+
+
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+ if test -n "$ac_tool_prefix"; then
+ { $as_echo "$as_me:$LINENO: checking for file" >&5
+$as_echo_n "checking for file... " >&6; }
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ case $MAGIC_CMD in
+[\\/*] | ?:[\\/]*)
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/file; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/file"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ { $as_echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ else
+ MAGIC_CMD=:
+ fi
+fi
+
+ fi
+ ;;
+esac
+
+# Use C for the default configuration in the libtool script
+
+lt_save_CC="$CC"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+if test -n "$compiler"; then
+
+lt_prog_compiler_no_builtin_flag=
+
+if test "$GCC" = yes; then
+ lt_prog_compiler_no_builtin_flag=' -fno-builtin'
+
+ { $as_echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
+if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_rtti_exceptions=no
+ ac_outfile=conftest.$ac_objext
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="-fno-rtti -fno-exceptions"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:9983: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:9987: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_rtti_exceptions=yes
+ fi
+ fi
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+ lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
+else
+ :
+fi
+
+fi
+
+
+
+
+
+
+ lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+{ $as_echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+
+ if test "$GCC" = yes; then
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_static='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ m68k)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ esac
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | cygwin* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ lt_prog_compiler_pic='-DDLL_EXPORT'
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ lt_prog_compiler_pic='-fno-common'
+ ;;
+
+ hpux*)
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ esac
+ ;;
+
+ interix[3-9]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ lt_prog_compiler_can_build_shared=no
+ enable_shared=no
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic='-fPIC -shared'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ lt_prog_compiler_pic=-Kconform_pic
+ fi
+ ;;
+
+ *)
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ lt_prog_compiler_wl='-Wl,'
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static='-Bstatic'
+ else
+ lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+
+ mingw* | cygwin* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_prog_compiler_pic='-DDLL_EXPORT'
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ lt_prog_compiler_wl='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ lt_prog_compiler_static='${wl}-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ lt_prog_compiler_wl='-Wl,'
+ # PIC (with -KPIC) is the default.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ linux* | k*bsd*-gnu)
+ case $cc_basename in
+ icc* | ecc* | ifort*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ pgcc* | pgf77* | pgf90* | pgf95*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fpic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+ ccc*)
+ lt_prog_compiler_wl='-Wl,'
+ # All Alpha code is PIC.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+ xl*)
+ # IBM XL C 8.0/Fortran 10.1 on PPC
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-qpic'
+ lt_prog_compiler_static='-qstaticlink'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C 5.9
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl='-Wl,'
+ ;;
+ *Sun\ F*)
+ # Sun Fortran 8.3 passes all unrecognized flags to the linker
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl=''
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ newsos6)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic='-fPIC -shared'
+ ;;
+
+ osf3* | osf4* | osf5*)
+ lt_prog_compiler_wl='-Wl,'
+ # All OSF/1 code is PIC.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ rdos*)
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ solaris*)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ case $cc_basename in
+ f77* | f90* | f95*)
+ lt_prog_compiler_wl='-Qoption ld ';;
+ *)
+ lt_prog_compiler_wl='-Wl,';;
+ esac
+ ;;
+
+ sunos4*)
+ lt_prog_compiler_wl='-Qoption ld '
+ lt_prog_compiler_pic='-PIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ lt_prog_compiler_pic='-Kconform_pic'
+ lt_prog_compiler_static='-Bstatic'
+ fi
+ ;;
+
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ unicos*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_can_build_shared=no
+ ;;
+
+ uts4*)
+ lt_prog_compiler_pic='-pic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ *)
+ lt_prog_compiler_can_build_shared=no
+ ;;
+ esac
+ fi
+
+case $host_os in
+ # For platforms which do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ lt_prog_compiler_pic=
+ ;;
+ *)
+ lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+ ;;
+esac
+{ $as_echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5
+$as_echo "$lt_prog_compiler_pic" >&6; }
+
+
+
+
+
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+ { $as_echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
+if test "${lt_cv_prog_compiler_pic_works+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_pic_works=no
+ ac_outfile=conftest.$ac_objext
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:10307: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:10311: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_pic_works=yes
+ fi
+ fi
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_pic_works" = xyes; then
+ case $lt_prog_compiler_pic in
+ "" | " "*) ;;
+ *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+ esac
+else
+ lt_prog_compiler_pic=
+ lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+
+
+
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
+{ $as_echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if test "${lt_cv_prog_compiler_static_works+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_static_works=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&5
+ $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_static_works=yes
+ fi
+ else
+ lt_cv_prog_compiler_static_works=yes
+ fi
+ fi
+ $RM -r conftest*
+ LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works" >&5
+$as_echo "$lt_cv_prog_compiler_static_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_static_works" = xyes; then
+ :
+else
+ lt_prog_compiler_static=
+fi
+
+
+
+
+
+
+
+ { $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_c_o=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:10412: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:10416: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+
+
+ { $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_prog_compiler_c_o=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:10467: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:10471: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+ { $as_echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+ hard_links=yes
+ $RM conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ { $as_echo "$as_me:$LINENO: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+ if test "$hard_links" = no; then
+ { $as_echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+
+
+
+
+
+
+ { $as_echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+ runpath_var=
+ allow_undefined_flag=
+ always_export_symbols=no
+ archive_cmds=
+ archive_expsym_cmds=
+ compiler_needs_object=no
+ enable_shared_with_static_runtimes=no
+ export_dynamic_flag_spec=
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ hardcode_automatic=no
+ hardcode_direct=no
+ hardcode_direct_absolute=no
+ hardcode_libdir_flag_spec=
+ hardcode_libdir_flag_spec_ld=
+ hardcode_libdir_separator=
+ hardcode_minus_L=no
+ hardcode_shlibpath_var=unsupported
+ inherit_rpath=no
+ link_all_deplibs=unknown
+ module_cmds=
+ module_expsym_cmds=
+ old_archive_from_new_cmds=
+ old_archive_from_expsyms_cmds=
+ thread_safe_flag_spec=
+ whole_archive_flag_spec=
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ include_expsyms=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ` (' and `)$', so one must not match beginning or
+ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+ # as well as any symbol that contains `d'.
+ exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ # Exclude shared library initialization/finalization symbols.
+ extract_expsyms_cmds=
+
+ case $host_os in
+ cygwin* | mingw* | pw32*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+ esac
+
+ ld_shlibs=yes
+ if test "$with_gnu_ld" = yes; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='${wl}'
+
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ runpath_var=LD_RUN_PATH
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ export_dynamic_flag_spec='${wl}--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+ whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ whole_archive_flag_spec=
+ fi
+ supports_anon_versioning=no
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix[3-9]*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+_LT_EOF
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds=''
+ ;;
+ m68k)
+ archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ esac
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ allow_undefined_flag=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+ # as there is no search path for DLLs.
+ hardcode_libdir_flag_spec='-L$libdir'
+ allow_undefined_flag=unsupported
+ always_export_symbols=no
+ enable_shared_with_static_runtimes=yes
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ interix[3-9]*)
+ hardcode_direct=no
+ hardcode_shlibpath_var=no
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+
+ gnu* | linux* | tpf* | k*bsd*-gnu)
+ tmp_diet=no
+ if test "$host_os" = linux-dietlibc; then
+ case $cc_basename in
+ diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn)
+ esac
+ fi
+ if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+ && test "$tmp_diet" = no
+ then
+ tmp_addflag=
+ tmp_sharedflag='-shared'
+ case $cc_basename,$host_cpu in
+ pgcc*) # Portland Group C compiler
+ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag'
+ ;;
+ pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers
+ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag -Mnomain' ;;
+ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
+ tmp_addflag=' -i_dynamic' ;;
+ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
+ tmp_addflag=' -i_dynamic -nofor_main' ;;
+ ifc* | ifort*) # Intel Fortran compiler
+ tmp_addflag=' -nofor_main' ;;
+ xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ tmp_sharedflag='-qmkshrobj'
+ tmp_addflag= ;;
+ esac
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*) # Sun C 5.9
+ whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+ compiler_needs_object=yes
+ tmp_sharedflag='-G' ;;
+ *Sun\ F*) # Sun Fortran 8.3
+ tmp_sharedflag='-G' ;;
+ esac
+ archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+ if test "x$supports_anon_versioning" = xyes; then
+ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+
+ case $cc_basename in
+ xlf*)
+ # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+ whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+ hardcode_libdir_flag_spec=
+ hardcode_libdir_flag_spec_ld='-rpath $libdir'
+ archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+ if test "x$supports_anon_versioning" = xyes; then
+ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ esac
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris*)
+ if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ ;;
+ *)
+ # For security reasons, it is highly recommended that you always
+ # use absolute paths for naming shared libraries, and exclude the
+ # DT_RUNPATH tag from executables and libraries. But doing so
+ # requires that you compile everything twice, which is a pain.
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ ;;
+
+ sunos4*)
+ archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+
+ if test "$ld_shlibs" = no; then
+ runpath_var=
+ hardcode_libdir_flag_spec=
+ export_dynamic_flag_spec=
+ whole_archive_flag_spec=
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ allow_undefined_flag=unsupported
+ always_export_symbols=yes
+ archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L=yes
+ if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct=unsupported
+ fi
+ ;;
+
+ aix[4-9]*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ else
+ export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ fi
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ archive_cmds=''
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ hardcode_libdir_separator=':'
+ link_all_deplibs=yes
+ file_list_spec='${wl}-f,'
+
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ hardcode_direct=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ hardcode_minus_L=yes
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_libdir_separator=
+ fi
+ ;;
+ esac
+ shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ always_export_symbols=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ allow_undefined_flag='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+
+lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\(.*\)$/\1/
+ p
+ }
+ }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+ allow_undefined_flag="-z nodefs"
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+
+lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\(.*\)$/\1/
+ p
+ }
+ }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ no_undefined_flag=' ${wl}-bernotok'
+ allow_undefined_flag=' ${wl}-berok'
+ # Exported symbols can be pulled into shared objects from archives
+ whole_archive_flag_spec='$convenience'
+ archive_cmds_need_lc=yes
+ # This is similar to how AIX traditionally builds its shared libraries.
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds=''
+ ;;
+ m68k)
+ archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ esac
+ ;;
+
+ bsdi[45]*)
+ export_dynamic_flag_spec=-rdynamic
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec=' '
+ allow_undefined_flag=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ old_archive_from_new_cmds='true'
+ # FIXME: Should let the user specify the lib program.
+ old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+ fix_srcfile_path='`cygpath -w "$srcfile"`'
+ enable_shared_with_static_runtimes=yes
+ ;;
+
+ darwin* | rhapsody*)
+
+
+ archive_cmds_need_lc=no
+ hardcode_direct=no
+ hardcode_automatic=yes
+ hardcode_shlibpath_var=unsupported
+ whole_archive_flag_spec=''
+ link_all_deplibs=yes
+ allow_undefined_flag="$_lt_dar_allow_undefined"
+ if test "$GCC" = "yes"; then
+ output_verbose_link_cmd=echo
+ archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+ module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+ archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+ module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+
+ else
+ ld_shlibs=no
+ fi
+
+ ;;
+
+ dgux*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ freebsd1*)
+ ld_shlibs=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+ archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ hpux9*)
+ if test "$GCC" = yes; then
+ archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ export_dynamic_flag_spec='${wl}-E'
+ ;;
+
+ hpux10*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_flag_spec_ld='+b $libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ export_dynamic_flag_spec='${wl}-E'
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ fi
+ ;;
+
+ hpux11*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ fi
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ hardcode_direct=no
+ hardcode_shlibpath_var=no
+ ;;
+ *)
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ export_dynamic_flag_spec='${wl}-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+ cat >conftest.$ac_ext <<_ACEOF
+int foo(void) {}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS="$save_LDFLAGS"
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ inherit_rpath=yes
+ link_all_deplibs=yes
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ newsos6)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_shlibpath_var=no
+ ;;
+
+ *nto* | *qnx*)
+ ;;
+
+ openbsd*)
+ if test -f /usr/libexec/ld.so; then
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ hardcode_direct_absolute=yes
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec='${wl}-E'
+ else
+ case $host_os in
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ *)
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ allow_undefined_flag=unsupported
+ archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+ old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+ ;;
+
+ osf3*)
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+ # Both c and cxx compiler support -rpath directly
+ hardcode_libdir_flag_spec='-rpath $libdir'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_separator=:
+ ;;
+
+ solaris*)
+ no_undefined_flag=' -z defs'
+ if test "$GCC" = yes; then
+ wlarc='${wl}'
+ archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+ wlarc=''
+ archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+ ;;
+ *)
+ wlarc='${wl}'
+ archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ ;;
+ esac
+ fi
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_shlibpath_var=no
+ case $host_os in
+ solaris2.[0-5] | solaris2.[0-5].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands `-z linker_flag'. GCC discards it without `$wl',
+ # but is careful enough not to reorder.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ if test "$GCC" = yes; then
+ whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ else
+ whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
+ fi
+ ;;
+ esac
+ link_all_deplibs=yes
+ ;;
+
+ sunos4*)
+ if test "x$host_vendor" = xsequent; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ reload_cmds='$CC -r -o $output$reload_objs'
+ hardcode_direct=no
+ ;;
+ motorola)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4.3*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ export_dynamic_flag_spec='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ld_shlibs=yes
+ fi
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+ no_undefined_flag='${wl}-z,text'
+ archive_cmds_need_lc=no
+ hardcode_shlibpath_var=no
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ no_undefined_flag='${wl}-z,text'
+ allow_undefined_flag='${wl}-z,nodefs'
+ archive_cmds_need_lc=no
+ hardcode_shlibpath_var=no
+ hardcode_libdir_flag_spec='${wl}-R,$libdir'
+ hardcode_libdir_separator=':'
+ link_all_deplibs=yes
+ export_dynamic_flag_spec='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ uts4*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+
+ if test x$host_vendor = xsni; then
+ case $host in
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ export_dynamic_flag_spec='${wl}-Blargedynsym'
+ ;;
+ esac
+ fi
+ fi
+
+{ $as_echo "$as_me:$LINENO: result: $ld_shlibs" >&5
+$as_echo "$ld_shlibs" >&6; }
+test "$ld_shlibs" = no && can_build_shared=no
+
+with_gnu_ld=$with_gnu_ld
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+ # Assume -lc should be added
+ archive_cmds_need_lc=yes
+
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $archive_cmds in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ { $as_echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+ $RM conftest*
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$lt_prog_compiler_wl
+ pic_flag=$lt_prog_compiler_pic
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$allow_undefined_flag
+ allow_undefined_flag=
+ if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\"") >&5
+ (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+ then
+ archive_cmds_need_lc=no
+ else
+ archive_cmds_need_lc=yes
+ fi
+ allow_undefined_flag=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $RM conftest*
+ { $as_echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5
+$as_echo "$archive_cmds_need_lc" >&6; }
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+if test "$GCC" = yes; then
+ case $host_os in
+ darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+ *) lt_awk_arg="/^libraries:/" ;;
+ esac
+ lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ # Ok, now we have the path, separated by spaces, we can step through it
+ # and add multilib dir if necessary.
+ lt_tmp_lt_search_path_spec=
+ lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+ for lt_sys_path in $lt_search_path_spec; do
+ if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+ else
+ test -d "$lt_sys_path" && \
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+ fi
+ done
+ lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+ lt_foo="";
+ lt_count=0;
+ for (lt_i = NF; lt_i > 0; lt_i--) {
+ if ($lt_i != "" && $lt_i != ".") {
+ if ($lt_i == "..") {
+ lt_count++;
+ } else {
+ if (lt_count == 0) {
+ lt_foo="/" $lt_i lt_foo;
+ } else {
+ lt_count--;
+ }
+ }
+ }
+ }
+ if (lt_foo != "") { lt_freq[lt_foo]++; }
+ if (lt_freq[lt_foo] == 1) { print lt_foo; }
+}'`
+ sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+
+aix[4-9]*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test "$host_cpu" = ia64; then
+ # AIX 5 supports IA64
+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line `#! .'. This would cause the generated library to
+ # depend on `.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[01] | aix4.[01].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ if test "$aix_use_runtimelinking" = yes; then
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ else
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='${libname}${release}.a $libname.a'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ fi
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ case $host_cpu in
+ powerpc)
+ # Since July 2007 AmigaOS4 officially supports .so libraries.
+ # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ ;;
+ m68k)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+ ;;
+ esac
+ ;;
+
+beos*)
+ library_names_spec='${libname}${shared_ext}'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi[45]*)
+ version_type=linux
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32*)
+ version_type=windows
+ shrext_cmds=".dll"
+ need_version=no
+ need_lib_prefix=no
+
+ case $GCC,$host_os in
+ yes,cygwin* | yes,mingw* | yes,pw32*)
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+ ;;
+ mingw*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+ # It is most probably a Windows format PATH printed by
+ # mingw gcc, but we are running on Cygwin. Gcc prints its search
+ # path with ; separators, and with drive letters. We can handle the
+ # drive letters (cygwin fileutils understands them), so leave them,
+ # especially as we might pass files found there to a mingw objdump,
+ # which wouldn't understand a cygwinified path. Ahh.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
+ ;;
+
+ *)
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+ soname_spec='${libname}${release}${major}$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd1*)
+ dynamic_linker=no
+ ;;
+
+freebsd* | dragonfly*)
+ # DragonFly does not have aout. When/if they implement a new
+ # versioning mechanism, adjust this.
+ if test -x /usr/bin/objformat; then
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+ freebsd[123]*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ *) # from 4.6 on, and DragonFly
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+gnu*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case $host_cpu in
+ ia64*)
+ shrext_cmds='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ if test "X$HPUX_IA64_MODE" = X32; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ fi
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ hppa*64*)
+ shrext_cmds='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext_cmds='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555.
+ postinstall_cmds='chmod 555 $lib'
+ ;;
+
+interix[3-9]*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ version_type=linux
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ # Some binutils ld are patched to set DT_RUNPATH
+ save_LDFLAGS=$LDFLAGS
+ save_libdir=$libdir
+ eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then
+ shlibpath_overrides_runpath=yes
+fi
+
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS=$save_LDFLAGS
+ libdir=$save_libdir
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+*nto* | *qnx*)
+ version_type=qnx
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='ldqnx.so'
+ ;;
+
+openbsd*)
+ version_type=sunos
+ sys_lib_dlsearch_path_spec="/usr/lib"
+ need_lib_prefix=no
+ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+ case $host_os in
+ openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+ *) need_version=no ;;
+ esac
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+ openbsd2.[89] | openbsd2.[89].*)
+ shlibpath_overrides_runpath=no
+ ;;
+ *)
+ shlibpath_overrides_runpath=yes
+ ;;
+ esac
+ else
+ shlibpath_overrides_runpath=yes
+ fi
+ ;;
+
+os2*)
+ libname_spec='$name'
+ shrext_cmds=".dll"
+ need_lib_prefix=no
+ library_names_spec='$libname${shared_ext} $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+ ;;
+
+rdos*)
+ dynamic_linker=no
+ ;;
+
+solaris*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux
+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+ soname_spec='$libname${shared_ext}.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ version_type=freebsd-elf
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ if test "$with_gnu_ld" = yes; then
+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ case $host_os in
+ sco3.2v5*)
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+ ;;
+ esac
+ fi
+ sys_lib_dlsearch_path_spec='/usr/lib'
+ ;;
+
+tpf*)
+ # TPF is a cross-target only. Preferred cross-host = GNU/Linux.
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_name_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+uts4*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+{ $as_echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+ sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+ sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" ||
+ test -n "$runpath_var" ||
+ test "X$hardcode_automatic" = "Xyes" ; then
+
+ # We can hardcode non-existent directories.
+ if test "$hardcode_direct" != no &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no &&
+ test "$hardcode_minus_L" != no; then
+ # Linking always hardcodes the temporary library directory.
+ hardcode_action=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ hardcode_action=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ hardcode_action=unsupported
+fi
+{ $as_echo "$as_me:$LINENO: result: $hardcode_action" >&5
+$as_echo "$hardcode_action" >&6; }
+
+if test "$hardcode_action" = relink ||
+ test "$inherit_rpath" = yes; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+
+
+
+
+
+
+ if test "x$enable_dlopen" != xyes; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen="load_add_on"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32*)
+ lt_cv_dlopen="LoadLibrary"
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen="dlopen"
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ { $as_echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ ac_cv_lib_dl_dlopen=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_lib_dl_dlopen=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test $ac_cv_lib_dl_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+
+ lt_cv_dlopen="dyld"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+
+fi
+
+ ;;
+
+ *)
+ { $as_echo "$as_me:$LINENO: checking for shl_load" >&5
+$as_echo_n "checking for shl_load... " >&6; }
+if test "${ac_cv_func_shl_load+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define shl_load innocuous_shl_load
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char shl_load (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef shl_load
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shl_load ();
+/* 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 defined __stub_shl_load || defined __stub___shl_load
+choke me
+#endif
+
+int
+main ()
+{
+return shl_load ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ ac_cv_func_shl_load=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_func_shl_load=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
+$as_echo "$ac_cv_func_shl_load" >&6; }
+if test $ac_cv_func_shl_load = yes; then
+ lt_cv_dlopen="shl_load"
+else
+ { $as_echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
+$as_echo_n "checking for shl_load in -ldld... " >&6; }
+if test "${ac_cv_lib_dld_shl_load+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shl_load ();
+int
+main ()
+{
+return shl_load ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ ac_cv_lib_dld_shl_load=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_lib_dld_shl_load=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
+$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
+if test $ac_cv_lib_dld_shl_load = yes; then
+ lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
+else
+ { $as_echo "$as_me:$LINENO: checking for dlopen" >&5
+$as_echo_n "checking for dlopen... " >&6; }
+if test "${ac_cv_func_dlopen+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define dlopen innocuous_dlopen
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char dlopen (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef dlopen
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+/* 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 defined __stub_dlopen || defined __stub___dlopen
+choke me
+#endif
+
+int
+main ()
+{
+return dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ ac_cv_func_dlopen=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_func_dlopen=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
+$as_echo "$ac_cv_func_dlopen" >&6; }
+if test $ac_cv_func_dlopen = yes; then
+ lt_cv_dlopen="dlopen"
+else
+ { $as_echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ ac_cv_lib_dl_dlopen=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_lib_dl_dlopen=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test $ac_cv_lib_dl_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+ { $as_echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
+$as_echo_n "checking for dlopen in -lsvld... " >&6; }
+if test "${ac_cv_lib_svld_dlopen+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ ac_cv_lib_svld_dlopen=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_lib_svld_dlopen=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
+$as_echo "$ac_cv_lib_svld_dlopen" >&6; }
+if test $ac_cv_lib_svld_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+ { $as_echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
+$as_echo_n "checking for dld_link in -ldld... " >&6; }
+if test "${ac_cv_lib_dld_dld_link+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dld_link ();
+int
+main ()
+{
+return dld_link ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ ac_cv_lib_dld_dld_link=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_lib_dld_dld_link=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
+$as_echo "$ac_cv_lib_dld_dld_link" >&6; }
+if test $ac_cv_lib_dld_dld_link = yes; then
+ lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+ ;;
+ esac
+
+ if test "x$lt_cv_dlopen" != xno; then
+ enable_dlopen=yes
+ else
+ enable_dlopen=no
+ fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS="$CPPFLAGS"
+ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS="$LDFLAGS"
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS="$LIBS"
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ { $as_echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
+$as_echo_n "checking whether a program can dlopen itself... " >&6; }
+if test "${lt_cv_dlopen_self+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+#line 13259 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ exit (status);
+}
+_LT_EOF
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) >&5 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
+$as_echo "$lt_cv_dlopen_self" >&6; }
+
+ if test "x$lt_cv_dlopen_self" = xyes; then
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+ { $as_echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
+$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
+if test "${lt_cv_dlopen_self_static+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self_static=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+#line 13359 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ exit (status);
+}
+_LT_EOF
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) >&5 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self_static=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
+$as_echo "$lt_cv_dlopen_self_static" >&6; }
+ fi
+
+ CPPFLAGS="$save_CPPFLAGS"
+ LDFLAGS="$save_LDFLAGS"
+ LIBS="$save_LIBS"
+ ;;
+ esac
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+striplib=
+old_striplib=
+{ $as_echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+$as_echo_n "checking whether stripping libraries is possible... " >&6; }
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP" ; then
+ striplib="$STRIP -x"
+ old_striplib="$STRIP -S"
+ { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+ else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+ ;;
+ *)
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+ ;;
+ esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+ # Report which library types will actually be built
+ { $as_echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
+$as_echo_n "checking if libtool supports shared libraries... " >&6; }
+ { $as_echo "$as_me:$LINENO: result: $can_build_shared" >&5
+$as_echo "$can_build_shared" >&6; }
+
+ { $as_echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
+$as_echo_n "checking whether to build shared libraries... " >&6; }
+ test "$can_build_shared" = "no" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+
+ aix[4-9]*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ esac
+ { $as_echo "$as_me:$LINENO: result: $enable_shared" >&5
+$as_echo "$enable_shared" >&6; }
+
+ { $as_echo "$as_me:$LINENO: checking whether to build static libraries" >&5
+$as_echo_n "checking whether to build static libraries... " >&6; }
+ # Make sure either enable_shared or enable_static is yes.
+ test "$enable_shared" = yes || enable_static=yes
+ { $as_echo "$as_me:$LINENO: result: $enable_static" >&5
+$as_echo "$enable_static" >&6; }
+
+
+
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ac_config_commands="$ac_config_commands libtool"
+
+
+
+
+# Only expand once:
+
+
+
+
+
+
+
+
+# configuration file -- stay in 8.3 limit
+#
+# since #undef doesn't survive in configuration header files we replace
+# `/undef' with `#undef' after creating the output file
+
+ac_config_headers="$ac_config_headers ftconfig.h:ftconfig.in"
+
+
+# create the Unix-specific sub-Makefiles `builds/unix/unix-def.mk'
+# and `builds/unix/unix-cc.mk' that will be used by the build system
+#
+ac_config_files="$ac_config_files unix-cc.mk:unix-cc.in unix-def.mk:unix-def.in freetype-config freetype2.pc:freetype2.in"
+
+
+# re-generate the Jamfile to use libtool now
+#
+# AC_CONFIG_FILES([../../Jamfile:../../Jamfile.in])
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems. If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+$as_echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) $as_unset $ac_var ;;
+ esac ;;
+ esac
+ done
+
+ (set) 2>&1 |
+ case $as_nl`(ac_space=' '; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ # `set' does not quote correctly, so add quotes (double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \).
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;; #(
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+) |
+ sed '
+ /^ac_cv_env_/b end
+ t clear
+ :clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+ if test -w "$cache_file"; then
+ test "x$cache_file" != "x/dev/null" &&
+ { $as_echo "$as_me:$LINENO: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+ cat confcache >$cache_file
+ else
+ { $as_echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+ fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+ # 1. Remove the extension, and $U if already installed.
+ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+ ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
+ # will be set to the directory where LIBOBJS objects are built.
+ ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+ ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+
+: ${CONFIG_STATUS=./config.status}
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+## --------------------- ##
+## M4sh Initialization. ##
+## --------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in
+ *posix*) set -o posix ;;
+esac
+
+fi
+
+
+
+
+# PATH needs CR
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ as_unset=unset
+else
+ as_unset=false
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+case $0 in
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ { (exit 1); exit 1; }
+fi
+
+# Work around bugs in pre-3.0 UWIN ksh.
+for as_var in ENV MAIL MAILPATH
+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# CDPATH.
+$as_unset CDPATH
+
+
+
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
+
+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+ # uniformly replaced by the line number. The first 'sed' inserts a
+ # line-number line after each line using $LINENO; the second 'sed'
+ # does the real work. The second script uses 'N' to pair each
+ # line-number line with the line containing $LINENO, and appends
+ # trailing '-' during substitution so that $LINENO is not a special
+ # case at line end.
+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+ # scripts with optimization help from Paolo Bonzini. Blame Lee
+ # E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
+ sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
+ N
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ t loop
+ s/-\n.*//
+ ' >$as_me.lineno &&
+ chmod +x "$as_me.lineno" ||
+ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+ { (exit 1); exit 1; }; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
+ # Exit status is that of the last command.
+ exit
+}
+
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in
+-n*)
+ case `echo 'x\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ *) ECHO_C='\c';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -p'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -p'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -p'
+ fi
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p=:
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+ as_test_x='test -x'
+else
+ if ls -dL / >/dev/null 2>&1; then
+ as_ls_L_option=L
+ else
+ as_ls_L_option=
+ fi
+ as_test_x='
+ eval sh -c '\''
+ if test -d "$1"; then
+ test -d "$1/.";
+ else
+ case $1 in
+ -*)set "./$1";;
+ esac;
+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+ ???[sx]*):;;*)false;;esac;fi
+ '\'' sh
+ '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+
+# Save the log message, to keep $[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by FreeType $as_me 2.3.6, which was
+generated by GNU Autoconf 2.62. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number and configuration settings, then exit
+ -q, --quiet do not print progress messages
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+ --file=FILE[:TEMPLATE]
+ instantiate the configuration file FILE
+ --header=FILE[:TEMPLATE]
+ instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <bug-autoconf@gnu.org>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_version="\\
+FreeType config.status 2.3.6
+configured by $0, generated by GNU Autoconf 2.62,
+ with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright (C) 2008 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+ case $1 in
+ --*=*)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+ ac_shift=:
+ ;;
+ *)
+ ac_option=$1
+ ac_optarg=$2
+ ac_shift=shift
+ ;;
+ esac
+
+ case $ac_option in
+ # Handling of the options.
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ ac_cs_recheck=: ;;
+ --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+ $as_echo "$ac_cs_version"; exit ;;
+ --debug | --debu | --deb | --de | --d | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ CONFIG_FILES="$CONFIG_FILES '$ac_optarg'"
+ ac_need_defaults=false;;
+ --header | --heade | --head | --hea )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ CONFIG_HEADERS="$CONFIG_HEADERS '$ac_optarg'"
+ ac_need_defaults=false;;
+ --he | --h)
+ # Conflict between --help and --header
+ { $as_echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2
+ { (exit 1); exit 1; }; };;
+ --help | --hel | -h )
+ $as_echo "$ac_cs_usage"; exit ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
+ ac_cs_silent=: ;;
+
+ # This is an error.
+ -*) { $as_echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2
+ { (exit 1); exit 1; }; } ;;
+
+ *) ac_config_targets="$ac_config_targets $1"
+ ac_need_defaults=false ;;
+
+ esac
+ shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+ exec 6>/dev/null
+ ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+ set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+ shift
+ \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+ CONFIG_SHELL='$SHELL'
+ export CONFIG_SHELL
+ exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+ $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`'
+AS='`$ECHO "X$AS" | $Xsed -e "$delay_single_quote_subst"`'
+DLLTOOL='`$ECHO "X$DLLTOOL" | $Xsed -e "$delay_single_quote_subst"`'
+OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`'
+enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`'
+host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`'
+host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`'
+host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`'
+build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`'
+build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`'
+build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`'
+SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`'
+Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`'
+GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`'
+EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`'
+FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`'
+LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`'
+NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`'
+LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`'
+exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`'
+AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`'
+STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`'
+compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`'
+GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
+objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`'
+SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`'
+ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`'
+need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`'
+DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`'
+NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`'
+LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`'
+OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`'
+OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`'
+libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`'
+fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
+need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`'
+version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
+sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`'
+striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`'
+
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# Quote evaled strings.
+for var in SED \
+GREP \
+EGREP \
+FGREP \
+LD \
+NM \
+LN_S \
+lt_SP2NL \
+lt_NL2SP \
+reload_flag \
+deplibs_check_method \
+file_magic_cmd \
+AR \
+AR_FLAGS \
+STRIP \
+RANLIB \
+CC \
+CFLAGS \
+compiler \
+lt_cv_sys_global_symbol_pipe \
+lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_c_name_address \
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
+SHELL \
+ECHO \
+lt_prog_compiler_no_builtin_flag \
+lt_prog_compiler_wl \
+lt_prog_compiler_pic \
+lt_prog_compiler_static \
+lt_cv_prog_compiler_c_o \
+need_locks \
+DSYMUTIL \
+NMEDIT \
+LIPO \
+OTOOL \
+OTOOL64 \
+shrext_cmds \
+export_dynamic_flag_spec \
+whole_archive_flag_spec \
+compiler_needs_object \
+with_gnu_ld \
+allow_undefined_flag \
+no_undefined_flag \
+hardcode_libdir_flag_spec \
+hardcode_libdir_flag_spec_ld \
+hardcode_libdir_separator \
+fix_srcfile_path \
+exclude_expsyms \
+include_expsyms \
+file_list_spec \
+variables_saved_for_relink \
+libname_spec \
+library_names_spec \
+soname_spec \
+finish_eval \
+old_striplib \
+striplib; do
+ case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+ *[\\\\\\\`\\"\\\$]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds \
+old_postinstall_cmds \
+old_postuninstall_cmds \
+old_archive_cmds \
+extract_expsyms_cmds \
+old_archive_from_new_cmds \
+old_archive_from_expsyms_cmds \
+archive_cmds \
+archive_expsym_cmds \
+module_cmds \
+module_expsym_cmds \
+export_symbols_cmds \
+prelink_cmds \
+postinstall_cmds \
+postuninstall_cmds \
+finish_cmds \
+sys_lib_search_path_spec \
+sys_lib_dlsearch_path_spec; do
+ case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+ *[\\\\\\\`\\"\\\$]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+# Fix-up fallback echo if it was mangled by the above quoting rules.
+case \$lt_ECHO in
+*'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\`
+ ;;
+esac
+
+ac_aux_dir='$ac_aux_dir'
+xsi_shell='$xsi_shell'
+lt_shell_append='$lt_shell_append'
+
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+
+
+ PACKAGE='$PACKAGE'
+ VERSION='$VERSION'
+ TIMESTAMP='$TIMESTAMP'
+ RM='$RM'
+ ofile='$ofile'
+
+
+
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+ case $ac_config_target in
+ "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
+ "ftconfig.h") CONFIG_HEADERS="$CONFIG_HEADERS ftconfig.h:ftconfig.in" ;;
+ "unix-cc.mk") CONFIG_FILES="$CONFIG_FILES unix-cc.mk:unix-cc.in" ;;
+ "unix-def.mk") CONFIG_FILES="$CONFIG_FILES unix-def.mk:unix-def.in" ;;
+ "freetype-config") CONFIG_FILES="$CONFIG_FILES freetype-config" ;;
+ "freetype2.pc") CONFIG_FILES="$CONFIG_FILES freetype2.pc:freetype2.in" ;;
+
+ *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+$as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+ { (exit 1); exit 1; }; };;
+ esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used. Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+ test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+ test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience. Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+ tmp=
+ trap 'exit_status=$?
+ { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+' 0
+ trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+ test -n "$tmp" && test -d "$tmp"
+} ||
+{
+ tmp=./conf$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
+} ||
+{
+ $as_echo "$as_me: cannot create a temporary directory in ." >&2
+ { (exit 1); exit 1; }
+}
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=' '
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+ ac_cs_awk_cr='\\r'
+else
+ ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+ echo "cat >conf$$subs.awk <<_ACEOF" &&
+ echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+ echo "_ACEOF"
+} >conf$$subs.sh ||
+ { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+ { (exit 1); exit 1; }; }
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+ . ./conf$$subs.sh ||
+ { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+ { (exit 1); exit 1; }; }
+
+ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` = $ac_delim_num; then
+ break
+ elif $ac_last_try; then
+ { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+ { (exit 1); exit 1; }; }
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\).*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\).*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+ N
+ s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+ for (key in S) S_is_set[key] = 1
+ FS = ""
+
+}
+{
+ line = $ 0
+ nfields = split(line, field, "@")
+ substed = 0
+ len = length(field[1])
+ for (i = 2; i < nfields; i++) {
+ key = field[i]
+ keylen = length(key)
+ if (S_is_set[key]) {
+ value = S[key]
+ line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+ len += length(value) + length(field[++i])
+ substed = 1
+ } else
+ len += 1 + keylen
+ }
+
+ print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+ sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+ cat
+fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
+ || { { $as_echo "$as_me:$LINENO: error: could not setup config files machinery" >&5
+$as_echo "$as_me: error: could not setup config files machinery" >&2;}
+ { (exit 1); exit 1; }; }
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=/{
+s/:*\$(srcdir):*/:/
+s/:*\${srcdir}:*/:/
+s/:*@srcdir@:*/:/
+s/^\([^=]*=[ ]*\):*/\1/
+s/:*$//
+s/^[^=]*=[ ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+_ACEOF
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
+
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+ ac_t=`sed -n "/$ac_delim/p" confdefs.h`
+ if test -z "$ac_t"; then
+ break
+ elif $ac_last_try; then
+ { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_HEADERS" >&5
+$as_echo "$as_me: error: could not make $CONFIG_HEADERS" >&2;}
+ { (exit 1); exit 1; }; }
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any. Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[ ]*#[ ]*define[ ][ ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ for (key in D) D_is_set[key] = 1
+ FS = ""
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+ line = \$ 0
+ split(line, arg, " ")
+ if (arg[1] == "#") {
+ defundef = arg[2]
+ mac1 = arg[3]
+ } else {
+ defundef = substr(arg[1], 2)
+ mac1 = arg[2]
+ }
+ split(mac1, mac2, "(") #)
+ macro = mac2[1]
+ if (D_is_set[macro]) {
+ # Preserve the white space surrounding the "#".
+ prefix = substr(line, 1, index(line, defundef) - 1)
+ print prefix "define", macro P[macro] D[macro]
+ next
+ } else {
+ # Replace #undef with comments. This is necessary, for example,
+ # in the case of _POSIX_SOURCE, which is predefined and required
+ # on some systems where configure will not decide to define it.
+ if (defundef == "undef") {
+ print "/*", line, "*/"
+ next
+ }
+ }
+}
+{ print }
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ { { $as_echo "$as_me:$LINENO: error: could not setup config headers machinery" >&5
+$as_echo "$as_me: error: could not setup config headers machinery" >&2;}
+ { (exit 1); exit 1; }; }
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+ case $ac_tag in
+ :[FHLC]) ac_mode=$ac_tag; continue;;
+ esac
+ case $ac_mode$ac_tag in
+ :[FHL]*:*);;
+ :L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5
+$as_echo "$as_me: error: Invalid tag $ac_tag." >&2;}
+ { (exit 1); exit 1; }; };;
+ :[FH]-) ac_tag=-:-;;
+ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+ esac
+ ac_save_IFS=$IFS
+ IFS=:
+ set x $ac_tag
+ IFS=$ac_save_IFS
+ shift
+ ac_file=$1
+ shift
+
+ case $ac_mode in
+ :L) ac_source=$1;;
+ :[FH])
+ ac_file_inputs=
+ for ac_f
+ do
+ case $ac_f in
+ -) ac_f="$tmp/stdin";;
+ *) # Look for the file first in the build tree, then in the source tree
+ # (if the path is not absolute). The absolute path cannot be DOS-style,
+ # because $ac_f cannot contain `:'.
+ test -f "$ac_f" ||
+ case $ac_f in
+ [\\/$]*) false;;
+ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+ esac ||
+ { { $as_echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
+$as_echo "$as_me: error: cannot find input file: $ac_f" >&2;}
+ { (exit 1); exit 1; }; };;
+ esac
+ case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+ ac_file_inputs="$ac_file_inputs '$ac_f'"
+ done
+
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ configure_input='Generated from '`
+ $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+ `' by configure.'
+ if test x"$ac_file" != x-; then
+ configure_input="$ac_file. $configure_input"
+ { $as_echo "$as_me:$LINENO: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+ fi
+ # Neutralize special characters interpreted by sed in replacement strings.
+ case $configure_input in #(
+ *\&* | *\|* | *\\* )
+ ac_sed_conf_input=`$as_echo "$configure_input" |
+ sed 's/[\\\\&|]/\\\\&/g'`;; #(
+ *) ac_sed_conf_input=$configure_input;;
+ esac
+
+ case $ac_tag in
+ *:-:* | *:-) cat >"$tmp/stdin" \
+ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+ { (exit 1); exit 1; }; } ;;
+ esac
+ ;;
+ esac
+
+ ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ { as_dir="$ac_dir"
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+$as_echo "$as_me: error: cannot create directory $as_dir" >&2;}
+ { (exit 1); exit 1; }; }; }
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+ case $ac_mode in
+ :F)
+ #
+ # CONFIG_FILE
+ #
+
+ case $INSTALL in
+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+ *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+ esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+
+ac_sed_dataroot='
+/datarootdir/ {
+ p
+ q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p
+'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ ac_datarootdir_hack='
+ s&@datadir@&$datadir&g
+ s&@docdir@&$docdir&g
+ s&@infodir@&$infodir&g
+ s&@localedir@&$localedir&g
+ s&@mandir@&$mandir&g
+ s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
+ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+ { (exit 1); exit 1; }; }
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+ { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
+ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+ { $as_echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined." >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined." >&2;}
+
+ rm -f "$tmp/stdin"
+ case $ac_file in
+ -) cat "$tmp/out" && rm -f "$tmp/out";;
+ *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+ esac \
+ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+ { (exit 1); exit 1; }; }
+ ;;
+ :H)
+ #
+ # CONFIG_HEADER
+ #
+ if test x"$ac_file" != x-; then
+ {
+ $as_echo "/* $configure_input */" \
+ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
+ } >"$tmp/config.h" \
+ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+ { (exit 1); exit 1; }; }
+ if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
+ { $as_echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+$as_echo "$as_me: $ac_file is unchanged" >&6;}
+ else
+ rm -f "$ac_file"
+ mv "$tmp/config.h" "$ac_file" \
+ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+ else
+ $as_echo "/* $configure_input */" \
+ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
+ || { { $as_echo "$as_me:$LINENO: error: could not create -" >&5
+$as_echo "$as_me: error: could not create -" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+ ;;
+
+ :C) { $as_echo "$as_me:$LINENO: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+ esac
+
+
+ case $ac_file$ac_mode in
+ "libtool":C)
+
+ # See if we are running on zsh, and set the options which allow our
+ # commands through without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+ fi
+
+ cfgfile="${ofile}T"
+ trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+ $RM "$cfgfile"
+
+ cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+# 2006, 2007, 2008 Free Software Foundation, Inc.
+# Written by Gordon Matzigkeit, 1996
+#
+# This file is part of GNU Libtool.
+#
+# GNU Libtool 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.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
+# The names of the tagged configurations supported by this script.
+available_tags=""
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
+
+# Assembler program.
+AS=$AS
+
+# DLL creation program.
+DLLTOOL=$DLLTOOL
+
+# Object dumper program.
+OBJDUMP=$OBJDUMP
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# What type of objects to build.
+pic_mode=$pic_mode
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
+
+# A grep program that handles long lines.
+GREP=$lt_GREP
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# A literal string matcher.
+FGREP=$lt_FGREP
+
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
+
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
+
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
+
+# Object file suffix (normally "o").
+objext=$ac_objext
+
+# Executable file suffix (normally "").
+exeext=$exeext
+
+# whether the shell understands "unset".
+lt_unset=$lt_unset
+
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
+
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A symbol stripping program.
+STRIP=$lt_STRIP
+
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# A C compiler.
+LTCC=$lt_CC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# Transform the output of nm in a C name address pair when lib prefix is needed.
+global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that does not interpret backslashes.
+ECHO=$lt_ECHO
+
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+DSYMUTIL=$lt_DSYMUTIL
+
+# Tool to change global to local symbols on Mac OS X.
+NMEDIT=$lt_NMEDIT
+
+# Tool to manipulate fat objects and archives on Mac OS X.
+LIPO=$lt_LIPO
+
+# ldd/readelf like tool for Mach-O binaries on Mac OS X.
+OTOOL=$lt_OTOOL
+
+# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
+OTOOL64=$lt_OTOOL64
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names. First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
+
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
+
+# A language specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking. This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path=$lt_fix_srcfile_path
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+ case $host_os in
+ aix3*)
+ cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program. For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
+_LT_EOF
+ ;;
+ esac
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+
+ # We use sed instead of cat because bash on DJGPP gets confused if
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+ sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ case $xsi_shell in
+ yes)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+ case ${1} in
+ */*) func_dirname_result="${1%/*}${2}" ;;
+ * ) func_dirname_result="${3}" ;;
+ esac
+}
+
+# func_basename file
+func_basename ()
+{
+ func_basename_result="${1##*/}"
+}
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+# dirname: Compute the dirname of FILE. If nonempty,
+# add APPEND to the result, otherwise set result
+# to NONDIR_REPLACEMENT.
+# value returned in "$func_dirname_result"
+# basename: Compute filename of FILE.
+# value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+ case ${1} in
+ */*) func_dirname_result="${1%/*}${2}" ;;
+ * ) func_dirname_result="${3}" ;;
+ esac
+ func_basename_result="${1##*/}"
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+func_stripname ()
+{
+ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+ # positional parameters, so assign one to ordinary parameter first.
+ func_stripname_result=${3}
+ func_stripname_result=${func_stripname_result#"${1}"}
+ func_stripname_result=${func_stripname_result%"${2}"}
+}
+
+# func_opt_split
+func_opt_split ()
+{
+ func_opt_split_opt=${1%%=*}
+ func_opt_split_arg=${1#*=}
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+ case ${1} in
+ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+ *) func_lo2o_result=${1} ;;
+ esac
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+ func_xform_result=${1%.*}.lo
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+ func_arith_result=$(( $* ))
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+ func_len_result=${#1}
+}
+
+_LT_EOF
+ ;;
+ *) # Bourne compatible functions.
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+ # Extract subdirectory from the argument.
+ func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+ if test "X$func_dirname_result" = "X${1}"; then
+ func_dirname_result="${3}"
+ else
+ func_dirname_result="$func_dirname_result${2}"
+ fi
+}
+
+# func_basename file
+func_basename ()
+{
+ func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+ case ${2} in
+ .*) func_stripname_result=`$ECHO "X${3}" \
+ | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
+ *) func_stripname_result=`$ECHO "X${3}" \
+ | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
+ esac
+}
+
+# sed scripts:
+my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
+my_sed_long_arg='1s/^-[^=]*=//'
+
+# func_opt_split
+func_opt_split ()
+{
+ func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
+ func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+ func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+ func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'`
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+ func_arith_result=`expr "$@"`
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+ func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
+}
+
+_LT_EOF
+esac
+
+case $lt_shell_append in
+ yes)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+ eval "$1+=\$2"
+}
+_LT_EOF
+ ;;
+ *)
+ cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+ eval "$1=\$$1\$2"
+}
+
+_LT_EOF
+ ;;
+ esac
+
+
+ sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+
+ ;;
+ "ftconfig.h":H) mv ftconfig.h ftconfig.tmp
+ sed 's|/undef|#undef|' < ftconfig.tmp > ftconfig.h
+ rm ftconfig.tmp ;;
+
+ esac
+done # for ac_tag
+
+
+{ (exit 0); exit 0; }
+_ACEOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+ { { $as_echo "$as_me:$LINENO: error: write failure creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: error: write failure creating $CONFIG_STATUS" >&2;}
+ { (exit 1); exit 1; }; }
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded. So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status. When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+ ac_cs_success=:
+ ac_config_status_args=
+ test "$silent" = yes &&
+ ac_config_status_args="$ac_config_status_args --quiet"
+ exec 5>/dev/null
+ $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+ exec 5>>config.log
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+ # would make configure fail if this is the last instruction.
+ $ac_cs_success || { (exit 1); exit 1; }
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+ { $as_echo "$as_me:$LINENO: WARNING: Unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: Unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
+
+# end of configure.raw
diff --git a/src/3rdparty/freetype/builds/unix/configure.ac b/src/3rdparty/freetype/builds/unix/configure.ac
new file mode 100644
index 0000000..ca8f92d
--- /dev/null
+++ b/src/3rdparty/freetype/builds/unix/configure.ac
@@ -0,0 +1,540 @@
+# This file is part of the FreeType project.
+#
+# Process this file with autoconf to produce a configure script.
+#
+# Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+AC_INIT([FreeType], [2.3.6], [freetype@nongnu.org], [freetype])
+AC_CONFIG_SRCDIR([ftconfig.in])
+
+
+# Don't forget to update docs/VERSION.DLL!
+
+version_info='9:17:3'
+AC_SUBST([version_info])
+ft_version=`echo $version_info | tr : .`
+AC_SUBST([ft_version])
+
+
+# checks for system type
+
+AC_CANONICAL_BUILD
+AC_CANONICAL_HOST
+AC_CANONICAL_TARGET
+
+
+# checks for programs
+
+AC_PROG_CC
+AC_PROG_CPP
+AC_SUBST(EXEEXT)
+
+
+# checks for native programs to generate building tool
+
+if test ${cross_compiling} = yes; then
+ AC_CHECK_PROG(CC_BUILD, ${build}-gcc, ${build}-gcc)
+ test -z "${CC_BUILD}" && AC_CHECK_PROG(CC_BUILD, gcc, gcc)
+ test -z "${CC_BUILD}" && AC_CHECK_PROG(CC_BUILD, cc, cc, , , /usr/ucb/cc)
+ test -z "${CC_BUILD}" && AC_MSG_ERROR([cannot find native C compiler])
+
+ AC_MSG_CHECKING([for suffix of native executables])
+ rm -f a.* b.* a_out.exe conftest.*
+ echo > conftest.c "int main() { return 0;}"
+ ${CC_BUILD} conftest.c || AC_MSG_ERROR([native C compiler is not working])
+ rm -f conftest.c
+ if test -x a.out -o -x b.out -o -x conftest; then
+ EXEEXT_BUILD=""
+ elif test -x a_out.exe -o -x conftest.exe; then
+ EXEEXT_BUILD=".exe"
+ elif test -x conftest.* ; then
+ EXEEXT_BUILD=`echo conftest.* | sed -n '1s/^.*\.//g'`
+ fi
+ AC_MSG_RESULT($EXEEXT_BUILD)
+else
+ CC_BUILD=${CC}
+ EXEEXT_BUILD=${EXEEXT}
+fi
+
+
+if test ! -z ${EXEEXT_BUILD}; then
+ EXEEXT_BUILD=."${EXEEXT_BUILD}"
+fi
+AC_SUBST(CC_BUILD)
+AC_SUBST(EXEEXT_BUILD)
+
+
+
+# get compiler flags right
+
+if test "x$CC" = xgcc; then
+ XX_CFLAGS="-Wall"
+ XX_ANSIFLAGS="-pedantic -ansi"
+else
+ case "$host" in
+ *-dec-osf*)
+ CFLAGS=
+ XX_CFLAGS="-std1 -g3"
+ XX_ANSIFLAGS=
+ ;;
+ *)
+ XX_CFLAGS=
+ XX_ANSIFLAGS=
+ ;;
+ esac
+fi
+AC_SUBST([XX_CFLAGS])
+AC_SUBST([XX_ANSIFLAGS])
+
+
+# auxiliary programs
+
+AC_CHECK_PROG([RMF], [rm], [rm -f])
+AC_CHECK_PROG([RMDIR], [rmdir], [rmdir])
+
+
+# Since this file will be finally moved to another directory we make
+# the path of the install script absolute. This small code snippet has
+# been taken from automake's `ylwrap' script.
+
+AC_PROG_INSTALL
+case "$INSTALL" in
+/*)
+ ;;
+*/*)
+ INSTALL="`pwd`/$INSTALL" ;;
+esac
+
+
+# checks for header files
+
+AC_HEADER_STDC
+AC_CHECK_HEADERS([fcntl.h unistd.h])
+
+
+# checks for typedefs, structures, and compiler characteristics
+
+AC_C_CONST
+AC_CHECK_SIZEOF([int])
+AC_CHECK_SIZEOF([long])
+
+
+# checks for library functions
+
+# Here we check whether we can use our mmap file component.
+
+AC_FUNC_MMAP
+if test "$ac_cv_func_mmap_fixed_mapped" != yes; then
+ FTSYS_SRC='$(BASE_DIR)/ftsystem.c'
+else
+ FTSYS_SRC='$(BUILD_DIR)/ftsystem.c'
+
+ AC_CHECK_DECLS([munmap],
+ [],
+ [],
+ [
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <sys/mman.h>
+
+ ])
+
+ FT_MUNMAP_PARAM
+fi
+AC_SUBST([FTSYS_SRC])
+
+AC_CHECK_FUNCS([memcpy memmove])
+
+
+# Check for system zlib
+
+# don't quote AS_HELP_STRING!
+AC_ARG_WITH([zlib],
+ AS_HELP_STRING([--without-zlib],
+ [use internal zlib instead of system-wide]))
+if test x$with_zlib != xno && test -z "$LIBZ"; then
+ AC_CHECK_LIB([z], [gzsetparams], [AC_CHECK_HEADER([zlib.h], [LIBZ='-lz'])])
+fi
+if test x$with_zlib != xno && test -n "$LIBZ"; then
+ CFLAGS="$CFLAGS -DFT_CONFIG_OPTION_SYSTEM_ZLIB"
+ LDFLAGS="$LDFLAGS $LIBZ"
+ SYSTEM_ZLIB=yes
+fi
+
+
+# Whether to use Mac OS resource-based fonts.
+
+# don't quote AS_HELP_STRING!
+AC_ARG_WITH([old-mac-fonts],
+ AS_HELP_STRING([--with-old-mac-fonts],
+ [allow Mac resource-based fonts to be used]))
+if test x$with_old_mac_fonts = xyes; then
+ orig_LDFLAGS="${LDFLAGS}"
+ AC_MSG_CHECKING([CoreServices & ApplicationServices of Mac OS X])
+ FT2_EXTRA_LIBS="-Wl,-framework,CoreServices -Wl,-framework,ApplicationServices"
+ LDFLAGS="$LDFLAGS $FT2_EXTRA_LIBS"
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([
+
+#if defined(__GNUC__) && defined(__APPLE_CC__)
+# include <Carbon/Carbon.h>
+# include <ApplicationServices/ApplicationServices.h>
+#else
+# include <ConditionalMacros.h>
+# include <Files.h>
+#endif
+
+ ],
+ [
+
+ short res = 0;
+
+
+ UseResFile( res );
+
+ ])],
+ [AC_MSG_RESULT([ok])
+ AC_MSG_CHECKING([OS_INLINE macro is ANSI compatible])
+ orig_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $XX_CFLAGS $XX_ANSIFLAGS"
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([
+
+#if defined(__GNUC__) && defined(__APPLE_CC__)
+# include <Carbon/Carbon.h>
+# include <ApplicationServices/ApplicationServices.h>
+#else
+# include <ConditionalMacros.h>
+# include <Files.h>
+#endif
+
+ ],
+ [
+
+ /* OSHostByteOrder() is typed as OS_INLINE */
+ int32_t os_byte_order = OSHostByteOrder();
+
+
+ if ( OSBigEndian != os_byte_order )
+ return 1;
+
+ ])],
+ [AC_MSG_RESULT([ok])
+ CFLAGS="$orig_CFLAGS"
+ CFLAGS="$CFLAGS -DHAVE_ANSI_OS_INLINE=1"
+ ],
+ [AC_MSG_RESULT([no, ANSI incompatible])
+ CFLAGS="$orig_CFLAGS"
+ ])],
+ [AC_MSG_RESULT([not found])
+ LDFLAGS="${orig_LDFLAGS}"
+ CFLAGS="$CFLAGS -DDARWIN_NO_CARBON"])
+else
+ case x$target_os in
+ xdarwin*)
+ dnl AC_MSG_WARN([target system is MacOS but configured to build without Carbon])
+ CFLAGS="$CFLAGS -DDARWIN_NO_CARBON"
+ ;;
+ *) ;;
+ esac
+fi
+
+
+# Whether to use FileManager which is deprecated since Mac OS X 10.4.
+
+AC_ARG_WITH([fsspec],
+ AS_HELP_STRING([--with-fsspec],
+ [use obsolete FSSpec API of MacOS, if available (default=yes)]))
+if test x$with_fsspec = xno; then
+ CFLAGS="$CFLAGS -DHAVE_FSSPEC=0"
+elif test x$with_old_mac_fonts = xyes -a x$with_fsspec != x; then
+ AC_MSG_CHECKING([FSSpec-based FileManager])
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([
+
+#if defined(__GNUC__) && defined(__APPLE_CC__)
+# include <Carbon/Carbon.h>
+# include <ApplicationServices/ApplicationServices.h>
+#else
+# include <ConditionalMacros.h>
+# include <Files.h>
+#endif
+
+ ],
+ [
+
+ FCBPBPtr paramBlock;
+ short vRefNum;
+ long dirID;
+ ConstStr255Param fileName;
+ FSSpec* spec;
+
+
+ /* FSSpec functions: deprecated since Mac OS X 10.4 */
+ PBGetFCBInfoSync( paramBlock );
+ FSMakeFSSpec( vRefNum, dirID, fileName, spec );
+
+ ])],
+ [AC_MSG_RESULT([ok])
+ CFLAGS="$CFLAGS -DHAVE_FSSPEC=1"],
+ [AC_MSG_RESULT([not found])
+ CFLAGS="$CFLAGS -DHAVE_FSSPEC=0"])
+fi
+
+
+# Whether to use FileManager in Carbon since MacOS 9.x.
+
+AC_ARG_WITH([fsref],
+ AS_HELP_STRING([--with-fsref],
+ [use Carbon FSRef API of MacOS, if available (default=yes)]))
+if test x$with_fsref = xno; then
+ AC_MSG_WARN([
+*** WARNING
+ FreeType2 built without FSRef API cannot load
+ data-fork fonts on MacOS, except of XXX.dfont.
+ ])
+ CFLAGS="$CFLAGS -DHAVE_FSREF=0"
+elif test x$with_old_mac_fonts = xyes -a x$with_fsref != x; then
+ AC_MSG_CHECKING([FSRef-based FileManager])
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([
+
+#if defined(__GNUC__) && defined(__APPLE_CC__)
+# include <Carbon/Carbon.h>
+# include <ApplicationServices/ApplicationServices.h>
+#else
+# include <ConditionalMacros.h>
+# include <Files.h>
+#endif
+
+ ],
+ [
+
+ short vRefNum;
+ long dirID;
+ ConstStr255Param fileName;
+
+ Boolean* isDirectory;
+ UInt8* path;
+ SInt16 desiredRefNum;
+ SInt16* iterator;
+ SInt16* actualRefNum;
+ HFSUniStr255* outForkName;
+ FSVolumeRefNum volume;
+ FSCatalogInfoBitmap whichInfo;
+ FSCatalogInfo* catalogInfo;
+ FSForkInfo* forkInfo;
+ FSRef* ref;
+
+#if HAVE_FSSPEC
+ FSSpec* spec;
+#endif
+
+ /* FSRef functions: no need to check? */
+ FSGetForkCBInfo( desiredRefNum, volume, iterator,
+ actualRefNum, forkInfo, ref,
+ outForkName );
+ FSPathMakeRef( path, ref, isDirectory );
+
+#if HAVE_FSSPEC
+ FSpMakeFSRef ( spec, ref );
+ FSGetCatalogInfo( ref, whichInfo, catalogInfo,
+ outForkName, spec, ref );
+#endif
+ ])],
+ [AC_MSG_RESULT([ok])
+ CFLAGS="$CFLAGS -DHAVE_FSREF=1"],
+ [AC_MSG_RESULT([not found])
+ CFLAGS="$CFLAGS -DHAVE_FSREF=0"])
+fi
+
+
+# Whether to use QuickDraw API in ToolBox which is deprecated since
+# Mac OS X 10.4.
+
+AC_ARG_WITH([quickdraw-toolbox],
+ AS_HELP_STRING([--with-quickdraw-toolbox],
+ [use MacOS QuickDraw in ToolBox, if available (default=yes)]))
+if test x$with_quickdraw_toolbox = xno; then
+ CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_TOOLBOX=0"
+elif test x$with_old_mac_fonts = xyes -a x$with_quickdraw_toolbox != x; then
+ AC_MSG_CHECKING([QuickDraw FontManager functions in ToolBox])
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([
+
+#if defined(__GNUC__) && defined(__APPLE_CC__)
+# include <Carbon/Carbon.h>
+# include <ApplicationServices/ApplicationServices.h>
+#else
+# include <ConditionalMacros.h>
+# include <Fonts.h>
+#endif
+
+ ],
+ [
+
+ Str255 familyName;
+ SInt16 familyID = 0;
+ FMInput* fmIn = NULL;
+ FMOutput* fmOut = NULL;
+
+
+ GetFontName( familyID, familyName );
+ GetFNum( familyName, &familyID );
+ fmOut = FMSwapFont( fmIn );
+
+ ])],
+ [AC_MSG_RESULT([ok])
+ CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_TOOLBOX=1"],
+ [AC_MSG_RESULT([not found])
+ CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_TOOLBOX=0"])
+fi
+
+
+# Whether to use QuickDraw API in Carbon which is deprecated since
+# Mac OS X 10.4.
+
+AC_ARG_WITH([quickdraw-carbon],
+ AS_HELP_STRING([--with-quickdraw-carbon],
+ [use MacOS QuickDraw in Carbon, if available (default=yes)]))
+if test x$with_quickdraw_carbon = xno; then
+ CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_CARBON=0"
+elif test x$with_old_mac_fonts = xyes -a x$with_quickdraw_carbon != x; then
+ AC_MSG_CHECKING([QuickDraw FontManager functions in Carbon])
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([
+
+#if defined(__GNUC__) && defined(__APPLE_CC__)
+# include <Carbon/Carbon.h>
+# include <ApplicationServices/ApplicationServices.h>
+#else
+# include <ConditionalMacros.h>
+# include <Fonts.h>
+#endif
+
+ ],
+ [
+
+ FMFontFamilyIterator famIter;
+ FMFontFamily family;
+ Str255 famNameStr;
+ FMFontFamilyInstanceIterator instIter;
+ FMFontStyle style;
+ FMFontSize size;
+ FMFont font;
+ FSSpec* pathSpec;
+
+
+ FMCreateFontFamilyIterator( NULL, NULL, kFMUseGlobalScopeOption,
+ &famIter );
+ FMGetNextFontFamily( &famIter, &family );
+ FMGetFontFamilyName( family, famNameStr );
+ FMCreateFontFamilyInstanceIterator( family, &instIter );
+ FMGetNextFontFamilyInstance( &instIter, &font, &style, &size );
+ FMDisposeFontFamilyInstanceIterator( &instIter );
+ FMDisposeFontFamilyIterator( &famIter );
+ FMGetFontContainer( font, pathSpec );
+
+ ])],
+ [AC_MSG_RESULT([ok])
+ CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_CARBON=1"],
+ [AC_MSG_RESULT([not found])
+ CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_CARBON=0"])
+fi
+
+
+# Whether to use AppleTypeService since Mac OS X.
+
+# don't quote AS_HELP_STRING!
+AC_ARG_WITH([ats],
+ AS_HELP_STRING([--with-ats],
+ [use AppleTypeService, if available (default=yes)]))
+if test x$with_ats = xno; then
+ CFLAGS="$CFLAGS -DHAVE_ATS=0"
+elif test x$with_old_mac_fonts = xyes -a x$with_ats != x ; then
+ AC_MSG_CHECKING([AppleTypeService functions])
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([
+
+#include <Carbon/Carbon.h>
+
+ ],
+ [
+
+ FSSpec* pathSpec;
+
+
+ ATSFontFindFromName( NULL, kATSOptionFlagsUnRestrictedScope );
+#if HAVE_FSSPEC
+ ATSFontGetFileSpecification( 0, pathSpec );
+#endif
+
+ ])],
+ [AC_MSG_RESULT([ok])
+ CFLAGS="$CFLAGS -DHAVE_ATS=1"],
+ [AC_MSG_RESULT([not found])
+ CFLAGS="$CFLAGS -DHAVE_ATS=0"])
+fi
+
+case "$CFLAGS" in
+ *HAVE_FSSPEC* | *HAVE_FSREF* | *HAVE_QUICKDRAW* | *HAVE_ATS* )
+ AC_MSG_WARN([
+*** WARNING
+ FSSpec/FSRef/QuickDraw/ATS options are explicitly given,
+ thus it is recommended to replace src/base/ftmac.c by builds/mac/ftmac.c.
+ ])
+ CFLAGS="$CFLAGS "'-I$(TOP_DIR)/builds/mac/'
+ ;;
+ *)
+ ;;
+esac
+
+
+AC_SUBST([LIBZ])
+AC_SUBST([CFLAGS])
+AC_SUBST([LDFLAGS])
+AC_SUBST([FT2_EXTRA_LIBS])
+AC_SUBST([SYSTEM_ZLIB])
+
+
+LT_INIT(win32-dll)
+
+AC_SUBST([hardcode_libdir_flag_spec])
+AC_SUBST([wl])
+AC_SUBST([build_libtool_libs])
+
+
+# configuration file -- stay in 8.3 limit
+#
+# since #undef doesn't survive in configuration header files we replace
+# `/undef' with `#undef' after creating the output file
+
+AC_CONFIG_HEADERS([ftconfig.h:ftconfig.in],
+ [mv ftconfig.h ftconfig.tmp
+ sed 's|/undef|#undef|' < ftconfig.tmp > ftconfig.h
+ rm ftconfig.tmp])
+
+# create the Unix-specific sub-Makefiles `builds/unix/unix-def.mk'
+# and `builds/unix/unix-cc.mk' that will be used by the build system
+#
+AC_CONFIG_FILES([unix-cc.mk:unix-cc.in
+ unix-def.mk:unix-def.in
+ freetype-config
+ freetype2.pc:freetype2.in])
+
+# re-generate the Jamfile to use libtool now
+#
+# AC_CONFIG_FILES([../../Jamfile:../../Jamfile.in])
+
+AC_OUTPUT
+
+# end of configure.raw
diff --git a/src/3rdparty/freetype/builds/unix/configure.raw b/src/3rdparty/freetype/builds/unix/configure.raw
new file mode 100644
index 0000000..26a63c7
--- /dev/null
+++ b/src/3rdparty/freetype/builds/unix/configure.raw
@@ -0,0 +1,540 @@
+# This file is part of the FreeType project.
+#
+# Process this file with autoconf to produce a configure script.
+#
+# Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+AC_INIT([FreeType], [@VERSION@], [freetype@nongnu.org], [freetype])
+AC_CONFIG_SRCDIR([ftconfig.in])
+
+
+# Don't forget to update docs/VERSION.DLL!
+
+version_info='9:17:3'
+AC_SUBST([version_info])
+ft_version=`echo $version_info | tr : .`
+AC_SUBST([ft_version])
+
+
+# checks for system type
+
+AC_CANONICAL_BUILD
+AC_CANONICAL_HOST
+AC_CANONICAL_TARGET
+
+
+# checks for programs
+
+AC_PROG_CC
+AC_PROG_CPP
+AC_SUBST(EXEEXT)
+
+
+# checks for native programs to generate building tool
+
+if test ${cross_compiling} = yes; then
+ AC_CHECK_PROG(CC_BUILD, ${build}-gcc, ${build}-gcc)
+ test -z "${CC_BUILD}" && AC_CHECK_PROG(CC_BUILD, gcc, gcc)
+ test -z "${CC_BUILD}" && AC_CHECK_PROG(CC_BUILD, cc, cc, , , /usr/ucb/cc)
+ test -z "${CC_BUILD}" && AC_MSG_ERROR([cannot find native C compiler])
+
+ AC_MSG_CHECKING([for suffix of native executables])
+ rm -f a.* b.* a_out.exe conftest.*
+ echo > conftest.c "int main() { return 0;}"
+ ${CC_BUILD} conftest.c || AC_MSG_ERROR([native C compiler is not working])
+ rm -f conftest.c
+ if test -x a.out -o -x b.out -o -x conftest; then
+ EXEEXT_BUILD=""
+ elif test -x a_out.exe -o -x conftest.exe; then
+ EXEEXT_BUILD=".exe"
+ elif test -x conftest.* ; then
+ EXEEXT_BUILD=`echo conftest.* | sed -n '1s/^.*\.//g'`
+ fi
+ AC_MSG_RESULT($EXEEXT_BUILD)
+else
+ CC_BUILD=${CC}
+ EXEEXT_BUILD=${EXEEXT}
+fi
+
+
+if test ! -z ${EXEEXT_BUILD}; then
+ EXEEXT_BUILD=."${EXEEXT_BUILD}"
+fi
+AC_SUBST(CC_BUILD)
+AC_SUBST(EXEEXT_BUILD)
+
+
+
+# get compiler flags right
+
+if test "x$CC" = xgcc; then
+ XX_CFLAGS="-Wall"
+ XX_ANSIFLAGS="-pedantic -ansi"
+else
+ case "$host" in
+ *-dec-osf*)
+ CFLAGS=
+ XX_CFLAGS="-std1 -g3"
+ XX_ANSIFLAGS=
+ ;;
+ *)
+ XX_CFLAGS=
+ XX_ANSIFLAGS=
+ ;;
+ esac
+fi
+AC_SUBST([XX_CFLAGS])
+AC_SUBST([XX_ANSIFLAGS])
+
+
+# auxiliary programs
+
+AC_CHECK_PROG([RMF], [rm], [rm -f])
+AC_CHECK_PROG([RMDIR], [rmdir], [rmdir])
+
+
+# Since this file will be finally moved to another directory we make
+# the path of the install script absolute. This small code snippet has
+# been taken from automake's `ylwrap' script.
+
+AC_PROG_INSTALL
+case "$INSTALL" in
+/*)
+ ;;
+*/*)
+ INSTALL="`pwd`/$INSTALL" ;;
+esac
+
+
+# checks for header files
+
+AC_HEADER_STDC
+AC_CHECK_HEADERS([fcntl.h unistd.h])
+
+
+# checks for typedefs, structures, and compiler characteristics
+
+AC_C_CONST
+AC_CHECK_SIZEOF([int])
+AC_CHECK_SIZEOF([long])
+
+
+# checks for library functions
+
+# Here we check whether we can use our mmap file component.
+
+AC_FUNC_MMAP
+if test "$ac_cv_func_mmap_fixed_mapped" != yes; then
+ FTSYS_SRC='$(BASE_DIR)/ftsystem.c'
+else
+ FTSYS_SRC='$(BUILD_DIR)/ftsystem.c'
+
+ AC_CHECK_DECLS([munmap],
+ [],
+ [],
+ [
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <sys/mman.h>
+
+ ])
+
+ FT_MUNMAP_PARAM
+fi
+AC_SUBST([FTSYS_SRC])
+
+AC_CHECK_FUNCS([memcpy memmove])
+
+
+# Check for system zlib
+
+# don't quote AS_HELP_STRING!
+AC_ARG_WITH([zlib],
+ AS_HELP_STRING([--without-zlib],
+ [use internal zlib instead of system-wide]))
+if test x$with_zlib != xno && test -z "$LIBZ"; then
+ AC_CHECK_LIB([z], [gzsetparams], [AC_CHECK_HEADER([zlib.h], [LIBZ='-lz'])])
+fi
+if test x$with_zlib != xno && test -n "$LIBZ"; then
+ CFLAGS="$CFLAGS -DFT_CONFIG_OPTION_SYSTEM_ZLIB"
+ LDFLAGS="$LDFLAGS $LIBZ"
+ SYSTEM_ZLIB=yes
+fi
+
+
+# Whether to use Mac OS resource-based fonts.
+
+# don't quote AS_HELP_STRING!
+AC_ARG_WITH([old-mac-fonts],
+ AS_HELP_STRING([--with-old-mac-fonts],
+ [allow Mac resource-based fonts to be used]))
+if test x$with_old_mac_fonts = xyes; then
+ orig_LDFLAGS="${LDFLAGS}"
+ AC_MSG_CHECKING([CoreServices & ApplicationServices of Mac OS X])
+ FT2_EXTRA_LIBS="-Wl,-framework,CoreServices -Wl,-framework,ApplicationServices"
+ LDFLAGS="$LDFLAGS $FT2_EXTRA_LIBS"
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([
+
+#if defined(__GNUC__) && defined(__APPLE_CC__)
+# include <Carbon/Carbon.h>
+# include <ApplicationServices/ApplicationServices.h>
+#else
+# include <ConditionalMacros.h>
+# include <Files.h>
+#endif
+
+ ],
+ [
+
+ short res = 0;
+
+
+ UseResFile( res );
+
+ ])],
+ [AC_MSG_RESULT([ok])
+ AC_MSG_CHECKING([OS_INLINE macro is ANSI compatible])
+ orig_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $XX_CFLAGS $XX_ANSIFLAGS"
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([
+
+#if defined(__GNUC__) && defined(__APPLE_CC__)
+# include <Carbon/Carbon.h>
+# include <ApplicationServices/ApplicationServices.h>
+#else
+# include <ConditionalMacros.h>
+# include <Files.h>
+#endif
+
+ ],
+ [
+
+ /* OSHostByteOrder() is typed as OS_INLINE */
+ int32_t os_byte_order = OSHostByteOrder();
+
+
+ if ( OSBigEndian != os_byte_order )
+ return 1;
+
+ ])],
+ [AC_MSG_RESULT([ok])
+ CFLAGS="$orig_CFLAGS"
+ CFLAGS="$CFLAGS -DHAVE_ANSI_OS_INLINE=1"
+ ],
+ [AC_MSG_RESULT([no, ANSI incompatible])
+ CFLAGS="$orig_CFLAGS"
+ ])],
+ [AC_MSG_RESULT([not found])
+ LDFLAGS="${orig_LDFLAGS}"
+ CFLAGS="$CFLAGS -DDARWIN_NO_CARBON"])
+else
+ case x$target_os in
+ xdarwin*)
+ dnl AC_MSG_WARN([target system is MacOS but configured to build without Carbon])
+ CFLAGS="$CFLAGS -DDARWIN_NO_CARBON"
+ ;;
+ *) ;;
+ esac
+fi
+
+
+# Whether to use FileManager which is deprecated since Mac OS X 10.4.
+
+AC_ARG_WITH([fsspec],
+ AS_HELP_STRING([--with-fsspec],
+ [use obsolete FSSpec API of MacOS, if available (default=yes)]))
+if test x$with_fsspec = xno; then
+ CFLAGS="$CFLAGS -DHAVE_FSSPEC=0"
+elif test x$with_old_mac_fonts = xyes -a x$with_fsspec != x; then
+ AC_MSG_CHECKING([FSSpec-based FileManager])
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([
+
+#if defined(__GNUC__) && defined(__APPLE_CC__)
+# include <Carbon/Carbon.h>
+# include <ApplicationServices/ApplicationServices.h>
+#else
+# include <ConditionalMacros.h>
+# include <Files.h>
+#endif
+
+ ],
+ [
+
+ FCBPBPtr paramBlock;
+ short vRefNum;
+ long dirID;
+ ConstStr255Param fileName;
+ FSSpec* spec;
+
+
+ /* FSSpec functions: deprecated since Mac OS X 10.4 */
+ PBGetFCBInfoSync( paramBlock );
+ FSMakeFSSpec( vRefNum, dirID, fileName, spec );
+
+ ])],
+ [AC_MSG_RESULT([ok])
+ CFLAGS="$CFLAGS -DHAVE_FSSPEC=1"],
+ [AC_MSG_RESULT([not found])
+ CFLAGS="$CFLAGS -DHAVE_FSSPEC=0"])
+fi
+
+
+# Whether to use FileManager in Carbon since MacOS 9.x.
+
+AC_ARG_WITH([fsref],
+ AS_HELP_STRING([--with-fsref],
+ [use Carbon FSRef API of MacOS, if available (default=yes)]))
+if test x$with_fsref = xno; then
+ AC_MSG_WARN([
+*** WARNING
+ FreeType2 built without FSRef API cannot load
+ data-fork fonts on MacOS, except of XXX.dfont.
+ ])
+ CFLAGS="$CFLAGS -DHAVE_FSREF=0"
+elif test x$with_old_mac_fonts = xyes -a x$with_fsref != x; then
+ AC_MSG_CHECKING([FSRef-based FileManager])
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([
+
+#if defined(__GNUC__) && defined(__APPLE_CC__)
+# include <Carbon/Carbon.h>
+# include <ApplicationServices/ApplicationServices.h>
+#else
+# include <ConditionalMacros.h>
+# include <Files.h>
+#endif
+
+ ],
+ [
+
+ short vRefNum;
+ long dirID;
+ ConstStr255Param fileName;
+
+ Boolean* isDirectory;
+ UInt8* path;
+ SInt16 desiredRefNum;
+ SInt16* iterator;
+ SInt16* actualRefNum;
+ HFSUniStr255* outForkName;
+ FSVolumeRefNum volume;
+ FSCatalogInfoBitmap whichInfo;
+ FSCatalogInfo* catalogInfo;
+ FSForkInfo* forkInfo;
+ FSRef* ref;
+
+#if HAVE_FSSPEC
+ FSSpec* spec;
+#endif
+
+ /* FSRef functions: no need to check? */
+ FSGetForkCBInfo( desiredRefNum, volume, iterator,
+ actualRefNum, forkInfo, ref,
+ outForkName );
+ FSPathMakeRef( path, ref, isDirectory );
+
+#if HAVE_FSSPEC
+ FSpMakeFSRef ( spec, ref );
+ FSGetCatalogInfo( ref, whichInfo, catalogInfo,
+ outForkName, spec, ref );
+#endif
+ ])],
+ [AC_MSG_RESULT([ok])
+ CFLAGS="$CFLAGS -DHAVE_FSREF=1"],
+ [AC_MSG_RESULT([not found])
+ CFLAGS="$CFLAGS -DHAVE_FSREF=0"])
+fi
+
+
+# Whether to use QuickDraw API in ToolBox which is deprecated since
+# Mac OS X 10.4.
+
+AC_ARG_WITH([quickdraw-toolbox],
+ AS_HELP_STRING([--with-quickdraw-toolbox],
+ [use MacOS QuickDraw in ToolBox, if available (default=yes)]))
+if test x$with_quickdraw_toolbox = xno; then
+ CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_TOOLBOX=0"
+elif test x$with_old_mac_fonts = xyes -a x$with_quickdraw_toolbox != x; then
+ AC_MSG_CHECKING([QuickDraw FontManager functions in ToolBox])
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([
+
+#if defined(__GNUC__) && defined(__APPLE_CC__)
+# include <Carbon/Carbon.h>
+# include <ApplicationServices/ApplicationServices.h>
+#else
+# include <ConditionalMacros.h>
+# include <Fonts.h>
+#endif
+
+ ],
+ [
+
+ Str255 familyName;
+ SInt16 familyID = 0;
+ FMInput* fmIn = NULL;
+ FMOutput* fmOut = NULL;
+
+
+ GetFontName( familyID, familyName );
+ GetFNum( familyName, &familyID );
+ fmOut = FMSwapFont( fmIn );
+
+ ])],
+ [AC_MSG_RESULT([ok])
+ CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_TOOLBOX=1"],
+ [AC_MSG_RESULT([not found])
+ CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_TOOLBOX=0"])
+fi
+
+
+# Whether to use QuickDraw API in Carbon which is deprecated since
+# Mac OS X 10.4.
+
+AC_ARG_WITH([quickdraw-carbon],
+ AS_HELP_STRING([--with-quickdraw-carbon],
+ [use MacOS QuickDraw in Carbon, if available (default=yes)]))
+if test x$with_quickdraw_carbon = xno; then
+ CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_CARBON=0"
+elif test x$with_old_mac_fonts = xyes -a x$with_quickdraw_carbon != x; then
+ AC_MSG_CHECKING([QuickDraw FontManager functions in Carbon])
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([
+
+#if defined(__GNUC__) && defined(__APPLE_CC__)
+# include <Carbon/Carbon.h>
+# include <ApplicationServices/ApplicationServices.h>
+#else
+# include <ConditionalMacros.h>
+# include <Fonts.h>
+#endif
+
+ ],
+ [
+
+ FMFontFamilyIterator famIter;
+ FMFontFamily family;
+ Str255 famNameStr;
+ FMFontFamilyInstanceIterator instIter;
+ FMFontStyle style;
+ FMFontSize size;
+ FMFont font;
+ FSSpec* pathSpec;
+
+
+ FMCreateFontFamilyIterator( NULL, NULL, kFMUseGlobalScopeOption,
+ &famIter );
+ FMGetNextFontFamily( &famIter, &family );
+ FMGetFontFamilyName( family, famNameStr );
+ FMCreateFontFamilyInstanceIterator( family, &instIter );
+ FMGetNextFontFamilyInstance( &instIter, &font, &style, &size );
+ FMDisposeFontFamilyInstanceIterator( &instIter );
+ FMDisposeFontFamilyIterator( &famIter );
+ FMGetFontContainer( font, pathSpec );
+
+ ])],
+ [AC_MSG_RESULT([ok])
+ CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_CARBON=1"],
+ [AC_MSG_RESULT([not found])
+ CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_CARBON=0"])
+fi
+
+
+# Whether to use AppleTypeService since Mac OS X.
+
+# don't quote AS_HELP_STRING!
+AC_ARG_WITH([ats],
+ AS_HELP_STRING([--with-ats],
+ [use AppleTypeService, if available (default=yes)]))
+if test x$with_ats = xno; then
+ CFLAGS="$CFLAGS -DHAVE_ATS=0"
+elif test x$with_old_mac_fonts = xyes -a x$with_ats != x ; then
+ AC_MSG_CHECKING([AppleTypeService functions])
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([
+
+#include <Carbon/Carbon.h>
+
+ ],
+ [
+
+ FSSpec* pathSpec;
+
+
+ ATSFontFindFromName( NULL, kATSOptionFlagsUnRestrictedScope );
+#if HAVE_FSSPEC
+ ATSFontGetFileSpecification( 0, pathSpec );
+#endif
+
+ ])],
+ [AC_MSG_RESULT([ok])
+ CFLAGS="$CFLAGS -DHAVE_ATS=1"],
+ [AC_MSG_RESULT([not found])
+ CFLAGS="$CFLAGS -DHAVE_ATS=0"])
+fi
+
+case "$CFLAGS" in
+ *HAVE_FSSPEC* | *HAVE_FSREF* | *HAVE_QUICKDRAW* | *HAVE_ATS* )
+ AC_MSG_WARN([
+*** WARNING
+ FSSpec/FSRef/QuickDraw/ATS options are explicitly given,
+ thus it is recommended to replace src/base/ftmac.c by builds/mac/ftmac.c.
+ ])
+ CFLAGS="$CFLAGS "'-I$(TOP_DIR)/builds/mac/'
+ ;;
+ *)
+ ;;
+esac
+
+
+AC_SUBST([LIBZ])
+AC_SUBST([CFLAGS])
+AC_SUBST([LDFLAGS])
+AC_SUBST([FT2_EXTRA_LIBS])
+AC_SUBST([SYSTEM_ZLIB])
+
+
+LT_INIT(win32-dll)
+
+AC_SUBST([hardcode_libdir_flag_spec])
+AC_SUBST([wl])
+AC_SUBST([build_libtool_libs])
+
+
+# configuration file -- stay in 8.3 limit
+#
+# since #undef doesn't survive in configuration header files we replace
+# `/undef' with `#undef' after creating the output file
+
+AC_CONFIG_HEADERS([ftconfig.h:ftconfig.in],
+ [mv ftconfig.h ftconfig.tmp
+ sed 's|/undef|#undef|' < ftconfig.tmp > ftconfig.h
+ rm ftconfig.tmp])
+
+# create the Unix-specific sub-Makefiles `builds/unix/unix-def.mk'
+# and `builds/unix/unix-cc.mk' that will be used by the build system
+#
+AC_CONFIG_FILES([unix-cc.mk:unix-cc.in
+ unix-def.mk:unix-def.in
+ freetype-config
+ freetype2.pc:freetype2.in])
+
+# re-generate the Jamfile to use libtool now
+#
+# AC_CONFIG_FILES([../../Jamfile:../../Jamfile.in])
+
+AC_OUTPUT
+
+# end of configure.raw
diff --git a/src/3rdparty/freetype/builds/unix/detect.mk b/src/3rdparty/freetype/builds/unix/detect.mk
new file mode 100644
index 0000000..e74af57
--- /dev/null
+++ b/src/3rdparty/freetype/builds/unix/detect.mk
@@ -0,0 +1,91 @@
+#
+# FreeType 2 configuration file to detect a UNIX host platform.
+#
+
+
+# Copyright 1996-2000, 2002, 2003, 2004, 2006 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+.PHONY: setup
+
+ifeq ($(PLATFORM),ansi)
+
+ # Note: this test is duplicated in "builds/toplevel.mk".
+ #
+ is_unix := $(strip $(wildcard /sbin/init) \
+ $(wildcard /usr/sbin/init) \
+ $(wildcard /hurd/auth))
+ ifneq ($(is_unix),)
+
+ PLATFORM := unix
+
+ endif # test is_unix
+endif # test PLATFORM ansi
+
+ifeq ($(PLATFORM),unix)
+ COPY := cp
+ DELETE := rm -f
+ CAT := cat
+
+ # If `devel' is the requested target, we use a special configuration
+ # file named `unix-dev.mk'. It disables optimization and libtool.
+ #
+ ifneq ($(findstring devel,$(MAKECMDGOALS)),)
+ CONFIG_FILE := unix-dev.mk
+ CC := gcc
+ devel: setup
+ .PHONY: devel
+ else
+
+ # If `lcc' is the requested target, we use a special configuration
+ # file named `unix-lcc.mk'. It disables libtool for LCC.
+ #
+ ifneq ($(findstring lcc,$(MAKECMDGOALS)),)
+ CONFIG_FILE := unix-lcc.mk
+ CC := lcc
+ lcc: setup
+ .PHONY: lcc
+ else
+
+ # If a Unix platform is detected, the configure script is called and
+ # `unix-def.mk' together with `unix-cc.mk' is created.
+ #
+ # Arguments to `configure' should be in the CFG variable. Example:
+ #
+ # make CFG="--prefix=/usr --disable-static"
+ #
+ # If you need to set CFLAGS or LDFLAGS, do it here also.
+ #
+ # Feel free to add support for other platform specific compilers in
+ # this directory (e.g. solaris.mk + changes here to detect the
+ # platform).
+ #
+ CONFIG_FILE := unix.mk
+ unix: setup
+ must_configure := 1
+ .PHONY: unix
+ endif
+ endif
+
+ have_Makefile := $(wildcard $(OBJ_DIR)/Makefile)
+
+ setup: std_setup
+ ifdef must_configure
+ ifneq ($(have_Makefile),)
+ # we are building FT2 not in the src tree
+ $(TOP_DIR)/builds/unix/configure $(value CFG)
+ else
+ cd builds/unix; ./configure $(value CFG)
+ endif
+ endif
+
+endif # test PLATFORM unix
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/unix/freetype-config.in b/src/3rdparty/freetype/builds/unix/freetype-config.in
new file mode 100644
index 0000000..a343522
--- /dev/null
+++ b/src/3rdparty/freetype/builds/unix/freetype-config.in
@@ -0,0 +1,157 @@
+#! /bin/sh
+#
+# Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2008 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+exec_prefix_set=no
+includedir=@includedir@
+libdir=@libdir@
+enable_shared=@build_libtool_libs@
+wl=@wl@
+hardcode_libdir_flag_spec='@hardcode_libdir_flag_spec@'
+
+usage()
+{
+ cat <<EOF
+Usage: freetype-config [OPTION]...
+Get FreeType compilation and linking information.
+
+Options:
+ --prefix display \`--prefix' value used for building the
+ FreeType library
+ --prefix=PREFIX override \`--prefix' value with PREFIX
+ --exec-prefix display \`--exec-prefix' value used for building
+ the FreeType library
+ --exec-prefix=EPREFIX override \`--exec-prefix' value with EPREFIX
+ --version display libtool version of the FreeType library
+ --ftversion display FreeType version number
+ --libs display flags for linking with the FreeType library
+ --libtool display library name for linking with libtool
+ --cflags display flags for compiling with the FreeType
+ library
+EOF
+ exit $1
+}
+
+if test $# -eq 0 ; then
+ usage 1 1>&2
+fi
+
+while test $# -gt 0 ; do
+ case "$1" in
+ -*=*)
+ optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'`
+ ;;
+ *)
+ optarg=
+ ;;
+ esac
+
+ case $1 in
+ --prefix=*)
+ prefix=$optarg
+ local_prefix=yes
+ ;;
+ --prefix)
+ echo_prefix=yes
+ ;;
+ --exec-prefix=*)
+ exec_prefix=$optarg
+ exec_prefix_set=yes
+ local_prefix=yes
+ ;;
+ --exec-prefix)
+ echo_exec_prefix=yes
+ ;;
+ --version)
+ echo @ft_version@
+ exit 0
+ ;;
+ --ftversion)
+ major=`grep define @prefix@/include/freetype2/freetype/freetype.h \
+ | grep FREETYPE_MAJOR \
+ | sed 's/.*[ ]\([0-9][0-9]*\).*/\1/'`
+ minor=`grep define @prefix@/include/freetype2/freetype/freetype.h \
+ | grep FREETYPE_MINOR \
+ | sed 's/.*[ ]\([0-9][0-9]*\).*/\1/'`
+ patch=`grep define @prefix@/include/freetype2/freetype/freetype.h \
+ | grep FREETYPE_PATCH \
+ | sed 's/.*[ ]\([0-9][0-9]*\).*/\1/'`
+ echo $major.$minor.$patch
+ exit 0
+ ;;
+ --cflags)
+ echo_cflags=yes
+ ;;
+ --libs)
+ echo_libs=yes
+ ;;
+ --libtool)
+ echo_libtool=yes
+ ;;
+ *)
+ usage 1 1>&2
+ ;;
+ esac
+ shift
+done
+
+if test "$local_prefix" = "yes" ; then
+ if test "$exec_prefix_set" != "yes" ; then
+ exec_prefix=$prefix
+ fi
+fi
+
+if test "$echo_prefix" = "yes" ; then
+ echo $prefix
+fi
+
+if test "$echo_exec_prefix" = "yes" ; then
+ echo $exec_prefix
+fi
+
+if test "$exec_prefix_set" = "yes" ; then
+ libdir=$exec_prefix/lib
+else
+ if test "$local_prefix" = "yes" ; then
+ includedir=$prefix/include
+ libdir=$prefix/lib
+ fi
+fi
+
+if test "$echo_cflags" = "yes" ; then
+ cflags="-I$includedir/freetype2"
+ if test "$includedir" != "/usr/include" ; then
+ echo $cflags -I$includedir
+ else
+ echo $cflags
+ fi
+fi
+
+if test "$echo_libs" = "yes" ; then
+ rpath=
+ if test "$enable_shared" = "yes" ; then
+ eval "rpath=\"$hardcode_libdir_flag_spec\""
+ fi
+ libs="-lfreetype @LIBZ@ @FT2_EXTRA_LIBS@"
+ if test "$libdir" != "/usr/lib" && test "$libdir" != "/usr/lib64"; then
+ echo -L$libdir $rpath $libs
+ else
+ echo $libs
+ fi
+fi
+
+if test "$echo_libtool" = "yes" ; then
+ convlib="libfreetype.la"
+ echo $libdir/$convlib
+fi
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/unix/freetype2.in b/src/3rdparty/freetype/builds/unix/freetype2.in
new file mode 100644
index 0000000..0d7aefa
--- /dev/null
+++ b/src/3rdparty/freetype/builds/unix/freetype2.in
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: FreeType 2
+Description: A free, high-quality, and portable font engine.
+Version: @ft_version@
+Requires:
+Libs: -L${libdir} -lfreetype @LIBZ@ @FT2_EXTRA_LIBS@
+Cflags: -I${includedir}/freetype2 -I${includedir}
diff --git a/src/3rdparty/freetype/builds/unix/freetype2.m4 b/src/3rdparty/freetype/builds/unix/freetype2.m4
new file mode 100644
index 0000000..d1da07d
--- /dev/null
+++ b/src/3rdparty/freetype/builds/unix/freetype2.m4
@@ -0,0 +1,192 @@
+# Configure paths for FreeType2
+# Marcelo Magallon 2001-10-26, based on gtk.m4 by Owen Taylor
+#
+# Copyright 2001, 2003, 2007 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+#
+# As a special exception to the FreeType project license, this file may be
+# distributed as part of a program that contains a configuration script
+# generated by Autoconf, under the same distribution terms as the rest of
+# that program.
+#
+# serial 2
+
+# AC_CHECK_FT2([MINIMUM-VERSION [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
+# Test for FreeType 2, and define FT2_CFLAGS and FT2_LIBS.
+# MINIMUM-VERSION is what libtool reports; the default is `7.0.1' (this is
+# FreeType 2.0.4).
+#
+AC_DEFUN([AC_CHECK_FT2],
+ [# Get the cflags and libraries from the freetype-config script
+ #
+ AC_ARG_WITH([ft-prefix],
+ dnl don't quote AS_HELP_STRING!
+ AS_HELP_STRING([--with-ft-prefix=PREFIX],
+ [Prefix where FreeType is installed (optional)]),
+ [ft_config_prefix="$withval"],
+ [ft_config_prefix=""])
+
+ AC_ARG_WITH([ft-exec-prefix],
+ dnl don't quote AS_HELP_STRING!
+ AS_HELP_STRING([--with-ft-exec-prefix=PREFIX],
+ [Exec prefix where FreeType is installed (optional)]),
+ [ft_config_exec_prefix="$withval"],
+ [ft_config_exec_prefix=""])
+
+ AC_ARG_ENABLE([freetypetest],
+ dnl don't quote AS_HELP_STRING!
+ AS_HELP_STRING([--disable-freetypetest],
+ [Do not try to compile and run a test FreeType program]),
+ [],
+ [enable_fttest=yes])
+
+ if test x$ft_config_exec_prefix != x ; then
+ ft_config_args="$ft_config_args --exec-prefix=$ft_config_exec_prefix"
+ if test x${FT2_CONFIG+set} != xset ; then
+ FT2_CONFIG=$ft_config_exec_prefix/bin/freetype-config
+ fi
+ fi
+
+ if test x$ft_config_prefix != x ; then
+ ft_config_args="$ft_config_args --prefix=$ft_config_prefix"
+ if test x${FT2_CONFIG+set} != xset ; then
+ FT2_CONFIG=$ft_config_prefix/bin/freetype-config
+ fi
+ fi
+
+ AC_PATH_PROG([FT2_CONFIG], [freetype-config], [no])
+
+ min_ft_version=m4_if([$1], [], [7.0.1], [$1])
+ AC_MSG_CHECKING([for FreeType -- version >= $min_ft_version])
+ no_ft=""
+ if test "$FT2_CONFIG" = "no" ; then
+ no_ft=yes
+ else
+ FT2_CFLAGS=`$FT2_CONFIG $ft_config_args --cflags`
+ FT2_LIBS=`$FT2_CONFIG $ft_config_args --libs`
+ ft_config_major_version=`$FT2_CONFIG $ft_config_args --version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
+ ft_config_minor_version=`$FT2_CONFIG $ft_config_args --version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
+ ft_config_micro_version=`$FT2_CONFIG $ft_config_args --version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
+ ft_min_major_version=`echo $min_ft_version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
+ ft_min_minor_version=`echo $min_ft_version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
+ ft_min_micro_version=`echo $min_ft_version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
+ if test x$enable_fttest = xyes ; then
+ ft_config_is_lt=""
+ if test $ft_config_major_version -lt $ft_min_major_version ; then
+ ft_config_is_lt=yes
+ else
+ if test $ft_config_major_version -eq $ft_min_major_version ; then
+ if test $ft_config_minor_version -lt $ft_min_minor_version ; then
+ ft_config_is_lt=yes
+ else
+ if test $ft_config_minor_version -eq $ft_min_minor_version ; then
+ if test $ft_config_micro_version -lt $ft_min_micro_version ; then
+ ft_config_is_lt=yes
+ fi
+ fi
+ fi
+ fi
+ fi
+ if test x$ft_config_is_lt = xyes ; then
+ no_ft=yes
+ else
+ ac_save_CFLAGS="$CFLAGS"
+ ac_save_LIBS="$LIBS"
+ CFLAGS="$CFLAGS $FT2_CFLAGS"
+ LIBS="$FT2_LIBS $LIBS"
+
+ #
+ # Sanity checks for the results of freetype-config to some extent.
+ #
+ AC_RUN_IFELSE([
+ AC_LANG_SOURCE([[
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+#include <stdio.h>
+#include <stdlib.h>
+
+int
+main()
+{
+ FT_Library library;
+ FT_Error error;
+
+ error = FT_Init_FreeType(&library);
+
+ if (error)
+ return 1;
+ else
+ {
+ FT_Done_FreeType(library);
+ return 0;
+ }
+}
+
+ ]])
+ ],
+ [],
+ [no_ft=yes],
+ [echo $ECHO_N "cross compiling; assuming OK... $ECHO_C"])
+
+ CFLAGS="$ac_save_CFLAGS"
+ LIBS="$ac_save_LIBS"
+ fi # test $ft_config_version -lt $ft_min_version
+ fi # test x$enable_fttest = xyes
+ fi # test "$FT2_CONFIG" = "no"
+
+ if test x$no_ft = x ; then
+ AC_MSG_RESULT([yes])
+ m4_if([$2], [], [:], [$2])
+ else
+ AC_MSG_RESULT([no])
+ if test "$FT2_CONFIG" = "no" ; then
+ AC_MSG_WARN([
+
+ The freetype-config script installed by FreeType 2 could not be found.
+ If FreeType 2 was installed in PREFIX, make sure PREFIX/bin is in
+ your path, or set the FT2_CONFIG environment variable to the
+ full path to freetype-config.
+ ])
+ else
+ if test x$ft_config_is_lt = xyes ; then
+ AC_MSG_WARN([
+
+ Your installed version of the FreeType 2 library is too old.
+ If you have different versions of FreeType 2, make sure that
+ correct values for --with-ft-prefix or --with-ft-exec-prefix
+ are used, or set the FT2_CONFIG environment variable to the
+ full path to freetype-config.
+ ])
+ else
+ AC_MSG_WARN([
+
+ The FreeType test program failed to run. If your system uses
+ shared libraries and they are installed outside the normal
+ system library path, make sure the variable LD_LIBRARY_PATH
+ (or whatever is appropriate for your system) is correctly set.
+ ])
+ fi
+ fi
+
+ FT2_CFLAGS=""
+ FT2_LIBS=""
+ m4_if([$3], [], [:], [$3])
+ fi
+
+ AC_SUBST([FT2_CFLAGS])
+ AC_SUBST([FT2_LIBS])])
+
+# end of freetype2.m4
diff --git a/src/3rdparty/freetype/builds/unix/ft-munmap.m4 b/src/3rdparty/freetype/builds/unix/ft-munmap.m4
new file mode 100644
index 0000000..68b3361
--- /dev/null
+++ b/src/3rdparty/freetype/builds/unix/ft-munmap.m4
@@ -0,0 +1,32 @@
+## FreeType specific autoconf tests
+#
+# Copyright 2002, 2003, 2004 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+# serial 2
+
+AC_DEFUN([FT_MUNMAP_PARAM],
+ [AC_MSG_CHECKING([for munmap's first parameter type])
+ AC_COMPILE_IFELSE([
+ AC_LANG_SOURCE([[
+
+#include <unistd.h>
+#include <sys/mman.h>
+int munmap(void *, size_t);
+
+ ]])
+ ],
+ [AC_MSG_RESULT([void *])
+ AC_DEFINE([MUNMAP_USES_VOIDP],
+ [],
+ [Define to 1 if the first argument of munmap is of type void *])],
+ [AC_MSG_RESULT([char *])])
+ ])
+
+# end of ft-munmap.m4
diff --git a/src/3rdparty/freetype/builds/unix/ft2unix.h b/src/3rdparty/freetype/builds/unix/ft2unix.h
new file mode 100644
index 0000000..6a3b8d9
--- /dev/null
+++ b/src/3rdparty/freetype/builds/unix/ft2unix.h
@@ -0,0 +1,61 @@
+/***************************************************************************/
+/* */
+/* ft2build.h */
+/* */
+/* Build macros of the FreeType 2 library. */
+/* */
+/* Copyright 1996-2001, 2003, 2006 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* This is a Unix-specific version of <ft2build.h> that should be used */
+ /* exclusively *after* installation of the library. */
+ /* */
+ /* It assumes that `/usr/local/include/freetype2' (or whatever is */
+ /* returned by the `freetype-config --cflags' or `pkg-config --cflags' */
+ /* command) is in your compilation include path. */
+ /* */
+ /* We don't need to do anything special in this release. However, for */
+ /* a future FreeType 2 release, the following installation changes will */
+ /* be performed: */
+ /* */
+ /* - The contents of `freetype-2.x/include/freetype' will be installed */
+ /* to `/usr/local/include/freetype2' instead of */
+ /* `/usr/local/include/freetype2/freetype'. */
+ /* */
+ /* - This file will #include <freetype2/config/ftheader.h>, instead */
+ /* of <freetype/config/ftheader.h>. */
+ /* */
+ /* - The contents of `ftheader.h' will be processed with `sed' to */
+ /* replace all `<freetype/xxx>' with `<freetype2/xxx>'. */
+ /* */
+ /* - Adding `/usr/local/include/freetype2' to your compilation include */
+ /* path will not be necessary anymore. */
+ /* */
+ /* These changes will be transparent to client applications which use */
+ /* freetype-config (or pkg-config). No modifications will be necessary */
+ /* to compile with the new scheme. */
+ /* */
+ /*************************************************************************/
+
+
+#ifndef __FT2_BUILD_UNIX_H__
+#define __FT2_BUILD_UNIX_H__
+
+ /* `<prefix>/include/freetype2' must be in your current inclusion path */
+#include <freetype/config/ftheader.h>
+
+#endif /* __FT2_BUILD_UNIX_H__ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/builds/unix/ftconfig.h b/src/3rdparty/freetype/builds/unix/ftconfig.h
new file mode 100644
index 0000000..2fca16c
--- /dev/null
+++ b/src/3rdparty/freetype/builds/unix/ftconfig.h
@@ -0,0 +1,262 @@
+/* ftconfig.h. Generated by configure. */
+/***************************************************************************/
+/* */
+/* ftconfig.in */
+/* */
+/* UNIX-specific configuration file (specification only). */
+/* */
+/* Copyright 1996-2000, 2002 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* This header file contains a number of macro definitions that are used */
+ /* by the rest of the engine. Most of the macros here are automatically */
+ /* determined at compile time, and you should not need to change it to */
+ /* port FreeType, except to compile the library with a non-ANSI */
+ /* compiler. */
+ /* */
+ /* Note however that if some specific modifications are needed, we */
+ /* advise you to place a modified copy in your build directory. */
+ /* */
+ /* The build directory is usually `freetype/builds/<system>', and */
+ /* contains system-specific files that are always included first when */
+ /* building the library. */
+ /* */
+ /*************************************************************************/
+
+
+#ifndef __FTCONFIG_H__
+#define __FTCONFIG_H__
+
+#include <ft2build.h>
+#include FT_CONFIG_OPTIONS_H
+#include FT_CONFIG_STANDARD_LIBRARY_H
+
+
+FT_BEGIN_HEADER
+
+
+ /*************************************************************************/
+ /* */
+ /* PLATFORM-SPECIFIC CONFIGURATION MACROS */
+ /* */
+ /* These macros can be toggled to suit a specific system. The current */
+ /* ones are defaults used to compile FreeType in an ANSI C environment */
+ /* (16bit compilers are also supported). Copy this file to your own */
+ /* `freetype/builds/<system>' directory, and edit it to port the engine. */
+ /* */
+ /*************************************************************************/
+
+
+#define HAVE_UNISTD_H 1
+#define HAVE_FCNTL_H 1
+
+#define SIZEOF_INT 4
+#define SIZEOF_LONG 4
+
+#define FT_SIZEOF_INT SIZEOF_INT
+#define FT_SIZEOF_LONG SIZEOF_LONG
+
+
+ /* Preferred alignment of data */
+#define FT_ALIGNMENT 8
+
+
+ /* FT_UNUSED is a macro used to indicate that a given parameter is not */
+ /* used -- this is only used to get rid of unpleasant compiler warnings */
+#ifndef FT_UNUSED
+#define FT_UNUSED( arg ) ( (arg) = (arg) )
+#endif
+
+
+ /*************************************************************************/
+ /* */
+ /* AUTOMATIC CONFIGURATION MACROS */
+ /* */
+ /* These macros are computed from the ones defined above. Don't touch */
+ /* their definition, unless you know precisely what you are doing. No */
+ /* porter should need to mess with them. */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* IntN types */
+ /* */
+ /* Used to guarantee the size of some specific integers. */
+ /* */
+ typedef signed short FT_Int16;
+ typedef unsigned short FT_UInt16;
+
+#if FT_SIZEOF_INT == 4
+
+ typedef signed int FT_Int32;
+ typedef unsigned int FT_UInt32;
+
+#elif FT_SIZEOF_LONG == 4
+
+ typedef signed long FT_Int32;
+ typedef unsigned long FT_UInt32;
+
+#else
+#error "no 32bit type found -- please check your configuration files"
+#endif
+
+#if FT_SIZEOF_LONG == 8
+
+ /* FT_LONG64 must be defined if a 64-bit type is available */
+#define FT_LONG64
+#define FT_INT64 long
+
+#else
+
+ /*************************************************************************/
+ /* */
+ /* Many compilers provide the non-ANSI `long long' 64-bit type. You can */
+ /* activate it by defining the FTCALC_USE_LONG_LONG macro in */
+ /* `ftoption.h'. */
+ /* */
+ /* Note that this will produce many -ansi warnings during library */
+ /* compilation, and that in many cases, the generated code will be */
+ /* neither smaller nor faster! */
+ /* */
+#ifdef FTCALC_USE_LONG_LONG
+
+#define FT_LONG64
+#define FT_INT64 long long
+
+#endif /* FTCALC_USE_LONG_LONG */
+#endif /* FT_SIZEOF_LONG == 8 */
+
+
+#ifdef FT_MAKE_OPTION_SINGLE_OBJECT
+
+#define FT_LOCAL( x ) static x
+#define FT_LOCAL_DEF( x ) static x
+
+#else
+
+#ifdef __cplusplus
+#define FT_LOCAL( x ) extern "C" x
+#define FT_LOCAL_DEF( x ) extern "C" x
+#else
+#define FT_LOCAL( x ) extern x
+#define FT_LOCAL_DEF( x ) extern x
+#endif
+
+#endif /* FT_MAKE_OPTION_SINGLE_OBJECT */
+
+
+#ifndef FT_BASE
+
+#ifdef __cplusplus
+#define FT_BASE( x ) extern "C" x
+#else
+#define FT_BASE( x ) extern x
+#endif
+
+#endif /* !FT_BASE */
+
+
+#ifndef FT_BASE_DEF
+
+#ifdef __cplusplus
+#define FT_BASE_DEF( x ) extern "C" x
+#else
+#define FT_BASE_DEF( x ) extern x
+#endif
+
+#endif /* !FT_BASE_DEF */
+
+
+#ifndef FT_EXPORT
+
+#ifdef __cplusplus
+#define FT_EXPORT( x ) extern "C" x
+#else
+#define FT_EXPORT( x ) extern x
+#endif
+
+#endif /* !FT_EXPORT */
+
+
+#ifndef FT_EXPORT_DEF
+
+#ifdef __cplusplus
+#define FT_EXPORT_DEF( x ) extern "C" x
+#else
+#define FT_EXPORT_DEF( x ) extern x
+#endif
+
+#endif /* !FT_EXPORT_DEF */
+
+
+#ifndef FT_EXPORT_VAR
+
+#ifdef __cplusplus
+#define FT_EXPORT_VAR( x ) extern "C" x
+#else
+#define FT_EXPORT_VAR( x ) extern x
+#endif
+
+#endif /* !FT_EXPORT_VAR */
+
+ /* The following macros are needed to compile the library with a */
+ /* C++ compiler and with 16bit compilers. */
+ /* */
+
+ /* This is special. Within C++, you must specify `extern "C"' for */
+ /* functions which are used via function pointers, and you also */
+ /* must do that for structures which contain function pointers to */
+ /* assure C linkage -- it's not possible to have (local) anonymous */
+ /* functions which are accessed by (global) function pointers. */
+ /* */
+ /* */
+ /* FT_CALLBACK_DEF is used to _define_ a callback function. */
+ /* */
+ /* FT_CALLBACK_TABLE is used to _declare_ a constant variable that */
+ /* contains pointers to callback functions. */
+ /* */
+ /* FT_CALLBACK_TABLE_DEF is used to _define_ a constant variable */
+ /* that contains pointers to callback functions. */
+ /* */
+ /* */
+ /* Some 16bit compilers have to redefine these macros to insert */
+ /* the infamous `_cdecl' or `__fastcall' declarations. */
+ /* */
+#ifndef FT_CALLBACK_DEF
+#ifdef __cplusplus
+#define FT_CALLBACK_DEF( x ) extern "C" x
+#else
+#define FT_CALLBACK_DEF( x ) static x
+#endif
+#endif /* FT_CALLBACK_DEF */
+
+#ifndef FT_CALLBACK_TABLE
+#ifdef __cplusplus
+#define FT_CALLBACK_TABLE extern "C"
+#define FT_CALLBACK_TABLE_DEF extern "C"
+#else
+#define FT_CALLBACK_TABLE extern
+#define FT_CALLBACK_TABLE_DEF /* nothing */
+#endif
+#endif /* FT_CALLBACK_TABLE */
+
+
+FT_END_HEADER
+
+#endif /* __FTCONFIG_H__ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/builds/unix/ftconfig.in b/src/3rdparty/freetype/builds/unix/ftconfig.in
new file mode 100644
index 0000000..1a96264
--- /dev/null
+++ b/src/3rdparty/freetype/builds/unix/ftconfig.in
@@ -0,0 +1,349 @@
+/***************************************************************************/
+/* */
+/* ftconfig.in */
+/* */
+/* UNIX-specific configuration file (specification only). */
+/* */
+/* Copyright 1996-2001, 2002, 2003, 2004, 2006, 2007 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* This header file contains a number of macro definitions that are used */
+ /* by the rest of the engine. Most of the macros here are automatically */
+ /* determined at compile time, and you should not need to change it to */
+ /* port FreeType, except to compile the library with a non-ANSI */
+ /* compiler. */
+ /* */
+ /* Note however that if some specific modifications are needed, we */
+ /* advise you to place a modified copy in your build directory. */
+ /* */
+ /* The build directory is usually `freetype/builds/<system>', and */
+ /* contains system-specific files that are always included first when */
+ /* building the library. */
+ /* */
+ /*************************************************************************/
+
+
+#ifndef __FTCONFIG_H__
+#define __FTCONFIG_H__
+
+#include <ft2build.h>
+#include FT_CONFIG_OPTIONS_H
+#include FT_CONFIG_STANDARD_LIBRARY_H
+
+
+FT_BEGIN_HEADER
+
+
+ /*************************************************************************/
+ /* */
+ /* PLATFORM-SPECIFIC CONFIGURATION MACROS */
+ /* */
+ /* These macros can be toggled to suit a specific system. The current */
+ /* ones are defaults used to compile FreeType in an ANSI C environment */
+ /* (16bit compilers are also supported). Copy this file to your own */
+ /* `freetype/builds/<system>' directory, and edit it to port the engine. */
+ /* */
+ /*************************************************************************/
+
+
+#undef HAVE_UNISTD_H
+#undef HAVE_FCNTL_H
+
+#undef SIZEOF_INT
+#undef SIZEOF_LONG
+
+
+#define FT_SIZEOF_INT SIZEOF_INT
+#define FT_SIZEOF_LONG SIZEOF_LONG
+
+#define FT_CHAR_BIT CHAR_BIT
+
+ /* Preferred alignment of data */
+#define FT_ALIGNMENT 8
+
+
+ /* FT_UNUSED is a macro used to indicate that a given parameter is not */
+ /* used -- this is only used to get rid of unpleasant compiler warnings */
+#ifndef FT_UNUSED
+#define FT_UNUSED( arg ) ( (arg) = (arg) )
+#endif
+
+
+ /*************************************************************************/
+ /* */
+ /* AUTOMATIC CONFIGURATION MACROS */
+ /* */
+ /* These macros are computed from the ones defined above. Don't touch */
+ /* their definition, unless you know precisely what you are doing. No */
+ /* porter should need to mess with them. */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* Mac support */
+ /* */
+ /* This is the only necessary change, so it is defined here instead */
+ /* providing a new configuration file. */
+ /* */
+#if ( defined( __APPLE__ ) && !defined( DARWIN_NO_CARBON ) ) || \
+ ( defined( __MWERKS__ ) && defined( macintosh ) )
+ /* no Carbon frameworks for 64bit 10.4.x */
+#include "AvailabilityMacros.h"
+#if defined( __LP64__ ) && \
+ ( MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 )
+#define DARWIN_NO_CARBON 1
+#else
+#define FT_MACINTOSH 1
+#endif
+#endif
+
+
+ /* Fix compiler warning with sgi compiler */
+#if defined( __sgi ) && !defined( __GNUC__ )
+#if defined( _COMPILER_VERSION ) && ( _COMPILER_VERSION >= 730 )
+#pragma set woff 3505
+#endif
+#endif
+
+
+ /*************************************************************************/
+ /* */
+ /* IntN types */
+ /* */
+ /* Used to guarantee the size of some specific integers. */
+ /* */
+ typedef signed short FT_Int16;
+ typedef unsigned short FT_UInt16;
+
+#if FT_SIZEOF_INT == 4
+
+ typedef signed int FT_Int32;
+ typedef unsigned int FT_UInt32;
+
+#elif FT_SIZEOF_LONG == 4
+
+ typedef signed long FT_Int32;
+ typedef unsigned long FT_UInt32;
+
+#else
+#error "no 32bit type found -- please check your configuration files"
+#endif
+
+
+ /* look up an integer type that is at least 32 bits */
+#if FT_SIZEOF_INT >= 4
+
+ typedef int FT_Fast;
+ typedef unsigned int FT_UFast;
+
+#elif FT_SIZEOF_LONG >= 4
+
+ typedef long FT_Fast;
+ typedef unsigned long FT_UFast;
+
+#endif
+
+
+ /* determine whether we have a 64-bit int type for platforms without */
+ /* Autoconf */
+#if FT_SIZEOF_LONG == 8
+
+ /* FT_LONG64 must be defined if a 64-bit type is available */
+#define FT_LONG64
+#define FT_INT64 long
+
+#elif defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */
+
+ /* this compiler provides the __int64 type */
+#define FT_LONG64
+#define FT_INT64 __int64
+
+#elif defined( __BORLANDC__ ) /* Borland C++ */
+
+ /* XXXX: We should probably check the value of __BORLANDC__ in order */
+ /* to test the compiler version. */
+
+ /* this compiler provides the __int64 type */
+#define FT_LONG64
+#define FT_INT64 __int64
+
+#elif defined( __WATCOMC__ ) /* Watcom C++ */
+
+ /* Watcom doesn't provide 64-bit data types */
+
+#elif defined( __MWERKS__ ) /* Metrowerks CodeWarrior */
+
+#define FT_LONG64
+#define FT_INT64 long long int
+
+#elif defined( __GNUC__ )
+
+ /* GCC provides the `long long' type */
+#define FT_LONG64
+#define FT_INT64 long long int
+
+#endif /* FT_SIZEOF_LONG == 8 */
+
+
+#define FT_BEGIN_STMNT do {
+#define FT_END_STMNT } while ( 0 )
+#define FT_DUMMY_STMNT FT_BEGIN_STMNT FT_END_STMNT
+
+
+ /*************************************************************************/
+ /* */
+ /* A 64-bit data type will create compilation problems if you compile */
+ /* in strict ANSI mode. To avoid them, we disable their use if */
+ /* __STDC__ is defined. You can however ignore this rule by */
+ /* defining the FT_CONFIG_OPTION_FORCE_INT64 configuration macro. */
+ /* */
+#if defined( FT_LONG64 ) && !defined( FT_CONFIG_OPTION_FORCE_INT64 )
+
+#ifdef __STDC__
+
+ /* Undefine the 64-bit macros in strict ANSI compilation mode. */
+ /* Since `#undef' doesn't survive in configuration header files */
+ /* we use the postprocessing facility of AC_CONFIG_HEADERS to */
+ /* replace the leading `/' with `#'. */
+/undef FT_LONG64
+/undef FT_INT64
+
+#endif /* __STDC__ */
+
+#endif /* FT_LONG64 && !FT_CONFIG_OPTION_FORCE_INT64 */
+
+
+#ifdef FT_MAKE_OPTION_SINGLE_OBJECT
+
+#define FT_LOCAL( x ) static x
+#define FT_LOCAL_DEF( x ) static x
+
+#else
+
+#ifdef __cplusplus
+#define FT_LOCAL( x ) extern "C" x
+#define FT_LOCAL_DEF( x ) extern "C" x
+#else
+#define FT_LOCAL( x ) extern x
+#define FT_LOCAL_DEF( x ) x
+#endif
+
+#endif /* FT_MAKE_OPTION_SINGLE_OBJECT */
+
+
+#ifndef FT_BASE
+
+#ifdef __cplusplus
+#define FT_BASE( x ) extern "C" x
+#else
+#define FT_BASE( x ) extern x
+#endif
+
+#endif /* !FT_BASE */
+
+
+#ifndef FT_BASE_DEF
+
+#ifdef __cplusplus
+#define FT_BASE_DEF( x ) x
+#else
+#define FT_BASE_DEF( x ) x
+#endif
+
+#endif /* !FT_BASE_DEF */
+
+
+#ifndef FT_EXPORT
+
+#ifdef __cplusplus
+#define FT_EXPORT( x ) extern "C" x
+#else
+#define FT_EXPORT( x ) extern x
+#endif
+
+#endif /* !FT_EXPORT */
+
+
+#ifndef FT_EXPORT_DEF
+
+#ifdef __cplusplus
+#define FT_EXPORT_DEF( x ) extern "C" x
+#else
+#define FT_EXPORT_DEF( x ) extern x
+#endif
+
+#endif /* !FT_EXPORT_DEF */
+
+
+#ifndef FT_EXPORT_VAR
+
+#ifdef __cplusplus
+#define FT_EXPORT_VAR( x ) extern "C" x
+#else
+#define FT_EXPORT_VAR( x ) extern x
+#endif
+
+#endif /* !FT_EXPORT_VAR */
+
+ /* The following macros are needed to compile the library with a */
+ /* C++ compiler and with 16bit compilers. */
+ /* */
+
+ /* This is special. Within C++, you must specify `extern "C"' for */
+ /* functions which are used via function pointers, and you also */
+ /* must do that for structures which contain function pointers to */
+ /* assure C linkage -- it's not possible to have (local) anonymous */
+ /* functions which are accessed by (global) function pointers. */
+ /* */
+ /* */
+ /* FT_CALLBACK_DEF is used to _define_ a callback function. */
+ /* */
+ /* FT_CALLBACK_TABLE is used to _declare_ a constant variable that */
+ /* contains pointers to callback functions. */
+ /* */
+ /* FT_CALLBACK_TABLE_DEF is used to _define_ a constant variable */
+ /* that contains pointers to callback functions. */
+ /* */
+ /* */
+ /* Some 16bit compilers have to redefine these macros to insert */
+ /* the infamous `_cdecl' or `__fastcall' declarations. */
+ /* */
+#ifndef FT_CALLBACK_DEF
+#ifdef __cplusplus
+#define FT_CALLBACK_DEF( x ) extern "C" x
+#else
+#define FT_CALLBACK_DEF( x ) static x
+#endif
+#endif /* FT_CALLBACK_DEF */
+
+#ifndef FT_CALLBACK_TABLE
+#ifdef __cplusplus
+#define FT_CALLBACK_TABLE extern "C"
+#define FT_CALLBACK_TABLE_DEF extern "C"
+#else
+#define FT_CALLBACK_TABLE extern
+#define FT_CALLBACK_TABLE_DEF /* nothing */
+#endif
+#endif /* FT_CALLBACK_TABLE */
+
+
+FT_END_HEADER
+
+
+#endif /* __FTCONFIG_H__ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/builds/unix/ftsystem.c b/src/3rdparty/freetype/builds/unix/ftsystem.c
new file mode 100644
index 0000000..3a740fd
--- /dev/null
+++ b/src/3rdparty/freetype/builds/unix/ftsystem.c
@@ -0,0 +1,414 @@
+/***************************************************************************/
+/* */
+/* ftsystem.c */
+/* */
+/* Unix-specific FreeType low-level system interface (body). */
+/* */
+/* Copyright 1996-2001, 2002, 2004, 2005, 2006, 2007 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#include <ft2build.h>
+ /* we use our special ftconfig.h file, not the standard one */
+#include <ftconfig.h>
+#include FT_INTERNAL_DEBUG_H
+#include FT_SYSTEM_H
+#include FT_ERRORS_H
+#include FT_TYPES_H
+#include FT_INTERNAL_STREAM_H
+
+ /* memory-mapping includes and definitions */
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <sys/mman.h>
+#ifndef MAP_FILE
+#define MAP_FILE 0x00
+#endif
+
+#ifdef MUNMAP_USES_VOIDP
+#define MUNMAP_ARG_CAST void *
+#else
+#define MUNMAP_ARG_CAST char *
+#endif
+
+#ifdef NEED_MUNMAP_DECL
+
+#ifdef __cplusplus
+ extern "C"
+#else
+ extern
+#endif
+ int
+ munmap( char* addr,
+ int len );
+
+#define MUNMAP_ARG_CAST char *
+
+#endif /* NEED_DECLARATION_MUNMAP */
+
+
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+
+
+ /*************************************************************************/
+ /* */
+ /* MEMORY MANAGEMENT INTERFACE */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* ft_alloc */
+ /* */
+ /* <Description> */
+ /* The memory allocation function. */
+ /* */
+ /* <Input> */
+ /* memory :: A pointer to the memory object. */
+ /* */
+ /* size :: The requested size in bytes. */
+ /* */
+ /* <Return> */
+ /* The address of newly allocated block. */
+ /* */
+ FT_CALLBACK_DEF( void* )
+ ft_alloc( FT_Memory memory,
+ long size )
+ {
+ FT_UNUSED( memory );
+
+ return malloc( size );
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* ft_realloc */
+ /* */
+ /* <Description> */
+ /* The memory reallocation function. */
+ /* */
+ /* <Input> */
+ /* memory :: A pointer to the memory object. */
+ /* */
+ /* cur_size :: The current size of the allocated memory block. */
+ /* */
+ /* new_size :: The newly requested size in bytes. */
+ /* */
+ /* block :: The current address of the block in memory. */
+ /* */
+ /* <Return> */
+ /* The address of the reallocated memory block. */
+ /* */
+ FT_CALLBACK_DEF( void* )
+ ft_realloc( FT_Memory memory,
+ long cur_size,
+ long new_size,
+ void* block )
+ {
+ FT_UNUSED( memory );
+ FT_UNUSED( cur_size );
+
+ return realloc( block, new_size );
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* ft_free */
+ /* */
+ /* <Description> */
+ /* The memory release function. */
+ /* */
+ /* <Input> */
+ /* memory :: A pointer to the memory object. */
+ /* */
+ /* block :: The address of block in memory to be freed. */
+ /* */
+ FT_CALLBACK_DEF( void )
+ ft_free( FT_Memory memory,
+ void* block )
+ {
+ FT_UNUSED( memory );
+
+ free( block );
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* RESOURCE MANAGEMENT INTERFACE */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
+ /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
+ /* messages during execution. */
+ /* */
+#undef FT_COMPONENT
+#define FT_COMPONENT trace_io
+
+ /* We use the macro STREAM_FILE for convenience to extract the */
+ /* system-specific stream handle from a given FreeType stream object */
+#define STREAM_FILE( stream ) ( (FILE*)stream->descriptor.pointer )
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* ft_close_stream_by_munmap */
+ /* */
+ /* <Description> */
+ /* The function to close a stream which is opened by mmap. */
+ /* */
+ /* <Input> */
+ /* stream :: A pointer to the stream object. */
+ /* */
+ FT_CALLBACK_DEF( void )
+ ft_close_stream_by_munmap( FT_Stream stream )
+ {
+ munmap( (MUNMAP_ARG_CAST)stream->descriptor.pointer, stream->size );
+
+ stream->descriptor.pointer = NULL;
+ stream->size = 0;
+ stream->base = 0;
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* ft_close_stream_by_free */
+ /* */
+ /* <Description> */
+ /* The function to close a stream which is created by ft_alloc. */
+ /* */
+ /* <Input> */
+ /* stream :: A pointer to the stream object. */
+ /* */
+ FT_CALLBACK_DEF( void )
+ ft_close_stream_by_free( FT_Stream stream )
+ {
+ ft_free( NULL, stream->descriptor.pointer );
+
+ stream->descriptor.pointer = NULL;
+ stream->size = 0;
+ stream->base = 0;
+ }
+
+
+ /* documentation is in ftobjs.h */
+
+ FT_BASE_DEF( FT_Error )
+ FT_Stream_Open( FT_Stream stream,
+ const char* filepathname )
+ {
+ int file;
+ struct stat stat_buf;
+
+
+ if ( !stream )
+ return FT_Err_Invalid_Stream_Handle;
+
+ /* open the file */
+ file = open( filepathname, O_RDONLY );
+ if ( file < 0 )
+ {
+ FT_ERROR(( "FT_Stream_Open:" ));
+ FT_ERROR(( " could not open `%s'\n", filepathname ));
+ return FT_Err_Cannot_Open_Resource;
+ }
+
+ /* Here we ensure that a "fork" will _not_ duplicate */
+ /* our opened input streams on Unix. This is critical */
+ /* since it avoids some (possible) access control */
+ /* issues and cleans up the kernel file table a bit. */
+ /* */
+#ifdef F_SETFD
+#ifdef FD_CLOEXEC
+ (void)fcntl( file, F_SETFD, FD_CLOEXEC );
+#else
+ (void)fcntl( file, F_SETFD, 1 );
+#endif /* FD_CLOEXEC */
+#endif /* F_SETFD */
+
+ if ( fstat( file, &stat_buf ) < 0 )
+ {
+ FT_ERROR(( "FT_Stream_Open:" ));
+ FT_ERROR(( " could not `fstat' file `%s'\n", filepathname ));
+ goto Fail_Map;
+ }
+
+ /* XXX: TODO -- real 64bit platform support */
+ /* */
+ /* `stream->size' is typedef'd to unsigned long (in */
+ /* freetype/ftsystem.h); `stat_buf.st_size', however, is usually */
+ /* typedef'd to off_t (in sys/stat.h). */
+ /* On some platforms, the former is 32bit and the latter is 64bit. */
+ /* To avoid overflow caused by fonts in huge files larger than */
+ /* 2GB, do a test. Temporary fix proposed by Sean McBride. */
+ /* */
+ if ( stat_buf.st_size > LONG_MAX )
+ {
+ FT_ERROR(( "FT_Stream_Open: file is too big" ));
+ goto Fail_Map;
+ }
+
+ /* This cast potentially truncates a 64bit to 32bit! */
+ stream->size = (unsigned long)stat_buf.st_size;
+ stream->pos = 0;
+ stream->base = (unsigned char *)mmap( NULL,
+ stream->size,
+ PROT_READ,
+ MAP_FILE | MAP_PRIVATE,
+ file,
+ 0 );
+
+ /* on some RTOS, mmap might return 0 */
+ if ( (long)stream->base != -1 && stream->base != NULL )
+ stream->close = ft_close_stream_by_munmap;
+ else
+ {
+ ssize_t total_read_count;
+
+
+ FT_ERROR(( "FT_Stream_Open:" ));
+ FT_ERROR(( " could not `mmap' file `%s'\n", filepathname ));
+
+ stream->base = (unsigned char*)ft_alloc( NULL, stream->size );
+
+ if ( !stream->base )
+ {
+ FT_ERROR(( "FT_Stream_Open:" ));
+ FT_ERROR(( " could not `alloc' memory\n" ));
+ goto Fail_Map;
+ }
+
+ total_read_count = 0;
+ do {
+ ssize_t read_count;
+
+
+ read_count = read( file,
+ stream->base + total_read_count,
+ stream->size - total_read_count );
+
+ if ( read_count <= 0 )
+ {
+ if ( read_count == -1 && errno == EINTR )
+ continue;
+
+ FT_ERROR(( "FT_Stream_Open:" ));
+ FT_ERROR(( " error while `read'ing file `%s'\n", filepathname ));
+ goto Fail_Read;
+ }
+
+ total_read_count += read_count;
+
+ } while ( (unsigned long)total_read_count != stream->size );
+
+ stream->close = ft_close_stream_by_free;
+ }
+
+ close( file );
+
+ stream->descriptor.pointer = stream->base;
+ stream->pathname.pointer = (char*)filepathname;
+
+ stream->read = 0;
+
+ FT_TRACE1(( "FT_Stream_Open:" ));
+ FT_TRACE1(( " opened `%s' (%d bytes) successfully\n",
+ filepathname, stream->size ));
+
+ return FT_Err_Ok;
+
+ Fail_Read:
+ ft_free( NULL, stream->base );
+
+ Fail_Map:
+ close( file );
+
+ stream->base = NULL;
+ stream->size = 0;
+ stream->pos = 0;
+
+ return FT_Err_Cannot_Open_Stream;
+ }
+
+
+#ifdef FT_DEBUG_MEMORY
+
+ extern FT_Int
+ ft_mem_debug_init( FT_Memory memory );
+
+ extern void
+ ft_mem_debug_done( FT_Memory memory );
+
+#endif
+
+
+ /* documentation is in ftobjs.h */
+
+ FT_BASE_DEF( FT_Memory )
+ FT_New_Memory( void )
+ {
+ FT_Memory memory;
+
+
+ memory = (FT_Memory)malloc( sizeof ( *memory ) );
+ if ( memory )
+ {
+ memory->user = 0;
+ memory->alloc = ft_alloc;
+ memory->realloc = ft_realloc;
+ memory->free = ft_free;
+#ifdef FT_DEBUG_MEMORY
+ ft_mem_debug_init( memory );
+#endif
+ }
+
+ return memory;
+ }
+
+
+ /* documentation is in ftobjs.h */
+
+ FT_BASE_DEF( void )
+ FT_Done_Memory( FT_Memory memory )
+ {
+#ifdef FT_DEBUG_MEMORY
+ ft_mem_debug_done( memory );
+#endif
+ memory->free( memory, memory );
+ }
+
+
+/* END */
diff --git a/src/3rdparty/freetype/builds/unix/install-sh b/src/3rdparty/freetype/builds/unix/install-sh
new file mode 100755
index 0000000..a5897de
--- /dev/null
+++ b/src/3rdparty/freetype/builds/unix/install-sh
@@ -0,0 +1,519 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2006-12-25.00
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# 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
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+
+nl='
+'
+IFS=" "" $nl"
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit=${DOITPROG-}
+if test -z "$doit"; then
+ doit_exec=exec
+else
+ doit_exec=$doit
+fi
+
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+chgrpprog=${CHGRPPROG-chgrp}
+chmodprog=${CHMODPROG-chmod}
+chownprog=${CHOWNPROG-chown}
+cmpprog=${CMPPROG-cmp}
+cpprog=${CPPROG-cp}
+mkdirprog=${MKDIRPROG-mkdir}
+mvprog=${MVPROG-mv}
+rmprog=${RMPROG-rm}
+stripprog=${STRIPPROG-strip}
+
+posix_glob='?'
+initialize_posix_glob='
+ test "$posix_glob" != "?" || {
+ if (set -f) 2>/dev/null; then
+ posix_glob=
+ else
+ posix_glob=:
+ fi
+ }
+'
+
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+chgrpcmd=
+chmodcmd=$chmodprog
+chowncmd=
+mvcmd=$mvprog
+rmcmd="$rmprog -f"
+stripcmd=
+
+src=
+dst=
+dir_arg=
+dst_arg=
+
+copy_on_change=false
+no_target_directory=
+
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+ or: $0 [OPTION]... SRCFILES... DIRECTORY
+ or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+ or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+ --help display this help and exit.
+ --version display version info and exit.
+
+ -c (ignored)
+ -C install only if different (preserve the last data modification time)
+ -d create directories instead of installing files.
+ -g GROUP $chgrpprog installed files to GROUP.
+ -m MODE $chmodprog installed files to MODE.
+ -o USER $chownprog installed files to USER.
+ -s $stripprog installed files.
+ -t DIRECTORY install into DIRECTORY.
+ -T report an error if DSTFILE is a directory.
+
+Environment variables override the default commands:
+ CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+ RMPROG STRIPPROG
+"
+
+while test $# -ne 0; do
+ case $1 in
+ -c) ;;
+
+ -C) copy_on_change=true;;
+
+ -d) dir_arg=true;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+ shift;;
+
+ --help) echo "$usage"; exit $?;;
+
+ -m) mode=$2
+ case $mode in
+ *' '* | *' '* | *'
+'* | *'*'* | *'?'* | *'['*)
+ echo "$0: invalid mode: $mode" >&2
+ exit 1;;
+ esac
+ shift;;
+
+ -o) chowncmd="$chownprog $2"
+ shift;;
+
+ -s) stripcmd=$stripprog;;
+
+ -t) dst_arg=$2
+ shift;;
+
+ -T) no_target_directory=true;;
+
+ --version) echo "$0 $scriptversion"; exit $?;;
+
+ --) shift
+ break;;
+
+ -*) echo "$0: invalid option: $1" >&2
+ exit 1;;
+
+ *) break;;
+ esac
+ shift
+done
+
+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
+ # When -d is used, all remaining arguments are directories to create.
+ # When -t is used, the destination is already specified.
+ # Otherwise, the last argument is the destination. Remove it from $@.
+ for arg
+ do
+ if test -n "$dst_arg"; then
+ # $@ is not empty: it contains at least $arg.
+ set fnord "$@" "$dst_arg"
+ shift # fnord
+ fi
+ shift # arg
+ dst_arg=$arg
+ done
+fi
+
+if test $# -eq 0; then
+ if test -z "$dir_arg"; then
+ echo "$0: no input file specified." >&2
+ exit 1
+ fi
+ # It's OK to call `install-sh -d' without argument.
+ # This can happen when creating conditional directories.
+ exit 0
+fi
+
+if test -z "$dir_arg"; then
+ trap '(exit $?); exit' 1 2 13 15
+
+ # Set umask so as not to create temps with too-generous modes.
+ # However, 'strip' requires both read and write access to temps.
+ case $mode in
+ # Optimize common cases.
+ *644) cp_umask=133;;
+ *755) cp_umask=22;;
+
+ *[0-7])
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw='% 200'
+ fi
+ cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+ *)
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw=,u+rw
+ fi
+ cp_umask=$mode$u_plus_rw;;
+ esac
+fi
+
+for src
+do
+ # Protect names starting with `-'.
+ case $src in
+ -*) src=./$src;;
+ esac
+
+ if test -n "$dir_arg"; then
+ dst=$src
+ dstdir=$dst
+ test -d "$dstdir"
+ dstdir_status=$?
+ else
+
+ # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+ # might cause directories to be created, which would be especially bad
+ # if $src (and thus $dsttmp) contains '*'.
+ if test ! -f "$src" && test ! -d "$src"; then
+ echo "$0: $src does not exist." >&2
+ exit 1
+ fi
+
+ if test -z "$dst_arg"; then
+ echo "$0: no destination specified." >&2
+ exit 1
+ fi
+
+ dst=$dst_arg
+ # Protect names starting with `-'.
+ case $dst in
+ -*) dst=./$dst;;
+ esac
+
+ # If destination is a directory, append the input filename; won't work
+ # if double slashes aren't ignored.
+ if test -d "$dst"; then
+ if test -n "$no_target_directory"; then
+ echo "$0: $dst_arg: Is a directory" >&2
+ exit 1
+ fi
+ dstdir=$dst
+ dst=$dstdir/`basename "$src"`
+ dstdir_status=0
+ else
+ # Prefer dirname, but fall back on a substitute if dirname fails.
+ dstdir=`
+ (dirname "$dst") 2>/dev/null ||
+ expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$dst" : 'X\(//\)[^/]' \| \
+ X"$dst" : 'X\(//\)$' \| \
+ X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+ echo X"$dst" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'
+ `
+
+ test -d "$dstdir"
+ dstdir_status=$?
+ fi
+ fi
+
+ obsolete_mkdir_used=false
+
+ if test $dstdir_status != 0; then
+ case $posix_mkdir in
+ '')
+ # Create intermediate dirs using mode 755 as modified by the umask.
+ # This is like FreeBSD 'install' as of 1997-10-28.
+ umask=`umask`
+ case $stripcmd.$umask in
+ # Optimize common cases.
+ *[2367][2367]) mkdir_umask=$umask;;
+ .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+ *[0-7])
+ mkdir_umask=`expr $umask + 22 \
+ - $umask % 100 % 40 + $umask % 20 \
+ - $umask % 10 % 4 + $umask % 2
+ `;;
+ *) mkdir_umask=$umask,go-w;;
+ esac
+
+ # With -d, create the new directory with the user-specified mode.
+ # Otherwise, rely on $mkdir_umask.
+ if test -n "$dir_arg"; then
+ mkdir_mode=-m$mode
+ else
+ mkdir_mode=
+ fi
+
+ posix_mkdir=false
+ case $umask in
+ *[123567][0-7][0-7])
+ # POSIX mkdir -p sets u+wx bits regardless of umask, which
+ # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+ ;;
+ *)
+ tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+ if (umask $mkdir_umask &&
+ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+ then
+ if test -z "$dir_arg" || {
+ # Check for POSIX incompatibilities with -m.
+ # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+ # other-writeable bit of parent directory when it shouldn't.
+ # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+ ls_ld_tmpdir=`ls -ld "$tmpdir"`
+ case $ls_ld_tmpdir in
+ d????-?r-*) different_mode=700;;
+ d????-?--*) different_mode=755;;
+ *) false;;
+ esac &&
+ $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+ ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+ test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+ }
+ }
+ then posix_mkdir=:
+ fi
+ rmdir "$tmpdir/d" "$tmpdir"
+ else
+ # Remove any dirs left behind by ancient mkdir implementations.
+ rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+ fi
+ trap '' 0;;
+ esac;;
+ esac
+
+ if
+ $posix_mkdir && (
+ umask $mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+ )
+ then :
+ else
+
+ # The umask is ridiculous, or mkdir does not conform to POSIX,
+ # or it failed possibly due to a race condition. Create the
+ # directory the slow way, step by step, checking for races as we go.
+
+ case $dstdir in
+ /*) prefix='/';;
+ -*) prefix='./';;
+ *) prefix='';;
+ esac
+
+ eval "$initialize_posix_glob"
+
+ oIFS=$IFS
+ IFS=/
+ $posix_glob set -f
+ set fnord $dstdir
+ shift
+ $posix_glob set +f
+ IFS=$oIFS
+
+ prefixes=
+
+ for d
+ do
+ test -z "$d" && continue
+
+ prefix=$prefix$d
+ if test -d "$prefix"; then
+ prefixes=
+ else
+ if $posix_mkdir; then
+ (umask=$mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+ # Don't fail if two instances are running concurrently.
+ test -d "$prefix" || exit 1
+ else
+ case $prefix in
+ *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) qprefix=$prefix;;
+ esac
+ prefixes="$prefixes '$qprefix'"
+ fi
+ fi
+ prefix=$prefix/
+ done
+
+ if test -n "$prefixes"; then
+ # Don't fail if two instances are running concurrently.
+ (umask $mkdir_umask &&
+ eval "\$doit_exec \$mkdirprog $prefixes") ||
+ test -d "$dstdir" || exit 1
+ obsolete_mkdir_used=true
+ fi
+ fi
+ fi
+
+ if test -n "$dir_arg"; then
+ { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+ { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+ else
+
+ # Make a couple of temp file names in the proper directory.
+ dsttmp=$dstdir/_inst.$$_
+ rmtmp=$dstdir/_rm.$$_
+
+ # Trap to clean up those temp files at exit.
+ trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+
+ # Copy the file name to the temp name.
+ (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+
+ # and set any options; do chmod last to preserve setuid bits.
+ #
+ # If any of these fail, we abort the whole thing. If we want to
+ # ignore errors from any of these, just make sure not to ignore
+ # errors from the above "$doit $cpprog $src $dsttmp" command.
+ #
+ { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+ { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+ { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+ # If -C, don't bother to copy if it wouldn't change the file.
+ if $copy_on_change &&
+ old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
+ new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
+
+ eval "$initialize_posix_glob" &&
+ $posix_glob set -f &&
+ set X $old && old=:$2:$4:$5:$6 &&
+ set X $new && new=:$2:$4:$5:$6 &&
+ $posix_glob set +f &&
+
+ test "$old" = "$new" &&
+ $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+ then
+ rm -f "$dsttmp"
+ else
+ # Rename the file to the real destination.
+ $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+
+ # The rename failed, perhaps because mv can't rename something else
+ # to itself, or perhaps because mv is so ancient that it does not
+ # support -f.
+ {
+ # Now remove or move aside any old file at destination location.
+ # We try this two ways since rm can't unlink itself on some
+ # systems and the destination file might be busy for other
+ # reasons. In this case, the final cleanup might fail but the new
+ # file should still install successfully.
+ {
+ test ! -f "$dst" ||
+ $doit $rmcmd -f "$dst" 2>/dev/null ||
+ { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+ { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+ } ||
+ { echo "$0: cannot unlink or rename $dst" >&2
+ (exit 1); exit 1
+ }
+ } &&
+
+ # Now rename the file to the real destination.
+ $doit $mvcmd "$dsttmp" "$dst"
+ }
+ fi || exit 1
+
+ trap '' 0
+ fi
+done
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/src/3rdparty/freetype/builds/unix/install.mk b/src/3rdparty/freetype/builds/unix/install.mk
new file mode 100644
index 0000000..2e5ef08
--- /dev/null
+++ b/src/3rdparty/freetype/builds/unix/install.mk
@@ -0,0 +1,97 @@
+#
+# FreeType 2 installation instructions for Unix systems
+#
+
+
+# Copyright 1996-2000, 2002, 2003, 2006 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+# If you say
+#
+# make install DESTDIR=/tmp/somewhere/
+#
+# don't forget the final backslash (this command is mainly for package
+# maintainers).
+
+
+.PHONY: install uninstall check
+
+# Unix installation and deinstallation targets.
+#
+# Note that we no longer install internal headers, and we remove any
+# `internal' subdirectory found in `$(includedir)/freetype2/freetype'.
+#
+install: $(PROJECT_LIBRARY)
+ $(MKINSTALLDIRS) $(DESTDIR)$(libdir) \
+ $(DESTDIR)$(libdir)/pkgconfig \
+ $(DESTDIR)$(includedir)/freetype2/freetype/config \
+ $(DESTDIR)$(includedir)/freetype2/freetype/cache \
+ $(DESTDIR)$(bindir) \
+ $(DESTDIR)$(datadir)/aclocal
+ $(LIBTOOL) --mode=install $(INSTALL) \
+ $(PROJECT_LIBRARY) $(DESTDIR)$(libdir)
+ -for P in $(PUBLIC_H) ; do \
+ $(INSTALL_DATA) \
+ $$P $(DESTDIR)$(includedir)/freetype2/freetype ; \
+ done
+ -for P in $(CONFIG_H) ; do \
+ $(INSTALL_DATA) \
+ $$P $(DESTDIR)$(includedir)/freetype2/freetype/config ; \
+ done
+ -$(DELETE) $(DESTDIR)$(includedir)/freetype2/freetype/cache/*
+ -$(DELDIR) $(DESTDIR)$(includedir)/freetype2/freetype/cache
+ -$(DELETE) $(DESTDIR)$(includedir)/freetype2/freetype/internal/*
+ -$(DELDIR) $(DESTDIR)$(includedir)/freetype2/freetype/internal
+ $(INSTALL_DATA) $(BUILD_DIR)/ft2unix.h \
+ $(DESTDIR)$(includedir)/ft2build.h
+ $(INSTALL_DATA) $(OBJ_BUILD)/ftconfig.h \
+ $(DESTDIR)$(includedir)/freetype2/freetype/config/ftconfig.h
+ $(INSTALL_DATA) $(OBJ_DIR)/ftmodule.h \
+ $(DESTDIR)$(includedir)/freetype2/freetype/config/ftmodule.h
+ $(INSTALL_SCRIPT) -m 755 $(OBJ_BUILD)/freetype-config \
+ $(DESTDIR)$(bindir)/freetype-config
+ $(INSTALL_SCRIPT) -m 644 $(BUILD_DIR)/freetype2.m4 \
+ $(DESTDIR)$(datadir)/aclocal/freetype2.m4
+ $(INSTALL_SCRIPT) -m 644 $(OBJ_BUILD)/freetype2.pc \
+ $(DESTDIR)$(libdir)/pkgconfig/freetype2.pc
+
+
+uninstall:
+ -$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/$(LIBRARY).$A
+ -$(DELETE) $(DESTDIR)$(includedir)/freetype2/freetype/config/*
+ -$(DELDIR) $(DESTDIR)$(includedir)/freetype2/freetype/config
+ -$(DELETE) $(DESTDIR)$(includedir)/freetype2/freetype/*
+ -$(DELDIR) $(DESTDIR)$(includedir)/freetype2/freetype
+ -$(DELDIR) $(DESTDIR)$(includedir)/freetype2
+ -$(DELETE) $(DESTDIR)$(includedir)/ft2build.h
+ -$(DELETE) $(DESTDIR)$(bindir)/freetype-config
+ -$(DELETE) $(DESTDIR)$(datadir)/aclocal/freetype2.m4
+ -$(DELETE) $(DESTDIR)$(libdir)/pkgconfig/freetype2.pc
+
+
+check:
+ @echo There is no validation suite for this package.
+
+
+.PHONY: clean_project_unix distclean_project_unix
+
+# Unix cleaning and distclean rules.
+#
+clean_project_unix:
+ -$(DELETE) $(BASE_OBJECTS) $(OBJ_M) $(OBJ_S)
+ -$(DELETE) $(patsubst %.$O,%.$(SO),$(BASE_OBJECTS) $(OBJ_M) $(OBJ_S)) \
+ $(CLEAN)
+
+distclean_project_unix: clean_project_unix
+ -$(DELETE) $(PROJECT_LIBRARY)
+ -$(DELETE) $(OBJ_DIR)/.libs/*
+ -$(DELDIR) $(OBJ_DIR)/.libs
+ -$(DELETE) *.orig *~ core *.core $(DISTCLEAN)
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/unix/ltmain.sh b/src/3rdparty/freetype/builds/unix/ltmain.sh
new file mode 100755
index 0000000..174e492
--- /dev/null
+++ b/src/3rdparty/freetype/builds/unix/ltmain.sh
@@ -0,0 +1,7874 @@
+# Generated from ltmain.m4sh.
+
+# ltmain.sh (GNU libtool) 2.2.4
+# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions. There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# GNU Libtool 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.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html,
+# or obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+# Usage: $progname [OPTION]... [MODE-ARG]...
+#
+# Provide generalized library-building support services.
+#
+# --config show all configuration variables
+# --debug enable verbose shell tracing
+# -n, --dry-run display commands without modifying any files
+# --features display basic configuration information and exit
+# --mode=MODE use operation mode MODE
+# --preserve-dup-deps don't remove duplicate dependency libraries
+# --quiet, --silent don't print informational messages
+# --tag=TAG use configuration variables from tag TAG
+# -v, --verbose print informational messages (default)
+# --version print version information
+# -h, --help print short or long help message
+#
+# MODE must be one of the following:
+#
+# clean remove files from the build directory
+# compile compile a source file into a libtool object
+# execute automatically set library path, then run a program
+# finish complete the installation of libtool libraries
+# install install libraries or executables
+# link create a library or an executable
+# uninstall remove libraries from an installed directory
+#
+# MODE-ARGS vary depending on the MODE.
+# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
+#
+# When reporting a bug, please describe a test case to reproduce it and
+# include the following information:
+#
+# host-triplet: $host
+# shell: $SHELL
+# compiler: $LTCC
+# compiler flags: $LTCFLAGS
+# linker: $LD (gnu? $with_gnu_ld)
+# $progname: (GNU libtool) 2.2.4
+# automake: $automake_version
+# autoconf: $autoconf_version
+#
+# Report bugs to <bug-libtool@gnu.org>.
+
+PROGRAM=ltmain.sh
+PACKAGE=libtool
+VERSION=2.2.4
+TIMESTAMP=""
+package_revision=1.2976
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# NLS nuisances: We save the old values to restore during execute mode.
+# Only set LANG and LC_ALL to C if already set.
+# These must not be set unconditionally because not all systems understand
+# e.g. LANG=C (notably SCO).
+lt_user_locale=
+lt_safe_locale=
+for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+do
+ eval "if test \"\${$lt_var+set}\" = set; then
+ save_$lt_var=\$$lt_var
+ $lt_var=C
+ export $lt_var
+ lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
+ lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
+ fi"
+done
+
+$lt_unset CDPATH
+
+
+
+
+
+: ${CP="cp -f"}
+: ${ECHO="echo"}
+: ${EGREP="/usr/bin/grep -E"}
+: ${FGREP="/usr/bin/grep -F"}
+: ${GREP="/usr/bin/grep"}
+: ${LN_S="ln -s"}
+: ${MAKE="make"}
+: ${MKDIR="mkdir"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+: ${SED="/opt/local/bin/gsed"}
+: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
+: ${Xsed="$SED -e 1s/^X//"}
+
+# Global variables:
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing.
+EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake.
+
+exit_status=$EXIT_SUCCESS
+
+# Make sure IFS has a sensible default
+lt_nl='
+'
+IFS=" $lt_nl"
+
+dirname="s,/[^/]*$,,"
+basename="s,^.*/,,"
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+# dirname: Compute the dirname of FILE. If nonempty,
+# add APPEND to the result, otherwise set result
+# to NONDIR_REPLACEMENT.
+# value returned in "$func_dirname_result"
+# basename: Compute filename of FILE.
+# value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+ # Extract subdirectory from the argument.
+ func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+ if test "X$func_dirname_result" = "X${1}"; then
+ func_dirname_result="${3}"
+ else
+ func_dirname_result="$func_dirname_result${2}"
+ fi
+ func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+# Generated shell functions inserted here.
+
+# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
+# is ksh but when the shell is invoked as "sh" and the current value of
+# the _XPG environment variable is not equal to 1 (one), the special
+# positional parameter $0, within a function call, is the name of the
+# function.
+progpath="$0"
+
+# The name of this program:
+# In the unlikely event $progname began with a '-', it would play havoc with
+# func_echo (imagine progname=-n), so we prepend ./ in that case:
+func_dirname_and_basename "$progpath"
+progname=$func_basename_result
+case $progname in
+ -*) progname=./$progname ;;
+esac
+
+# Make sure we have an absolute path for reexecution:
+case $progpath in
+ [\\/]*|[A-Za-z]:\\*) ;;
+ *[\\/]*)
+ progdir=$func_dirname_result
+ progdir=`cd "$progdir" && pwd`
+ progpath="$progdir/$progname"
+ ;;
+ *)
+ save_IFS="$IFS"
+ IFS=:
+ for progdir in $PATH; do
+ IFS="$save_IFS"
+ test -x "$progdir/$progname" && break
+ done
+ IFS="$save_IFS"
+ test -n "$progdir" || progdir=`pwd`
+ progpath="$progdir/$progname"
+ ;;
+esac
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed="${SED}"' -e 1s/^X//'
+sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Re-`\' parameter expansions in output of double_quote_subst that were
+# `\'-ed in input to the same. If an odd number of `\' preceded a '$'
+# in input to double_quote_subst, that '$' was protected from expansion.
+# Since each input `\' is now two `\'s, look for any number of runs of
+# four `\'s followed by two `\'s and then a '$'. `\' that '$'.
+bs='\\'
+bs2='\\\\'
+bs4='\\\\\\\\'
+dollar='\$'
+sed_double_backslash="\
+ s/$bs4/&\\
+/g
+ s/^$bs2$dollar/$bs&/
+ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
+ s/\n//g"
+
+# Standard options:
+opt_dry_run=false
+opt_help=false
+opt_quiet=false
+opt_verbose=false
+opt_warning=:
+
+# func_echo arg...
+# Echo program name prefixed message, along with the current mode
+# name if it has been set yet.
+func_echo ()
+{
+ $ECHO "$progname${mode+: }$mode: $*"
+}
+
+# func_verbose arg...
+# Echo program name prefixed message in verbose mode only.
+func_verbose ()
+{
+ $opt_verbose && func_echo ${1+"$@"}
+
+ # A bug in bash halts the script if the last line of a function
+ # fails when set -e is in force, so we need another command to
+ # work around that:
+ :
+}
+
+# func_error arg...
+# Echo program name prefixed message to standard error.
+func_error ()
+{
+ $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2
+}
+
+# func_warning arg...
+# Echo program name prefixed warning message to standard error.
+func_warning ()
+{
+ $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2
+
+ # bash bug again:
+ :
+}
+
+# func_fatal_error arg...
+# Echo program name prefixed message to standard error, and exit.
+func_fatal_error ()
+{
+ func_error ${1+"$@"}
+ exit $EXIT_FAILURE
+}
+
+# func_fatal_help arg...
+# Echo program name prefixed message to standard error, followed by
+# a help hint, and exit.
+func_fatal_help ()
+{
+ func_error ${1+"$@"}
+ func_fatal_error "$help"
+}
+help="Try \`$progname --help' for more information." ## default
+
+
+# func_grep expression filename
+# Check whether EXPRESSION matches any line of FILENAME, without output.
+func_grep ()
+{
+ $GREP "$1" "$2" >/dev/null 2>&1
+}
+
+
+# func_mkdir_p directory-path
+# Make sure the entire path to DIRECTORY-PATH is available.
+func_mkdir_p ()
+{
+ my_directory_path="$1"
+ my_dir_list=
+
+ if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
+
+ # Protect directory names starting with `-'
+ case $my_directory_path in
+ -*) my_directory_path="./$my_directory_path" ;;
+ esac
+
+ # While some portion of DIR does not yet exist...
+ while test ! -d "$my_directory_path"; do
+ # ...make a list in topmost first order. Use a colon delimited
+ # list incase some portion of path contains whitespace.
+ my_dir_list="$my_directory_path:$my_dir_list"
+
+ # If the last portion added has no slash in it, the list is done
+ case $my_directory_path in */*) ;; *) break ;; esac
+
+ # ...otherwise throw away the child directory and loop
+ my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"`
+ done
+ my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'`
+
+ save_mkdir_p_IFS="$IFS"; IFS=':'
+ for my_dir in $my_dir_list; do
+ IFS="$save_mkdir_p_IFS"
+ # mkdir can fail with a `File exist' error if two processes
+ # try to create one of the directories concurrently. Don't
+ # stop in that case!
+ $MKDIR "$my_dir" 2>/dev/null || :
+ done
+ IFS="$save_mkdir_p_IFS"
+
+ # Bail out if we (or some other process) failed to create a directory.
+ test -d "$my_directory_path" || \
+ func_fatal_error "Failed to create \`$1'"
+ fi
+}
+
+
+# func_mktempdir [string]
+# Make a temporary directory that won't clash with other running
+# libtool processes, and avoids race conditions if possible. If
+# given, STRING is the basename for that directory.
+func_mktempdir ()
+{
+ my_template="${TMPDIR-/tmp}/${1-$progname}"
+
+ if test "$opt_dry_run" = ":"; then
+ # Return a directory name, but don't create it in dry-run mode
+ my_tmpdir="${my_template}-$$"
+ else
+
+ # If mktemp works, use that first and foremost
+ my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
+
+ if test ! -d "$my_tmpdir"; then
+ # Failing that, at least try and use $RANDOM to avoid a race
+ my_tmpdir="${my_template}-${RANDOM-0}$$"
+
+ save_mktempdir_umask=`umask`
+ umask 0077
+ $MKDIR "$my_tmpdir"
+ umask $save_mktempdir_umask
+ fi
+
+ # If we're not in dry-run mode, bomb out on failure
+ test -d "$my_tmpdir" || \
+ func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
+ fi
+
+ $ECHO "X$my_tmpdir" | $Xsed
+}
+
+
+# func_quote_for_eval arg
+# Aesthetically quote ARG to be evaled later.
+# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
+# is double-quoted, suitable for a subsequent eval, whereas
+# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
+# which are still active within double quotes backslashified.
+func_quote_for_eval ()
+{
+ case $1 in
+ *[\\\`\"\$]*)
+ func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;;
+ *)
+ func_quote_for_eval_unquoted_result="$1" ;;
+ esac
+
+ case $func_quote_for_eval_unquoted_result in
+ # Double-quote args containing shell metacharacters to delay
+ # word splitting, command substitution and and variable
+ # expansion for a subsequent eval.
+ # Many Bourne shells cannot handle close brackets correctly
+ # in scan sets, so we specify it separately.
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
+ ;;
+ *)
+ func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
+ esac
+}
+
+
+# func_quote_for_expand arg
+# Aesthetically quote ARG to be evaled later; same as above,
+# but do not quote variable references.
+func_quote_for_expand ()
+{
+ case $1 in
+ *[\\\`\"]*)
+ my_arg=`$ECHO "X$1" | $Xsed \
+ -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
+ *)
+ my_arg="$1" ;;
+ esac
+
+ case $my_arg in
+ # Double-quote args containing shell metacharacters to delay
+ # word splitting and command substitution for a subsequent eval.
+ # Many Bourne shells cannot handle close brackets correctly
+ # in scan sets, so we specify it separately.
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ my_arg="\"$my_arg\""
+ ;;
+ esac
+
+ func_quote_for_expand_result="$my_arg"
+}
+
+
+# func_show_eval cmd [fail_exp]
+# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is
+# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.
+func_show_eval ()
+{
+ my_cmd="$1"
+ my_fail_exp="${2-:}"
+
+ ${opt_silent-false} || {
+ func_quote_for_expand "$my_cmd"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+
+ if ${opt_dry_run-false}; then :; else
+ eval "$my_cmd"
+ my_status=$?
+ if test "$my_status" -eq 0; then :; else
+ eval "(exit $my_status); $my_fail_exp"
+ fi
+ fi
+}
+
+
+# func_show_eval_locale cmd [fail_exp]
+# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is
+# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it. Use the saved locale for evaluation.
+func_show_eval_locale ()
+{
+ my_cmd="$1"
+ my_fail_exp="${2-:}"
+
+ ${opt_silent-false} || {
+ func_quote_for_expand "$my_cmd"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+
+ if ${opt_dry_run-false}; then :; else
+ eval "$lt_user_locale
+ $my_cmd"
+ my_status=$?
+ eval "$lt_safe_locale"
+ if test "$my_status" -eq 0; then :; else
+ eval "(exit $my_status); $my_fail_exp"
+ fi
+ fi
+}
+
+
+
+
+
+# func_version
+# Echo version message to standard output and exit.
+func_version ()
+{
+ $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / {
+ s/^# //
+ s/^# *$//
+ s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
+ p
+ }' < "$progpath"
+ exit $?
+}
+
+# func_usage
+# Echo short help message to standard output and exit.
+func_usage ()
+{
+ $SED -n '/^# Usage:/,/# -h/ {
+ s/^# //
+ s/^# *$//
+ s/\$progname/'$progname'/
+ p
+ }' < "$progpath"
+ $ECHO
+ $ECHO "run \`$progname --help | more' for full usage"
+ exit $?
+}
+
+# func_help
+# Echo long help message to standard output and exit.
+func_help ()
+{
+ $SED -n '/^# Usage:/,/# Report bugs to/ {
+ s/^# //
+ s/^# *$//
+ s*\$progname*'$progname'*
+ s*\$host*'"$host"'*
+ s*\$SHELL*'"$SHELL"'*
+ s*\$LTCC*'"$LTCC"'*
+ s*\$LTCFLAGS*'"$LTCFLAGS"'*
+ s*\$LD*'"$LD"'*
+ s/\$with_gnu_ld/'"$with_gnu_ld"'/
+ s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
+ s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
+ p
+ }' < "$progpath"
+ exit $?
+}
+
+# func_missing_arg argname
+# Echo program name prefixed message to standard error and set global
+# exit_cmd.
+func_missing_arg ()
+{
+ func_error "missing argument for $1"
+ exit_cmd=exit
+}
+
+exit_cmd=:
+
+
+
+
+
+# Check that we have a working $ECHO.
+if test "X$1" = X--no-reexec; then
+ # Discard the --no-reexec flag, and continue.
+ shift
+elif test "X$1" = X--fallback-echo; then
+ # Avoid inline document here, it may be left over
+ :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then
+ # Yippee, $ECHO works!
+ :
+else
+ # Restart under the correct shell, and then maybe $ECHO will work.
+ exec $SHELL "$progpath" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+ # used as fallback echo
+ shift
+ cat <<EOF
+$*
+EOF
+ exit $EXIT_SUCCESS
+fi
+
+magic="%%%MAGIC variable%%%"
+magic_exe="%%%MAGIC EXE variable%%%"
+
+# Global variables.
+# $mode is unset
+nonopt=
+execute_dlfiles=
+preserve_args=
+lo2o="s/\\.lo\$/.${objext}/"
+o2lo="s/\\.${objext}\$/.lo/"
+extracted_archives=
+extracted_serial=0
+
+opt_dry_run=false
+opt_duplicate_deps=false
+opt_silent=false
+opt_debug=:
+
+# If this variable is set in any of the actions, the command in it
+# will be execed at the end. This prevents here-documents from being
+# left over by shells.
+exec_cmd=
+
+# func_fatal_configuration arg...
+# Echo program name prefixed message to standard error, followed by
+# a configuration failure hint, and exit.
+func_fatal_configuration ()
+{
+ func_error ${1+"$@"}
+ func_error "See the $PACKAGE documentation for more information."
+ func_fatal_error "Fatal configuration error."
+}
+
+
+# func_config
+# Display the configuration for all the tags in this script.
+func_config ()
+{
+ re_begincf='^# ### BEGIN LIBTOOL'
+ re_endcf='^# ### END LIBTOOL'
+
+ # Default configuration.
+ $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
+
+ # Now print the configurations for the tags.
+ for tagname in $taglist; do
+ $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
+ done
+
+ exit $?
+}
+
+# func_features
+# Display the features supported by this script.
+func_features ()
+{
+ $ECHO "host: $host"
+ if test "$build_libtool_libs" = yes; then
+ $ECHO "enable shared libraries"
+ else
+ $ECHO "disable shared libraries"
+ fi
+ if test "$build_old_libs" = yes; then
+ $ECHO "enable static libraries"
+ else
+ $ECHO "disable static libraries"
+ fi
+
+ exit $?
+}
+
+# func_enable_tag tagname
+# Verify that TAGNAME is valid, and either flag an error and exit, or
+# enable the TAGNAME tag. We also add TAGNAME to the global $taglist
+# variable here.
+func_enable_tag ()
+{
+ # Global variable:
+ tagname="$1"
+
+ re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
+ re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
+ sed_extractcf="/$re_begincf/,/$re_endcf/p"
+
+ # Validate tagname.
+ case $tagname in
+ *[!-_A-Za-z0-9,/]*)
+ func_fatal_error "invalid tag name: $tagname"
+ ;;
+ esac
+
+ # Don't test for the "default" C tag, as we know it's
+ # there but not specially marked.
+ case $tagname in
+ CC) ;;
+ *)
+ if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
+ taglist="$taglist $tagname"
+
+ # Evaluate the configuration. Be careful to quote the path
+ # and the sed script, to avoid splitting on whitespace, but
+ # also don't use non-portable quotes within backquotes within
+ # quotes we have to do it in 2 steps:
+ extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
+ eval "$extractedcf"
+ else
+ func_error "ignoring unknown tag $tagname"
+ fi
+ ;;
+ esac
+}
+
+# Parse options once, thoroughly. This comes as soon as possible in
+# the script to make things like `libtool --version' happen quickly.
+{
+
+ # Shorthand for --mode=foo, only valid as the first argument
+ case $1 in
+ clean|clea|cle|cl)
+ shift; set dummy --mode clean ${1+"$@"}; shift
+ ;;
+ compile|compil|compi|comp|com|co|c)
+ shift; set dummy --mode compile ${1+"$@"}; shift
+ ;;
+ execute|execut|execu|exec|exe|ex|e)
+ shift; set dummy --mode execute ${1+"$@"}; shift
+ ;;
+ finish|finis|fini|fin|fi|f)
+ shift; set dummy --mode finish ${1+"$@"}; shift
+ ;;
+ install|instal|insta|inst|ins|in|i)
+ shift; set dummy --mode install ${1+"$@"}; shift
+ ;;
+ link|lin|li|l)
+ shift; set dummy --mode link ${1+"$@"}; shift
+ ;;
+ uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
+ shift; set dummy --mode uninstall ${1+"$@"}; shift
+ ;;
+ esac
+
+ # Parse non-mode specific arguments:
+ while test "$#" -gt 0; do
+ opt="$1"
+ shift
+
+ case $opt in
+ --config) func_config ;;
+
+ --debug) preserve_args="$preserve_args $opt"
+ func_echo "enabling shell trace mode"
+ opt_debug='set -x'
+ $opt_debug
+ ;;
+
+ -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break
+ execute_dlfiles="$execute_dlfiles $1"
+ shift
+ ;;
+
+ --dry-run | -n) opt_dry_run=: ;;
+ --features) func_features ;;
+ --finish) mode="finish" ;;
+
+ --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break
+ case $1 in
+ # Valid mode arguments:
+ clean) ;;
+ compile) ;;
+ execute) ;;
+ finish) ;;
+ install) ;;
+ link) ;;
+ relink) ;;
+ uninstall) ;;
+
+ # Catch anything else as an error
+ *) func_error "invalid argument for $opt"
+ exit_cmd=exit
+ break
+ ;;
+ esac
+
+ mode="$1"
+ shift
+ ;;
+
+ --preserve-dup-deps)
+ opt_duplicate_deps=: ;;
+
+ --quiet|--silent) preserve_args="$preserve_args $opt"
+ opt_silent=:
+ ;;
+
+ --verbose| -v) preserve_args="$preserve_args $opt"
+ opt_silent=false
+ ;;
+
+ --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break
+ preserve_args="$preserve_args $opt $1"
+ func_enable_tag "$1" # tagname is set here
+ shift
+ ;;
+
+ # Separate optargs to long options:
+ -dlopen=*|--mode=*|--tag=*)
+ func_opt_split "$opt"
+ set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"}
+ shift
+ ;;
+
+ -\?|-h) func_usage ;;
+ --help) opt_help=: ;;
+ --version) func_version ;;
+
+ -*) func_fatal_help "unrecognized option \`$opt'" ;;
+
+ *) nonopt="$opt"
+ break
+ ;;
+ esac
+ done
+
+
+ case $host in
+ *cygwin* | *mingw* | *pw32*)
+ # don't eliminate duplications in $postdeps and $predeps
+ opt_duplicate_compiler_generated_deps=:
+ ;;
+ *)
+ opt_duplicate_compiler_generated_deps=$opt_duplicate_deps
+ ;;
+ esac
+
+ # Having warned about all mis-specified options, bail out if
+ # anything was wrong.
+ $exit_cmd $EXIT_FAILURE
+}
+
+# func_check_version_match
+# Ensure that we are using m4 macros, and libtool script from the same
+# release of libtool.
+func_check_version_match ()
+{
+ if test "$package_revision" != "$macro_revision"; then
+ if test "$VERSION" != "$macro_version"; then
+ if test -z "$macro_version"; then
+ cat >&2 <<_LT_EOF
+$progname: Version mismatch error. This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from an older release.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+ else
+ cat >&2 <<_LT_EOF
+$progname: Version mismatch error. This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+ fi
+ else
+ cat >&2 <<_LT_EOF
+$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision,
+$progname: but the definition of this LT_INIT comes from revision $macro_revision.
+$progname: You should recreate aclocal.m4 with macros from revision $package_revision
+$progname: of $PACKAGE $VERSION and run autoconf again.
+_LT_EOF
+ fi
+
+ exit $EXIT_MISMATCH
+ fi
+}
+
+
+## ----------- ##
+## Main. ##
+## ----------- ##
+
+$opt_help || {
+ # Sanity checks first:
+ func_check_version_match
+
+ if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
+ func_fatal_configuration "not configured to build any kind of library"
+ fi
+
+ test -z "$mode" && func_fatal_error "error: you must specify a MODE."
+
+
+ # Darwin sucks
+ eval std_shrext=\"$shrext_cmds\"
+
+
+ # Only execute mode is allowed to have -dlopen flags.
+ if test -n "$execute_dlfiles" && test "$mode" != execute; then
+ func_error "unrecognized option \`-dlopen'"
+ $ECHO "$help" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ # Change the help message to a mode-specific one.
+ generic_help="$help"
+ help="Try \`$progname --help --mode=$mode' for more information."
+}
+
+
+# func_lalib_p file
+# True iff FILE is a libtool `.la' library or `.lo' object file.
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_lalib_p ()
+{
+ $SED -e 4q "$1" 2>/dev/null \
+ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
+}
+
+# func_lalib_unsafe_p file
+# True iff FILE is a libtool `.la' library or `.lo' object file.
+# This function implements the same check as func_lalib_p without
+# resorting to external programs. To this end, it redirects stdin and
+# closes it afterwards, without saving the original file descriptor.
+# As a safety measure, use it only where a negative result would be
+# fatal anyway. Works if `file' does not exist.
+func_lalib_unsafe_p ()
+{
+ lalib_p=no
+ if test -r "$1" && exec 5<&0 <"$1"; then
+ for lalib_p_l in 1 2 3 4
+ do
+ read lalib_p_line
+ case "$lalib_p_line" in
+ \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
+ esac
+ done
+ exec 0<&5 5<&-
+ fi
+ test "$lalib_p" = yes
+}
+
+# func_ltwrapper_script_p file
+# True iff FILE is a libtool wrapper script
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_script_p ()
+{
+ func_lalib_p "$1"
+}
+
+# func_ltwrapper_executable_p file
+# True iff FILE is a libtool wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_executable_p ()
+{
+ func_ltwrapper_exec_suffix=
+ case $1 in
+ *.exe) ;;
+ *) func_ltwrapper_exec_suffix=.exe ;;
+ esac
+ $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
+}
+
+# func_ltwrapper_scriptname file
+# Assumes file is an ltwrapper_executable
+# uses $file to determine the appropriate filename for a
+# temporary ltwrapper_script.
+func_ltwrapper_scriptname ()
+{
+ func_ltwrapper_scriptname_result=""
+ if func_ltwrapper_executable_p "$1"; then
+ func_dirname_and_basename "$1" "" "."
+ func_stripname '' '.exe' "$func_basename_result"
+ func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
+ fi
+}
+
+# func_ltwrapper_p file
+# True iff FILE is a libtool wrapper script or wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_p ()
+{
+ func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
+}
+
+
+# func_execute_cmds commands fail_cmd
+# Execute tilde-delimited COMMANDS.
+# If FAIL_CMD is given, eval that upon failure.
+# FAIL_CMD may read-access the current command in variable CMD!
+func_execute_cmds ()
+{
+ $opt_debug
+ save_ifs=$IFS; IFS='~'
+ for cmd in $1; do
+ IFS=$save_ifs
+ eval cmd=\"$cmd\"
+ func_show_eval "$cmd" "${2-:}"
+ done
+ IFS=$save_ifs
+}
+
+
+# func_source file
+# Source FILE, adding directory component if necessary.
+# Note that it is not necessary on cygwin/mingw to append a dot to
+# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
+# behavior happens only for exec(3), not for open(2)! Also, sourcing
+# `FILE.' does not work on cygwin managed mounts.
+func_source ()
+{
+ $opt_debug
+ case $1 in
+ */* | *\\*) . "$1" ;;
+ *) . "./$1" ;;
+ esac
+}
+
+
+# func_infer_tag arg
+# Infer tagged configuration to use if any are available and
+# if one wasn't chosen via the "--tag" command line option.
+# Only attempt this if the compiler in the base compile
+# command doesn't match the default compiler.
+# arg is usually of the form 'gcc ...'
+func_infer_tag ()
+{
+ $opt_debug
+ if test -n "$available_tags" && test -z "$tagname"; then
+ CC_quoted=
+ for arg in $CC; do
+ func_quote_for_eval "$arg"
+ CC_quoted="$CC_quoted $func_quote_for_eval_result"
+ done
+ case $@ in
+ # Blanks in the command may have been stripped by the calling shell,
+ # but not from the CC environment variable when configure was run.
+ " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;;
+ # Blanks at the start of $base_compile will cause this to fail
+ # if we don't check for them as well.
+ *)
+ for z in $available_tags; do
+ if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
+ # Evaluate the configuration.
+ eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
+ CC_quoted=
+ for arg in $CC; do
+ # Double-quote args containing other shell metacharacters.
+ func_quote_for_eval "$arg"
+ CC_quoted="$CC_quoted $func_quote_for_eval_result"
+ done
+ case "$@ " in
+ " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*)
+ # The compiler in the base compile command matches
+ # the one in the tagged configuration.
+ # Assume this is the tagged configuration we want.
+ tagname=$z
+ break
+ ;;
+ esac
+ fi
+ done
+ # If $tagname still isn't set, then no tagged configuration
+ # was found and let the user know that the "--tag" command
+ # line option must be used.
+ if test -z "$tagname"; then
+ func_echo "unable to infer tagged configuration"
+ func_fatal_error "specify a tag with \`--tag'"
+# else
+# func_verbose "using $tagname tagged configuration"
+ fi
+ ;;
+ esac
+ fi
+}
+
+
+
+# func_write_libtool_object output_name pic_name nonpic_name
+# Create a libtool object file (analogous to a ".la" file),
+# but don't create it if we're doing a dry run.
+func_write_libtool_object ()
+{
+ write_libobj=${1}
+ if test "$build_libtool_libs" = yes; then
+ write_lobj=\'${2}\'
+ else
+ write_lobj=none
+ fi
+
+ if test "$build_old_libs" = yes; then
+ write_oldobj=\'${3}\'
+ else
+ write_oldobj=none
+ fi
+
+ $opt_dry_run || {
+ cat >${write_libobj}T <<EOF
+# $write_libobj - a libtool object file
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+pic_object=$write_lobj
+
+# Name of the non-PIC object
+non_pic_object=$write_oldobj
+
+EOF
+ $MV "${write_libobj}T" "${write_libobj}"
+ }
+}
+
+# func_mode_compile arg...
+func_mode_compile ()
+{
+ $opt_debug
+ # Get the compilation command and the source file.
+ base_compile=
+ srcfile="$nonopt" # always keep a non-empty value in "srcfile"
+ suppress_opt=yes
+ suppress_output=
+ arg_mode=normal
+ libobj=
+ later=
+ pie_flag=
+
+ for arg
+ do
+ case $arg_mode in
+ arg )
+ # do not "continue". Instead, add this to base_compile
+ lastarg="$arg"
+ arg_mode=normal
+ ;;
+
+ target )
+ libobj="$arg"
+ arg_mode=normal
+ continue
+ ;;
+
+ normal )
+ # Accept any command-line options.
+ case $arg in
+ -o)
+ test -n "$libobj" && \
+ func_fatal_error "you cannot specify \`-o' more than once"
+ arg_mode=target
+ continue
+ ;;
+
+ -pie | -fpie | -fPIE)
+ pie_flag="$pie_flag $arg"
+ continue
+ ;;
+
+ -shared | -static | -prefer-pic | -prefer-non-pic)
+ later="$later $arg"
+ continue
+ ;;
+
+ -no-suppress)
+ suppress_opt=no
+ continue
+ ;;
+
+ -Xcompiler)
+ arg_mode=arg # the next one goes into the "base_compile" arg list
+ continue # The current "srcfile" will either be retained or
+ ;; # replaced later. I would guess that would be a bug.
+
+ -Wc,*)
+ func_stripname '-Wc,' '' "$arg"
+ args=$func_stripname_result
+ lastarg=
+ save_ifs="$IFS"; IFS=','
+ for arg in $args; do
+ IFS="$save_ifs"
+ func_quote_for_eval "$arg"
+ lastarg="$lastarg $func_quote_for_eval_result"
+ done
+ IFS="$save_ifs"
+ func_stripname ' ' '' "$lastarg"
+ lastarg=$func_stripname_result
+
+ # Add the arguments to base_compile.
+ base_compile="$base_compile $lastarg"
+ continue
+ ;;
+
+ *)
+ # Accept the current argument as the source file.
+ # The previous "srcfile" becomes the current argument.
+ #
+ lastarg="$srcfile"
+ srcfile="$arg"
+ ;;
+ esac # case $arg
+ ;;
+ esac # case $arg_mode
+
+ # Aesthetically quote the previous argument.
+ func_quote_for_eval "$lastarg"
+ base_compile="$base_compile $func_quote_for_eval_result"
+ done # for arg
+
+ case $arg_mode in
+ arg)
+ func_fatal_error "you must specify an argument for -Xcompile"
+ ;;
+ target)
+ func_fatal_error "you must specify a target with \`-o'"
+ ;;
+ *)
+ # Get the name of the library object.
+ test -z "$libobj" && {
+ func_basename "$srcfile"
+ libobj="$func_basename_result"
+ }
+ ;;
+ esac
+
+ # Recognize several different file suffixes.
+ # If the user specifies -o file.o, it is replaced with file.lo
+ case $libobj in
+ *.[cCFSifmso] | \
+ *.ada | *.adb | *.ads | *.asm | \
+ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
+ *.[fF][09]? | *.for | *.java | *.obj | *.sx)
+ func_xform "$libobj"
+ libobj=$func_xform_result
+ ;;
+ esac
+
+ case $libobj in
+ *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
+ *)
+ func_fatal_error "cannot determine name of library object from \`$libobj'"
+ ;;
+ esac
+
+ func_infer_tag $base_compile
+
+ for arg in $later; do
+ case $arg in
+ -shared)
+ test "$build_libtool_libs" != yes && \
+ func_fatal_configuration "can not build a shared library"
+ build_old_libs=no
+ continue
+ ;;
+
+ -static)
+ build_libtool_libs=no
+ build_old_libs=yes
+ continue
+ ;;
+
+ -prefer-pic)
+ pic_mode=yes
+ continue
+ ;;
+
+ -prefer-non-pic)
+ pic_mode=no
+ continue
+ ;;
+ esac
+ done
+
+ func_quote_for_eval "$libobj"
+ test "X$libobj" != "X$func_quote_for_eval_result" \
+ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \
+ && func_warning "libobj name \`$libobj' may not contain shell special characters."
+ func_dirname_and_basename "$obj" "/" ""
+ objname="$func_basename_result"
+ xdir="$func_dirname_result"
+ lobj=${xdir}$objdir/$objname
+
+ test -z "$base_compile" && \
+ func_fatal_help "you must specify a compilation command"
+
+ # Delete any leftover library objects.
+ if test "$build_old_libs" = yes; then
+ removelist="$obj $lobj $libobj ${libobj}T"
+ else
+ removelist="$lobj $libobj ${libobj}T"
+ fi
+
+ # On Cygwin there's no "real" PIC flag so we must build both object types
+ case $host_os in
+ cygwin* | mingw* | pw32* | os2*)
+ pic_mode=default
+ ;;
+ esac
+ if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
+ # non-PIC code in shared libraries is not supported
+ pic_mode=default
+ fi
+
+ # Calculate the filename of the output object if compiler does
+ # not support -o with -c
+ if test "$compiler_c_o" = no; then
+ output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
+ lockfile="$output_obj.lock"
+ else
+ output_obj=
+ need_locks=no
+ lockfile=
+ fi
+
+ # Lock this critical section if it is needed
+ # We use this script file to make the link, it avoids creating a new file
+ if test "$need_locks" = yes; then
+ until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+ func_echo "Waiting for $lockfile to be removed"
+ sleep 2
+ done
+ elif test "$need_locks" = warn; then
+ if test -f "$lockfile"; then
+ $ECHO "\
+*** ERROR, $lockfile exists and contains:
+`cat $lockfile 2>/dev/null`
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together. If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+ $opt_dry_run || $RM $removelist
+ exit $EXIT_FAILURE
+ fi
+ removelist="$removelist $output_obj"
+ $ECHO "$srcfile" > "$lockfile"
+ fi
+
+ $opt_dry_run || $RM $removelist
+ removelist="$removelist $lockfile"
+ trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
+
+ if test -n "$fix_srcfile_path"; then
+ eval srcfile=\"$fix_srcfile_path\"
+ fi
+ func_quote_for_eval "$srcfile"
+ qsrcfile=$func_quote_for_eval_result
+
+ # Only build a PIC object if we are building libtool libraries.
+ if test "$build_libtool_libs" = yes; then
+ # Without this assignment, base_compile gets emptied.
+ fbsd_hideous_sh_bug=$base_compile
+
+ if test "$pic_mode" != no; then
+ command="$base_compile $qsrcfile $pic_flag"
+ else
+ # Don't build PIC code
+ command="$base_compile $qsrcfile"
+ fi
+
+ func_mkdir_p "$xdir$objdir"
+
+ if test -z "$output_obj"; then
+ # Place PIC objects in $objdir
+ command="$command -o $lobj"
+ fi
+
+ func_show_eval_locale "$command" \
+ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
+
+ if test "$need_locks" = warn &&
+ test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+ $ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together. If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+ $opt_dry_run || $RM $removelist
+ exit $EXIT_FAILURE
+ fi
+
+ # Just move the object if needed, then go on to compile the next one
+ if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
+ func_show_eval '$MV "$output_obj" "$lobj"' \
+ 'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+ fi
+
+ # Allow error messages only from the first compilation.
+ if test "$suppress_opt" = yes; then
+ suppress_output=' >/dev/null 2>&1'
+ fi
+ fi
+
+ # Only build a position-dependent object if we build old libraries.
+ if test "$build_old_libs" = yes; then
+ if test "$pic_mode" != yes; then
+ # Don't build PIC code
+ command="$base_compile $qsrcfile$pie_flag"
+ else
+ command="$base_compile $qsrcfile $pic_flag"
+ fi
+ if test "$compiler_c_o" = yes; then
+ command="$command -o $obj"
+ fi
+
+ # Suppress compiler output if we already did a PIC compilation.
+ command="$command$suppress_output"
+ func_show_eval_locale "$command" \
+ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
+
+ if test "$need_locks" = warn &&
+ test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+ $ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together. If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+ $opt_dry_run || $RM $removelist
+ exit $EXIT_FAILURE
+ fi
+
+ # Just move the object if needed
+ if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
+ func_show_eval '$MV "$output_obj" "$obj"' \
+ 'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+ fi
+ fi
+
+ $opt_dry_run || {
+ func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
+
+ # Unlock the critical section if it was locked
+ if test "$need_locks" != no; then
+ removelist=$lockfile
+ $RM "$lockfile"
+ fi
+ }
+
+ exit $EXIT_SUCCESS
+}
+
+$opt_help || {
+test "$mode" = compile && func_mode_compile ${1+"$@"}
+}
+
+func_mode_help ()
+{
+ # We need to display help for each of the modes.
+ case $mode in
+ "")
+ # Generic help is extracted from the usage comments
+ # at the start of this file.
+ func_help
+ ;;
+
+ clean)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
+
+Remove files from the build directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, object or program, all the files associated
+with it are deleted. Otherwise, only FILE itself is deleted using RM."
+ ;;
+
+ compile)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
+
+Compile a source file into a libtool library object.
+
+This mode accepts the following additional options:
+
+ -o OUTPUT-FILE set the output file name to OUTPUT-FILE
+ -no-suppress do not suppress compiler output for multiple passes
+ -prefer-pic try to building PIC objects only
+ -prefer-non-pic try to building non-PIC objects only
+ -shared do not build a \`.o' file suitable for static linking
+ -static only build a \`.o' file suitable for static linking
+
+COMPILE-COMMAND is a command to be used in creating a \`standard' object file
+from the given SOURCEFILE.
+
+The output file name is determined by removing the directory component from
+SOURCEFILE, then substituting the C source code suffix \`.c' with the
+library object suffix, \`.lo'."
+ ;;
+
+ execute)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
+
+Automatically set library path, then run a program.
+
+This mode accepts the following additional options:
+
+ -dlopen FILE add the directory containing FILE to the library path
+
+This mode sets the library path environment variable according to \`-dlopen'
+flags.
+
+If any of the ARGS are libtool executable wrappers, then they are translated
+into their corresponding uninstalled binary, and any of their required library
+directories are added to the library path.
+
+Then, COMMAND is executed, with ARGS as arguments."
+ ;;
+
+ finish)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
+
+Complete the installation of libtool libraries.
+
+Each LIBDIR is a directory that contains libtool libraries.
+
+The commands that this mode executes may require superuser privileges. Use
+the \`--dry-run' option if you just want to see what would be executed."
+ ;;
+
+ install)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
+
+Install executables or libraries.
+
+INSTALL-COMMAND is the installation command. The first component should be
+either the \`install' or \`cp' program.
+
+The following components of INSTALL-COMMAND are treated specially:
+
+ -inst-prefix PREFIX-DIR Use PREFIX-DIR as a staging area for installation
+
+The rest of the components are interpreted as arguments to that command (only
+BSD-compatible install options are recognized)."
+ ;;
+
+ link)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
+
+Link object files or libraries together to form another library, or to
+create an executable program.
+
+LINK-COMMAND is a command using the C compiler that you would use to create
+a program from several object files.
+
+The following components of LINK-COMMAND are treated specially:
+
+ -all-static do not do any dynamic linking at all
+ -avoid-version do not add a version suffix if possible
+ -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime
+ -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols
+ -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
+ -export-symbols SYMFILE
+ try to export only the symbols listed in SYMFILE
+ -export-symbols-regex REGEX
+ try to export only the symbols matching REGEX
+ -LLIBDIR search LIBDIR for required installed libraries
+ -lNAME OUTPUT-FILE requires the installed library libNAME
+ -module build a library that can dlopened
+ -no-fast-install disable the fast-install mode
+ -no-install link a not-installable executable
+ -no-undefined declare that a library does not refer to external symbols
+ -o OUTPUT-FILE create OUTPUT-FILE from the specified objects
+ -objectlist FILE Use a list of object files found in FILE to specify objects
+ -precious-files-regex REGEX
+ don't remove output files matching REGEX
+ -release RELEASE specify package release information
+ -rpath LIBDIR the created library will eventually be installed in LIBDIR
+ -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries
+ -shared only do dynamic linking of libtool libraries
+ -shrext SUFFIX override the standard shared library file extension
+ -static do not do any dynamic linking of uninstalled libtool libraries
+ -static-libtool-libs
+ do not do any dynamic linking of libtool libraries
+ -version-info CURRENT[:REVISION[:AGE]]
+ specify library version info [each variable defaults to 0]
+ -weak LIBNAME declare that the target provides the LIBNAME interface
+
+All other options (arguments beginning with \`-') are ignored.
+
+Every other argument is treated as a filename. Files ending in \`.la' are
+treated as uninstalled libtool libraries, other files are standard or library
+object files.
+
+If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
+only library objects (\`.lo' files) may be specified, and \`-rpath' is
+required, except when creating a convenience library.
+
+If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
+using \`ar' and \`ranlib', or on Windows using \`lib'.
+
+If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
+is created, otherwise an executable program is created."
+ ;;
+
+ uninstall)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
+
+Remove libraries from an installation directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, all the files associated with it are deleted.
+Otherwise, only FILE itself is deleted using RM."
+ ;;
+
+ *)
+ func_fatal_help "invalid operation mode \`$mode'"
+ ;;
+ esac
+
+ $ECHO
+ $ECHO "Try \`$progname --help' for more information about other modes."
+
+ exit $?
+}
+
+ # Now that we've collected a possible --mode arg, show help if necessary
+ $opt_help && func_mode_help
+
+
+# func_mode_execute arg...
+func_mode_execute ()
+{
+ $opt_debug
+ # The first argument is the command name.
+ cmd="$nonopt"
+ test -z "$cmd" && \
+ func_fatal_help "you must specify a COMMAND"
+
+ # Handle -dlopen flags immediately.
+ for file in $execute_dlfiles; do
+ test -f "$file" \
+ || func_fatal_help "\`$file' is not a file"
+
+ dir=
+ case $file in
+ *.la)
+ # Check to see that this really is a libtool archive.
+ func_lalib_unsafe_p "$file" \
+ || func_fatal_help "\`$lib' is not a valid libtool archive"
+
+ # Read the libtool library.
+ dlname=
+ library_names=
+ func_source "$file"
+
+ # Skip this library if it cannot be dlopened.
+ if test -z "$dlname"; then
+ # Warn if it was a shared library.
+ test -n "$library_names" && \
+ func_warning "\`$file' was not linked with \`-export-dynamic'"
+ continue
+ fi
+
+ func_dirname "$file" "" "."
+ dir="$func_dirname_result"
+
+ if test -f "$dir/$objdir/$dlname"; then
+ dir="$dir/$objdir"
+ else
+ if test ! -f "$dir/$dlname"; then
+ func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
+ fi
+ fi
+ ;;
+
+ *.lo)
+ # Just add the directory containing the .lo file.
+ func_dirname "$file" "" "."
+ dir="$func_dirname_result"
+ ;;
+
+ *)
+ func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
+ continue
+ ;;
+ esac
+
+ # Get the absolute pathname.
+ absdir=`cd "$dir" && pwd`
+ test -n "$absdir" && dir="$absdir"
+
+ # Now add the directory to shlibpath_var.
+ if eval "test -z \"\$$shlibpath_var\""; then
+ eval "$shlibpath_var=\"\$dir\""
+ else
+ eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
+ fi
+ done
+
+ # This variable tells wrapper scripts just to set shlibpath_var
+ # rather than running their programs.
+ libtool_execute_magic="$magic"
+
+ # Check if any of the arguments is a wrapper script.
+ args=
+ for file
+ do
+ case $file in
+ -*) ;;
+ *)
+ # Do a test to see if this is really a libtool program.
+ if func_ltwrapper_script_p "$file"; then
+ func_source "$file"
+ # Transform arg to wrapped name.
+ file="$progdir/$program"
+ elif func_ltwrapper_executable_p "$file"; then
+ func_ltwrapper_scriptname "$file"
+ func_source "$func_ltwrapper_scriptname_result"
+ # Transform arg to wrapped name.
+ file="$progdir/$program"
+ fi
+ ;;
+ esac
+ # Quote arguments (to preserve shell metacharacters).
+ func_quote_for_eval "$file"
+ args="$args $func_quote_for_eval_result"
+ done
+
+ if test "X$opt_dry_run" = Xfalse; then
+ if test -n "$shlibpath_var"; then
+ # Export the shlibpath_var.
+ eval "export $shlibpath_var"
+ fi
+
+ # Restore saved environment variables
+ for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+ do
+ eval "if test \"\${save_$lt_var+set}\" = set; then
+ $lt_var=\$save_$lt_var; export $lt_var
+ else
+ $lt_unset $lt_var
+ fi"
+ done
+
+ # Now prepare to actually exec the command.
+ exec_cmd="\$cmd$args"
+ else
+ # Display what would be done.
+ if test -n "$shlibpath_var"; then
+ eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
+ $ECHO "export $shlibpath_var"
+ fi
+ $ECHO "$cmd$args"
+ exit $EXIT_SUCCESS
+ fi
+}
+
+test "$mode" = execute && func_mode_execute ${1+"$@"}
+
+
+# func_mode_finish arg...
+func_mode_finish ()
+{
+ $opt_debug
+ libdirs="$nonopt"
+ admincmds=
+
+ if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+ for dir
+ do
+ libdirs="$libdirs $dir"
+ done
+
+ for libdir in $libdirs; do
+ if test -n "$finish_cmds"; then
+ # Do each command in the finish commands.
+ func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
+'"$cmd"'"'
+ fi
+ if test -n "$finish_eval"; then
+ # Do the single finish_eval.
+ eval cmds=\"$finish_eval\"
+ $opt_dry_run || eval "$cmds" || admincmds="$admincmds
+ $cmds"
+ fi
+ done
+ fi
+
+ # Exit here if they wanted silent mode.
+ $opt_silent && exit $EXIT_SUCCESS
+
+ $ECHO "X----------------------------------------------------------------------" | $Xsed
+ $ECHO "Libraries have been installed in:"
+ for libdir in $libdirs; do
+ $ECHO " $libdir"
+ done
+ $ECHO
+ $ECHO "If you ever happen to want to link against installed libraries"
+ $ECHO "in a given directory, LIBDIR, you must either use libtool, and"
+ $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'"
+ $ECHO "flag during linking and do at least one of the following:"
+ if test -n "$shlibpath_var"; then
+ $ECHO " - add LIBDIR to the \`$shlibpath_var' environment variable"
+ $ECHO " during execution"
+ fi
+ if test -n "$runpath_var"; then
+ $ECHO " - add LIBDIR to the \`$runpath_var' environment variable"
+ $ECHO " during linking"
+ fi
+ if test -n "$hardcode_libdir_flag_spec"; then
+ libdir=LIBDIR
+ eval flag=\"$hardcode_libdir_flag_spec\"
+
+ $ECHO " - use the \`$flag' linker flag"
+ fi
+ if test -n "$admincmds"; then
+ $ECHO " - have your system administrator run these commands:$admincmds"
+ fi
+ if test -f /etc/ld.so.conf; then
+ $ECHO " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
+ fi
+ $ECHO
+
+ $ECHO "See any operating system documentation about shared libraries for"
+ case $host in
+ solaris2.[6789]|solaris2.1[0-9])
+ $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual"
+ $ECHO "pages."
+ ;;
+ *)
+ $ECHO "more information, such as the ld(1) and ld.so(8) manual pages."
+ ;;
+ esac
+ $ECHO "X----------------------------------------------------------------------" | $Xsed
+ exit $EXIT_SUCCESS
+}
+
+test "$mode" = finish && func_mode_finish ${1+"$@"}
+
+
+# func_mode_install arg...
+func_mode_install ()
+{
+ $opt_debug
+ # There may be an optional sh(1) argument at the beginning of
+ # install_prog (especially on Windows NT).
+ if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
+ # Allow the use of GNU shtool's install command.
+ $ECHO "X$nonopt" | $GREP shtool >/dev/null; then
+ # Aesthetically quote it.
+ func_quote_for_eval "$nonopt"
+ install_prog="$func_quote_for_eval_result "
+ arg=$1
+ shift
+ else
+ install_prog=
+ arg=$nonopt
+ fi
+
+ # The real first argument should be the name of the installation program.
+ # Aesthetically quote it.
+ func_quote_for_eval "$arg"
+ install_prog="$install_prog$func_quote_for_eval_result"
+
+ # We need to accept at least all the BSD install flags.
+ dest=
+ files=
+ opts=
+ prev=
+ install_type=
+ isdir=no
+ stripme=
+ for arg
+ do
+ if test -n "$dest"; then
+ files="$files $dest"
+ dest=$arg
+ continue
+ fi
+
+ case $arg in
+ -d) isdir=yes ;;
+ -f)
+ case " $install_prog " in
+ *[\\\ /]cp\ *) ;;
+ *) prev=$arg ;;
+ esac
+ ;;
+ -g | -m | -o)
+ prev=$arg
+ ;;
+ -s)
+ stripme=" -s"
+ continue
+ ;;
+ -*)
+ ;;
+ *)
+ # If the previous option needed an argument, then skip it.
+ if test -n "$prev"; then
+ prev=
+ else
+ dest=$arg
+ continue
+ fi
+ ;;
+ esac
+
+ # Aesthetically quote the argument.
+ func_quote_for_eval "$arg"
+ install_prog="$install_prog $func_quote_for_eval_result"
+ done
+
+ test -z "$install_prog" && \
+ func_fatal_help "you must specify an install program"
+
+ test -n "$prev" && \
+ func_fatal_help "the \`$prev' option requires an argument"
+
+ if test -z "$files"; then
+ if test -z "$dest"; then
+ func_fatal_help "no file or destination specified"
+ else
+ func_fatal_help "you must specify a destination"
+ fi
+ fi
+
+ # Strip any trailing slash from the destination.
+ func_stripname '' '/' "$dest"
+ dest=$func_stripname_result
+
+ # Check to see that the destination is a directory.
+ test -d "$dest" && isdir=yes
+ if test "$isdir" = yes; then
+ destdir="$dest"
+ destname=
+ else
+ func_dirname_and_basename "$dest" "" "."
+ destdir="$func_dirname_result"
+ destname="$func_basename_result"
+
+ # Not a directory, so check to see that there is only one file specified.
+ set dummy $files; shift
+ test "$#" -gt 1 && \
+ func_fatal_help "\`$dest' is not a directory"
+ fi
+ case $destdir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ for file in $files; do
+ case $file in
+ *.lo) ;;
+ *)
+ func_fatal_help "\`$destdir' must be an absolute directory name"
+ ;;
+ esac
+ done
+ ;;
+ esac
+
+ # This variable tells wrapper scripts just to set variables rather
+ # than running their programs.
+ libtool_install_magic="$magic"
+
+ staticlibs=
+ future_libdirs=
+ current_libdirs=
+ for file in $files; do
+
+ # Do each installation.
+ case $file in
+ *.$libext)
+ # Do the static libraries later.
+ staticlibs="$staticlibs $file"
+ ;;
+
+ *.la)
+ # Check to see that this really is a libtool archive.
+ func_lalib_unsafe_p "$file" \
+ || func_fatal_help "\`$file' is not a valid libtool archive"
+
+ library_names=
+ old_library=
+ relink_command=
+ func_source "$file"
+
+ # Add the libdir to current_libdirs if it is the destination.
+ if test "X$destdir" = "X$libdir"; then
+ case "$current_libdirs " in
+ *" $libdir "*) ;;
+ *) current_libdirs="$current_libdirs $libdir" ;;
+ esac
+ else
+ # Note the libdir as a future libdir.
+ case "$future_libdirs " in
+ *" $libdir "*) ;;
+ *) future_libdirs="$future_libdirs $libdir" ;;
+ esac
+ fi
+
+ func_dirname "$file" "/" ""
+ dir="$func_dirname_result"
+ dir="$dir$objdir"
+
+ if test -n "$relink_command"; then
+ # Determine the prefix the user has applied to our future dir.
+ inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"`
+
+ # Don't allow the user to place us outside of our expected
+ # location b/c this prevents finding dependent libraries that
+ # are installed to the same prefix.
+ # At present, this check doesn't affect windows .dll's that
+ # are installed into $libdir/../bin (currently, that works fine)
+ # but it's something to keep an eye on.
+ test "$inst_prefix_dir" = "$destdir" && \
+ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
+
+ if test -n "$inst_prefix_dir"; then
+ # Stick the inst_prefix_dir data into the link command.
+ relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+ else
+ relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"`
+ fi
+
+ func_warning "relinking \`$file'"
+ func_show_eval "$relink_command" \
+ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
+ fi
+
+ # See the names of the shared library.
+ set dummy $library_names; shift
+ if test -n "$1"; then
+ realname="$1"
+ shift
+
+ srcname="$realname"
+ test -n "$relink_command" && srcname="$realname"T
+
+ # Install the shared library and build the symlinks.
+ func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \
+ 'exit $?'
+ tstripme="$stripme"
+ case $host_os in
+ cygwin* | mingw* | pw32*)
+ case $realname in
+ *.dll.a)
+ tstripme=""
+ ;;
+ esac
+ ;;
+ esac
+ if test -n "$tstripme" && test -n "$striplib"; then
+ func_show_eval "$striplib $destdir/$realname" 'exit $?'
+ fi
+
+ if test "$#" -gt 0; then
+ # Delete the old symlinks, and create new ones.
+ # Try `ln -sf' first, because the `ln' binary might depend on
+ # the symlink we replace! Solaris /bin/ln does not understand -f,
+ # so we also need to try rm && ln -s.
+ for linkname
+ do
+ test "$linkname" != "$realname" \
+ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
+ done
+ fi
+
+ # Do each command in the postinstall commands.
+ lib="$destdir/$realname"
+ func_execute_cmds "$postinstall_cmds" 'exit $?'
+ fi
+
+ # Install the pseudo-library for information purposes.
+ func_basename "$file"
+ name="$func_basename_result"
+ instname="$dir/$name"i
+ func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
+
+ # Maybe install the static library, too.
+ test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
+ ;;
+
+ *.lo)
+ # Install (i.e. copy) a libtool object.
+
+ # Figure out destination file name, if it wasn't already specified.
+ if test -n "$destname"; then
+ destfile="$destdir/$destname"
+ else
+ func_basename "$file"
+ destfile="$func_basename_result"
+ destfile="$destdir/$destfile"
+ fi
+
+ # Deduce the name of the destination old-style object file.
+ case $destfile in
+ *.lo)
+ func_lo2o "$destfile"
+ staticdest=$func_lo2o_result
+ ;;
+ *.$objext)
+ staticdest="$destfile"
+ destfile=
+ ;;
+ *)
+ func_fatal_help "cannot copy a libtool object to \`$destfile'"
+ ;;
+ esac
+
+ # Install the libtool object if requested.
+ test -n "$destfile" && \
+ func_show_eval "$install_prog $file $destfile" 'exit $?'
+
+ # Install the old object if enabled.
+ if test "$build_old_libs" = yes; then
+ # Deduce the name of the old-style object file.
+ func_lo2o "$file"
+ staticobj=$func_lo2o_result
+ func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
+ fi
+ exit $EXIT_SUCCESS
+ ;;
+
+ *)
+ # Figure out destination file name, if it wasn't already specified.
+ if test -n "$destname"; then
+ destfile="$destdir/$destname"
+ else
+ func_basename "$file"
+ destfile="$func_basename_result"
+ destfile="$destdir/$destfile"
+ fi
+
+ # If the file is missing, and there is a .exe on the end, strip it
+ # because it is most likely a libtool script we actually want to
+ # install
+ stripped_ext=""
+ case $file in
+ *.exe)
+ if test ! -f "$file"; then
+ func_stripname '' '.exe' "$file"
+ file=$func_stripname_result
+ stripped_ext=".exe"
+ fi
+ ;;
+ esac
+
+ # Do a test to see if this is really a libtool program.
+ case $host in
+ *cygwin*|*mingw*)
+ if func_ltwrapper_executable_p "$file"; then
+ func_ltwrapper_scriptname "$file"
+ wrapper=$func_ltwrapper_scriptname_result
+ else
+ func_stripname '' '.exe' "$file"
+ wrapper=$func_stripname_result
+ fi
+ ;;
+ *)
+ wrapper=$file
+ ;;
+ esac
+ if func_ltwrapper_script_p "$wrapper"; then
+ notinst_deplibs=
+ relink_command=
+
+ func_source "$wrapper"
+
+ # Check the variables that should have been set.
+ test -z "$generated_by_libtool_version" && \
+ func_fatal_error "invalid libtool wrapper script \`$wrapper'"
+
+ finalize=yes
+ for lib in $notinst_deplibs; do
+ # Check to see that each library is installed.
+ libdir=
+ if test -f "$lib"; then
+ func_source "$lib"
+ fi
+ libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
+ if test -n "$libdir" && test ! -f "$libfile"; then
+ func_warning "\`$lib' has not been installed in \`$libdir'"
+ finalize=no
+ fi
+ done
+
+ relink_command=
+ func_source "$wrapper"
+
+ outputname=
+ if test "$fast_install" = no && test -n "$relink_command"; then
+ $opt_dry_run || {
+ if test "$finalize" = yes; then
+ tmpdir=`func_mktempdir`
+ func_basename "$file$stripped_ext"
+ file="$func_basename_result"
+ outputname="$tmpdir/$file"
+ # Replace the output file specification.
+ relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
+
+ $opt_silent || {
+ func_quote_for_expand "$relink_command"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+ if eval "$relink_command"; then :
+ else
+ func_error "error: relink \`$file' with the above command before installing it"
+ $opt_dry_run || ${RM}r "$tmpdir"
+ continue
+ fi
+ file="$outputname"
+ else
+ func_warning "cannot relink \`$file'"
+ fi
+ }
+ else
+ # Install the binary that we compiled earlier.
+ file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
+ fi
+ fi
+
+ # remove .exe since cygwin /usr/bin/install will append another
+ # one anyway
+ case $install_prog,$host in
+ */usr/bin/install*,*cygwin*)
+ case $file:$destfile in
+ *.exe:*.exe)
+ # this is ok
+ ;;
+ *.exe:*)
+ destfile=$destfile.exe
+ ;;
+ *:*.exe)
+ func_stripname '' '.exe' "$destfile"
+ destfile=$func_stripname_result
+ ;;
+ esac
+ ;;
+ esac
+ func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
+ $opt_dry_run || if test -n "$outputname"; then
+ ${RM}r "$tmpdir"
+ fi
+ ;;
+ esac
+ done
+
+ for file in $staticlibs; do
+ func_basename "$file"
+ name="$func_basename_result"
+
+ # Set up the ranlib parameters.
+ oldlib="$destdir/$name"
+
+ func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
+
+ if test -n "$stripme" && test -n "$old_striplib"; then
+ func_show_eval "$old_striplib $oldlib" 'exit $?'
+ fi
+
+ # Do each command in the postinstall commands.
+ func_execute_cmds "$old_postinstall_cmds" 'exit $?'
+ done
+
+ test -n "$future_libdirs" && \
+ func_warning "remember to run \`$progname --finish$future_libdirs'"
+
+ if test -n "$current_libdirs"; then
+ # Maybe just do a dry run.
+ $opt_dry_run && current_libdirs=" -n$current_libdirs"
+ exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
+ else
+ exit $EXIT_SUCCESS
+ fi
+}
+
+test "$mode" = install && func_mode_install ${1+"$@"}
+
+
+# func_generate_dlsyms outputname originator pic_p
+# Extract symbols from dlprefiles and create ${outputname}S.o with
+# a dlpreopen symbol table.
+func_generate_dlsyms ()
+{
+ $opt_debug
+ my_outputname="$1"
+ my_originator="$2"
+ my_pic_p="${3-no}"
+ my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
+ my_dlsyms=
+
+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+ if test -n "$NM" && test -n "$global_symbol_pipe"; then
+ my_dlsyms="${my_outputname}S.c"
+ else
+ func_error "not configured to extract global symbols from dlpreopened files"
+ fi
+ fi
+
+ if test -n "$my_dlsyms"; then
+ case $my_dlsyms in
+ "") ;;
+ *.c)
+ # Discover the nlist of each of the dlfiles.
+ nlist="$output_objdir/${my_outputname}.nm"
+
+ func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
+
+ # Parse the name list into a source file.
+ func_verbose "creating $output_objdir/$my_dlsyms"
+
+ $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
+/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
+/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
+
+#ifdef __cplusplus
+extern \"C\" {
+#endif
+
+/* External symbol declarations for the compiler. */\
+"
+
+ if test "$dlself" = yes; then
+ func_verbose "generating symbol list for \`$output'"
+
+ $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
+
+ # Add our own program objects to the symbol list.
+ progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+ for progfile in $progfiles; do
+ func_verbose "extracting global C symbols from \`$progfile'"
+ $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'"
+ done
+
+ if test -n "$exclude_expsyms"; then
+ $opt_dry_run || {
+ eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
+ eval '$MV "$nlist"T "$nlist"'
+ }
+ fi
+
+ if test -n "$export_symbols_regex"; then
+ $opt_dry_run || {
+ eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
+ eval '$MV "$nlist"T "$nlist"'
+ }
+ fi
+
+ # Prepare the list of exported symbols
+ if test -z "$export_symbols"; then
+ export_symbols="$output_objdir/$outputname.exp"
+ $opt_dry_run || {
+ $RM $export_symbols
+ eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+ case $host in
+ *cygwin* | *mingw* )
+ eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+ eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
+ ;;
+ esac
+ }
+ else
+ $opt_dry_run || {
+ eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
+ eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
+ eval '$MV "$nlist"T "$nlist"'
+ case $host in
+ *cygwin | *mingw* )
+ eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+ eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
+ ;;
+ esac
+ }
+ fi
+ fi
+
+ for dlprefile in $dlprefiles; do
+ func_verbose "extracting global C symbols from \`$dlprefile'"
+ func_basename "$dlprefile"
+ name="$func_basename_result"
+ $opt_dry_run || {
+ eval '$ECHO ": $name " >> "$nlist"'
+ eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+ }
+ done
+
+ $opt_dry_run || {
+ # Make sure we have at least an empty file.
+ test -f "$nlist" || : > "$nlist"
+
+ if test -n "$exclude_expsyms"; then
+ $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
+ $MV "$nlist"T "$nlist"
+ fi
+
+ # Try sorting and uniquifying the output.
+ if $GREP -v "^: " < "$nlist" |
+ if sort -k 3 </dev/null >/dev/null 2>&1; then
+ sort -k 3
+ else
+ sort +2
+ fi |
+ uniq > "$nlist"S; then
+ :
+ else
+ $GREP -v "^: " < "$nlist" > "$nlist"S
+ fi
+
+ if test -f "$nlist"S; then
+ eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
+ else
+ $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms"
+ fi
+
+ $ECHO >> "$output_objdir/$my_dlsyms" "\
+
+/* The mapping between symbol names and symbols. */
+typedef struct {
+ const char *name;
+ void *address;
+} lt_dlsymlist;
+"
+ case $host in
+ *cygwin* | *mingw* )
+ $ECHO >> "$output_objdir/$my_dlsyms" "\
+/* DATA imports from DLLs on WIN32 con't be const, because
+ runtime relocations are performed -- see ld's documentation
+ on pseudo-relocs. */"
+ lt_dlsym_const= ;;
+ *osf5*)
+ echo >> "$output_objdir/$my_dlsyms" "\
+/* This system does not cope well with relocations in const data */"
+ lt_dlsym_const= ;;
+ *)
+ lt_dlsym_const=const ;;
+ esac
+
+ $ECHO >> "$output_objdir/$my_dlsyms" "\
+extern $lt_dlsym_const lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[];
+$lt_dlsym_const lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[] =
+{\
+ { \"$my_originator\", (void *) 0 },"
+
+ case $need_lib_prefix in
+ no)
+ eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
+ ;;
+ *)
+ eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
+ ;;
+ esac
+ $ECHO >> "$output_objdir/$my_dlsyms" "\
+ {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt_${my_prefix}_LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif\
+"
+ } # !$opt_dry_run
+
+ pic_flag_for_symtable=
+ case "$compile_command " in
+ *" -static "*) ;;
+ *)
+ case $host in
+ # compiling the symbol table file with pic_flag works around
+ # a FreeBSD bug that causes programs to crash when -lm is
+ # linked before any other PIC object. But we must not use
+ # pic_flag when linking with -static. The problem exists in
+ # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
+ *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+ pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
+ *-*-hpux*)
+ pic_flag_for_symtable=" $pic_flag" ;;
+ *)
+ if test "X$my_pic_p" != Xno; then
+ pic_flag_for_symtable=" $pic_flag"
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ symtab_cflags=
+ for arg in $LTCFLAGS; do
+ case $arg in
+ -pie | -fpie | -fPIE) ;;
+ *) symtab_cflags="$symtab_cflags $arg" ;;
+ esac
+ done
+
+ # Now compile the dynamic symbol file.
+ func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
+
+ # Clean up the generated files.
+ func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
+
+ # Transform the symbol file into the correct name.
+ symfileobj="$output_objdir/${my_outputname}S.$objext"
+ case $host in
+ *cygwin* | *mingw* )
+ if test -f "$output_objdir/$my_outputname.def"; then
+ compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+ finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+ else
+ compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+ finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+ fi
+ ;;
+ *)
+ compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+ finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+ ;;
+ esac
+ ;;
+ *)
+ func_fatal_error "unknown suffix for \`$my_dlsyms'"
+ ;;
+ esac
+ else
+ # We keep going just in case the user didn't refer to
+ # lt_preloaded_symbols. The linker will fail if global_symbol_pipe
+ # really was required.
+
+ # Nullify the symbol file.
+ compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
+ finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
+ fi
+}
+
+# func_win32_libid arg
+# return the library type of file 'arg'
+#
+# Need a lot of goo to handle *both* DLLs and import libs
+# Has to be a shell function in order to 'eat' the argument
+# that is supplied when $file_magic_command is called.
+func_win32_libid ()
+{
+ $opt_debug
+ win32_libid_type="unknown"
+ win32_fileres=`file -L $1 2>/dev/null`
+ case $win32_fileres in
+ *ar\ archive\ import\ library*) # definitely import
+ win32_libid_type="x86 archive import"
+ ;;
+ *ar\ archive*) # could be an import, or static
+ if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
+ $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
+ win32_nmres=`eval $NM -f posix -A $1 |
+ $SED -n -e '
+ 1,100{
+ / I /{
+ s,.*,import,
+ p
+ q
+ }
+ }'`
+ case $win32_nmres in
+ import*) win32_libid_type="x86 archive import";;
+ *) win32_libid_type="x86 archive static";;
+ esac
+ fi
+ ;;
+ *DLL*)
+ win32_libid_type="x86 DLL"
+ ;;
+ *executable*) # but shell scripts are "executable" too...
+ case $win32_fileres in
+ *MS\ Windows\ PE\ Intel*)
+ win32_libid_type="x86 DLL"
+ ;;
+ esac
+ ;;
+ esac
+ $ECHO "$win32_libid_type"
+}
+
+
+
+# func_extract_an_archive dir oldlib
+func_extract_an_archive ()
+{
+ $opt_debug
+ f_ex_an_ar_dir="$1"; shift
+ f_ex_an_ar_oldlib="$1"
+ func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?'
+ if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
+ fi
+}
+
+
+# func_extract_archives gentop oldlib ...
+func_extract_archives ()
+{
+ $opt_debug
+ my_gentop="$1"; shift
+ my_oldlibs=${1+"$@"}
+ my_oldobjs=""
+ my_xlib=""
+ my_xabs=""
+ my_xdir=""
+
+ for my_xlib in $my_oldlibs; do
+ # Extract the objects.
+ case $my_xlib in
+ [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
+ *) my_xabs=`pwd`"/$my_xlib" ;;
+ esac
+ func_basename "$my_xlib"
+ my_xlib="$func_basename_result"
+ my_xlib_u=$my_xlib
+ while :; do
+ case " $extracted_archives " in
+ *" $my_xlib_u "*)
+ func_arith $extracted_serial + 1
+ extracted_serial=$func_arith_result
+ my_xlib_u=lt$extracted_serial-$my_xlib ;;
+ *) break ;;
+ esac
+ done
+ extracted_archives="$extracted_archives $my_xlib_u"
+ my_xdir="$my_gentop/$my_xlib_u"
+
+ func_mkdir_p "$my_xdir"
+
+ case $host in
+ *-darwin*)
+ func_verbose "Extracting $my_xabs"
+ # Do not bother doing anything if just a dry run
+ $opt_dry_run || {
+ darwin_orig_dir=`pwd`
+ cd $my_xdir || exit $?
+ darwin_archive=$my_xabs
+ darwin_curdir=`pwd`
+ darwin_base_archive=`basename "$darwin_archive"`
+ darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
+ if test -n "$darwin_arches"; then
+ darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
+ darwin_arch=
+ func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
+ for darwin_arch in $darwin_arches ; do
+ func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
+ $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
+ cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
+ func_extract_an_archive "`pwd`" "${darwin_base_archive}"
+ cd "$darwin_curdir"
+ $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
+ done # $darwin_arches
+ ## Okay now we've a bunch of thin objects, gotta fatten them up :)
+ darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
+ darwin_file=
+ darwin_files=
+ for darwin_file in $darwin_filelist; do
+ darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
+ $LIPO -create -output "$darwin_file" $darwin_files
+ done # $darwin_filelist
+ $RM -rf unfat-$$
+ cd "$darwin_orig_dir"
+ else
+ cd $darwin_orig_dir
+ func_extract_an_archive "$my_xdir" "$my_xabs"
+ fi # $darwin_arches
+ } # !$opt_dry_run
+ ;;
+ *)
+ func_extract_an_archive "$my_xdir" "$my_xabs"
+ ;;
+ esac
+ my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
+ done
+
+ func_extract_archives_result="$my_oldobjs"
+}
+
+
+
+# func_emit_wrapper arg
+#
+# emit a libtool wrapper script on stdout
+# don't directly open a file because we may want to
+# incorporate the script contents within a cygwin/mingw
+# wrapper executable. Must ONLY be called from within
+# func_mode_link because it depends on a number of variable
+# set therein.
+#
+# arg is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
+# variable will take. If 'yes', then the emitted script
+# will assume that the directory in which it is stored is
+# the '.lib' directory. This is a cygwin/mingw-specific
+# behavior.
+func_emit_wrapper ()
+{
+ func_emit_wrapper_arg1=no
+ if test -n "$1" ; then
+ func_emit_wrapper_arg1=$1
+ fi
+
+ $ECHO "\
+#! $SHELL
+
+# $output - temporary wrapper script for $objdir/$outputname
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# The $output program cannot be directly executed until all the libtool
+# libraries that it depends on are installed.
+#
+# This wrapper script should never be moved out of the build directory.
+# If it is, it will not operate correctly.
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='${SED} -e 1s/^X//'
+sed_quote_subst='$sed_quote_subst'
+
+# Be Bourne compatible
+if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '\${1+\"\$@\"}'='\"\$@\"'
+ setopt NO_GLOB_SUBST
+else
+ case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+relink_command=\"$relink_command\"
+
+# This environment variable determines our operation mode.
+if test \"\$libtool_install_magic\" = \"$magic\"; then
+ # install mode needs the following variables:
+ generated_by_libtool_version='$macro_version'
+ notinst_deplibs='$notinst_deplibs'
+else
+ # When we are sourced in execute mode, \$file and \$ECHO are already set.
+ if test \"\$libtool_execute_magic\" != \"$magic\"; then
+ ECHO=\"$qecho\"
+ file=\"\$0\"
+ # Make sure echo works.
+ if test \"X\$1\" = X--no-reexec; then
+ # Discard the --no-reexec flag, and continue.
+ shift
+ elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then
+ # Yippee, \$ECHO works!
+ :
+ else
+ # Restart under the correct shell, and then maybe \$ECHO will work.
+ exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
+ fi
+ fi\
+"
+ $ECHO "\
+
+ # Find the directory that this script lives in.
+ thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
+ test \"x\$thisdir\" = \"x\$file\" && thisdir=.
+
+ # Follow symbolic links until we get to the real thisdir.
+ file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
+ while test -n \"\$file\"; do
+ destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
+
+ # If there was a directory component, then change thisdir.
+ if test \"x\$destdir\" != \"x\$file\"; then
+ case \"\$destdir\" in
+ [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
+ *) thisdir=\"\$thisdir/\$destdir\" ;;
+ esac
+ fi
+
+ file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
+ file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
+ done
+
+ # Usually 'no', except on cygwin/mingw when embedded into
+ # the cwrapper.
+ WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
+ if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
+ # special case for '.'
+ if test \"\$thisdir\" = \".\"; then
+ thisdir=\`pwd\`
+ fi
+ # remove .libs from thisdir
+ case \"\$thisdir\" in
+ *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;;
+ $objdir ) thisdir=. ;;
+ esac
+ fi
+
+ # Try to get the absolute directory name.
+ absdir=\`cd \"\$thisdir\" && pwd\`
+ test -n \"\$absdir\" && thisdir=\"\$absdir\"
+"
+
+ if test "$fast_install" = yes; then
+ $ECHO "\
+ program=lt-'$outputname'$exeext
+ progdir=\"\$thisdir/$objdir\"
+
+ if test ! -f \"\$progdir/\$program\" ||
+ { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
+ test \"X\$file\" != \"X\$progdir/\$program\"; }; then
+
+ file=\"\$\$-\$program\"
+
+ if test ! -d \"\$progdir\"; then
+ $MKDIR \"\$progdir\"
+ else
+ $RM \"\$progdir/\$file\"
+ fi"
+
+ $ECHO "\
+
+ # relink executable if necessary
+ if test -n \"\$relink_command\"; then
+ if relink_command_output=\`eval \$relink_command 2>&1\`; then :
+ else
+ $ECHO \"\$relink_command_output\" >&2
+ $RM \"\$progdir/\$file\"
+ exit 1
+ fi
+ fi
+
+ $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
+ { $RM \"\$progdir/\$program\";
+ $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
+ $RM \"\$progdir/\$file\"
+ fi"
+ else
+ $ECHO "\
+ program='$outputname'
+ progdir=\"\$thisdir/$objdir\"
+"
+ fi
+
+ $ECHO "\
+
+ if test -f \"\$progdir/\$program\"; then"
+
+ # Export our shlibpath_var if we have one.
+ if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+ $ECHO "\
+ # Add our own library path to $shlibpath_var
+ $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
+
+ # Some systems cannot cope with colon-terminated $shlibpath_var
+ # The second colon is a workaround for a bug in BeOS R4 sed
+ $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
+
+ export $shlibpath_var
+"
+ fi
+
+ # fixup the dll searchpath if we need to.
+ if test -n "$dllsearchpath"; then
+ $ECHO "\
+ # Add the dll search path components to the executable PATH
+ PATH=$dllsearchpath:\$PATH
+"
+ fi
+
+ $ECHO "\
+ if test \"\$libtool_execute_magic\" != \"$magic\"; then
+ # Run the actual program with our arguments.
+"
+ case $host in
+ # Backslashes separate directories on plain windows
+ *-*-mingw | *-*-os2*)
+ $ECHO "\
+ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
+"
+ ;;
+
+ *)
+ $ECHO "\
+ exec \"\$progdir/\$program\" \${1+\"\$@\"}
+"
+ ;;
+ esac
+ $ECHO "\
+ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
+ exit 1
+ fi
+ else
+ # The program doesn't exist.
+ \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
+ \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
+ $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
+ exit 1
+ fi
+fi\
+"
+}
+# end: func_emit_wrapper
+
+# func_emit_cwrapperexe_src
+# emit the source code for a wrapper executable on stdout
+# Must ONLY be called from within func_mode_link because
+# it depends on a number of variable set therein.
+func_emit_cwrapperexe_src ()
+{
+ cat <<EOF
+
+/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
+ Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+
+ The $output program cannot be directly executed until all the libtool
+ libraries that it depends on are installed.
+
+ This wrapper executable should never be moved out of the build directory.
+ If it is, it will not operate correctly.
+
+ Currently, it simply execs the wrapper *script* "$SHELL $output",
+ but could eventually absorb all of the scripts functionality and
+ exec $objdir/$outputname directly.
+*/
+EOF
+ cat <<"EOF"
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef _MSC_VER
+# include <direct.h>
+# include <process.h>
+# include <io.h>
+# define setmode _setmode
+#else
+# include <unistd.h>
+# include <stdint.h>
+# ifdef __CYGWIN__
+# include <io.h>
+# endif
+#endif
+#include <malloc.h>
+#include <stdarg.h>
+#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+#if defined(PATH_MAX)
+# define LT_PATHMAX PATH_MAX
+#elif defined(MAXPATHLEN)
+# define LT_PATHMAX MAXPATHLEN
+#else
+# define LT_PATHMAX 1024
+#endif
+
+#ifndef S_IXOTH
+# define S_IXOTH 0
+#endif
+#ifndef S_IXGRP
+# define S_IXGRP 0
+#endif
+
+#ifdef _MSC_VER
+# define S_IXUSR _S_IEXEC
+# define stat _stat
+# ifndef _INTPTR_T_DEFINED
+# define intptr_t int
+# endif
+#endif
+
+#ifndef DIR_SEPARATOR
+# define DIR_SEPARATOR '/'
+# define PATH_SEPARATOR ':'
+#endif
+
+#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
+ defined (__OS2__)
+# define HAVE_DOS_BASED_FILE_SYSTEM
+# define FOPEN_WB "wb"
+# ifndef DIR_SEPARATOR_2
+# define DIR_SEPARATOR_2 '\\'
+# endif
+# ifndef PATH_SEPARATOR_2
+# define PATH_SEPARATOR_2 ';'
+# endif
+#endif
+
+#ifndef DIR_SEPARATOR_2
+# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
+#else /* DIR_SEPARATOR_2 */
+# define IS_DIR_SEPARATOR(ch) \
+ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
+#endif /* DIR_SEPARATOR_2 */
+
+#ifndef PATH_SEPARATOR_2
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
+#else /* PATH_SEPARATOR_2 */
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
+#endif /* PATH_SEPARATOR_2 */
+
+#ifdef __CYGWIN__
+# define FOPEN_WB "wb"
+#endif
+
+#ifndef FOPEN_WB
+# define FOPEN_WB "w"
+#endif
+#ifndef _O_BINARY
+# define _O_BINARY 0
+#endif
+
+#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type)))
+#define XFREE(stale) do { \
+ if (stale) { free ((void *) stale); stale = 0; } \
+} while (0)
+
+#undef LTWRAPPER_DEBUGPRINTF
+#if defined DEBUGWRAPPER
+# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args
+static void
+ltwrapper_debugprintf (const char *fmt, ...)
+{
+ va_list args;
+ va_start (args, fmt);
+ (void) vfprintf (stderr, fmt, args);
+ va_end (args);
+}
+#else
+# define LTWRAPPER_DEBUGPRINTF(args)
+#endif
+
+const char *program_name = NULL;
+
+void *xmalloc (size_t num);
+char *xstrdup (const char *string);
+const char *base_name (const char *name);
+char *find_executable (const char *wrapper);
+char *chase_symlinks (const char *pathspec);
+int make_executable (const char *path);
+int check_executable (const char *path);
+char *strendzap (char *str, const char *pat);
+void lt_fatal (const char *message, ...);
+
+static const char *script_text =
+EOF
+
+ func_emit_wrapper yes |
+ $SED -e 's/\([\\"]\)/\\\1/g' \
+ -e 's/^/ "/' -e 's/$/\\n"/'
+ echo ";"
+
+ cat <<EOF
+const char * MAGIC_EXE = "$magic_exe";
+
+int
+main (int argc, char *argv[])
+{
+ char **newargz;
+ char *tmp_pathspec;
+ char *actual_cwrapper_path;
+ char *shwrapper_name;
+ intptr_t rval = 127;
+ FILE *shwrapper;
+
+ const char *dumpscript_opt = "--lt-dump-script";
+ int i;
+
+ program_name = (char *) xstrdup (base_name (argv[0]));
+ LTWRAPPER_DEBUGPRINTF (("(main) argv[0] : %s\n", argv[0]));
+ LTWRAPPER_DEBUGPRINTF (("(main) program_name : %s\n", program_name));
+
+ /* very simple arg parsing; don't want to rely on getopt */
+ for (i = 1; i < argc; i++)
+ {
+ if (strcmp (argv[i], dumpscript_opt) == 0)
+ {
+EOF
+ case "$host" in
+ *mingw* | *cygwin* )
+ # make stdout use "unix" line endings
+ echo " setmode(1,_O_BINARY);"
+ ;;
+ esac
+
+ cat <<EOF
+ printf ("%s", script_text);
+ return 0;
+ }
+ }
+
+ newargz = XMALLOC (char *, argc + 2);
+EOF
+
+ if test -n "$TARGETSHELL" ; then
+ # no path translation at all
+ lt_newargv0=$TARGETSHELL
+ else
+ case "$host" in
+ *mingw* )
+ # awkward: cmd appends spaces to result
+ lt_sed_strip_trailing_spaces="s/[ ]*\$//"
+ lt_newargv0=`( cmd //c echo $SHELL | $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo $SHELL`
+ case $lt_newargv0 in
+ *.exe | *.EXE) ;;
+ *) lt_newargv0=$lt_newargv0.exe ;;
+ esac
+ ;;
+ * ) lt_newargv0=$SHELL ;;
+ esac
+ fi
+
+ cat <<EOF
+ newargz[0] = (char *) xstrdup ("$lt_newargv0");
+EOF
+
+ cat <<"EOF"
+ tmp_pathspec = find_executable (argv[0]);
+ if (tmp_pathspec == NULL)
+ lt_fatal ("Couldn't find %s", argv[0]);
+ LTWRAPPER_DEBUGPRINTF (("(main) found exe (before symlink chase) at : %s\n",
+ tmp_pathspec));
+
+ actual_cwrapper_path = chase_symlinks (tmp_pathspec);
+ LTWRAPPER_DEBUGPRINTF (("(main) found exe (after symlink chase) at : %s\n",
+ actual_cwrapper_path));
+ XFREE (tmp_pathspec);
+
+ shwrapper_name = (char *) xstrdup (base_name (actual_cwrapper_path));
+ strendzap (actual_cwrapper_path, shwrapper_name);
+
+ /* shwrapper_name transforms */
+ strendzap (shwrapper_name, ".exe");
+ tmp_pathspec = XMALLOC (char, (strlen (shwrapper_name) +
+ strlen ("_ltshwrapperTMP") + 1));
+ strcpy (tmp_pathspec, shwrapper_name);
+ strcat (tmp_pathspec, "_ltshwrapperTMP");
+ XFREE (shwrapper_name);
+ shwrapper_name = tmp_pathspec;
+ tmp_pathspec = 0;
+ LTWRAPPER_DEBUGPRINTF (("(main) libtool shell wrapper name: %s\n",
+ shwrapper_name));
+EOF
+
+ cat <<EOF
+ newargz[1] =
+ XMALLOC (char, (strlen (actual_cwrapper_path) +
+ strlen ("$objdir") + 1 + strlen (shwrapper_name) + 1));
+ strcpy (newargz[1], actual_cwrapper_path);
+ strcat (newargz[1], "$objdir");
+ strcat (newargz[1], "/");
+ strcat (newargz[1], shwrapper_name);
+EOF
+
+
+ case $host_os in
+ mingw*)
+ cat <<"EOF"
+ {
+ char* p;
+ while ((p = strchr (newargz[1], '\\')) != NULL)
+ {
+ *p = '/';
+ }
+ }
+EOF
+ ;;
+ esac
+
+ cat <<"EOF"
+ XFREE (shwrapper_name);
+ XFREE (actual_cwrapper_path);
+
+ /* always write in binary mode */
+ if ((shwrapper = fopen (newargz[1], FOPEN_WB)) == 0)
+ {
+ lt_fatal ("Could not open %s for writing", newargz[1]);
+ }
+ fprintf (shwrapper, "%s", script_text);
+ fclose (shwrapper);
+
+ make_executable (newargz[1]);
+
+ for (i = 1; i < argc; i++)
+ newargz[i + 1] = xstrdup (argv[i]);
+ newargz[argc + 1] = NULL;
+
+ for (i = 0; i < argc + 1; i++)
+ {
+ LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d] : %s\n", i, newargz[i]));
+ }
+
+EOF
+
+ case $host_os in
+ mingw*)
+ cat <<EOF
+ /* execv doesn't actually work on mingw as expected on unix */
+ rval = _spawnv (_P_WAIT, "$lt_newargv0", (const char * const *) newargz);
+ if (rval == -1)
+ {
+ /* failed to start process */
+ LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"$lt_newargv0\": errno = %d\n", errno));
+ return 127;
+ }
+ return rval;
+}
+EOF
+ ;;
+ *)
+ cat <<EOF
+ execv ("$lt_newargv0", newargz);
+ return rval; /* =127, but avoids unused variable warning */
+}
+EOF
+ ;;
+ esac
+
+ cat <<"EOF"
+
+void *
+xmalloc (size_t num)
+{
+ void *p = (void *) malloc (num);
+ if (!p)
+ lt_fatal ("Memory exhausted");
+
+ return p;
+}
+
+char *
+xstrdup (const char *string)
+{
+ return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
+ string) : NULL;
+}
+
+const char *
+base_name (const char *name)
+{
+ const char *base;
+
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+ /* Skip over the disk name in MSDOS pathnames. */
+ if (isalpha ((unsigned char) name[0]) && name[1] == ':')
+ name += 2;
+#endif
+
+ for (base = name; *name; name++)
+ if (IS_DIR_SEPARATOR (*name))
+ base = name + 1;
+ return base;
+}
+
+int
+check_executable (const char *path)
+{
+ struct stat st;
+
+ LTWRAPPER_DEBUGPRINTF (("(check_executable) : %s\n",
+ path ? (*path ? path : "EMPTY!") : "NULL!"));
+ if ((!path) || (!*path))
+ return 0;
+
+ if ((stat (path, &st) >= 0)
+ && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
+ return 1;
+ else
+ return 0;
+}
+
+int
+make_executable (const char *path)
+{
+ int rval = 0;
+ struct stat st;
+
+ LTWRAPPER_DEBUGPRINTF (("(make_executable) : %s\n",
+ path ? (*path ? path : "EMPTY!") : "NULL!"));
+ if ((!path) || (!*path))
+ return 0;
+
+ if (stat (path, &st) >= 0)
+ {
+ rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
+ }
+ return rval;
+}
+
+/* Searches for the full path of the wrapper. Returns
+ newly allocated full path name if found, NULL otherwise
+ Does not chase symlinks, even on platforms that support them.
+*/
+char *
+find_executable (const char *wrapper)
+{
+ int has_slash = 0;
+ const char *p;
+ const char *p_next;
+ /* static buffer for getcwd */
+ char tmp[LT_PATHMAX + 1];
+ int tmp_len;
+ char *concat_name;
+
+ LTWRAPPER_DEBUGPRINTF (("(find_executable) : %s\n",
+ wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"));
+
+ if ((wrapper == NULL) || (*wrapper == '\0'))
+ return NULL;
+
+ /* Absolute path? */
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+ if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
+ {
+ concat_name = xstrdup (wrapper);
+ if (check_executable (concat_name))
+ return concat_name;
+ XFREE (concat_name);
+ }
+ else
+ {
+#endif
+ if (IS_DIR_SEPARATOR (wrapper[0]))
+ {
+ concat_name = xstrdup (wrapper);
+ if (check_executable (concat_name))
+ return concat_name;
+ XFREE (concat_name);
+ }
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+ }
+#endif
+
+ for (p = wrapper; *p; p++)
+ if (*p == '/')
+ {
+ has_slash = 1;
+ break;
+ }
+ if (!has_slash)
+ {
+ /* no slashes; search PATH */
+ const char *path = getenv ("PATH");
+ if (path != NULL)
+ {
+ for (p = path; *p; p = p_next)
+ {
+ const char *q;
+ size_t p_len;
+ for (q = p; *q; q++)
+ if (IS_PATH_SEPARATOR (*q))
+ break;
+ p_len = q - p;
+ p_next = (*q == '\0' ? q : q + 1);
+ if (p_len == 0)
+ {
+ /* empty path: current directory */
+ if (getcwd (tmp, LT_PATHMAX) == NULL)
+ lt_fatal ("getcwd failed");
+ tmp_len = strlen (tmp);
+ concat_name =
+ XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+ memcpy (concat_name, tmp, tmp_len);
+ concat_name[tmp_len] = '/';
+ strcpy (concat_name + tmp_len + 1, wrapper);
+ }
+ else
+ {
+ concat_name =
+ XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
+ memcpy (concat_name, p, p_len);
+ concat_name[p_len] = '/';
+ strcpy (concat_name + p_len + 1, wrapper);
+ }
+ if (check_executable (concat_name))
+ return concat_name;
+ XFREE (concat_name);
+ }
+ }
+ /* not found in PATH; assume curdir */
+ }
+ /* Relative path | not found in path: prepend cwd */
+ if (getcwd (tmp, LT_PATHMAX) == NULL)
+ lt_fatal ("getcwd failed");
+ tmp_len = strlen (tmp);
+ concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+ memcpy (concat_name, tmp, tmp_len);
+ concat_name[tmp_len] = '/';
+ strcpy (concat_name + tmp_len + 1, wrapper);
+
+ if (check_executable (concat_name))
+ return concat_name;
+ XFREE (concat_name);
+ return NULL;
+}
+
+char *
+chase_symlinks (const char *pathspec)
+{
+#ifndef S_ISLNK
+ return xstrdup (pathspec);
+#else
+ char buf[LT_PATHMAX];
+ struct stat s;
+ char *tmp_pathspec = xstrdup (pathspec);
+ char *p;
+ int has_symlinks = 0;
+ while (strlen (tmp_pathspec) && !has_symlinks)
+ {
+ LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n",
+ tmp_pathspec));
+ if (lstat (tmp_pathspec, &s) == 0)
+ {
+ if (S_ISLNK (s.st_mode) != 0)
+ {
+ has_symlinks = 1;
+ break;
+ }
+
+ /* search backwards for last DIR_SEPARATOR */
+ p = tmp_pathspec + strlen (tmp_pathspec) - 1;
+ while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+ p--;
+ if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+ {
+ /* no more DIR_SEPARATORS left */
+ break;
+ }
+ *p = '\0';
+ }
+ else
+ {
+ char *errstr = strerror (errno);
+ lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr);
+ }
+ }
+ XFREE (tmp_pathspec);
+
+ if (!has_symlinks)
+ {
+ return xstrdup (pathspec);
+ }
+
+ tmp_pathspec = realpath (pathspec, buf);
+ if (tmp_pathspec == 0)
+ {
+ lt_fatal ("Could not follow symlinks for %s", pathspec);
+ }
+ return xstrdup (tmp_pathspec);
+#endif
+}
+
+char *
+strendzap (char *str, const char *pat)
+{
+ size_t len, patlen;
+
+ assert (str != NULL);
+ assert (pat != NULL);
+
+ len = strlen (str);
+ patlen = strlen (pat);
+
+ if (patlen <= len)
+ {
+ str += len - patlen;
+ if (strcmp (str, pat) == 0)
+ *str = '\0';
+ }
+ return str;
+}
+
+static void
+lt_error_core (int exit_status, const char *mode,
+ const char *message, va_list ap)
+{
+ fprintf (stderr, "%s: %s: ", program_name, mode);
+ vfprintf (stderr, message, ap);
+ fprintf (stderr, ".\n");
+
+ if (exit_status >= 0)
+ exit (exit_status);
+}
+
+void
+lt_fatal (const char *message, ...)
+{
+ va_list ap;
+ va_start (ap, message);
+ lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
+ va_end (ap);
+}
+EOF
+}
+# end: func_emit_cwrapperexe_src
+
+# func_mode_link arg...
+func_mode_link ()
+{
+ $opt_debug
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+ # It is impossible to link a dll without this setting, and
+ # we shouldn't force the makefile maintainer to figure out
+ # which system we are compiling for in order to pass an extra
+ # flag for every libtool invocation.
+ # allow_undefined=no
+
+ # FIXME: Unfortunately, there are problems with the above when trying
+ # to make a dll which has undefined symbols, in which case not
+ # even a static library is built. For now, we need to specify
+ # -no-undefined on the libtool link line when we can be certain
+ # that all symbols are satisfied, otherwise we get a static library.
+ allow_undefined=yes
+ ;;
+ *)
+ allow_undefined=yes
+ ;;
+ esac
+ libtool_args=$nonopt
+ base_compile="$nonopt $@"
+ compile_command=$nonopt
+ finalize_command=$nonopt
+
+ compile_rpath=
+ finalize_rpath=
+ compile_shlibpath=
+ finalize_shlibpath=
+ convenience=
+ old_convenience=
+ deplibs=
+ old_deplibs=
+ compiler_flags=
+ linker_flags=
+ dllsearchpath=
+ lib_search_path=`pwd`
+ inst_prefix_dir=
+ new_inherited_linker_flags=
+
+ avoid_version=no
+ dlfiles=
+ dlprefiles=
+ dlself=no
+ export_dynamic=no
+ export_symbols=
+ export_symbols_regex=
+ generated=
+ libobjs=
+ ltlibs=
+ module=no
+ no_install=no
+ objs=
+ non_pic_objects=
+ precious_files_regex=
+ prefer_static_libs=no
+ preload=no
+ prev=
+ prevarg=
+ release=
+ rpath=
+ xrpath=
+ perm_rpath=
+ temp_rpath=
+ thread_safe=no
+ vinfo=
+ vinfo_number=no
+ weak_libs=
+ single_module="${wl}-single_module"
+ func_infer_tag $base_compile
+
+ # We need to know -static, to get the right output filenames.
+ for arg
+ do
+ case $arg in
+ -shared)
+ test "$build_libtool_libs" != yes && \
+ func_fatal_configuration "can not build a shared library"
+ build_old_libs=no
+ break
+ ;;
+ -all-static | -static | -static-libtool-libs)
+ case $arg in
+ -all-static)
+ if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
+ func_warning "complete static linking is impossible in this configuration"
+ fi
+ if test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ prefer_static_libs=yes
+ ;;
+ -static)
+ if test -z "$pic_flag" && test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ prefer_static_libs=built
+ ;;
+ -static-libtool-libs)
+ if test -z "$pic_flag" && test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ prefer_static_libs=yes
+ ;;
+ esac
+ build_libtool_libs=no
+ build_old_libs=yes
+ break
+ ;;
+ esac
+ done
+
+ # See if our shared archives depend on static archives.
+ test -n "$old_archive_from_new_cmds" && build_old_libs=yes
+
+ # Go through the arguments, transforming them on the way.
+ while test "$#" -gt 0; do
+ arg="$1"
+ shift
+ func_quote_for_eval "$arg"
+ qarg=$func_quote_for_eval_unquoted_result
+ func_append libtool_args " $func_quote_for_eval_result"
+
+ # If the previous option needs an argument, assign it.
+ if test -n "$prev"; then
+ case $prev in
+ output)
+ func_append compile_command " @OUTPUT@"
+ func_append finalize_command " @OUTPUT@"
+ ;;
+ esac
+
+ case $prev in
+ dlfiles|dlprefiles)
+ if test "$preload" = no; then
+ # Add the symbol object into the linking commands.
+ func_append compile_command " @SYMFILE@"
+ func_append finalize_command " @SYMFILE@"
+ preload=yes
+ fi
+ case $arg in
+ *.la | *.lo) ;; # We handle these cases below.
+ force)
+ if test "$dlself" = no; then
+ dlself=needless
+ export_dynamic=yes
+ fi
+ prev=
+ continue
+ ;;
+ self)
+ if test "$prev" = dlprefiles; then
+ dlself=yes
+ elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
+ dlself=yes
+ else
+ dlself=needless
+ export_dynamic=yes
+ fi
+ prev=
+ continue
+ ;;
+ *)
+ if test "$prev" = dlfiles; then
+ dlfiles="$dlfiles $arg"
+ else
+ dlprefiles="$dlprefiles $arg"
+ fi
+ prev=
+ continue
+ ;;
+ esac
+ ;;
+ expsyms)
+ export_symbols="$arg"
+ test -f "$arg" \
+ || func_fatal_error "symbol file \`$arg' does not exist"
+ prev=
+ continue
+ ;;
+ expsyms_regex)
+ export_symbols_regex="$arg"
+ prev=
+ continue
+ ;;
+ framework)
+ case $host in
+ *-*-darwin*)
+ case "$deplibs " in
+ *" $qarg.ltframework "*) ;;
+ *) deplibs="$deplibs $qarg.ltframework" # this is fixed later
+ ;;
+ esac
+ ;;
+ esac
+ prev=
+ continue
+ ;;
+ inst_prefix)
+ inst_prefix_dir="$arg"
+ prev=
+ continue
+ ;;
+ objectlist)
+ if test -f "$arg"; then
+ save_arg=$arg
+ moreargs=
+ for fil in `cat "$save_arg"`
+ do
+# moreargs="$moreargs $fil"
+ arg=$fil
+ # A libtool-controlled object.
+
+ # Check to see that this really is a libtool object.
+ if func_lalib_unsafe_p "$arg"; then
+ pic_object=
+ non_pic_object=
+
+ # Read the .lo file
+ func_source "$arg"
+
+ if test -z "$pic_object" ||
+ test -z "$non_pic_object" ||
+ test "$pic_object" = none &&
+ test "$non_pic_object" = none; then
+ func_fatal_error "cannot find name of object for \`$arg'"
+ fi
+
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir="$func_dirname_result"
+
+ if test "$pic_object" != none; then
+ # Prepend the subdirectory the object is found in.
+ pic_object="$xdir$pic_object"
+
+ if test "$prev" = dlfiles; then
+ if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+ dlfiles="$dlfiles $pic_object"
+ prev=
+ continue
+ else
+ # If libtool objects are unsupported, then we need to preload.
+ prev=dlprefiles
+ fi
+ fi
+
+ # CHECK ME: I think I busted this. -Ossama
+ if test "$prev" = dlprefiles; then
+ # Preload the old-style object.
+ dlprefiles="$dlprefiles $pic_object"
+ prev=
+ fi
+
+ # A PIC object.
+ func_append libobjs " $pic_object"
+ arg="$pic_object"
+ fi
+
+ # Non-PIC object.
+ if test "$non_pic_object" != none; then
+ # Prepend the subdirectory the object is found in.
+ non_pic_object="$xdir$non_pic_object"
+
+ # A standard non-PIC object
+ func_append non_pic_objects " $non_pic_object"
+ if test -z "$pic_object" || test "$pic_object" = none ; then
+ arg="$non_pic_object"
+ fi
+ else
+ # If the PIC object exists, use it instead.
+ # $xdir was prepended to $pic_object above.
+ non_pic_object="$pic_object"
+ func_append non_pic_objects " $non_pic_object"
+ fi
+ else
+ # Only an error if not doing a dry-run.
+ if $opt_dry_run; then
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir="$func_dirname_result"
+
+ func_lo2o "$arg"
+ pic_object=$xdir$objdir/$func_lo2o_result
+ non_pic_object=$xdir$func_lo2o_result
+ func_append libobjs " $pic_object"
+ func_append non_pic_objects " $non_pic_object"
+ else
+ func_fatal_error "\`$arg' is not a valid libtool object"
+ fi
+ fi
+ done
+ else
+ func_fatal_error "link input file \`$arg' does not exist"
+ fi
+ arg=$save_arg
+ prev=
+ continue
+ ;;
+ precious_regex)
+ precious_files_regex="$arg"
+ prev=
+ continue
+ ;;
+ release)
+ release="-$arg"
+ prev=
+ continue
+ ;;
+ rpath | xrpath)
+ # We need an absolute path.
+ case $arg in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ func_fatal_error "only absolute run-paths are allowed"
+ ;;
+ esac
+ if test "$prev" = rpath; then
+ case "$rpath " in
+ *" $arg "*) ;;
+ *) rpath="$rpath $arg" ;;
+ esac
+ else
+ case "$xrpath " in
+ *" $arg "*) ;;
+ *) xrpath="$xrpath $arg" ;;
+ esac
+ fi
+ prev=
+ continue
+ ;;
+ shrext)
+ shrext_cmds="$arg"
+ prev=
+ continue
+ ;;
+ weak)
+ weak_libs="$weak_libs $arg"
+ prev=
+ continue
+ ;;
+ xcclinker)
+ linker_flags="$linker_flags $qarg"
+ compiler_flags="$compiler_flags $qarg"
+ prev=
+ func_append compile_command " $qarg"
+ func_append finalize_command " $qarg"
+ continue
+ ;;
+ xcompiler)
+ compiler_flags="$compiler_flags $qarg"
+ prev=
+ func_append compile_command " $qarg"
+ func_append finalize_command " $qarg"
+ continue
+ ;;
+ xlinker)
+ linker_flags="$linker_flags $qarg"
+ compiler_flags="$compiler_flags $wl$qarg"
+ prev=
+ func_append compile_command " $wl$qarg"
+ func_append finalize_command " $wl$qarg"
+ continue
+ ;;
+ *)
+ eval "$prev=\"\$arg\""
+ prev=
+ continue
+ ;;
+ esac
+ fi # test -n "$prev"
+
+ prevarg="$arg"
+
+ case $arg in
+ -all-static)
+ if test -n "$link_static_flag"; then
+ # See comment for -static flag below, for more details.
+ func_append compile_command " $link_static_flag"
+ func_append finalize_command " $link_static_flag"
+ fi
+ continue
+ ;;
+
+ -allow-undefined)
+ # FIXME: remove this flag sometime in the future.
+ func_fatal_error "\`-allow-undefined' must not be used because it is the default"
+ ;;
+
+ -avoid-version)
+ avoid_version=yes
+ continue
+ ;;
+
+ -dlopen)
+ prev=dlfiles
+ continue
+ ;;
+
+ -dlpreopen)
+ prev=dlprefiles
+ continue
+ ;;
+
+ -export-dynamic)
+ export_dynamic=yes
+ continue
+ ;;
+
+ -export-symbols | -export-symbols-regex)
+ if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+ func_fatal_error "more than one -exported-symbols argument is not allowed"
+ fi
+ if test "X$arg" = "X-export-symbols"; then
+ prev=expsyms
+ else
+ prev=expsyms_regex
+ fi
+ continue
+ ;;
+
+ -framework)
+ prev=framework
+ continue
+ ;;
+
+ -inst-prefix-dir)
+ prev=inst_prefix
+ continue
+ ;;
+
+ # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
+ # so, if we see these flags be careful not to treat them like -L
+ -L[A-Z][A-Z]*:*)
+ case $with_gcc/$host in
+ no/*-*-irix* | /*-*-irix*)
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ ;;
+ esac
+ continue
+ ;;
+
+ -L*)
+ func_stripname '-L' '' "$arg"
+ dir=$func_stripname_result
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ absdir=`cd "$dir" && pwd`
+ test -z "$absdir" && \
+ func_fatal_error "cannot determine absolute directory name of \`$dir'"
+ dir="$absdir"
+ ;;
+ esac
+ case "$deplibs " in
+ *" -L$dir "*) ;;
+ *)
+ deplibs="$deplibs -L$dir"
+ lib_search_path="$lib_search_path $dir"
+ ;;
+ esac
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+ testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'`
+ case :$dllsearchpath: in
+ *":$dir:"*) ;;
+ *) dllsearchpath="$dllsearchpath:$dir";;
+ esac
+ case :$dllsearchpath: in
+ *":$testbindir:"*) ;;
+ *) dllsearchpath="$dllsearchpath:$testbindir";;
+ esac
+ ;;
+ esac
+ continue
+ ;;
+
+ -l*)
+ if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos*)
+ # These systems don't actually have a C or math library (as such)
+ continue
+ ;;
+ *-*-os2*)
+ # These systems don't actually have a C library (as such)
+ test "X$arg" = "X-lc" && continue
+ ;;
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+ # Do not include libc due to us having libc/libc_r.
+ test "X$arg" = "X-lc" && continue
+ ;;
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # Rhapsody C and math libraries are in the System framework
+ deplibs="$deplibs System.ltframework"
+ continue
+ ;;
+ *-*-sco3.2v5* | *-*-sco5v6*)
+ # Causes problems with __ctype
+ test "X$arg" = "X-lc" && continue
+ ;;
+ *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+ # Compiler inserts libc in the correct place for threads to work
+ test "X$arg" = "X-lc" && continue
+ ;;
+ esac
+ elif test "X$arg" = "X-lc_r"; then
+ case $host in
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+ # Do not include libc_r directly, use -pthread flag.
+ continue
+ ;;
+ esac
+ fi
+ deplibs="$deplibs $arg"
+ continue
+ ;;
+
+ -module)
+ module=yes
+ continue
+ ;;
+
+ # Tru64 UNIX uses -model [arg] to determine the layout of C++
+ # classes, name mangling, and exception handling.
+ # Darwin uses the -arch flag to determine output architecture.
+ -model|-arch|-isysroot)
+ compiler_flags="$compiler_flags $arg"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ prev=xcompiler
+ continue
+ ;;
+
+ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+ compiler_flags="$compiler_flags $arg"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ case "$new_inherited_linker_flags " in
+ *" $arg "*) ;;
+ * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;;
+ esac
+ continue
+ ;;
+
+ -multi_module)
+ single_module="${wl}-multi_module"
+ continue
+ ;;
+
+ -no-fast-install)
+ fast_install=no
+ continue
+ ;;
+
+ -no-install)
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin*)
+ # The PATH hackery in wrapper scripts is required on Windows
+ # and Darwin in order for the loader to find any dlls it needs.
+ func_warning "\`-no-install' is ignored for $host"
+ func_warning "assuming \`-no-fast-install' instead"
+ fast_install=no
+ ;;
+ *) no_install=yes ;;
+ esac
+ continue
+ ;;
+
+ -no-undefined)
+ allow_undefined=no
+ continue
+ ;;
+
+ -objectlist)
+ prev=objectlist
+ continue
+ ;;
+
+ -o) prev=output ;;
+
+ -precious-files-regex)
+ prev=precious_regex
+ continue
+ ;;
+
+ -release)
+ prev=release
+ continue
+ ;;
+
+ -rpath)
+ prev=rpath
+ continue
+ ;;
+
+ -R)
+ prev=xrpath
+ continue
+ ;;
+
+ -R*)
+ func_stripname '-R' '' "$arg"
+ dir=$func_stripname_result
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ func_fatal_error "only absolute run-paths are allowed"
+ ;;
+ esac
+ case "$xrpath " in
+ *" $dir "*) ;;
+ *) xrpath="$xrpath $dir" ;;
+ esac
+ continue
+ ;;
+
+ -shared)
+ # The effects of -shared are defined in a previous loop.
+ continue
+ ;;
+
+ -shrext)
+ prev=shrext
+ continue
+ ;;
+
+ -static | -static-libtool-libs)
+ # The effects of -static are defined in a previous loop.
+ # We used to do the same as -all-static on platforms that
+ # didn't have a PIC flag, but the assumption that the effects
+ # would be equivalent was wrong. It would break on at least
+ # Digital Unix and AIX.
+ continue
+ ;;
+
+ -thread-safe)
+ thread_safe=yes
+ continue
+ ;;
+
+ -version-info)
+ prev=vinfo
+ continue
+ ;;
+
+ -version-number)
+ prev=vinfo
+ vinfo_number=yes
+ continue
+ ;;
+
+ -weak)
+ prev=weak
+ continue
+ ;;
+
+ -Wc,*)
+ func_stripname '-Wc,' '' "$arg"
+ args=$func_stripname_result
+ arg=
+ save_ifs="$IFS"; IFS=','
+ for flag in $args; do
+ IFS="$save_ifs"
+ func_quote_for_eval "$flag"
+ arg="$arg $wl$func_quote_for_eval_result"
+ compiler_flags="$compiler_flags $func_quote_for_eval_result"
+ done
+ IFS="$save_ifs"
+ func_stripname ' ' '' "$arg"
+ arg=$func_stripname_result
+ ;;
+
+ -Wl,*)
+ func_stripname '-Wl,' '' "$arg"
+ args=$func_stripname_result
+ arg=
+ save_ifs="$IFS"; IFS=','
+ for flag in $args; do
+ IFS="$save_ifs"
+ func_quote_for_eval "$flag"
+ arg="$arg $wl$func_quote_for_eval_result"
+ compiler_flags="$compiler_flags $wl$func_quote_for_eval_result"
+ linker_flags="$linker_flags $func_quote_for_eval_result"
+ done
+ IFS="$save_ifs"
+ func_stripname ' ' '' "$arg"
+ arg=$func_stripname_result
+ ;;
+
+ -Xcompiler)
+ prev=xcompiler
+ continue
+ ;;
+
+ -Xlinker)
+ prev=xlinker
+ continue
+ ;;
+
+ -XCClinker)
+ prev=xcclinker
+ continue
+ ;;
+
+ # -msg_* for osf cc
+ -msg_*)
+ func_quote_for_eval "$arg"
+ arg="$func_quote_for_eval_result"
+ ;;
+
+ # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
+ # -r[0-9][0-9]* specifies the processor on the SGI compiler
+ # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
+ # +DA*, +DD* enable 64-bit mode on the HP compiler
+ # -q* pass through compiler args for the IBM compiler
+ # -m*, -t[45]*, -txscale* pass through architecture-specific
+ # compiler args for GCC
+ # -F/path gives path to uninstalled frameworks, gcc on darwin
+ # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
+ # @file GCC response files
+ -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
+ func_quote_for_eval "$arg"
+ arg="$func_quote_for_eval_result"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ compiler_flags="$compiler_flags $arg"
+ continue
+ ;;
+
+ # Some other compiler flag.
+ -* | +*)
+ func_quote_for_eval "$arg"
+ arg="$func_quote_for_eval_result"
+ ;;
+
+ *.$objext)
+ # A standard object.
+ objs="$objs $arg"
+ ;;
+
+ *.lo)
+ # A libtool-controlled object.
+
+ # Check to see that this really is a libtool object.
+ if func_lalib_unsafe_p "$arg"; then
+ pic_object=
+ non_pic_object=
+
+ # Read the .lo file
+ func_source "$arg"
+
+ if test -z "$pic_object" ||
+ test -z "$non_pic_object" ||
+ test "$pic_object" = none &&
+ test "$non_pic_object" = none; then
+ func_fatal_error "cannot find name of object for \`$arg'"
+ fi
+
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir="$func_dirname_result"
+
+ if test "$pic_object" != none; then
+ # Prepend the subdirectory the object is found in.
+ pic_object="$xdir$pic_object"
+
+ if test "$prev" = dlfiles; then
+ if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+ dlfiles="$dlfiles $pic_object"
+ prev=
+ continue
+ else
+ # If libtool objects are unsupported, then we need to preload.
+ prev=dlprefiles
+ fi
+ fi
+
+ # CHECK ME: I think I busted this. -Ossama
+ if test "$prev" = dlprefiles; then
+ # Preload the old-style object.
+ dlprefiles="$dlprefiles $pic_object"
+ prev=
+ fi
+
+ # A PIC object.
+ func_append libobjs " $pic_object"
+ arg="$pic_object"
+ fi
+
+ # Non-PIC object.
+ if test "$non_pic_object" != none; then
+ # Prepend the subdirectory the object is found in.
+ non_pic_object="$xdir$non_pic_object"
+
+ # A standard non-PIC object
+ func_append non_pic_objects " $non_pic_object"
+ if test -z "$pic_object" || test "$pic_object" = none ; then
+ arg="$non_pic_object"
+ fi
+ else
+ # If the PIC object exists, use it instead.
+ # $xdir was prepended to $pic_object above.
+ non_pic_object="$pic_object"
+ func_append non_pic_objects " $non_pic_object"
+ fi
+ else
+ # Only an error if not doing a dry-run.
+ if $opt_dry_run; then
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir="$func_dirname_result"
+
+ func_lo2o "$arg"
+ pic_object=$xdir$objdir/$func_lo2o_result
+ non_pic_object=$xdir$func_lo2o_result
+ func_append libobjs " $pic_object"
+ func_append non_pic_objects " $non_pic_object"
+ else
+ func_fatal_error "\`$arg' is not a valid libtool object"
+ fi
+ fi
+ ;;
+
+ *.$libext)
+ # An archive.
+ deplibs="$deplibs $arg"
+ old_deplibs="$old_deplibs $arg"
+ continue
+ ;;
+
+ *.la)
+ # A libtool-controlled library.
+
+ if test "$prev" = dlfiles; then
+ # This library was specified with -dlopen.
+ dlfiles="$dlfiles $arg"
+ prev=
+ elif test "$prev" = dlprefiles; then
+ # The library was specified with -dlpreopen.
+ dlprefiles="$dlprefiles $arg"
+ prev=
+ else
+ deplibs="$deplibs $arg"
+ fi
+ continue
+ ;;
+
+ # Some other compiler argument.
+ *)
+ # Unknown arguments in both finalize_command and compile_command need
+ # to be aesthetically quoted because they are evaled later.
+ func_quote_for_eval "$arg"
+ arg="$func_quote_for_eval_result"
+ ;;
+ esac # arg
+
+ # Now actually substitute the argument into the commands.
+ if test -n "$arg"; then
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ fi
+ done # argument parsing loop
+
+ test -n "$prev" && \
+ func_fatal_help "the \`$prevarg' option requires an argument"
+
+ if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
+ eval arg=\"$export_dynamic_flag_spec\"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ fi
+
+ oldlibs=
+ # calculate the name of the file, without its directory
+ func_basename "$output"
+ outputname="$func_basename_result"
+ libobjs_save="$libobjs"
+
+ if test -n "$shlibpath_var"; then
+ # get the directories listed in $shlibpath_var
+ eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
+ else
+ shlib_search_path=
+ fi
+ eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
+ eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
+
+ func_dirname "$output" "/" ""
+ output_objdir="$func_dirname_result$objdir"
+ # Create the object directory.
+ func_mkdir_p "$output_objdir"
+
+ # Determine the type of output
+ case $output in
+ "")
+ func_fatal_help "you must specify an output file"
+ ;;
+ *.$libext) linkmode=oldlib ;;
+ *.lo | *.$objext) linkmode=obj ;;
+ *.la) linkmode=lib ;;
+ *) linkmode=prog ;; # Anything else should be a program.
+ esac
+
+ specialdeplibs=
+
+ libs=
+ # Find all interdependent deplibs by searching for libraries
+ # that are linked more than once (e.g. -la -lb -la)
+ for deplib in $deplibs; do
+ if $opt_duplicate_deps ; then
+ case "$libs " in
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ esac
+ fi
+ libs="$libs $deplib"
+ done
+
+ if test "$linkmode" = lib; then
+ libs="$predeps $libs $compiler_lib_search_path $postdeps"
+
+ # Compute libraries that are listed more than once in $predeps
+ # $postdeps and mark them as special (i.e., whose duplicates are
+ # not to be eliminated).
+ pre_post_deps=
+ if $opt_duplicate_compiler_generated_deps; then
+ for pre_post_dep in $predeps $postdeps; do
+ case "$pre_post_deps " in
+ *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
+ esac
+ pre_post_deps="$pre_post_deps $pre_post_dep"
+ done
+ fi
+ pre_post_deps=
+ fi
+
+ deplibs=
+ newdependency_libs=
+ newlib_search_path=
+ need_relink=no # whether we're linking any uninstalled libtool libraries
+ notinst_deplibs= # not-installed libtool libraries
+ notinst_path= # paths that contain not-installed libtool libraries
+
+ case $linkmode in
+ lib)
+ passes="conv dlpreopen link"
+ for file in $dlfiles $dlprefiles; do
+ case $file in
+ *.la) ;;
+ *)
+ func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
+ ;;
+ esac
+ done
+ ;;
+ prog)
+ compile_deplibs=
+ finalize_deplibs=
+ alldeplibs=no
+ newdlfiles=
+ newdlprefiles=
+ passes="conv scan dlopen dlpreopen link"
+ ;;
+ *) passes="conv"
+ ;;
+ esac
+
+ for pass in $passes; do
+ # The preopen pass in lib mode reverses $deplibs; put it back here
+ # so that -L comes before libs that need it for instance...
+ if test "$linkmode,$pass" = "lib,link"; then
+ ## FIXME: Find the place where the list is rebuilt in the wrong
+ ## order, and fix it there properly
+ tmp_deplibs=
+ for deplib in $deplibs; do
+ tmp_deplibs="$deplib $tmp_deplibs"
+ done
+ deplibs="$tmp_deplibs"
+ fi
+
+ if test "$linkmode,$pass" = "lib,link" ||
+ test "$linkmode,$pass" = "prog,scan"; then
+ libs="$deplibs"
+ deplibs=
+ fi
+ if test "$linkmode" = prog; then
+ case $pass in
+ dlopen) libs="$dlfiles" ;;
+ dlpreopen) libs="$dlprefiles" ;;
+ link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
+ esac
+ fi
+ if test "$linkmode,$pass" = "lib,dlpreopen"; then
+ # Collect and forward deplibs of preopened libtool libs
+ for lib in $dlprefiles; do
+ # Ignore non-libtool-libs
+ dependency_libs=
+ case $lib in
+ *.la) func_source "$lib" ;;
+ esac
+
+ # Collect preopened libtool deplibs, except any this library
+ # has declared as weak libs
+ for deplib in $dependency_libs; do
+ deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"`
+ case " $weak_libs " in
+ *" $deplib_base "*) ;;
+ *) deplibs="$deplibs $deplib" ;;
+ esac
+ done
+ done
+ libs="$dlprefiles"
+ fi
+ if test "$pass" = dlopen; then
+ # Collect dlpreopened libraries
+ save_deplibs="$deplibs"
+ deplibs=
+ fi
+
+ for deplib in $libs; do
+ lib=
+ found=no
+ case $deplib in
+ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+ if test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ compiler_flags="$compiler_flags $deplib"
+ if test "$linkmode" = lib ; then
+ case "$new_inherited_linker_flags " in
+ *" $deplib "*) ;;
+ * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
+ esac
+ fi
+ fi
+ continue
+ ;;
+ -l*)
+ if test "$linkmode" != lib && test "$linkmode" != prog; then
+ func_warning "\`-l' is ignored for archives/objects"
+ continue
+ fi
+ func_stripname '-l' '' "$deplib"
+ name=$func_stripname_result
+ if test "$linkmode" = lib; then
+ searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
+ else
+ searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
+ fi
+ for searchdir in $searchdirs; do
+ for search_ext in .la $std_shrext .so .a; do
+ # Search the libtool library
+ lib="$searchdir/lib${name}${search_ext}"
+ if test -f "$lib"; then
+ if test "$search_ext" = ".la"; then
+ found=yes
+ else
+ found=no
+ fi
+ break 2
+ fi
+ done
+ done
+ if test "$found" != yes; then
+ # deplib doesn't seem to be a libtool library
+ if test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+ fi
+ continue
+ else # deplib is a libtool library
+ # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
+ # We need to do some special things here, and not later.
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $deplib "*)
+ if func_lalib_p "$lib"; then
+ library_names=
+ old_library=
+ func_source "$lib"
+ for l in $old_library $library_names; do
+ ll="$l"
+ done
+ if test "X$ll" = "X$old_library" ; then # only static version available
+ found=no
+ func_dirname "$lib" "" "."
+ ladir="$func_dirname_result"
+ lib=$ladir/$old_library
+ if test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+ fi
+ continue
+ fi
+ fi
+ ;;
+ *) ;;
+ esac
+ fi
+ fi
+ ;; # -l
+ *.ltframework)
+ if test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ if test "$linkmode" = lib ; then
+ case "$new_inherited_linker_flags " in
+ *" $deplib "*) ;;
+ * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
+ esac
+ fi
+ fi
+ continue
+ ;;
+ -L*)
+ case $linkmode in
+ lib)
+ deplibs="$deplib $deplibs"
+ test "$pass" = conv && continue
+ newdependency_libs="$deplib $newdependency_libs"
+ func_stripname '-L' '' "$deplib"
+ newlib_search_path="$newlib_search_path $func_stripname_result"
+ ;;
+ prog)
+ if test "$pass" = conv; then
+ deplibs="$deplib $deplibs"
+ continue
+ fi
+ if test "$pass" = scan; then
+ deplibs="$deplib $deplibs"
+ else
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ fi
+ func_stripname '-L' '' "$deplib"
+ newlib_search_path="$newlib_search_path $func_stripname_result"
+ ;;
+ *)
+ func_warning "\`-L' is ignored for archives/objects"
+ ;;
+ esac # linkmode
+ continue
+ ;; # -L
+ -R*)
+ if test "$pass" = link; then
+ func_stripname '-R' '' "$deplib"
+ dir=$func_stripname_result
+ # Make sure the xrpath contains only unique directories.
+ case "$xrpath " in
+ *" $dir "*) ;;
+ *) xrpath="$xrpath $dir" ;;
+ esac
+ fi
+ deplibs="$deplib $deplibs"
+ continue
+ ;;
+ *.la) lib="$deplib" ;;
+ *.$libext)
+ if test "$pass" = conv; then
+ deplibs="$deplib $deplibs"
+ continue
+ fi
+ case $linkmode in
+ lib)
+ # Linking convenience modules into shared libraries is allowed,
+ # but linking other static libraries is non-portable.
+ case " $dlpreconveniencelibs " in
+ *" $deplib "*) ;;
+ *)
+ valid_a_lib=no
+ case $deplibs_check_method in
+ match_pattern*)
+ set dummy $deplibs_check_method; shift
+ match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+ if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \
+ | $EGREP "$match_pattern_regex" > /dev/null; then
+ valid_a_lib=yes
+ fi
+ ;;
+ pass_all)
+ valid_a_lib=yes
+ ;;
+ esac
+ if test "$valid_a_lib" != yes; then
+ $ECHO
+ $ECHO "*** Warning: Trying to link with static lib archive $deplib."
+ $ECHO "*** I have the capability to make that library automatically link in when"
+ $ECHO "*** you link to this library. But I can only do this if you have a"
+ $ECHO "*** shared version of the library, which you do not appear to have"
+ $ECHO "*** because the file extensions .$libext of this argument makes me believe"
+ $ECHO "*** that it is just a static archive that I should not use here."
+ else
+ $ECHO
+ $ECHO "*** Warning: Linking the shared library $output against the"
+ $ECHO "*** static library $deplib is not portable!"
+ deplibs="$deplib $deplibs"
+ fi
+ ;;
+ esac
+ continue
+ ;;
+ prog)
+ if test "$pass" != link; then
+ deplibs="$deplib $deplibs"
+ else
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ fi
+ continue
+ ;;
+ esac # linkmode
+ ;; # *.$libext
+ *.lo | *.$objext)
+ if test "$pass" = conv; then
+ deplibs="$deplib $deplibs"
+ elif test "$linkmode" = prog; then
+ if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
+ # If there is no dlopen support or we're linking statically,
+ # we need to preload.
+ newdlprefiles="$newdlprefiles $deplib"
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ newdlfiles="$newdlfiles $deplib"
+ fi
+ fi
+ continue
+ ;;
+ %DEPLIBS%)
+ alldeplibs=yes
+ continue
+ ;;
+ esac # case $deplib
+
+ if test "$found" = yes || test -f "$lib"; then :
+ else
+ func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
+ fi
+
+ # Check to see that this really is a libtool archive.
+ func_lalib_unsafe_p "$lib" \
+ || func_fatal_error "\`$lib' is not a valid libtool archive"
+
+ func_dirname "$lib" "" "."
+ ladir="$func_dirname_result"
+
+ dlname=
+ dlopen=
+ dlpreopen=
+ libdir=
+ library_names=
+ old_library=
+ inherited_linker_flags=
+ # If the library was installed with an old release of libtool,
+ # it will not redefine variables installed, or shouldnotlink
+ installed=yes
+ shouldnotlink=no
+ avoidtemprpath=
+
+
+ # Read the .la file
+ func_source "$lib"
+
+ # Convert "-framework foo" to "foo.ltframework"
+ if test -n "$inherited_linker_flags"; then
+ tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'`
+ for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
+ case " $new_inherited_linker_flags " in
+ *" $tmp_inherited_linker_flag "*) ;;
+ *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";;
+ esac
+ done
+ fi
+ dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+ if test "$linkmode,$pass" = "lib,link" ||
+ test "$linkmode,$pass" = "prog,scan" ||
+ { test "$linkmode" != prog && test "$linkmode" != lib; }; then
+ test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
+ test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
+ fi
+
+ if test "$pass" = conv; then
+ # Only check for convenience libraries
+ deplibs="$lib $deplibs"
+ if test -z "$libdir"; then
+ if test -z "$old_library"; then
+ func_fatal_error "cannot find name of link library for \`$lib'"
+ fi
+ # It is a libtool convenience library, so add in its objects.
+ convenience="$convenience $ladir/$objdir/$old_library"
+ old_convenience="$old_convenience $ladir/$objdir/$old_library"
+ elif test "$linkmode" != prog && test "$linkmode" != lib; then
+ func_fatal_error "\`$lib' is not a convenience library"
+ fi
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ deplibs="$deplib $deplibs"
+ if $opt_duplicate_deps ; then
+ case "$tmp_libs " in
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ esac
+ fi
+ tmp_libs="$tmp_libs $deplib"
+ done
+ continue
+ fi # $pass = conv
+
+
+ # Get the name of the library we link against.
+ linklib=
+ for l in $old_library $library_names; do
+ linklib="$l"
+ done
+ if test -z "$linklib"; then
+ func_fatal_error "cannot find name of link library for \`$lib'"
+ fi
+
+ # This library was specified with -dlopen.
+ if test "$pass" = dlopen; then
+ if test -z "$libdir"; then
+ func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
+ fi
+ if test -z "$dlname" ||
+ test "$dlopen_support" != yes ||
+ test "$build_libtool_libs" = no; then
+ # If there is no dlname, no dlopen support or we're linking
+ # statically, we need to preload. We also need to preload any
+ # dependent libraries so libltdl's deplib preloader doesn't
+ # bomb out in the load deplibs phase.
+ dlprefiles="$dlprefiles $lib $dependency_libs"
+ else
+ newdlfiles="$newdlfiles $lib"
+ fi
+ continue
+ fi # $pass = dlopen
+
+ # We need an absolute path.
+ case $ladir in
+ [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
+ *)
+ abs_ladir=`cd "$ladir" && pwd`
+ if test -z "$abs_ladir"; then
+ func_warning "cannot determine absolute directory name of \`$ladir'"
+ func_warning "passing it literally to the linker, although it might fail"
+ abs_ladir="$ladir"
+ fi
+ ;;
+ esac
+ func_basename "$lib"
+ laname="$func_basename_result"
+
+ # Find the relevant object directory and library name.
+ if test "X$installed" = Xyes; then
+ if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+ func_warning "library \`$lib' was moved."
+ dir="$ladir"
+ absdir="$abs_ladir"
+ libdir="$abs_ladir"
+ else
+ dir="$libdir"
+ absdir="$libdir"
+ fi
+ test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
+ else
+ if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+ dir="$ladir"
+ absdir="$abs_ladir"
+ # Remove this search path later
+ notinst_path="$notinst_path $abs_ladir"
+ else
+ dir="$ladir/$objdir"
+ absdir="$abs_ladir/$objdir"
+ # Remove this search path later
+ notinst_path="$notinst_path $abs_ladir"
+ fi
+ fi # $installed = yes
+ func_stripname 'lib' '.la' "$laname"
+ name=$func_stripname_result
+
+ # This library was specified with -dlpreopen.
+ if test "$pass" = dlpreopen; then
+ if test -z "$libdir" && test "$linkmode" = prog; then
+ func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
+ fi
+ # Prefer using a static library (so that no silly _DYNAMIC symbols
+ # are required to link).
+ if test -n "$old_library"; then
+ newdlprefiles="$newdlprefiles $dir/$old_library"
+ # Keep a list of preopened convenience libraries to check
+ # that they are being used correctly in the link pass.
+ test -z "$libdir" && \
+ dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library"
+ # Otherwise, use the dlname, so that lt_dlopen finds it.
+ elif test -n "$dlname"; then
+ newdlprefiles="$newdlprefiles $dir/$dlname"
+ else
+ newdlprefiles="$newdlprefiles $dir/$linklib"
+ fi
+ fi # $pass = dlpreopen
+
+ if test -z "$libdir"; then
+ # Link the convenience library
+ if test "$linkmode" = lib; then
+ deplibs="$dir/$old_library $deplibs"
+ elif test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$dir/$old_library $compile_deplibs"
+ finalize_deplibs="$dir/$old_library $finalize_deplibs"
+ else
+ deplibs="$lib $deplibs" # used for prog,scan pass
+ fi
+ continue
+ fi
+
+
+ if test "$linkmode" = prog && test "$pass" != link; then
+ newlib_search_path="$newlib_search_path $ladir"
+ deplibs="$lib $deplibs"
+
+ linkalldeplibs=no
+ if test "$link_all_deplibs" != no || test -z "$library_names" ||
+ test "$build_libtool_libs" = no; then
+ linkalldeplibs=yes
+ fi
+
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ case $deplib in
+ -L*) func_stripname '-L' '' "$deplib"
+ newlib_search_path="$newlib_search_path $func_stripname_result"
+ ;;
+ esac
+ # Need to link against all dependency_libs?
+ if test "$linkalldeplibs" = yes; then
+ deplibs="$deplib $deplibs"
+ else
+ # Need to hardcode shared library paths
+ # or/and link against static libraries
+ newdependency_libs="$deplib $newdependency_libs"
+ fi
+ if $opt_duplicate_deps ; then
+ case "$tmp_libs " in
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ esac
+ fi
+ tmp_libs="$tmp_libs $deplib"
+ done # for deplib
+ continue
+ fi # $linkmode = prog...
+
+ if test "$linkmode,$pass" = "prog,link"; then
+ if test -n "$library_names" &&
+ { { test "$prefer_static_libs" = no ||
+ test "$prefer_static_libs,$installed" = "built,yes"; } ||
+ test -z "$old_library"; }; then
+ # We need to hardcode the library path
+ if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
+ # Make sure the rpath contains only unique directories.
+ case "$temp_rpath:" in
+ *"$absdir:"*) ;;
+ *) temp_rpath="$temp_rpath$absdir:" ;;
+ esac
+ fi
+
+ # Hardcode the library path.
+ # Skip directories that are in the system default run-time
+ # search path.
+ case " $sys_lib_dlsearch_path " in
+ *" $absdir "*) ;;
+ *)
+ case "$compile_rpath " in
+ *" $absdir "*) ;;
+ *) compile_rpath="$compile_rpath $absdir"
+ esac
+ ;;
+ esac
+ case " $sys_lib_dlsearch_path " in
+ *" $libdir "*) ;;
+ *)
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_rpath="$finalize_rpath $libdir"
+ esac
+ ;;
+ esac
+ fi # $linkmode,$pass = prog,link...
+
+ if test "$alldeplibs" = yes &&
+ { test "$deplibs_check_method" = pass_all ||
+ { test "$build_libtool_libs" = yes &&
+ test -n "$library_names"; }; }; then
+ # We only need to search for static libraries
+ continue
+ fi
+ fi
+
+ link_static=no # Whether the deplib will be linked statically
+ use_static_libs=$prefer_static_libs
+ if test "$use_static_libs" = built && test "$installed" = yes; then
+ use_static_libs=no
+ fi
+ if test -n "$library_names" &&
+ { test "$use_static_libs" = no || test -z "$old_library"; }; then
+ case $host in
+ *cygwin* | *mingw*)
+ # No point in relinking DLLs because paths are not encoded
+ notinst_deplibs="$notinst_deplibs $lib"
+ need_relink=no
+ ;;
+ *)
+ if test "$installed" = no; then
+ notinst_deplibs="$notinst_deplibs $lib"
+ need_relink=yes
+ fi
+ ;;
+ esac
+ # This is a shared library
+
+ # Warn about portability, can't link against -module's on some
+ # systems (darwin). Don't bleat about dlopened modules though!
+ dlopenmodule=""
+ for dlpremoduletest in $dlprefiles; do
+ if test "X$dlpremoduletest" = "X$lib"; then
+ dlopenmodule="$dlpremoduletest"
+ break
+ fi
+ done
+ if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
+ $ECHO
+ if test "$linkmode" = prog; then
+ $ECHO "*** Warning: Linking the executable $output against the loadable module"
+ else
+ $ECHO "*** Warning: Linking the shared library $output against the loadable module"
+ fi
+ $ECHO "*** $linklib is not portable!"
+ fi
+ if test "$linkmode" = lib &&
+ test "$hardcode_into_libs" = yes; then
+ # Hardcode the library path.
+ # Skip directories that are in the system default run-time
+ # search path.
+ case " $sys_lib_dlsearch_path " in
+ *" $absdir "*) ;;
+ *)
+ case "$compile_rpath " in
+ *" $absdir "*) ;;
+ *) compile_rpath="$compile_rpath $absdir"
+ esac
+ ;;
+ esac
+ case " $sys_lib_dlsearch_path " in
+ *" $libdir "*) ;;
+ *)
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_rpath="$finalize_rpath $libdir"
+ esac
+ ;;
+ esac
+ fi
+
+ if test -n "$old_archive_from_expsyms_cmds"; then
+ # figure out the soname
+ set dummy $library_names
+ shift
+ realname="$1"
+ shift
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ # use dlname if we got it. it's perfectly good, no?
+ if test -n "$dlname"; then
+ soname="$dlname"
+ elif test -n "$soname_spec"; then
+ # bleh windows
+ case $host in
+ *cygwin* | mingw*)
+ func_arith $current - $age
+ major=$func_arith_result
+ versuffix="-$major"
+ ;;
+ esac
+ eval soname=\"$soname_spec\"
+ else
+ soname="$realname"
+ fi
+
+ # Make a new name for the extract_expsyms_cmds to use
+ soroot="$soname"
+ func_basename "$soroot"
+ soname="$func_basename_result"
+ func_stripname 'lib' '.dll' "$soname"
+ newlib=libimp-$func_stripname_result.a
+
+ # If the library has no export list, then create one now
+ if test -f "$output_objdir/$soname-def"; then :
+ else
+ func_verbose "extracting exported symbol list from \`$soname'"
+ func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
+ fi
+
+ # Create $newlib
+ if test -f "$output_objdir/$newlib"; then :; else
+ func_verbose "generating import library for \`$soname'"
+ func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
+ fi
+ # make sure the library variables are pointing to the new library
+ dir=$output_objdir
+ linklib=$newlib
+ fi # test -n "$old_archive_from_expsyms_cmds"
+
+ if test "$linkmode" = prog || test "$mode" != relink; then
+ add_shlibpath=
+ add_dir=
+ add=
+ lib_linked=yes
+ case $hardcode_action in
+ immediate | unsupported)
+ if test "$hardcode_direct" = no; then
+ add="$dir/$linklib"
+ case $host in
+ *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
+ *-*-sysv4*uw2*) add_dir="-L$dir" ;;
+ *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
+ *-*-unixware7*) add_dir="-L$dir" ;;
+ *-*-darwin* )
+ # if the lib is a (non-dlopened) module then we can not
+ # link against it, someone is ignoring the earlier warnings
+ if /usr/bin/file -L $add 2> /dev/null |
+ $GREP ": [^:]* bundle" >/dev/null ; then
+ if test "X$dlopenmodule" != "X$lib"; then
+ $ECHO "*** Warning: lib $linklib is a module, not a shared library"
+ if test -z "$old_library" ; then
+ $ECHO
+ $ECHO "*** And there doesn't seem to be a static archive available"
+ $ECHO "*** The link will probably fail, sorry"
+ else
+ add="$dir/$old_library"
+ fi
+ elif test -n "$old_library"; then
+ add="$dir/$old_library"
+ fi
+ fi
+ esac
+ elif test "$hardcode_minus_L" = no; then
+ case $host in
+ *-*-sunos*) add_shlibpath="$dir" ;;
+ esac
+ add_dir="-L$dir"
+ add="-l$name"
+ elif test "$hardcode_shlibpath_var" = no; then
+ add_shlibpath="$dir"
+ add="-l$name"
+ else
+ lib_linked=no
+ fi
+ ;;
+ relink)
+ if test "$hardcode_direct" = yes &&
+ test "$hardcode_direct_absolute" = no; then
+ add="$dir/$linklib"
+ elif test "$hardcode_minus_L" = yes; then
+ add_dir="-L$dir"
+ # Try looking first in the location we're being installed to.
+ if test -n "$inst_prefix_dir"; then
+ case $libdir in
+ [\\/]*)
+ add_dir="$add_dir -L$inst_prefix_dir$libdir"
+ ;;
+ esac
+ fi
+ add="-l$name"
+ elif test "$hardcode_shlibpath_var" = yes; then
+ add_shlibpath="$dir"
+ add="-l$name"
+ else
+ lib_linked=no
+ fi
+ ;;
+ *) lib_linked=no ;;
+ esac
+
+ if test "$lib_linked" != yes; then
+ func_fatal_configuration "unsupported hardcode properties"
+ fi
+
+ if test -n "$add_shlibpath"; then
+ case :$compile_shlibpath: in
+ *":$add_shlibpath:"*) ;;
+ *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
+ esac
+ fi
+ if test "$linkmode" = prog; then
+ test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
+ test -n "$add" && compile_deplibs="$add $compile_deplibs"
+ else
+ test -n "$add_dir" && deplibs="$add_dir $deplibs"
+ test -n "$add" && deplibs="$add $deplibs"
+ if test "$hardcode_direct" != yes &&
+ test "$hardcode_minus_L" != yes &&
+ test "$hardcode_shlibpath_var" = yes; then
+ case :$finalize_shlibpath: in
+ *":$libdir:"*) ;;
+ *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+ esac
+ fi
+ fi
+ fi
+
+ if test "$linkmode" = prog || test "$mode" = relink; then
+ add_shlibpath=
+ add_dir=
+ add=
+ # Finalize command for both is simple: just hardcode it.
+ if test "$hardcode_direct" = yes &&
+ test "$hardcode_direct_absolute" = no; then
+ add="$libdir/$linklib"
+ elif test "$hardcode_minus_L" = yes; then
+ add_dir="-L$libdir"
+ add="-l$name"
+ elif test "$hardcode_shlibpath_var" = yes; then
+ case :$finalize_shlibpath: in
+ *":$libdir:"*) ;;
+ *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+ esac
+ add="-l$name"
+ elif test "$hardcode_automatic" = yes; then
+ if test -n "$inst_prefix_dir" &&
+ test -f "$inst_prefix_dir$libdir/$linklib" ; then
+ add="$inst_prefix_dir$libdir/$linklib"
+ else
+ add="$libdir/$linklib"
+ fi
+ else
+ # We cannot seem to hardcode it, guess we'll fake it.
+ add_dir="-L$libdir"
+ # Try looking first in the location we're being installed to.
+ if test -n "$inst_prefix_dir"; then
+ case $libdir in
+ [\\/]*)
+ add_dir="$add_dir -L$inst_prefix_dir$libdir"
+ ;;
+ esac
+ fi
+ add="-l$name"
+ fi
+
+ if test "$linkmode" = prog; then
+ test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
+ test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
+ else
+ test -n "$add_dir" && deplibs="$add_dir $deplibs"
+ test -n "$add" && deplibs="$add $deplibs"
+ fi
+ fi
+ elif test "$linkmode" = prog; then
+ # Here we assume that one of hardcode_direct or hardcode_minus_L
+ # is not unsupported. This is valid on all known static and
+ # shared platforms.
+ if test "$hardcode_direct" != unsupported; then
+ test -n "$old_library" && linklib="$old_library"
+ compile_deplibs="$dir/$linklib $compile_deplibs"
+ finalize_deplibs="$dir/$linklib $finalize_deplibs"
+ else
+ compile_deplibs="-l$name -L$dir $compile_deplibs"
+ finalize_deplibs="-l$name -L$dir $finalize_deplibs"
+ fi
+ elif test "$build_libtool_libs" = yes; then
+ # Not a shared library
+ if test "$deplibs_check_method" != pass_all; then
+ # We're trying link a shared library against a static one
+ # but the system doesn't support it.
+
+ # Just print a warning and add the library to dependency_libs so
+ # that the program can be linked against the static library.
+ $ECHO
+ $ECHO "*** Warning: This system can not link to static lib archive $lib."
+ $ECHO "*** I have the capability to make that library automatically link in when"
+ $ECHO "*** you link to this library. But I can only do this if you have a"
+ $ECHO "*** shared version of the library, which you do not appear to have."
+ if test "$module" = yes; then
+ $ECHO "*** But as you try to build a module library, libtool will still create "
+ $ECHO "*** a static module, that should work as long as the dlopening application"
+ $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime."
+ if test -z "$global_symbol_pipe"; then
+ $ECHO
+ $ECHO "*** However, this would only work if libtool was able to extract symbol"
+ $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
+ $ECHO "*** not find such a program. So, this module is probably useless."
+ $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
+ fi
+ if test "$build_old_libs" = no; then
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ fi
+ else
+ deplibs="$dir/$old_library $deplibs"
+ link_static=yes
+ fi
+ fi # link shared/static library?
+
+ if test "$linkmode" = lib; then
+ if test -n "$dependency_libs" &&
+ { test "$hardcode_into_libs" != yes ||
+ test "$build_old_libs" = yes ||
+ test "$link_static" = yes; }; then
+ # Extract -R from dependency_libs
+ temp_deplibs=
+ for libdir in $dependency_libs; do
+ case $libdir in
+ -R*) func_stripname '-R' '' "$libdir"
+ temp_xrpath=$func_stripname_result
+ case " $xrpath " in
+ *" $temp_xrpath "*) ;;
+ *) xrpath="$xrpath $temp_xrpath";;
+ esac;;
+ *) temp_deplibs="$temp_deplibs $libdir";;
+ esac
+ done
+ dependency_libs="$temp_deplibs"
+ fi
+
+ newlib_search_path="$newlib_search_path $absdir"
+ # Link against this library
+ test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
+ # ... and its dependency_libs
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ newdependency_libs="$deplib $newdependency_libs"
+ if $opt_duplicate_deps ; then
+ case "$tmp_libs " in
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ esac
+ fi
+ tmp_libs="$tmp_libs $deplib"
+ done
+
+ if test "$link_all_deplibs" != no; then
+ # Add the search paths of all dependency libraries
+ for deplib in $dependency_libs; do
+ case $deplib in
+ -L*) path="$deplib" ;;
+ *.la)
+ func_dirname "$deplib" "" "."
+ dir="$func_dirname_result"
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
+ *)
+ absdir=`cd "$dir" && pwd`
+ if test -z "$absdir"; then
+ func_warning "cannot determine absolute directory name of \`$dir'"
+ absdir="$dir"
+ fi
+ ;;
+ esac
+ if $GREP "^installed=no" $deplib > /dev/null; then
+ case $host in
+ *-*-darwin*)
+ depdepl=
+ eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
+ if test -n "$deplibrary_names" ; then
+ for tmp in $deplibrary_names ; do
+ depdepl=$tmp
+ done
+ if test -f "$absdir/$objdir/$depdepl" ; then
+ depdepl="$absdir/$objdir/$depdepl"
+ darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
+ if test -z "$darwin_install_name"; then
+ darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
+ fi
+ compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
+ linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}"
+ path=
+ fi
+ fi
+ ;;
+ *)
+ path="-L$absdir/$objdir"
+ ;;
+ esac
+ else
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+ test -z "$libdir" && \
+ func_fatal_error "\`$deplib' is not a valid libtool archive"
+ test "$absdir" != "$libdir" && \
+ func_warning "\`$deplib' seems to be moved"
+
+ path="-L$absdir"
+ fi
+ ;;
+ esac
+ case " $deplibs " in
+ *" $path "*) ;;
+ *) deplibs="$path $deplibs" ;;
+ esac
+ done
+ fi # link_all_deplibs != no
+ fi # linkmode = lib
+ done # for deplib in $libs
+ if test "$pass" = link; then
+ if test "$linkmode" = "prog"; then
+ compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
+ finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
+ else
+ compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+ fi
+ fi
+ dependency_libs="$newdependency_libs"
+ if test "$pass" = dlpreopen; then
+ # Link the dlpreopened libraries before other libraries
+ for deplib in $save_deplibs; do
+ deplibs="$deplib $deplibs"
+ done
+ fi
+ if test "$pass" != dlopen; then
+ if test "$pass" != conv; then
+ # Make sure lib_search_path contains only unique directories.
+ lib_search_path=
+ for dir in $newlib_search_path; do
+ case "$lib_search_path " in
+ *" $dir "*) ;;
+ *) lib_search_path="$lib_search_path $dir" ;;
+ esac
+ done
+ newlib_search_path=
+ fi
+
+ if test "$linkmode,$pass" != "prog,link"; then
+ vars="deplibs"
+ else
+ vars="compile_deplibs finalize_deplibs"
+ fi
+ for var in $vars dependency_libs; do
+ # Add libraries to $var in reverse order
+ eval tmp_libs=\"\$$var\"
+ new_libs=
+ for deplib in $tmp_libs; do
+ # FIXME: Pedantically, this is the right thing to do, so
+ # that some nasty dependency loop isn't accidentally
+ # broken:
+ #new_libs="$deplib $new_libs"
+ # Pragmatically, this seems to cause very few problems in
+ # practice:
+ case $deplib in
+ -L*) new_libs="$deplib $new_libs" ;;
+ -R*) ;;
+ *)
+ # And here is the reason: when a library appears more
+ # than once as an explicit dependence of a library, or
+ # is implicitly linked in more than once by the
+ # compiler, it is considered special, and multiple
+ # occurrences thereof are not removed. Compare this
+ # with having the same library being listed as a
+ # dependency of multiple other libraries: in this case,
+ # we know (pedantically, we assume) the library does not
+ # need to be listed more than once, so we keep only the
+ # last copy. This is not always right, but it is rare
+ # enough that we require users that really mean to play
+ # such unportable linking tricks to link the library
+ # using -Wl,-lname, so that libtool does not consider it
+ # for duplicate removal.
+ case " $specialdeplibs " in
+ *" $deplib "*) new_libs="$deplib $new_libs" ;;
+ *)
+ case " $new_libs " in
+ *" $deplib "*) ;;
+ *) new_libs="$deplib $new_libs" ;;
+ esac
+ ;;
+ esac
+ ;;
+ esac
+ done
+ tmp_libs=
+ for deplib in $new_libs; do
+ case $deplib in
+ -L*)
+ case " $tmp_libs " in
+ *" $deplib "*) ;;
+ *) tmp_libs="$tmp_libs $deplib" ;;
+ esac
+ ;;
+ *) tmp_libs="$tmp_libs $deplib" ;;
+ esac
+ done
+ eval $var=\"$tmp_libs\"
+ done # for var
+ fi
+ # Last step: remove runtime libs from dependency_libs
+ # (they stay in deplibs)
+ tmp_libs=
+ for i in $dependency_libs ; do
+ case " $predeps $postdeps $compiler_lib_search_path " in
+ *" $i "*)
+ i=""
+ ;;
+ esac
+ if test -n "$i" ; then
+ tmp_libs="$tmp_libs $i"
+ fi
+ done
+ dependency_libs=$tmp_libs
+ done # for pass
+ if test "$linkmode" = prog; then
+ dlfiles="$newdlfiles"
+ fi
+ if test "$linkmode" = prog || test "$linkmode" = lib; then
+ dlprefiles="$newdlprefiles"
+ fi
+
+ case $linkmode in
+ oldlib)
+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+ func_warning "\`-dlopen' is ignored for archives"
+ fi
+
+ case " $deplibs" in
+ *\ -l* | *\ -L*)
+ func_warning "\`-l' and \`-L' are ignored for archives" ;;
+ esac
+
+ test -n "$rpath" && \
+ func_warning "\`-rpath' is ignored for archives"
+
+ test -n "$xrpath" && \
+ func_warning "\`-R' is ignored for archives"
+
+ test -n "$vinfo" && \
+ func_warning "\`-version-info/-version-number' is ignored for archives"
+
+ test -n "$release" && \
+ func_warning "\`-release' is ignored for archives"
+
+ test -n "$export_symbols$export_symbols_regex" && \
+ func_warning "\`-export-symbols' is ignored for archives"
+
+ # Now set the variables for building old libraries.
+ build_libtool_libs=no
+ oldlibs="$output"
+ objs="$objs$old_deplibs"
+ ;;
+
+ lib)
+ # Make sure we only generate libraries of the form `libNAME.la'.
+ case $outputname in
+ lib*)
+ func_stripname 'lib' '.la' "$outputname"
+ name=$func_stripname_result
+ eval shared_ext=\"$shrext_cmds\"
+ eval libname=\"$libname_spec\"
+ ;;
+ *)
+ test "$module" = no && \
+ func_fatal_help "libtool library \`$output' must begin with \`lib'"
+
+ if test "$need_lib_prefix" != no; then
+ # Add the "lib" prefix for modules if required
+ func_stripname '' '.la' "$outputname"
+ name=$func_stripname_result
+ eval shared_ext=\"$shrext_cmds\"
+ eval libname=\"$libname_spec\"
+ else
+ func_stripname '' '.la' "$outputname"
+ libname=$func_stripname_result
+ fi
+ ;;
+ esac
+
+ if test -n "$objs"; then
+ if test "$deplibs_check_method" != pass_all; then
+ func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
+ else
+ $ECHO
+ $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
+ $ECHO "*** objects $objs is not portable!"
+ libobjs="$libobjs $objs"
+ fi
+ fi
+
+ test "$dlself" != no && \
+ func_warning "\`-dlopen self' is ignored for libtool libraries"
+
+ set dummy $rpath
+ shift
+ test "$#" -gt 1 && \
+ func_warning "ignoring multiple \`-rpath's for a libtool library"
+
+ install_libdir="$1"
+
+ oldlibs=
+ if test -z "$rpath"; then
+ if test "$build_libtool_libs" = yes; then
+ # Building a libtool convenience library.
+ # Some compilers have problems with a `.al' extension so
+ # convenience libraries should have the same extension an
+ # archive normally would.
+ oldlibs="$output_objdir/$libname.$libext $oldlibs"
+ build_libtool_libs=convenience
+ build_old_libs=yes
+ fi
+
+ test -n "$vinfo" && \
+ func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
+
+ test -n "$release" && \
+ func_warning "\`-release' is ignored for convenience libraries"
+ else
+
+ # Parse the version information argument.
+ save_ifs="$IFS"; IFS=':'
+ set dummy $vinfo 0 0 0
+ shift
+ IFS="$save_ifs"
+
+ test -n "$7" && \
+ func_fatal_help "too many parameters to \`-version-info'"
+
+ # convert absolute version numbers to libtool ages
+ # this retains compatibility with .la files and attempts
+ # to make the code below a bit more comprehensible
+
+ case $vinfo_number in
+ yes)
+ number_major="$1"
+ number_minor="$2"
+ number_revision="$3"
+ #
+ # There are really only two kinds -- those that
+ # use the current revision as the major version
+ # and those that subtract age and use age as
+ # a minor version. But, then there is irix
+ # which has an extra 1 added just for fun
+ #
+ case $version_type in
+ darwin|linux|osf|windows|none)
+ func_arith $number_major + $number_minor
+ current=$func_arith_result
+ age="$number_minor"
+ revision="$number_revision"
+ ;;
+ freebsd-aout|freebsd-elf|sunos)
+ current="$number_major"
+ revision="$number_minor"
+ age="0"
+ ;;
+ irix|nonstopux)
+ func_arith $number_major + $number_minor
+ current=$func_arith_result
+ age="$number_minor"
+ revision="$number_minor"
+ lt_irix_increment=no
+ ;;
+ esac
+ ;;
+ no)
+ current="$1"
+ revision="$2"
+ age="$3"
+ ;;
+ esac
+
+ # Check that each of the things are valid numbers.
+ case $current in
+ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+ *)
+ func_error "CURRENT \`$current' must be a nonnegative integer"
+ func_fatal_error "\`$vinfo' is not valid version information"
+ ;;
+ esac
+
+ case $revision in
+ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+ *)
+ func_error "REVISION \`$revision' must be a nonnegative integer"
+ func_fatal_error "\`$vinfo' is not valid version information"
+ ;;
+ esac
+
+ case $age in
+ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+ *)
+ func_error "AGE \`$age' must be a nonnegative integer"
+ func_fatal_error "\`$vinfo' is not valid version information"
+ ;;
+ esac
+
+ if test "$age" -gt "$current"; then
+ func_error "AGE \`$age' is greater than the current interface number \`$current'"
+ func_fatal_error "\`$vinfo' is not valid version information"
+ fi
+
+ # Calculate the version variables.
+ major=
+ versuffix=
+ verstring=
+ case $version_type in
+ none) ;;
+
+ darwin)
+ # Like Linux, but with the current version available in
+ # verstring for coding it into the library header
+ func_arith $current - $age
+ major=.$func_arith_result
+ versuffix="$major.$age.$revision"
+ # Darwin ld doesn't like 0 for these options...
+ func_arith $current + 1
+ minor_current=$func_arith_result
+ xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
+ verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+ ;;
+
+ freebsd-aout)
+ major=".$current"
+ versuffix=".$current.$revision";
+ ;;
+
+ freebsd-elf)
+ major=".$current"
+ versuffix=".$current"
+ ;;
+
+ irix | nonstopux)
+ if test "X$lt_irix_increment" = "Xno"; then
+ func_arith $current - $age
+ else
+ func_arith $current - $age + 1
+ fi
+ major=$func_arith_result
+
+ case $version_type in
+ nonstopux) verstring_prefix=nonstopux ;;
+ *) verstring_prefix=sgi ;;
+ esac
+ verstring="$verstring_prefix$major.$revision"
+
+ # Add in all the interfaces that we are compatible with.
+ loop=$revision
+ while test "$loop" -ne 0; do
+ func_arith $revision - $loop
+ iface=$func_arith_result
+ func_arith $loop - 1
+ loop=$func_arith_result
+ verstring="$verstring_prefix$major.$iface:$verstring"
+ done
+
+ # Before this point, $major must not contain `.'.
+ major=.$major
+ versuffix="$major.$revision"
+ ;;
+
+ linux)
+ func_arith $current - $age
+ major=.$func_arith_result
+ versuffix="$major.$age.$revision"
+ ;;
+
+ osf)
+ func_arith $current - $age
+ major=.$func_arith_result
+ versuffix=".$current.$age.$revision"
+ verstring="$current.$age.$revision"
+
+ # Add in all the interfaces that we are compatible with.
+ loop=$age
+ while test "$loop" -ne 0; do
+ func_arith $current - $loop
+ iface=$func_arith_result
+ func_arith $loop - 1
+ loop=$func_arith_result
+ verstring="$verstring:${iface}.0"
+ done
+
+ # Make executables depend on our current version.
+ verstring="$verstring:${current}.0"
+ ;;
+
+ qnx)
+ major=".$current"
+ versuffix=".$current"
+ ;;
+
+ sunos)
+ major=".$current"
+ versuffix=".$current.$revision"
+ ;;
+
+ windows)
+ # Use '-' rather than '.', since we only want one
+ # extension on DOS 8.3 filesystems.
+ func_arith $current - $age
+ major=$func_arith_result
+ versuffix="-$major"
+ ;;
+
+ *)
+ func_fatal_configuration "unknown library version type \`$version_type'"
+ ;;
+ esac
+
+ # Clear the version info if we defaulted, and they specified a release.
+ if test -z "$vinfo" && test -n "$release"; then
+ major=
+ case $version_type in
+ darwin)
+ # we can't check for "0.0" in archive_cmds due to quoting
+ # problems, so we reset it completely
+ verstring=
+ ;;
+ *)
+ verstring="0.0"
+ ;;
+ esac
+ if test "$need_version" = no; then
+ versuffix=
+ else
+ versuffix=".0.0"
+ fi
+ fi
+
+ # Remove version info from name if versioning should be avoided
+ if test "$avoid_version" = yes && test "$need_version" = no; then
+ major=
+ versuffix=
+ verstring=""
+ fi
+
+ # Check to see if the archive will have undefined symbols.
+ if test "$allow_undefined" = yes; then
+ if test "$allow_undefined_flag" = unsupported; then
+ func_warning "undefined symbols not allowed in $host shared libraries"
+ build_libtool_libs=no
+ build_old_libs=yes
+ fi
+ else
+ # Don't allow undefined symbols.
+ allow_undefined_flag="$no_undefined_flag"
+ fi
+
+ fi
+
+ func_generate_dlsyms "$libname" "$libname" "yes"
+ libobjs="$libobjs $symfileobj"
+ test "X$libobjs" = "X " && libobjs=
+
+ if test "$mode" != relink; then
+ # Remove our outputs, but don't remove object files since they
+ # may have been created when compiling PIC objects.
+ removelist=
+ tempremovelist=`$ECHO "$output_objdir/*"`
+ for p in $tempremovelist; do
+ case $p in
+ *.$objext)
+ ;;
+ $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
+ if test "X$precious_files_regex" != "X"; then
+ if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
+ then
+ continue
+ fi
+ fi
+ removelist="$removelist $p"
+ ;;
+ *) ;;
+ esac
+ done
+ test -n "$removelist" && \
+ func_show_eval "${RM}r \$removelist"
+ fi
+
+ # Now set the variables for building old libraries.
+ if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
+ oldlibs="$oldlibs $output_objdir/$libname.$libext"
+
+ # Transform .lo files to .o files.
+ oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
+ fi
+
+ # Eliminate all temporary directories.
+ #for path in $notinst_path; do
+ # lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"`
+ # deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"`
+ # dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"`
+ #done
+
+ if test -n "$xrpath"; then
+ # If the user specified any rpath flags, then add them.
+ temp_xrpath=
+ for libdir in $xrpath; do
+ temp_xrpath="$temp_xrpath -R$libdir"
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_rpath="$finalize_rpath $libdir" ;;
+ esac
+ done
+ if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
+ dependency_libs="$temp_xrpath $dependency_libs"
+ fi
+ fi
+
+ # Make sure dlfiles contains only unique files that won't be dlpreopened
+ old_dlfiles="$dlfiles"
+ dlfiles=
+ for lib in $old_dlfiles; do
+ case " $dlprefiles $dlfiles " in
+ *" $lib "*) ;;
+ *) dlfiles="$dlfiles $lib" ;;
+ esac
+ done
+
+ # Make sure dlprefiles contains only unique files
+ old_dlprefiles="$dlprefiles"
+ dlprefiles=
+ for lib in $old_dlprefiles; do
+ case "$dlprefiles " in
+ *" $lib "*) ;;
+ *) dlprefiles="$dlprefiles $lib" ;;
+ esac
+ done
+
+ if test "$build_libtool_libs" = yes; then
+ if test -n "$rpath"; then
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*)
+ # these systems don't actually have a c library (as such)!
+ ;;
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # Rhapsody C library is in the System framework
+ deplibs="$deplibs System.ltframework"
+ ;;
+ *-*-netbsd*)
+ # Don't link with libc until the a.out ld.so is fixed.
+ ;;
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+ # Do not include libc due to us having libc/libc_r.
+ ;;
+ *-*-sco3.2v5* | *-*-sco5v6*)
+ # Causes problems with __ctype
+ ;;
+ *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+ # Compiler inserts libc in the correct place for threads to work
+ ;;
+ *)
+ # Add libc to deplibs on all other systems if necessary.
+ if test "$build_libtool_need_lc" = "yes"; then
+ deplibs="$deplibs -lc"
+ fi
+ ;;
+ esac
+ fi
+
+ # Transform deplibs into only deplibs that can be linked in shared.
+ name_save=$name
+ libname_save=$libname
+ release_save=$release
+ versuffix_save=$versuffix
+ major_save=$major
+ # I'm not sure if I'm treating the release correctly. I think
+ # release should show up in the -l (ie -lgmp5) so we don't want to
+ # add it in twice. Is that correct?
+ release=""
+ versuffix=""
+ major=""
+ newdeplibs=
+ droppeddeps=no
+ case $deplibs_check_method in
+ pass_all)
+ # Don't check for shared/static. Everything works.
+ # This might be a little naive. We might want to check
+ # whether the library exists or not. But this is on
+ # osf3 & osf4 and I'm not really sure... Just
+ # implementing what was already the behavior.
+ newdeplibs=$deplibs
+ ;;
+ test_compile)
+ # This code stresses the "libraries are programs" paradigm to its
+ # limits. Maybe even breaks it. We compile a program, linking it
+ # against the deplibs as a proxy for the library. Then we can check
+ # whether they linked in statically or dynamically with ldd.
+ $opt_dry_run || $RM conftest.c
+ cat > conftest.c <<EOF
+ int main() { return 0; }
+EOF
+ $opt_dry_run || $RM conftest
+ if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
+ ldd_output=`ldd conftest`
+ for i in $deplibs; do
+ case $i in
+ -l*)
+ func_stripname -l '' "$i"
+ name=$func_stripname_result
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $i "*)
+ newdeplibs="$newdeplibs $i"
+ i=""
+ ;;
+ esac
+ fi
+ if test -n "$i" ; then
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+ set dummy $deplib_matches; shift
+ deplib_match=$1
+ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+ newdeplibs="$newdeplibs $i"
+ else
+ droppeddeps=yes
+ $ECHO
+ $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+ $ECHO "*** I have the capability to make that library automatically link in when"
+ $ECHO "*** you link to this library. But I can only do this if you have a"
+ $ECHO "*** shared version of the library, which I believe you do not have"
+ $ECHO "*** because a test_compile did reveal that the linker did not use it for"
+ $ECHO "*** its dynamic dependency list that programs get resolved with at runtime."
+ fi
+ fi
+ ;;
+ *)
+ newdeplibs="$newdeplibs $i"
+ ;;
+ esac
+ done
+ else
+ # Error occurred in the first compile. Let's try to salvage
+ # the situation: Compile a separate program for each library.
+ for i in $deplibs; do
+ case $i in
+ -l*)
+ func_stripname -l '' "$i"
+ name=$func_stripname_result
+ $opt_dry_run || $RM conftest
+ if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
+ ldd_output=`ldd conftest`
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $i "*)
+ newdeplibs="$newdeplibs $i"
+ i=""
+ ;;
+ esac
+ fi
+ if test -n "$i" ; then
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+ set dummy $deplib_matches; shift
+ deplib_match=$1
+ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+ newdeplibs="$newdeplibs $i"
+ else
+ droppeddeps=yes
+ $ECHO
+ $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+ $ECHO "*** I have the capability to make that library automatically link in when"
+ $ECHO "*** you link to this library. But I can only do this if you have a"
+ $ECHO "*** shared version of the library, which you do not appear to have"
+ $ECHO "*** because a test_compile did reveal that the linker did not use this one"
+ $ECHO "*** as a dynamic dependency that programs can get resolved with at runtime."
+ fi
+ fi
+ else
+ droppeddeps=yes
+ $ECHO
+ $ECHO "*** Warning! Library $i is needed by this library but I was not able to"
+ $ECHO "*** make it link in! You will probably need to install it or some"
+ $ECHO "*** library that it depends on before this library will be fully"
+ $ECHO "*** functional. Installing it before continuing would be even better."
+ fi
+ ;;
+ *)
+ newdeplibs="$newdeplibs $i"
+ ;;
+ esac
+ done
+ fi
+ ;;
+ file_magic*)
+ set dummy $deplibs_check_method; shift
+ file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+ for a_deplib in $deplibs; do
+ case $a_deplib in
+ -l*)
+ func_stripname -l '' "$a_deplib"
+ name=$func_stripname_result
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $a_deplib "*)
+ newdeplibs="$newdeplibs $a_deplib"
+ a_deplib=""
+ ;;
+ esac
+ fi
+ if test -n "$a_deplib" ; then
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+ potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+ for potent_lib in $potential_libs; do
+ # Follow soft links.
+ if ls -lLd "$potent_lib" 2>/dev/null |
+ $GREP " -> " >/dev/null; then
+ continue
+ fi
+ # The statement above tries to avoid entering an
+ # endless loop below, in case of cyclic links.
+ # We might still enter an endless loop, since a link
+ # loop can be closed while we follow links,
+ # but so what?
+ potlib="$potent_lib"
+ while test -h "$potlib" 2>/dev/null; do
+ potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
+ case $potliblink in
+ [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
+ *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
+ esac
+ done
+ if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
+ $SED -e 10q |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ newdeplibs="$newdeplibs $a_deplib"
+ a_deplib=""
+ break 2
+ fi
+ done
+ done
+ fi
+ if test -n "$a_deplib" ; then
+ droppeddeps=yes
+ $ECHO
+ $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+ $ECHO "*** I have the capability to make that library automatically link in when"
+ $ECHO "*** you link to this library. But I can only do this if you have a"
+ $ECHO "*** shared version of the library, which you do not appear to have"
+ $ECHO "*** because I did check the linker path looking for a file starting"
+ if test -z "$potlib" ; then
+ $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
+ else
+ $ECHO "*** with $libname and none of the candidates passed a file format test"
+ $ECHO "*** using a file magic. Last file checked: $potlib"
+ fi
+ fi
+ ;;
+ *)
+ # Add a -L argument.
+ newdeplibs="$newdeplibs $a_deplib"
+ ;;
+ esac
+ done # Gone through all deplibs.
+ ;;
+ match_pattern*)
+ set dummy $deplibs_check_method; shift
+ match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+ for a_deplib in $deplibs; do
+ case $a_deplib in
+ -l*)
+ func_stripname -l '' "$a_deplib"
+ name=$func_stripname_result
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $a_deplib "*)
+ newdeplibs="$newdeplibs $a_deplib"
+ a_deplib=""
+ ;;
+ esac
+ fi
+ if test -n "$a_deplib" ; then
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+ potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+ for potent_lib in $potential_libs; do
+ potlib="$potent_lib" # see symlink-check above in file_magic test
+ if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \
+ $EGREP "$match_pattern_regex" > /dev/null; then
+ newdeplibs="$newdeplibs $a_deplib"
+ a_deplib=""
+ break 2
+ fi
+ done
+ done
+ fi
+ if test -n "$a_deplib" ; then
+ droppeddeps=yes
+ $ECHO
+ $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+ $ECHO "*** I have the capability to make that library automatically link in when"
+ $ECHO "*** you link to this library. But I can only do this if you have a"
+ $ECHO "*** shared version of the library, which you do not appear to have"
+ $ECHO "*** because I did check the linker path looking for a file starting"
+ if test -z "$potlib" ; then
+ $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
+ else
+ $ECHO "*** with $libname and none of the candidates passed a file format test"
+ $ECHO "*** using a regex pattern. Last file checked: $potlib"
+ fi
+ fi
+ ;;
+ *)
+ # Add a -L argument.
+ newdeplibs="$newdeplibs $a_deplib"
+ ;;
+ esac
+ done # Gone through all deplibs.
+ ;;
+ none | unknown | *)
+ newdeplibs=""
+ tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \
+ -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'`
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ for i in $predeps $postdeps ; do
+ # can't use Xsed below, because $i might contain '/'
+ tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"`
+ done
+ fi
+ if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' |
+ $GREP . >/dev/null; then
+ $ECHO
+ if test "X$deplibs_check_method" = "Xnone"; then
+ $ECHO "*** Warning: inter-library dependencies are not supported in this platform."
+ else
+ $ECHO "*** Warning: inter-library dependencies are not known to be supported."
+ fi
+ $ECHO "*** All declared inter-library dependencies are being dropped."
+ droppeddeps=yes
+ fi
+ ;;
+ esac
+ versuffix=$versuffix_save
+ major=$major_save
+ release=$release_save
+ libname=$libname_save
+ name=$name_save
+
+ case $host in
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # On Rhapsody replace the C library with the System framework
+ newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+ ;;
+ esac
+
+ if test "$droppeddeps" = yes; then
+ if test "$module" = yes; then
+ $ECHO
+ $ECHO "*** Warning: libtool could not satisfy all declared inter-library"
+ $ECHO "*** dependencies of module $libname. Therefore, libtool will create"
+ $ECHO "*** a static module, that should work as long as the dlopening"
+ $ECHO "*** application is linked with the -dlopen flag."
+ if test -z "$global_symbol_pipe"; then
+ $ECHO
+ $ECHO "*** However, this would only work if libtool was able to extract symbol"
+ $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
+ $ECHO "*** not find such a program. So, this module is probably useless."
+ $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
+ fi
+ if test "$build_old_libs" = no; then
+ oldlibs="$output_objdir/$libname.$libext"
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ else
+ $ECHO "*** The inter-library dependencies that have been dropped here will be"
+ $ECHO "*** automatically added whenever a program is linked with this library"
+ $ECHO "*** or is declared to -dlopen it."
+
+ if test "$allow_undefined" = no; then
+ $ECHO
+ $ECHO "*** Since this library must not contain undefined symbols,"
+ $ECHO "*** because either the platform does not support them or"
+ $ECHO "*** it was explicitly requested with -no-undefined,"
+ $ECHO "*** libtool will only create a static version of it."
+ if test "$build_old_libs" = no; then
+ oldlibs="$output_objdir/$libname.$libext"
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ fi
+ fi
+ fi
+ # Done checking deplibs!
+ deplibs=$newdeplibs
+ fi
+ # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+ case $host in
+ *-*-darwin*)
+ newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+ new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+ deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+ ;;
+ esac
+
+ # move library search paths that coincide with paths to not yet
+ # installed libraries to the beginning of the library search list
+ new_libs=
+ for path in $notinst_path; do
+ case " $new_libs " in
+ *" -L$path/$objdir "*) ;;
+ *)
+ case " $deplibs " in
+ *" -L$path/$objdir "*)
+ new_libs="$new_libs -L$path/$objdir" ;;
+ esac
+ ;;
+ esac
+ done
+ for deplib in $deplibs; do
+ case $deplib in
+ -L*)
+ case " $new_libs " in
+ *" $deplib "*) ;;
+ *) new_libs="$new_libs $deplib" ;;
+ esac
+ ;;
+ *) new_libs="$new_libs $deplib" ;;
+ esac
+ done
+ deplibs="$new_libs"
+
+ # All the library-specific variables (install_libdir is set above).
+ library_names=
+ old_library=
+ dlname=
+
+ # Test again, we may have decided not to build it any more
+ if test "$build_libtool_libs" = yes; then
+ if test "$hardcode_into_libs" = yes; then
+ # Hardcode the library paths
+ hardcode_libdirs=
+ dep_rpath=
+ rpath="$finalize_rpath"
+ test "$mode" != relink && rpath="$compile_rpath$rpath"
+ for libdir in $rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs="$libdir"
+ else
+ # Just accumulate the unique libdirs.
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+ hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ dep_rpath="$dep_rpath $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$perm_rpath " in
+ *" $libdir "*) ;;
+ *) perm_rpath="$perm_rpath $libdir" ;;
+ esac
+ fi
+ done
+ # Substitute the hardcoded libdirs into the rpath.
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir="$hardcode_libdirs"
+ if test -n "$hardcode_libdir_flag_spec_ld"; then
+ eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
+ else
+ eval dep_rpath=\"$hardcode_libdir_flag_spec\"
+ fi
+ fi
+ if test -n "$runpath_var" && test -n "$perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $perm_rpath; do
+ rpath="$rpath$dir:"
+ done
+ eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
+ fi
+ test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
+ fi
+
+ shlibpath="$finalize_shlibpath"
+ test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
+ if test -n "$shlibpath"; then
+ eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
+ fi
+
+ # Get the real and link names of the library.
+ eval shared_ext=\"$shrext_cmds\"
+ eval library_names=\"$library_names_spec\"
+ set dummy $library_names
+ shift
+ realname="$1"
+ shift
+
+ if test -n "$soname_spec"; then
+ eval soname=\"$soname_spec\"
+ else
+ soname="$realname"
+ fi
+ if test -z "$dlname"; then
+ dlname=$soname
+ fi
+
+ lib="$output_objdir/$realname"
+ linknames=
+ for link
+ do
+ linknames="$linknames $link"
+ done
+
+ # Use standard objects if they are pic
+ test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+ test "X$libobjs" = "X " && libobjs=
+
+ delfiles=
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
+ export_symbols="$output_objdir/$libname.uexp"
+ delfiles="$delfiles $export_symbols"
+ fi
+
+ orig_export_symbols=
+ case $host_os in
+ cygwin* | mingw*)
+ if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
+ # exporting using user supplied symfile
+ if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
+ # and it's NOT already a .def file. Must figure out
+ # which of the given symbols are data symbols and tag
+ # them as such. So, trigger use of export_symbols_cmds.
+ # export_symbols gets reassigned inside the "prepare
+ # the list of exported symbols" if statement, so the
+ # include_expsyms logic still works.
+ orig_export_symbols="$export_symbols"
+ export_symbols=
+ always_export_symbols=yes
+ fi
+ fi
+ ;;
+ esac
+
+ # Prepare the list of exported symbols
+ if test -z "$export_symbols"; then
+ if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
+ func_verbose "generating symbol list for \`$libname.la'"
+ export_symbols="$output_objdir/$libname.exp"
+ $opt_dry_run || $RM $export_symbols
+ cmds=$export_symbols_cmds
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ eval cmd=\"$cmd\"
+ func_len " $cmd"
+ len=$func_len_result
+ if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ func_show_eval "$cmd" 'exit $?'
+ skipped_export=false
+ else
+ # The command line is too long to execute in one step.
+ func_verbose "using reloadable object file for export list..."
+ skipped_export=:
+ # Break out early, otherwise skipped_export may be
+ # set to false by a later but shorter cmd.
+ break
+ fi
+ done
+ IFS="$save_ifs"
+ if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
+ func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+ func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+ fi
+ fi
+ fi
+
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ tmp_export_symbols="$export_symbols"
+ test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+ $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
+ fi
+
+ if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
+ # The given exports_symbols file has to be filtered, so filter it.
+ func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
+ # FIXME: $output_objdir/$libname.filter potentially contains lots of
+ # 's' commands which not all seds can handle. GNU sed should be fine
+ # though. Also, the filter scales superlinearly with the number of
+ # global variables. join(1) would be nice here, but unfortunately
+ # isn't a blessed tool.
+ $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+ delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
+ export_symbols=$output_objdir/$libname.def
+ $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+ fi
+
+ tmp_deplibs=
+ for test_deplib in $deplibs; do
+ case " $convenience " in
+ *" $test_deplib "*) ;;
+ *)
+ tmp_deplibs="$tmp_deplibs $test_deplib"
+ ;;
+ esac
+ done
+ deplibs="$tmp_deplibs"
+
+ if test -n "$convenience"; then
+ if test -n "$whole_archive_flag_spec" &&
+ test "$compiler_needs_object" = yes &&
+ test -z "$libobjs"; then
+ # extract the archives, so we have objects to list.
+ # TODO: could optimize this to just extract one archive.
+ whole_archive_flag_spec=
+ fi
+ if test -n "$whole_archive_flag_spec"; then
+ save_libobjs=$libobjs
+ eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+ test "X$libobjs" = "X " && libobjs=
+ else
+ gentop="$output_objdir/${outputname}x"
+ generated="$generated $gentop"
+
+ func_extract_archives $gentop $convenience
+ libobjs="$libobjs $func_extract_archives_result"
+ test "X$libobjs" = "X " && libobjs=
+ fi
+ fi
+
+ if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
+ eval flag=\"$thread_safe_flag_spec\"
+ linker_flags="$linker_flags $flag"
+ fi
+
+ # Make a backup of the uninstalled library when relinking
+ if test "$mode" = relink; then
+ $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
+ fi
+
+ # Do each of the archive commands.
+ if test "$module" = yes && test -n "$module_cmds" ; then
+ if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+ eval test_cmds=\"$module_expsym_cmds\"
+ cmds=$module_expsym_cmds
+ else
+ eval test_cmds=\"$module_cmds\"
+ cmds=$module_cmds
+ fi
+ else
+ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+ eval test_cmds=\"$archive_expsym_cmds\"
+ cmds=$archive_expsym_cmds
+ else
+ eval test_cmds=\"$archive_cmds\"
+ cmds=$archive_cmds
+ fi
+ fi
+
+ if test "X$skipped_export" != "X:" &&
+ func_len " $test_cmds" &&
+ len=$func_len_result &&
+ test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ :
+ else
+ # The command line is too long to link in one step, link piecewise
+ # or, if using GNU ld and skipped_export is not :, use a linker
+ # script.
+
+ # Save the value of $output and $libobjs because we want to
+ # use them later. If we have whole_archive_flag_spec, we
+ # want to use save_libobjs as it was before
+ # whole_archive_flag_spec was expanded, because we can't
+ # assume the linker understands whole_archive_flag_spec.
+ # This may have to be revisited, in case too many
+ # convenience libraries get linked in and end up exceeding
+ # the spec.
+ if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
+ save_libobjs=$libobjs
+ fi
+ save_output=$output
+ output_la=`$ECHO "X$output" | $Xsed -e "$basename"`
+
+ # Clear the reloadable object creation command queue and
+ # initialize k to one.
+ test_cmds=
+ concat_cmds=
+ objlist=
+ last_robj=
+ k=1
+
+ if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
+ output=${output_objdir}/${output_la}.lnkscript
+ func_verbose "creating GNU ld script: $output"
+ $ECHO 'INPUT (' > $output
+ for obj in $save_libobjs
+ do
+ $ECHO "$obj" >> $output
+ done
+ $ECHO ')' >> $output
+ delfiles="$delfiles $output"
+ elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
+ output=${output_objdir}/${output_la}.lnk
+ func_verbose "creating linker input file list: $output"
+ : > $output
+ set x $save_libobjs
+ shift
+ firstobj=
+ if test "$compiler_needs_object" = yes; then
+ firstobj="$1 "
+ shift
+ fi
+ for obj
+ do
+ $ECHO "$obj" >> $output
+ done
+ delfiles="$delfiles $output"
+ output=$firstobj\"$file_list_spec$output\"
+ else
+ if test -n "$save_libobjs"; then
+ func_verbose "creating reloadable object files..."
+ output=$output_objdir/$output_la-${k}.$objext
+ eval test_cmds=\"$reload_cmds\"
+ func_len " $test_cmds"
+ len0=$func_len_result
+ len=$len0
+
+ # Loop over the list of objects to be linked.
+ for obj in $save_libobjs
+ do
+ func_len " $obj"
+ func_arith $len + $func_len_result
+ len=$func_arith_result
+ if test "X$objlist" = X ||
+ test "$len" -lt "$max_cmd_len"; then
+ func_append objlist " $obj"
+ else
+ # The command $test_cmds is almost too long, add a
+ # command to the queue.
+ if test "$k" -eq 1 ; then
+ # The first file doesn't have a previous command to add.
+ eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
+ else
+ # All subsequent reloadable object files will link in
+ # the last one created.
+ eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\"
+ fi
+ last_robj=$output_objdir/$output_la-${k}.$objext
+ func_arith $k + 1
+ k=$func_arith_result
+ output=$output_objdir/$output_la-${k}.$objext
+ objlist=$obj
+ func_len " $last_robj"
+ func_arith $len0 + $func_len_result
+ len=$func_arith_result
+ fi
+ done
+ # Handle the remaining objects by creating one last
+ # reloadable object file. All subsequent reloadable object
+ # files will link in the last one created.
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
+ if test -n "$last_robj"; then
+ eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
+ fi
+ delfiles="$delfiles $output"
+
+ else
+ output=
+ fi
+
+ if ${skipped_export-false}; then
+ func_verbose "generating symbol list for \`$libname.la'"
+ export_symbols="$output_objdir/$libname.exp"
+ $opt_dry_run || $RM $export_symbols
+ libobjs=$output
+ # Append the command to create the export file.
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
+ if test -n "$last_robj"; then
+ eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
+ fi
+ fi
+
+ test -n "$save_libobjs" &&
+ func_verbose "creating a temporary reloadable object file: $output"
+
+ # Loop through the commands generated above and execute them.
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $concat_cmds; do
+ IFS="$save_ifs"
+ $opt_silent || {
+ func_quote_for_expand "$cmd"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+ $opt_dry_run || eval "$cmd" || {
+ lt_exit=$?
+
+ # Restore the uninstalled library and exit
+ if test "$mode" = relink; then
+ ( cd "$output_objdir" && \
+ $RM "${realname}T" && \
+ $MV "${realname}U" "$realname" )
+ fi
+
+ exit $lt_exit
+ }
+ done
+ IFS="$save_ifs"
+
+ if test -n "$export_symbols_regex" && ${skipped_export-false}; then
+ func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+ func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+ fi
+ fi
+
+ if ${skipped_export-false}; then
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ tmp_export_symbols="$export_symbols"
+ test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+ $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
+ fi
+
+ if test -n "$orig_export_symbols"; then
+ # The given exports_symbols file has to be filtered, so filter it.
+ func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
+ # FIXME: $output_objdir/$libname.filter potentially contains lots of
+ # 's' commands which not all seds can handle. GNU sed should be fine
+ # though. Also, the filter scales superlinearly with the number of
+ # global variables. join(1) would be nice here, but unfortunately
+ # isn't a blessed tool.
+ $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+ delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
+ export_symbols=$output_objdir/$libname.def
+ $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+ fi
+ fi
+
+ libobjs=$output
+ # Restore the value of output.
+ output=$save_output
+
+ if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
+ eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+ test "X$libobjs" = "X " && libobjs=
+ fi
+ # Expand the library linking commands again to reset the
+ # value of $libobjs for piecewise linking.
+
+ # Do each of the archive commands.
+ if test "$module" = yes && test -n "$module_cmds" ; then
+ if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+ cmds=$module_expsym_cmds
+ else
+ cmds=$module_cmds
+ fi
+ else
+ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+ cmds=$archive_expsym_cmds
+ else
+ cmds=$archive_cmds
+ fi
+ fi
+ fi
+
+ if test -n "$delfiles"; then
+ # Append the command to remove temporary files to $cmds.
+ eval cmds=\"\$cmds~\$RM $delfiles\"
+ fi
+
+ # Add any objects from preloaded convenience libraries
+ if test -n "$dlprefiles"; then
+ gentop="$output_objdir/${outputname}x"
+ generated="$generated $gentop"
+
+ func_extract_archives $gentop $dlprefiles
+ libobjs="$libobjs $func_extract_archives_result"
+ test "X$libobjs" = "X " && libobjs=
+ fi
+
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ eval cmd=\"$cmd\"
+ $opt_silent || {
+ func_quote_for_expand "$cmd"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+ $opt_dry_run || eval "$cmd" || {
+ lt_exit=$?
+
+ # Restore the uninstalled library and exit
+ if test "$mode" = relink; then
+ ( cd "$output_objdir" && \
+ $RM "${realname}T" && \
+ $MV "${realname}U" "$realname" )
+ fi
+
+ exit $lt_exit
+ }
+ done
+ IFS="$save_ifs"
+
+ # Restore the uninstalled library and exit
+ if test "$mode" = relink; then
+ $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
+
+ if test -n "$convenience"; then
+ if test -z "$whole_archive_flag_spec"; then
+ func_show_eval '${RM}r "$gentop"'
+ fi
+ fi
+
+ exit $EXIT_SUCCESS
+ fi
+
+ # Create links to the real library.
+ for linkname in $linknames; do
+ if test "$realname" != "$linkname"; then
+ func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
+ fi
+ done
+
+ # If -module or -export-dynamic was specified, set the dlname.
+ if test "$module" = yes || test "$export_dynamic" = yes; then
+ # On all known operating systems, these are identical.
+ dlname="$soname"
+ fi
+ fi
+ ;;
+
+ obj)
+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+ func_warning "\`-dlopen' is ignored for objects"
+ fi
+
+ case " $deplibs" in
+ *\ -l* | *\ -L*)
+ func_warning "\`-l' and \`-L' are ignored for objects" ;;
+ esac
+
+ test -n "$rpath" && \
+ func_warning "\`-rpath' is ignored for objects"
+
+ test -n "$xrpath" && \
+ func_warning "\`-R' is ignored for objects"
+
+ test -n "$vinfo" && \
+ func_warning "\`-version-info' is ignored for objects"
+
+ test -n "$release" && \
+ func_warning "\`-release' is ignored for objects"
+
+ case $output in
+ *.lo)
+ test -n "$objs$old_deplibs" && \
+ func_fatal_error "cannot build library object \`$output' from non-libtool objects"
+
+ libobj=$output
+ func_lo2o "$libobj"
+ obj=$func_lo2o_result
+ ;;
+ *)
+ libobj=
+ obj="$output"
+ ;;
+ esac
+
+ # Delete the old objects.
+ $opt_dry_run || $RM $obj $libobj
+
+ # Objects from convenience libraries. This assumes
+ # single-version convenience libraries. Whenever we create
+ # different ones for PIC/non-PIC, this we'll have to duplicate
+ # the extraction.
+ reload_conv_objs=
+ gentop=
+ # reload_cmds runs $LD directly, so let us get rid of
+ # -Wl from whole_archive_flag_spec and hope we can get by with
+ # turning comma into space..
+ wl=
+
+ if test -n "$convenience"; then
+ if test -n "$whole_archive_flag_spec"; then
+ eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
+ reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'`
+ else
+ gentop="$output_objdir/${obj}x"
+ generated="$generated $gentop"
+
+ func_extract_archives $gentop $convenience
+ reload_conv_objs="$reload_objs $func_extract_archives_result"
+ fi
+ fi
+
+ # Create the old-style object.
+ reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
+
+ output="$obj"
+ func_execute_cmds "$reload_cmds" 'exit $?'
+
+ # Exit if we aren't doing a library object file.
+ if test -z "$libobj"; then
+ if test -n "$gentop"; then
+ func_show_eval '${RM}r "$gentop"'
+ fi
+
+ exit $EXIT_SUCCESS
+ fi
+
+ if test "$build_libtool_libs" != yes; then
+ if test -n "$gentop"; then
+ func_show_eval '${RM}r "$gentop"'
+ fi
+
+ # Create an invalid libtool object if no PIC, so that we don't
+ # accidentally link it into a program.
+ # $show "echo timestamp > $libobj"
+ # $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
+ exit $EXIT_SUCCESS
+ fi
+
+ if test -n "$pic_flag" || test "$pic_mode" != default; then
+ # Only do commands if we really have different PIC objects.
+ reload_objs="$libobjs $reload_conv_objs"
+ output="$libobj"
+ func_execute_cmds "$reload_cmds" 'exit $?'
+ fi
+
+ if test -n "$gentop"; then
+ func_show_eval '${RM}r "$gentop"'
+ fi
+
+ exit $EXIT_SUCCESS
+ ;;
+
+ prog)
+ case $host in
+ *cygwin*) func_stripname '' '.exe' "$output"
+ output=$func_stripname_result.exe;;
+ esac
+ test -n "$vinfo" && \
+ func_warning "\`-version-info' is ignored for programs"
+
+ test -n "$release" && \
+ func_warning "\`-release' is ignored for programs"
+
+ test "$preload" = yes \
+ && test "$dlopen_support" = unknown \
+ && test "$dlopen_self" = unknown \
+ && test "$dlopen_self_static" = unknown && \
+ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
+
+ case $host in
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # On Rhapsody replace the C library is the System framework
+ compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+ finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+ ;;
+ esac
+
+ case $host in
+ *-*-darwin*)
+ # Don't allow lazy linking, it breaks C++ global constructors
+ # But is supposedly fixed on 10.4 or later (yay!).
+ if test "$tagname" = CXX ; then
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
+ 10.[0123])
+ compile_command="$compile_command ${wl}-bind_at_load"
+ finalize_command="$finalize_command ${wl}-bind_at_load"
+ ;;
+ esac
+ fi
+ # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+ compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+ finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+ ;;
+ esac
+
+
+ # move library search paths that coincide with paths to not yet
+ # installed libraries to the beginning of the library search list
+ new_libs=
+ for path in $notinst_path; do
+ case " $new_libs " in
+ *" -L$path/$objdir "*) ;;
+ *)
+ case " $compile_deplibs " in
+ *" -L$path/$objdir "*)
+ new_libs="$new_libs -L$path/$objdir" ;;
+ esac
+ ;;
+ esac
+ done
+ for deplib in $compile_deplibs; do
+ case $deplib in
+ -L*)
+ case " $new_libs " in
+ *" $deplib "*) ;;
+ *) new_libs="$new_libs $deplib" ;;
+ esac
+ ;;
+ *) new_libs="$new_libs $deplib" ;;
+ esac
+ done
+ compile_deplibs="$new_libs"
+
+
+ compile_command="$compile_command $compile_deplibs"
+ finalize_command="$finalize_command $finalize_deplibs"
+
+ if test -n "$rpath$xrpath"; then
+ # If the user specified any rpath flags, then add them.
+ for libdir in $rpath $xrpath; do
+ # This is the magic to use -rpath.
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_rpath="$finalize_rpath $libdir" ;;
+ esac
+ done
+ fi
+
+ # Now hardcode the library paths
+ rpath=
+ hardcode_libdirs=
+ for libdir in $compile_rpath $finalize_rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs="$libdir"
+ else
+ # Just accumulate the unique libdirs.
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+ hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ rpath="$rpath $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$perm_rpath " in
+ *" $libdir "*) ;;
+ *) perm_rpath="$perm_rpath $libdir" ;;
+ esac
+ fi
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+ testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
+ case :$dllsearchpath: in
+ *":$libdir:"*) ;;
+ *) dllsearchpath="$dllsearchpath:$libdir";;
+ esac
+ case :$dllsearchpath: in
+ *":$testbindir:"*) ;;
+ *) dllsearchpath="$dllsearchpath:$testbindir";;
+ esac
+ ;;
+ esac
+ done
+ # Substitute the hardcoded libdirs into the rpath.
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir="$hardcode_libdirs"
+ eval rpath=\" $hardcode_libdir_flag_spec\"
+ fi
+ compile_rpath="$rpath"
+
+ rpath=
+ hardcode_libdirs=
+ for libdir in $finalize_rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs="$libdir"
+ else
+ # Just accumulate the unique libdirs.
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+ hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ rpath="$rpath $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$finalize_perm_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
+ esac
+ fi
+ done
+ # Substitute the hardcoded libdirs into the rpath.
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir="$hardcode_libdirs"
+ eval rpath=\" $hardcode_libdir_flag_spec\"
+ fi
+ finalize_rpath="$rpath"
+
+ if test -n "$libobjs" && test "$build_old_libs" = yes; then
+ # Transform all the library objects into standard objects.
+ compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+ finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+ fi
+
+ func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
+
+ # template prelinking step
+ if test -n "$prelink_cmds"; then
+ func_execute_cmds "$prelink_cmds" 'exit $?'
+ fi
+
+ wrappers_required=yes
+ case $host in
+ *cygwin* | *mingw* )
+ if test "$build_libtool_libs" != yes; then
+ wrappers_required=no
+ fi
+ ;;
+ *)
+ if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
+ wrappers_required=no
+ fi
+ ;;
+ esac
+ if test "$wrappers_required" = no; then
+ # Replace the output file specification.
+ compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+ link_command="$compile_command$compile_rpath"
+
+ # We have no uninstalled library dependencies, so finalize right now.
+ exit_status=0
+ func_show_eval "$link_command" 'exit_status=$?'
+
+ # Delete the generated files.
+ if test -f "$output_objdir/${outputname}S.${objext}"; then
+ func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
+ fi
+
+ exit $exit_status
+ fi
+
+ if test -n "$compile_shlibpath$finalize_shlibpath"; then
+ compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
+ fi
+ if test -n "$finalize_shlibpath"; then
+ finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
+ fi
+
+ compile_var=
+ finalize_var=
+ if test -n "$runpath_var"; then
+ if test -n "$perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $perm_rpath; do
+ rpath="$rpath$dir:"
+ done
+ compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
+ fi
+ if test -n "$finalize_perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $finalize_perm_rpath; do
+ rpath="$rpath$dir:"
+ done
+ finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
+ fi
+ fi
+
+ if test "$no_install" = yes; then
+ # We don't need to create a wrapper script.
+ link_command="$compile_var$compile_command$compile_rpath"
+ # Replace the output file specification.
+ link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+ # Delete the old output file.
+ $opt_dry_run || $RM $output
+ # Link the executable and exit
+ func_show_eval "$link_command" 'exit $?'
+ exit $EXIT_SUCCESS
+ fi
+
+ if test "$hardcode_action" = relink; then
+ # Fast installation is not supported
+ link_command="$compile_var$compile_command$compile_rpath"
+ relink_command="$finalize_var$finalize_command$finalize_rpath"
+
+ func_warning "this platform does not like uninstalled shared libraries"
+ func_warning "\`$output' will be relinked during installation"
+ else
+ if test "$fast_install" != no; then
+ link_command="$finalize_var$compile_command$finalize_rpath"
+ if test "$fast_install" = yes; then
+ relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
+ else
+ # fast_install is set to needless
+ relink_command=
+ fi
+ else
+ link_command="$compile_var$compile_command$compile_rpath"
+ relink_command="$finalize_var$finalize_command$finalize_rpath"
+ fi
+ fi
+
+ # Replace the output file specification.
+ link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+
+ # Delete the old output files.
+ $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
+
+ func_show_eval "$link_command" 'exit $?'
+
+ # Now create the wrapper script.
+ func_verbose "creating $output"
+
+ # Quote the relink command for shipping.
+ if test -n "$relink_command"; then
+ # Preserve any variables that may affect compiler behavior
+ for var in $variables_saved_for_relink; do
+ if eval test -z \"\${$var+set}\"; then
+ relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+ elif eval var_value=\$$var; test -z "$var_value"; then
+ relink_command="$var=; export $var; $relink_command"
+ else
+ func_quote_for_eval "$var_value"
+ relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+ fi
+ done
+ relink_command="(cd `pwd`; $relink_command)"
+ relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+ fi
+
+ # Quote $ECHO for shipping.
+ if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then
+ case $progpath in
+ [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";;
+ *) qecho="$SHELL `pwd`/$progpath --fallback-echo";;
+ esac
+ qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"`
+ else
+ qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"`
+ fi
+
+ # Only actually do things if not in dry run mode.
+ $opt_dry_run || {
+ # win32 will think the script is a binary if it has
+ # a .exe suffix, so we strip it off here.
+ case $output in
+ *.exe) func_stripname '' '.exe' "$output"
+ output=$func_stripname_result ;;
+ esac
+ # test for cygwin because mv fails w/o .exe extensions
+ case $host in
+ *cygwin*)
+ exeext=.exe
+ func_stripname '' '.exe' "$outputname"
+ outputname=$func_stripname_result ;;
+ *) exeext= ;;
+ esac
+ case $host in
+ *cygwin* | *mingw* )
+ func_dirname_and_basename "$output" "" "."
+ output_name=$func_basename_result
+ output_path=$func_dirname_result
+ cwrappersource="$output_path/$objdir/lt-$output_name.c"
+ cwrapper="$output_path/$output_name.exe"
+ $RM $cwrappersource $cwrapper
+ trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
+
+ func_emit_cwrapperexe_src > $cwrappersource
+
+ # we should really use a build-platform specific compiler
+ # here, but OTOH, the wrappers (shell script and this C one)
+ # are only useful if you want to execute the "real" binary.
+ # Since the "real" binary is built for $host, then this
+ # wrapper might as well be built for $host, too.
+ $opt_dry_run || {
+ $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
+ $STRIP $cwrapper
+ }
+
+ # Now, create the wrapper script for func_source use:
+ func_ltwrapper_scriptname $cwrapper
+ $RM $func_ltwrapper_scriptname_result
+ trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
+ $opt_dry_run || {
+ # note: this script will not be executed, so do not chmod.
+ if test "x$build" = "x$host" ; then
+ $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
+ else
+ func_emit_wrapper no > $func_ltwrapper_scriptname_result
+ fi
+ }
+ ;;
+ * )
+ $RM $output
+ trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
+
+ func_emit_wrapper no > $output
+ chmod +x $output
+ ;;
+ esac
+ }
+ exit $EXIT_SUCCESS
+ ;;
+ esac
+
+ # See if we need to build an old-fashioned archive.
+ for oldlib in $oldlibs; do
+
+ if test "$build_libtool_libs" = convenience; then
+ oldobjs="$libobjs_save $symfileobj"
+ addlibs="$convenience"
+ build_libtool_libs=no
+ else
+ if test "$build_libtool_libs" = module; then
+ oldobjs="$libobjs_save"
+ build_libtool_libs=no
+ else
+ oldobjs="$old_deplibs $non_pic_objects"
+ if test "$preload" = yes && test -f "$symfileobj"; then
+ oldobjs="$oldobjs $symfileobj"
+ fi
+ fi
+ addlibs="$old_convenience"
+ fi
+
+ if test -n "$addlibs"; then
+ gentop="$output_objdir/${outputname}x"
+ generated="$generated $gentop"
+
+ func_extract_archives $gentop $addlibs
+ oldobjs="$oldobjs $func_extract_archives_result"
+ fi
+
+ # Do each command in the archive commands.
+ if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
+ cmds=$old_archive_from_new_cmds
+ else
+
+ # Add any objects from preloaded convenience libraries
+ if test -n "$dlprefiles"; then
+ gentop="$output_objdir/${outputname}x"
+ generated="$generated $gentop"
+
+ func_extract_archives $gentop $dlprefiles
+ oldobjs="$oldobjs $func_extract_archives_result"
+ fi
+
+ # POSIX demands no paths to be encoded in archives. We have
+ # to avoid creating archives with duplicate basenames if we
+ # might have to extract them afterwards, e.g., when creating a
+ # static archive out of a convenience library, or when linking
+ # the entirety of a libtool archive into another (currently
+ # not supported by libtool).
+ if (for obj in $oldobjs
+ do
+ func_basename "$obj"
+ $ECHO "$func_basename_result"
+ done | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ $ECHO "copying selected object files to avoid basename conflicts..."
+ gentop="$output_objdir/${outputname}x"
+ generated="$generated $gentop"
+ func_mkdir_p "$gentop"
+ save_oldobjs=$oldobjs
+ oldobjs=
+ counter=1
+ for obj in $save_oldobjs
+ do
+ func_basename "$obj"
+ objbase="$func_basename_result"
+ case " $oldobjs " in
+ " ") oldobjs=$obj ;;
+ *[\ /]"$objbase "*)
+ while :; do
+ # Make sure we don't pick an alternate name that also
+ # overlaps.
+ newobj=lt$counter-$objbase
+ func_arith $counter + 1
+ counter=$func_arith_result
+ case " $oldobjs " in
+ *[\ /]"$newobj "*) ;;
+ *) if test ! -f "$gentop/$newobj"; then break; fi ;;
+ esac
+ done
+ func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
+ oldobjs="$oldobjs $gentop/$newobj"
+ ;;
+ *) oldobjs="$oldobjs $obj" ;;
+ esac
+ done
+ fi
+ eval cmds=\"$old_archive_cmds\"
+
+ func_len " $cmds"
+ len=$func_len_result
+ if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ cmds=$old_archive_cmds
+ else
+ # the command line is too long to link in one step, link in parts
+ func_verbose "using piecewise archive linking..."
+ save_RANLIB=$RANLIB
+ RANLIB=:
+ objlist=
+ concat_cmds=
+ save_oldobjs=$oldobjs
+ oldobjs=
+ # Is there a better way of finding the last object in the list?
+ for obj in $save_oldobjs
+ do
+ last_oldobj=$obj
+ done
+ eval test_cmds=\"$old_archive_cmds\"
+ func_len " $test_cmds"
+ len0=$func_len_result
+ len=$len0
+ for obj in $save_oldobjs
+ do
+ func_len " $obj"
+ func_arith $len + $func_len_result
+ len=$func_arith_result
+ func_append objlist " $obj"
+ if test "$len" -lt "$max_cmd_len"; then
+ :
+ else
+ # the above command should be used before it gets too long
+ oldobjs=$objlist
+ if test "$obj" = "$last_oldobj" ; then
+ RANLIB=$save_RANLIB
+ fi
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
+ objlist=
+ len=$len0
+ fi
+ done
+ RANLIB=$save_RANLIB
+ oldobjs=$objlist
+ if test "X$oldobjs" = "X" ; then
+ eval cmds=\"\$concat_cmds\"
+ else
+ eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
+ fi
+ fi
+ fi
+ func_execute_cmds "$cmds" 'exit $?'
+ done
+
+ test -n "$generated" && \
+ func_show_eval "${RM}r$generated"
+
+ # Now create the libtool archive.
+ case $output in
+ *.la)
+ old_library=
+ test "$build_old_libs" = yes && old_library="$libname.$libext"
+ func_verbose "creating $output"
+
+ # Preserve any variables that may affect compiler behavior
+ for var in $variables_saved_for_relink; do
+ if eval test -z \"\${$var+set}\"; then
+ relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+ elif eval var_value=\$$var; test -z "$var_value"; then
+ relink_command="$var=; export $var; $relink_command"
+ else
+ func_quote_for_eval "$var_value"
+ relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+ fi
+ done
+ # Quote the link command for shipping.
+ relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
+ relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+ if test "$hardcode_automatic" = yes ; then
+ relink_command=
+ fi
+
+ # Only create the output if not a dry run.
+ $opt_dry_run || {
+ for installed in no yes; do
+ if test "$installed" = yes; then
+ if test -z "$install_libdir"; then
+ break
+ fi
+ output="$output_objdir/$outputname"i
+ # Replace all uninstalled libtool libraries with the installed ones
+ newdependency_libs=
+ for deplib in $dependency_libs; do
+ case $deplib in
+ *.la)
+ func_basename "$deplib"
+ name="$func_basename_result"
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+ test -z "$libdir" && \
+ func_fatal_error "\`$deplib' is not a valid libtool archive"
+ newdependency_libs="$newdependency_libs $libdir/$name"
+ ;;
+ *) newdependency_libs="$newdependency_libs $deplib" ;;
+ esac
+ done
+ dependency_libs="$newdependency_libs"
+ newdlfiles=
+
+ for lib in $dlfiles; do
+ case $lib in
+ *.la)
+ func_basename "$lib"
+ name="$func_basename_result"
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+ test -z "$libdir" && \
+ func_fatal_error "\`$lib' is not a valid libtool archive"
+ newdlfiles="$newdlfiles $libdir/$name"
+ ;;
+ *) newdlfiles="$newdlfiles $lib" ;;
+ esac
+ done
+ dlfiles="$newdlfiles"
+ newdlprefiles=
+ for lib in $dlprefiles; do
+ case $lib in
+ *.la)
+ # Only pass preopened files to the pseudo-archive (for
+ # eventual linking with the app. that links it) if we
+ # didn't already link the preopened objects directly into
+ # the library:
+ func_basename "$lib"
+ name="$func_basename_result"
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+ test -z "$libdir" && \
+ func_fatal_error "\`$lib' is not a valid libtool archive"
+ newdlprefiles="$newdlprefiles $libdir/$name"
+ ;;
+ esac
+ done
+ dlprefiles="$newdlprefiles"
+ else
+ newdlfiles=
+ for lib in $dlfiles; do
+ case $lib in
+ [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+ *) abs=`pwd`"/$lib" ;;
+ esac
+ newdlfiles="$newdlfiles $abs"
+ done
+ dlfiles="$newdlfiles"
+ newdlprefiles=
+ for lib in $dlprefiles; do
+ case $lib in
+ [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+ *) abs=`pwd`"/$lib" ;;
+ esac
+ newdlprefiles="$newdlprefiles $abs"
+ done
+ dlprefiles="$newdlprefiles"
+ fi
+ $RM $output
+ # place dlname in correct position for cygwin
+ tdlname=$dlname
+ case $host,$output,$installed,$module,$dlname in
+ *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
+ esac
+ $ECHO > $output "\
+# $outputname - a libtool library file
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='$tdlname'
+
+# Names of this library.
+library_names='$library_names'
+
+# The name of the static archive.
+old_library='$old_library'
+
+# Linker flags that can not go in dependency_libs.
+inherited_linker_flags='$new_inherited_linker_flags'
+
+# Libraries that this one depends upon.
+dependency_libs='$dependency_libs'
+
+# Names of additional weak libraries provided by this library
+weak_library_names='$weak_libs'
+
+# Version information for $libname.
+current=$current
+age=$age
+revision=$revision
+
+# Is this an already installed library?
+installed=$installed
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=$module
+
+# Files to dlopen/dlpreopen
+dlopen='$dlfiles'
+dlpreopen='$dlprefiles'
+
+# Directory that this library needs to be installed in:
+libdir='$install_libdir'"
+ if test "$installed" = no && test "$need_relink" = yes; then
+ $ECHO >> $output "\
+relink_command=\"$relink_command\""
+ fi
+ done
+ }
+
+ # Do a symbolic link so that the libtool archive can be found in
+ # LD_LIBRARY_PATH before the program is installed.
+ func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
+ ;;
+ esac
+ exit $EXIT_SUCCESS
+}
+
+{ test "$mode" = link || test "$mode" = relink; } &&
+ func_mode_link ${1+"$@"}
+
+
+# func_mode_uninstall arg...
+func_mode_uninstall ()
+{
+ $opt_debug
+ RM="$nonopt"
+ files=
+ rmforce=
+ exit_status=0
+
+ # This variable tells wrapper scripts just to set variables rather
+ # than running their programs.
+ libtool_install_magic="$magic"
+
+ for arg
+ do
+ case $arg in
+ -f) RM="$RM $arg"; rmforce=yes ;;
+ -*) RM="$RM $arg" ;;
+ *) files="$files $arg" ;;
+ esac
+ done
+
+ test -z "$RM" && \
+ func_fatal_help "you must specify an RM program"
+
+ rmdirs=
+
+ origobjdir="$objdir"
+ for file in $files; do
+ func_dirname "$file" "" "."
+ dir="$func_dirname_result"
+ if test "X$dir" = X.; then
+ objdir="$origobjdir"
+ else
+ objdir="$dir/$origobjdir"
+ fi
+ func_basename "$file"
+ name="$func_basename_result"
+ test "$mode" = uninstall && objdir="$dir"
+
+ # Remember objdir for removal later, being careful to avoid duplicates
+ if test "$mode" = clean; then
+ case " $rmdirs " in
+ *" $objdir "*) ;;
+ *) rmdirs="$rmdirs $objdir" ;;
+ esac
+ fi
+
+ # Don't error if the file doesn't exist and rm -f was used.
+ if { test -L "$file"; } >/dev/null 2>&1 ||
+ { test -h "$file"; } >/dev/null 2>&1 ||
+ test -f "$file"; then
+ :
+ elif test -d "$file"; then
+ exit_status=1
+ continue
+ elif test "$rmforce" = yes; then
+ continue
+ fi
+
+ rmfiles="$file"
+
+ case $name in
+ *.la)
+ # Possibly a libtool archive, so verify it.
+ if func_lalib_p "$file"; then
+ func_source $dir/$name
+
+ # Delete the libtool libraries and symlinks.
+ for n in $library_names; do
+ rmfiles="$rmfiles $objdir/$n"
+ done
+ test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
+
+ case "$mode" in
+ clean)
+ case " $library_names " in
+ # " " in the beginning catches empty $dlname
+ *" $dlname "*) ;;
+ *) rmfiles="$rmfiles $objdir/$dlname" ;;
+ esac
+ test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
+ ;;
+ uninstall)
+ if test -n "$library_names"; then
+ # Do each command in the postuninstall commands.
+ func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
+ fi
+
+ if test -n "$old_library"; then
+ # Do each command in the old_postuninstall commands.
+ func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
+ fi
+ # FIXME: should reinstall the best remaining shared library.
+ ;;
+ esac
+ fi
+ ;;
+
+ *.lo)
+ # Possibly a libtool object, so verify it.
+ if func_lalib_p "$file"; then
+
+ # Read the .lo file
+ func_source $dir/$name
+
+ # Add PIC object to the list of files to remove.
+ if test -n "$pic_object" &&
+ test "$pic_object" != none; then
+ rmfiles="$rmfiles $dir/$pic_object"
+ fi
+
+ # Add non-PIC object to the list of files to remove.
+ if test -n "$non_pic_object" &&
+ test "$non_pic_object" != none; then
+ rmfiles="$rmfiles $dir/$non_pic_object"
+ fi
+ fi
+ ;;
+
+ *)
+ if test "$mode" = clean ; then
+ noexename=$name
+ case $file in
+ *.exe)
+ func_stripname '' '.exe' "$file"
+ file=$func_stripname_result
+ func_stripname '' '.exe' "$name"
+ noexename=$func_stripname_result
+ # $file with .exe has already been added to rmfiles,
+ # add $file without .exe
+ rmfiles="$rmfiles $file"
+ ;;
+ esac
+ # Do a test to see if this is a libtool program.
+ if func_ltwrapper_p "$file"; then
+ if func_ltwrapper_executable_p "$file"; then
+ func_ltwrapper_scriptname "$file"
+ relink_command=
+ func_source $func_ltwrapper_scriptname_result
+ rmfiles="$rmfiles $func_ltwrapper_scriptname_result"
+ else
+ relink_command=
+ func_source $dir/$noexename
+ fi
+
+ # note $name still contains .exe if it was in $file originally
+ # as does the version of $file that was added into $rmfiles
+ rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
+ if test "$fast_install" = yes && test -n "$relink_command"; then
+ rmfiles="$rmfiles $objdir/lt-$name"
+ fi
+ if test "X$noexename" != "X$name" ; then
+ rmfiles="$rmfiles $objdir/lt-${noexename}.c"
+ fi
+ fi
+ fi
+ ;;
+ esac
+ func_show_eval "$RM $rmfiles" 'exit_status=1'
+ done
+ objdir="$origobjdir"
+
+ # Try to remove the ${objdir}s in the directories where we deleted files
+ for dir in $rmdirs; do
+ if test -d "$dir"; then
+ func_show_eval "rmdir $dir >/dev/null 2>&1"
+ fi
+ done
+
+ exit $exit_status
+}
+
+{ test "$mode" = uninstall || test "$mode" = clean; } &&
+ func_mode_uninstall ${1+"$@"}
+
+test -z "$mode" && {
+ help="$generic_help"
+ func_fatal_help "you must specify a MODE"
+}
+
+test -z "$exec_cmd" && \
+ func_fatal_help "invalid operation mode \`$mode'"
+
+if test -n "$exec_cmd"; then
+ eval exec "$exec_cmd"
+ exit $EXIT_FAILURE
+fi
+
+exit $exit_status
+
+
+# The TAGs below are defined such that we never get into a situation
+# in which we disable both kinds of libraries. Given conflicting
+# choices, we go for a static library, that is the most portable,
+# since we can't tell whether shared libraries were disabled because
+# the user asked for that or because the platform doesn't support
+# them. This is particularly important on AIX, because we don't
+# support having both static and shared libraries enabled at the same
+# time on that platform, so we default to a shared-only configuration.
+# If a disable-shared tag is given, we'll fallback to a static-only
+# configuration. But we'll never go from static-only to shared-only.
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
+build_libtool_libs=no
+build_old_libs=yes
+# ### END LIBTOOL TAG CONFIG: disable-shared
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-static
+build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
+# ### END LIBTOOL TAG CONFIG: disable-static
+
+# Local Variables:
+# mode:shell-script
+# sh-indentation:2
+# End:
+# vi:sw=2
+
diff --git a/src/3rdparty/freetype/builds/unix/mkinstalldirs b/src/3rdparty/freetype/builds/unix/mkinstalldirs
new file mode 100755
index 0000000..ef7e16f
--- /dev/null
+++ b/src/3rdparty/freetype/builds/unix/mkinstalldirs
@@ -0,0 +1,161 @@
+#! /bin/sh
+# mkinstalldirs --- make directory hierarchy
+
+scriptversion=2006-05-11.19
+
+# Original author: Noah Friedman <friedman@prep.ai.mit.edu>
+# Created: 1993-05-16
+# Public domain.
+#
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+nl='
+'
+IFS=" "" $nl"
+errstatus=0
+dirmode=
+
+usage="\
+Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ...
+
+Create each directory DIR (with mode MODE, if specified), including all
+leading file name components.
+
+Report bugs to <bug-automake@gnu.org>."
+
+# process command line arguments
+while test $# -gt 0 ; do
+ case $1 in
+ -h | --help | --h*) # -h for help
+ echo "$usage"
+ exit $?
+ ;;
+ -m) # -m PERM arg
+ shift
+ test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
+ dirmode=$1
+ shift
+ ;;
+ --version)
+ echo "$0 $scriptversion"
+ exit $?
+ ;;
+ --) # stop option processing
+ shift
+ break
+ ;;
+ -*) # unknown option
+ echo "$usage" 1>&2
+ exit 1
+ ;;
+ *) # first non-opt arg
+ break
+ ;;
+ esac
+done
+
+for file
+do
+ if test -d "$file"; then
+ shift
+ else
+ break
+ fi
+done
+
+case $# in
+ 0) exit 0 ;;
+esac
+
+# Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and
+# mkdir -p a/c at the same time, both will detect that a is missing,
+# one will create a, then the other will try to create a and die with
+# a "File exists" error. This is a problem when calling mkinstalldirs
+# from a parallel make. We use --version in the probe to restrict
+# ourselves to GNU mkdir, which is thread-safe.
+case $dirmode in
+ '')
+ if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
+ echo "mkdir -p -- $*"
+ exec mkdir -p -- "$@"
+ else
+ # On NextStep and OpenStep, the `mkdir' command does not
+ # recognize any option. It will interpret all options as
+ # directories to create, and then abort because `.' already
+ # exists.
+ test -d ./-p && rmdir ./-p
+ test -d ./--version && rmdir ./--version
+ fi
+ ;;
+ *)
+ if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 &&
+ test ! -d ./--version; then
+ echo "mkdir -m $dirmode -p -- $*"
+ exec mkdir -m "$dirmode" -p -- "$@"
+ else
+ # Clean up after NextStep and OpenStep mkdir.
+ for d in ./-m ./-p ./--version "./$dirmode";
+ do
+ test -d $d && rmdir $d
+ done
+ fi
+ ;;
+esac
+
+for file
+do
+ case $file in
+ /*) pathcomp=/ ;;
+ *) pathcomp= ;;
+ esac
+ oIFS=$IFS
+ IFS=/
+ set fnord $file
+ shift
+ IFS=$oIFS
+
+ for d
+ do
+ test "x$d" = x && continue
+
+ pathcomp=$pathcomp$d
+ case $pathcomp in
+ -*) pathcomp=./$pathcomp ;;
+ esac
+
+ if test ! -d "$pathcomp"; then
+ echo "mkdir $pathcomp"
+
+ mkdir "$pathcomp" || lasterr=$?
+
+ if test ! -d "$pathcomp"; then
+ errstatus=$lasterr
+ else
+ if test ! -z "$dirmode"; then
+ echo "chmod $dirmode $pathcomp"
+ lasterr=
+ chmod "$dirmode" "$pathcomp" || lasterr=$?
+
+ if test ! -z "$lasterr"; then
+ errstatus=$lasterr
+ fi
+ fi
+ fi
+ fi
+
+ pathcomp=$pathcomp/
+ done
+done
+
+exit $errstatus
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/src/3rdparty/freetype/builds/unix/unix-cc.in b/src/3rdparty/freetype/builds/unix/unix-cc.in
new file mode 100644
index 0000000..9c6d5de
--- /dev/null
+++ b/src/3rdparty/freetype/builds/unix/unix-cc.in
@@ -0,0 +1,113 @@
+#
+# FreeType 2 template for Unix-specific compiler definitions
+#
+
+# Copyright 1996-2000, 2002, 2003, 2005, 2006 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+CC := @CC@
+COMPILER_SEP := $(SEP)
+
+LIBTOOL ?= $(BUILD_DIR)/libtool
+
+
+# The object file extension (for standard and static libraries). This can be
+# .o, .tco, .obj, etc., depending on the platform.
+#
+O := lo
+SO := o
+
+
+# The executable file extension. Although most Unix platforms use no
+# extension, we copy the extension detected by autoconf. Useful for cross
+# building on Unix systems for non-Unix systems.
+#
+E := @EXEEXT@
+
+
+# The library file extension (for standard and static libraries). This can
+# be .a, .lib, etc., depending on the platform.
+#
+A := la
+SA := a
+
+
+# The name of the final library file. Note that the DOS-specific Makefile
+# uses a shorter (8.3) name.
+#
+LIBRARY := lib$(PROJECT)
+
+
+# Path inclusion flag. Some compilers use a different flag than `-I' to
+# specify an additional include path. Examples are `/i=' or `-J'.
+#
+I := -I
+
+
+# C flag used to define a macro before the compilation of a given source
+# object. Usually it is `-D' like in `-DDEBUG'.
+#
+D := -D
+
+
+# The link flag used to specify a given library file on link. Note that
+# this is only used to compile the demo programs, not the library itself.
+#
+L := -l
+
+
+# Target flag.
+#
+T := -o$(space)
+
+
+# C flags
+#
+# These should concern: debug output, optimization & warnings.
+#
+# Use the ANSIFLAGS variable to define the compiler flags used to enfore
+# ANSI compliance.
+#
+# We use our own FreeType configuration file.
+#
+CPPFLAGS := @CPPFLAGS@
+CFLAGS := -c @XX_CFLAGS@ @CFLAGS@ -DFT_CONFIG_CONFIG_H="<ftconfig.h>"
+
+# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
+#
+ANSIFLAGS := @XX_ANSIFLAGS@
+
+# C compiler to use -- we use libtool!
+#
+#
+CCraw := $(CC)
+CC := $(LIBTOOL) --mode=compile $(CCraw)
+
+# Linker flags.
+#
+LDFLAGS := @LDFLAGS@
+
+
+# export symbols
+#
+CCraw_build := @CC_BUILD@ # native CC of building system
+E_BUILD := @EXEEXT_BUILD@ # extension for exexutable on building system
+EXPORTS_LIST := $(OBJ_DIR)/ftexport.sym
+CCexe := $(CCraw_build) # used to compile `apinames' only
+
+
+# Library linking
+#
+LINK_LIBRARY = $(LIBTOOL) --mode=link $(CCraw) -o $@ $(OBJECTS_LIST) \
+ -rpath $(libdir) -version-info $(version_info) \
+ $(LDFLAGS) -no-undefined \
+ # -export-symbols $(EXPORTS_LIST)
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/unix/unix-def.in b/src/3rdparty/freetype/builds/unix/unix-def.in
new file mode 100644
index 0000000..b90ed0c
--- /dev/null
+++ b/src/3rdparty/freetype/builds/unix/unix-def.in
@@ -0,0 +1,81 @@
+#
+# FreeType 2 configuration rules templates for Unix + configure
+#
+
+
+# Copyright 1996-2000, 2002, 2004, 2006 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+TOP_DIR := $(shell cd $(TOP_DIR); pwd)
+
+DELETE := @RMF@
+DELDIR := @RMDIR@
+CAT := cat
+SEP := /
+
+# this is used for `make distclean' and `make install'
+OBJ_BUILD ?= $(BUILD_DIR)
+
+# don't use `:=' here since the path stuff will be included after this file
+#
+FTSYS_SRC = @FTSYS_SRC@
+
+INSTALL := @INSTALL@
+INSTALL_DATA := @INSTALL_DATA@
+INSTALL_PROGRAM := @INSTALL_PROGRAM@
+INSTALL_SCRIPT := @INSTALL_SCRIPT@
+MKINSTALLDIRS := $(BUILD_DIR)/mkinstalldirs
+
+DISTCLEAN += $(OBJ_BUILD)/config.cache \
+ $(OBJ_BUILD)/config.log \
+ $(OBJ_BUILD)/config.status \
+ $(OBJ_BUILD)/unix-def.mk \
+ $(OBJ_BUILD)/unix-cc.mk \
+ $(OBJ_BUILD)/ftconfig.h \
+ $(OBJ_BUILD)/freetype-config \
+ $(OBJ_BUILD)/freetype2.pc \
+ $(LIBTOOL) \
+ $(OBJ_BUILD)/Makefile
+
+
+# Standard installation variables.
+#
+prefix := @prefix@
+exec_prefix := @exec_prefix@
+libdir := @libdir@
+bindir := @bindir@
+includedir := @includedir@
+datarootdir := @datarootdir@
+datadir := @datadir@
+
+version_info := @version_info@
+
+
+# The directory where all library files are placed.
+#
+# By default, this is the same as $(OBJ_DIR); however, this can be changed
+# to suit particular needs.
+#
+LIB_DIR := $(OBJ_DIR)
+
+
+# The SYSTEM_ZLIB macro is defined if the user wishes to link dynamically
+# with its system wide zlib. If SYSTEM_ZLIB is 'yes', the zlib part of the
+# ftgzip module is not compiled in.
+SYSTEM_ZLIB := @SYSTEM_ZLIB@
+
+
+# The NO_OUTPUT macro is appended to command lines in order to ignore
+# the output of some programs.
+#
+NO_OUTPUT := 2> /dev/null
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/unix/unix-dev.mk b/src/3rdparty/freetype/builds/unix/unix-dev.mk
new file mode 100644
index 0000000..76bae38
--- /dev/null
+++ b/src/3rdparty/freetype/builds/unix/unix-dev.mk
@@ -0,0 +1,26 @@
+#
+# FreeType 2 Configuration rules for Unix + GCC
+#
+# Development version without optimizations & libtool
+# and no installation.
+#
+
+
+# Copyright 1996-2000, 2003, 2006 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+DEVEL_DIR := $(TOP_DIR)/devel
+
+include $(TOP_DIR)/builds/unix/unixddef.mk
+include $(TOP_DIR)/builds/compiler/gcc-dev.mk
+include $(TOP_DIR)/builds/link_std.mk
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/unix/unix-lcc.mk b/src/3rdparty/freetype/builds/unix/unix-lcc.mk
new file mode 100644
index 0000000..6038e52
--- /dev/null
+++ b/src/3rdparty/freetype/builds/unix/unix-lcc.mk
@@ -0,0 +1,24 @@
+#
+# FreeType 2 Configuration rules for Unix + LCC
+#
+# Development version without optimizations & libtool
+# and no installation.
+#
+
+
+# Copyright 1996-2000 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+include $(TOP_DIR)/builds/unix/unixddef.mk
+include $(TOP_DIR)/builds/compiler/unix-lcc.mk
+include $(TOP_DIR)/builds/link_std.mk
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/unix/unix.mk b/src/3rdparty/freetype/builds/unix/unix.mk
new file mode 100644
index 0000000..7f9d9a3
--- /dev/null
+++ b/src/3rdparty/freetype/builds/unix/unix.mk
@@ -0,0 +1,62 @@
+#
+# FreeType 2 configuration rules for UNIX platforms
+#
+
+
+# Copyright 1996-2000, 2002, 2004, 2006 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+# We need these declarations here since unix-def.mk is a generated file.
+BUILD_DIR := $(TOP_DIR)/builds/unix
+PLATFORM := unix
+
+have_mk := $(wildcard $(OBJ_DIR)/unix-def.mk)
+ifneq ($(have_mk),)
+ # We are building FreeType 2 not in the src tree.
+ include $(OBJ_DIR)/unix-def.mk
+ include $(OBJ_DIR)/unix-cc.mk
+else
+ include $(BUILD_DIR)/unix-def.mk
+ include $(BUILD_DIR)/unix-cc.mk
+endif
+
+ifdef BUILD_PROJECT
+
+ .PHONY: clean_project distclean_project
+
+ # Now include the main sub-makefile. It contains all the rules used to
+ # build the library with the previous variables defined.
+ #
+ include $(TOP_DIR)/builds/$(PROJECT).mk
+
+
+ # The cleanup targets.
+ #
+ clean_project: clean_project_unix
+ distclean_project: distclean_project_unix
+
+
+ # This final rule is used to link all object files into a single library.
+ # It is part of the system-specific sub-Makefile because not all
+ # librarians accept a simple syntax like
+ #
+ # librarian library_file {list of object files}
+ #
+ $(PROJECT_LIBRARY): $(OBJECTS_LIST)
+ ifdef CLEAN_LIBRARY
+ -$(CLEAN_LIBRARY) $(NO_OUTPUT)
+ endif
+ $(LINK_LIBRARY)
+
+ include $(TOP_DIR)/builds/unix/install.mk
+
+endif
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/unix/unixddef.mk b/src/3rdparty/freetype/builds/unix/unixddef.mk
new file mode 100644
index 0000000..130d6b0
--- /dev/null
+++ b/src/3rdparty/freetype/builds/unix/unixddef.mk
@@ -0,0 +1,45 @@
+#
+# FreeType 2 configuration rules templates for
+# development under Unix with no configure script (gcc only)
+#
+
+
+# Copyright 1996-2000, 2003, 2006 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+TOP_DIR := $(shell cd $(TOP_DIR); pwd)
+OBJ_DIR := $(shell cd $(OBJ_DIR); pwd)
+
+PLATFORM := unix
+
+DELETE := rm -f
+CAT := cat
+SEP := /
+
+# we use a special devel ftoption.h
+DEVEL_DIR := $(TOP_DIR)/devel
+
+
+# library file name
+#
+LIBRARY := lib$(PROJECT)
+
+
+# The directory where all library files are placed.
+#
+# By default, this is the same as $(OBJ_DIR); however, this can be changed
+# to suit particular needs.
+#
+LIB_DIR := $(OBJ_DIR)
+
+
+NO_OUTPUT := 2> /dev/null
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/vms/ftconfig.h b/src/3rdparty/freetype/builds/vms/ftconfig.h
new file mode 100644
index 0000000..185c334
--- /dev/null
+++ b/src/3rdparty/freetype/builds/vms/ftconfig.h
@@ -0,0 +1,338 @@
+/***************************************************************************/
+/* */
+/* ftconfig.h */
+/* */
+/* VMS-specific configuration file (specification only). */
+/* */
+/* Copyright 1996-2001, 2002, 2003, 2004, 2006, 2007 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* This header file contains a number of macro definitions that are used */
+ /* by the rest of the engine. Most of the macros here are automatically */
+ /* determined at compile time, and you should not need to change it to */
+ /* port FreeType, except to compile the library with a non-ANSI */
+ /* compiler. */
+ /* */
+ /* Note however that if some specific modifications are needed, we */
+ /* advise you to place a modified copy in your build directory. */
+ /* */
+ /* The build directory is usually `freetype/builds/<system>', and */
+ /* contains system-specific files that are always included first when */
+ /* building the library. */
+ /* */
+ /*************************************************************************/
+
+
+#ifndef __FTCONFIG_H__
+#define __FTCONFIG_H__
+
+
+ /* Include the header file containing all developer build options */
+#include <ft2build.h>
+#include FT_CONFIG_OPTIONS_H
+#include FT_CONFIG_STANDARD_LIBRARY_H
+
+
+FT_BEGIN_HEADER
+
+ /*************************************************************************/
+ /* */
+ /* PLATFORM-SPECIFIC CONFIGURATION MACROS */
+ /* */
+ /* These macros can be toggled to suit a specific system. The current */
+ /* ones are defaults used to compile FreeType in an ANSI C environment */
+ /* (16bit compilers are also supported). Copy this file to your own */
+ /* `freetype/builds/<system>' directory, and edit it to port the engine. */
+ /* */
+ /*************************************************************************/
+
+
+#define HAVE_UNISTD_H 1
+#define HAVE_FCNTL_H 1
+
+#define SIZEOF_INT 4
+#define SIZEOF_LONG 4
+
+#define FT_SIZEOF_INT 4
+#define FT_SIZEOF_LONG 4
+
+#define FT_CHAR_BIT 8
+
+
+ /* Preferred alignment of data */
+#define FT_ALIGNMENT 8
+
+
+ /* FT_UNUSED is a macro used to indicate that a given parameter is not */
+ /* used -- this is only used to get rid of unpleasant compiler warnings */
+#ifndef FT_UNUSED
+#define FT_UNUSED( arg ) ( (arg) = (arg) )
+#endif
+
+
+ /*************************************************************************/
+ /* */
+ /* AUTOMATIC CONFIGURATION MACROS */
+ /* */
+ /* These macros are computed from the ones defined above. Don't touch */
+ /* their definition, unless you know precisely what you are doing. No */
+ /* porter should need to mess with them. */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* Mac support */
+ /* */
+ /* This is the only necessary change, so it is defined here instead */
+ /* providing a new configuration file. */
+ /* */
+#if ( defined( __APPLE__ ) && !defined( DARWIN_NO_CARBON ) ) || \
+ ( defined( __MWERKS__ ) && defined( macintosh ) )
+ /* no Carbon frameworks for 64bit 10.4.x */
+#include "AvailabilityMacros.h"
+#if defined( __LP64__ ) && \
+ ( MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 )
+#define DARWIN_NO_CARBON 1
+#else
+#define FT_MACINTOSH 1
+#endif
+#endif
+
+
+ /*************************************************************************/
+ /* */
+ /* IntN types */
+ /* */
+ /* Used to guarantee the size of some specific integers. */
+ /* */
+ typedef signed short FT_Int16;
+ typedef unsigned short FT_UInt16;
+
+#if FT_SIZEOF_INT == 4
+
+ typedef signed int FT_Int32;
+ typedef unsigned int FT_UInt32;
+
+#elif FT_SIZEOF_LONG == 4
+
+ typedef signed long FT_Int32;
+ typedef unsigned long FT_UInt32;
+
+#else
+#error "no 32bit type found -- please check your configuration files"
+#endif
+
+ /* look up an integer type that is at least 32 bits */
+#if FT_SIZEOF_INT >= 4
+
+ typedef int FT_Fast;
+ typedef unsigned int FT_UFast;
+
+#elif FT_SIZEOF_LONG >= 4
+
+ typedef long FT_Fast;
+ typedef unsigned long FT_UFast;
+
+#endif
+
+
+ /* determine whether we have a 64-bit int type for platforms without */
+ /* Autoconf */
+#if FT_SIZEOF_LONG == 8
+
+ /* FT_LONG64 must be defined if a 64-bit type is available */
+#define FT_LONG64
+#define FT_INT64 long
+
+#elif defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */
+
+ /* this compiler provides the __int64 type */
+#define FT_LONG64
+#define FT_INT64 __int64
+
+#elif defined( __BORLANDC__ ) /* Borland C++ */
+
+ /* XXXX: We should probably check the value of __BORLANDC__ in order */
+ /* to test the compiler version. */
+
+ /* this compiler provides the __int64 type */
+#define FT_LONG64
+#define FT_INT64 __int64
+
+#elif defined( __WATCOMC__ ) /* Watcom C++ */
+
+ /* Watcom doesn't provide 64-bit data types */
+
+#elif defined( __MWERKS__ ) /* Metrowerks CodeWarrior */
+
+#define FT_LONG64
+#define FT_INT64 long long int
+
+#elif defined( __GNUC__ )
+
+ /* GCC provides the `long long' type */
+#define FT_LONG64
+#define FT_INT64 long long int
+
+#endif /* FT_SIZEOF_LONG == 8 */
+
+
+#define FT_BEGIN_STMNT do {
+#define FT_END_STMNT } while ( 0 )
+#define FT_DUMMY_STMNT FT_BEGIN_STMNT FT_END_STMNT
+
+
+ /*************************************************************************/
+ /* */
+ /* A 64-bit data type will create compilation problems if you compile */
+ /* in strict ANSI mode. To avoid them, we disable their use if */
+ /* __STDC__ is defined. You can however ignore this rule by */
+ /* defining the FT_CONFIG_OPTION_FORCE_INT64 configuration macro. */
+ /* */
+#if defined( FT_LONG64 ) && !defined( FT_CONFIG_OPTION_FORCE_INT64 )
+
+#ifdef __STDC__
+
+ /* undefine the 64-bit macros in strict ANSI compilation mode */
+#undef FT_LONG64
+#undef FT_INT64
+
+#endif /* __STDC__ */
+
+#endif /* FT_LONG64 && !FT_CONFIG_OPTION_FORCE_INT64 */
+
+
+#ifdef FT_MAKE_OPTION_SINGLE_OBJECT
+
+#define FT_LOCAL( x ) static x
+#define FT_LOCAL_DEF( x ) static x
+
+#else
+
+#ifdef __cplusplus
+#define FT_LOCAL( x ) extern "C" x
+#define FT_LOCAL_DEF( x ) extern "C" x
+#else
+#define FT_LOCAL( x ) extern x
+#define FT_LOCAL_DEF( x ) x
+#endif
+
+#endif /* FT_MAKE_OPTION_SINGLE_OBJECT */
+
+
+#ifndef FT_BASE
+
+#ifdef __cplusplus
+#define FT_BASE( x ) extern "C" x
+#else
+#define FT_BASE( x ) extern x
+#endif
+
+#endif /* !FT_BASE */
+
+
+#ifndef FT_BASE_DEF
+
+#ifdef __cplusplus
+#define FT_BASE_DEF( x ) extern "C" x
+#else
+#define FT_BASE_DEF( x ) extern x
+#endif
+
+#endif /* !FT_BASE_DEF */
+
+
+#ifndef FT_EXPORT
+
+#ifdef __cplusplus
+#define FT_EXPORT( x ) extern "C" x
+#else
+#define FT_EXPORT( x ) extern x
+#endif
+
+#endif /* !FT_EXPORT */
+
+
+#ifndef FT_EXPORT_DEF
+
+#ifdef __cplusplus
+#define FT_EXPORT_DEF( x ) extern "C" x
+#else
+#define FT_EXPORT_DEF( x ) extern x
+#endif
+
+#endif /* !FT_EXPORT_DEF */
+
+
+#ifndef FT_EXPORT_VAR
+
+#ifdef __cplusplus
+#define FT_EXPORT_VAR( x ) extern "C" x
+#else
+#define FT_EXPORT_VAR( x ) extern x
+#endif
+
+#endif /* !FT_EXPORT_VAR */
+
+ /* The following macros are needed to compile the library with a */
+ /* C++ compiler and with 16bit compilers. */
+ /* */
+
+ /* This is special. Within C++, you must specify `extern "C"' for */
+ /* functions which are used via function pointers, and you also */
+ /* must do that for structures which contain function pointers to */
+ /* assure C linkage -- it's not possible to have (local) anonymous */
+ /* functions which are accessed by (global) function pointers. */
+ /* */
+ /* */
+ /* FT_CALLBACK_DEF is used to _define_ a callback function. */
+ /* */
+ /* FT_CALLBACK_TABLE is used to _declare_ a constant variable that */
+ /* contains pointers to callback functions. */
+ /* */
+ /* FT_CALLBACK_TABLE_DEF is used to _define_ a constant variable */
+ /* that contains pointers to callback functions. */
+ /* */
+ /* */
+ /* Some 16bit compilers have to redefine these macros to insert */
+ /* the infamous `_cdecl' or `__fastcall' declarations. */
+ /* */
+#ifndef FT_CALLBACK_DEF
+#ifdef __cplusplus
+#define FT_CALLBACK_DEF( x ) extern "C" x
+#else
+#define FT_CALLBACK_DEF( x ) static x
+#endif
+#endif /* FT_CALLBACK_DEF */
+
+#ifndef FT_CALLBACK_TABLE
+#ifdef __cplusplus
+#define FT_CALLBACK_TABLE extern "C"
+#define FT_CALLBACK_TABLE_DEF extern "C"
+#else
+#define FT_CALLBACK_TABLE extern
+#define FT_CALLBACK_TABLE_DEF /* nothing */
+#endif
+#endif /* FT_CALLBACK_TABLE */
+
+
+FT_END_HEADER
+
+
+#endif /* __FTCONFIG_H__ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/builds/vms/ftsystem.c b/src/3rdparty/freetype/builds/vms/ftsystem.c
new file mode 100644
index 0000000..76bfae9
--- /dev/null
+++ b/src/3rdparty/freetype/builds/vms/ftsystem.c
@@ -0,0 +1,321 @@
+/***************************************************************************/
+/* */
+/* ftsystem.c */
+/* */
+/* VMS-specific FreeType low-level system interface (body). */
+/* */
+/* Copyright 1996-2001, 2002, 2005 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#include <ft2build.h>
+ /* we use our special ftconfig.h file, not the standard one */
+#include <ftconfig.h>
+#include FT_INTERNAL_DEBUG_H
+#include FT_SYSTEM_H
+#include FT_ERRORS_H
+#include FT_TYPES_H
+#include FT_INTERNAL_OBJECTS_H
+
+ /* memory-mapping includes and definitions */
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <sys/mman.h>
+#ifndef MAP_FILE
+#define MAP_FILE 0x00
+#endif
+
+#ifdef MUNMAP_USES_VOIDP
+#define MUNMAP_ARG_CAST void *
+#else
+#define MUNMAP_ARG_CAST char *
+#endif
+
+#ifdef NEED_MUNMAP_DECL
+
+#ifdef __cplusplus
+ extern "C"
+#else
+ extern
+#endif
+ int
+ munmap( char* addr,
+ int len );
+
+#define MUNMAP_ARG_CAST char *
+
+#endif /* NEED_DECLARATION_MUNMAP */
+
+
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+ /*************************************************************************/
+ /* */
+ /* MEMORY MANAGEMENT INTERFACE */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* ft_alloc */
+ /* */
+ /* <Description> */
+ /* The memory allocation function. */
+ /* */
+ /* <Input> */
+ /* memory :: A pointer to the memory object. */
+ /* */
+ /* size :: The requested size in bytes. */
+ /* */
+ /* <Return> */
+ /* The address of newly allocated block. */
+ /* */
+ FT_CALLBACK_DEF( void* )
+ ft_alloc( FT_Memory memory,
+ long size )
+ {
+ FT_UNUSED( memory );
+
+ return malloc( size );
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* ft_realloc */
+ /* */
+ /* <Description> */
+ /* The memory reallocation function. */
+ /* */
+ /* <Input> */
+ /* memory :: A pointer to the memory object. */
+ /* */
+ /* cur_size :: The current size of the allocated memory block. */
+ /* */
+ /* new_size :: The newly requested size in bytes. */
+ /* */
+ /* block :: The current address of the block in memory. */
+ /* */
+ /* <Return> */
+ /* The address of the reallocated memory block. */
+ /* */
+ FT_CALLBACK_DEF( void* )
+ ft_realloc( FT_Memory memory,
+ long cur_size,
+ long new_size,
+ void* block )
+ {
+ FT_UNUSED( memory );
+ FT_UNUSED( cur_size );
+
+ return realloc( block, new_size );
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* ft_free */
+ /* */
+ /* <Description> */
+ /* The memory release function. */
+ /* */
+ /* <Input> */
+ /* memory :: A pointer to the memory object. */
+ /* */
+ /* block :: The address of block in memory to be freed. */
+ /* */
+ FT_CALLBACK_DEF( void )
+ ft_free( FT_Memory memory,
+ void* block )
+ {
+ FT_UNUSED( memory );
+
+ free( block );
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* RESOURCE MANAGEMENT INTERFACE */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
+ /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
+ /* messages during execution. */
+ /* */
+#undef FT_COMPONENT
+#define FT_COMPONENT trace_io
+
+ /* We use the macro STREAM_FILE for convenience to extract the */
+ /* system-specific stream handle from a given FreeType stream object */
+#define STREAM_FILE( stream ) ( (FILE*)stream->descriptor.pointer )
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* ft_close_stream */
+ /* */
+ /* <Description> */
+ /* The function to close a stream. */
+ /* */
+ /* <Input> */
+ /* stream :: A pointer to the stream object. */
+ /* */
+ FT_CALLBACK_DEF( void )
+ ft_close_stream( FT_Stream stream )
+ {
+ munmap( (MUNMAP_ARG_CAST)stream->descriptor.pointer, stream->size );
+
+ stream->descriptor.pointer = NULL;
+ stream->size = 0;
+ stream->base = 0;
+ }
+
+
+ /* documentation is in ftobjs.h */
+
+ FT_BASE_DEF( FT_Error )
+ FT_Stream_Open( FT_Stream stream,
+ const char* filepathname )
+ {
+ int file;
+ struct stat stat_buf;
+
+
+ if ( !stream )
+ return FT_Err_Invalid_Stream_Handle;
+
+ /* open the file */
+ file = open( filepathname, O_RDONLY );
+ if ( file < 0 )
+ {
+ FT_ERROR(( "FT_Stream_Open:" ));
+ FT_ERROR(( " could not open `%s'\n", filepathname ));
+ return FT_Err_Cannot_Open_Resource;
+ }
+
+ if ( fstat( file, &stat_buf ) < 0 )
+ {
+ FT_ERROR(( "FT_Stream_Open:" ));
+ FT_ERROR(( " could not `fstat' file `%s'\n", filepathname ));
+ goto Fail_Map;
+ }
+
+ stream->size = stat_buf.st_size;
+ stream->pos = 0;
+ stream->base = (unsigned char *)mmap( NULL,
+ stream->size,
+ PROT_READ,
+ MAP_FILE | MAP_PRIVATE,
+ file,
+ 0 );
+
+ if ( (long)stream->base == -1 )
+ {
+ FT_ERROR(( "FT_Stream_Open:" ));
+ FT_ERROR(( " could not `mmap' file `%s'\n", filepathname ));
+ goto Fail_Map;
+ }
+
+ close( file );
+
+ stream->descriptor.pointer = stream->base;
+ stream->pathname.pointer = (char*)filepathname;
+
+ stream->close = ft_close_stream;
+ stream->read = 0;
+
+ FT_TRACE1(( "FT_Stream_Open:" ));
+ FT_TRACE1(( " opened `%s' (%d bytes) successfully\n",
+ filepathname, stream->size ));
+
+ return FT_Err_Ok;
+
+ Fail_Map:
+ close( file );
+
+ stream->base = NULL;
+ stream->size = 0;
+ stream->pos = 0;
+
+ return FT_Err_Cannot_Open_Stream;
+ }
+
+
+#ifdef FT_DEBUG_MEMORY
+
+ extern FT_Int
+ ft_mem_debug_init( FT_Memory memory );
+
+ extern void
+ ft_mem_debug_done( FT_Memory memory );
+
+#endif
+
+
+ /* documentation is in ftobjs.h */
+
+ FT_BASE_DEF( FT_Memory )
+ FT_New_Memory( void )
+ {
+ FT_Memory memory;
+
+
+ memory = (FT_Memory)malloc( sizeof ( *memory ) );
+ if ( memory )
+ {
+ memory->user = 0;
+ memory->alloc = ft_alloc;
+ memory->realloc = ft_realloc;
+ memory->free = ft_free;
+#ifdef FT_DEBUG_MEMORY
+ ft_mem_debug_init( memory );
+#endif
+ }
+
+ return memory;
+ }
+
+
+ /* documentation is in ftobjs.h */
+
+ FT_BASE_DEF( void )
+ FT_Done_Memory( FT_Memory memory )
+ {
+#ifdef FT_DEBUG_MEMORY
+ ft_mem_debug_done( memory );
+#endif
+ memory->free( memory, memory );
+ }
+
+
+/* END */
diff --git a/src/3rdparty/freetype/builds/win32/detect.mk b/src/3rdparty/freetype/builds/win32/detect.mk
new file mode 100644
index 0000000..1906539
--- /dev/null
+++ b/src/3rdparty/freetype/builds/win32/detect.mk
@@ -0,0 +1,183 @@
+#
+# FreeType 2 configuration file to detect a Win32 host platform.
+#
+
+
+# Copyright 1996-2000, 2003, 2004, 2006, 2007 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+.PHONY: setup
+
+
+ifeq ($(PLATFORM),ansi)
+
+ # Detecting Windows NT is easy, as the OS variable must be defined and
+ # contains `Windows_NT'. This also works with Windows 2000 and XP.
+ #
+ ifeq ($(OS),Windows_NT)
+
+ PLATFORM := win32
+
+ else
+
+ # Detecting Windows 9X
+
+ # We used to run the `ver' command to see if its output contains the
+ # word `Windows'. If this is true, we are running Windows 95 or later:
+ #
+ # ifdef COMSPEC
+ # # First, check if we have the COMSPEC environment variable, which
+ # # indicates we can use COMMAND.COM's internal commands
+ # is_windows := $(findstring Windows,$(strip $(shell ver)))
+ # endif
+ #
+ # Unfortunately, this also detects the case when one is running
+ # DOS 7.x (the MS-DOS version that lies below Windows) without actually
+ # launching the GUI.
+ #
+ # A better test is to check whether there are both the environment
+ # variables `winbootdir' and `windir'. The first indicates an
+ # underlying DOS 7.x, while the second is set only if win32 is available.
+ #
+ # Note that on Windows NT, such an environment variable will not be seen
+ # from DOS-based tools like DJGPP's make; this is not actually a problem
+ # since NT is detected independently above. But do not try to be clever!
+ #
+ ifdef winbootdir
+ ifdef windir
+
+ PLATFORM := win32
+
+ endif
+ endif
+
+ endif # test NT
+
+endif # test PLATFORM ansi
+
+ifeq ($(PLATFORM),win32)
+
+ DELETE := del
+ CAT := type
+ SEP := $(BACKSLASH)
+
+ # Setting COPY is a bit trickier. Plain COPY on NT will not work
+ # correctly, because it will uppercase 8.3 filenames, creating a
+ # `CONFIG.MK' file which isn't found later on by `make'.
+ # Since we do not want that, we need to force execution of CMD.EXE.
+ # Unfortunately, CMD.EXE is not available on Windows 9X.
+ # So we need to hack.
+ #
+ # Kudos to Eli Zaretskii (DJGPP guru) that helped debug it.
+ # Details are available in threads of the freetype mailing list
+ # (2004-11-11), and then in the devel mailing list (2004-11-20 to -23).
+ #
+ ifeq ($(OS),Windows_NT)
+ COPY := cmd.exe /c copy
+ else
+ COPY := copy
+ endif # test NT
+
+
+ # gcc Makefile by default
+ CONFIG_FILE := w32-gcc.mk
+ ifeq ($(firstword $(CC)),cc)
+ CC := gcc
+ endif
+
+ ifneq ($(findstring list,$(MAKECMDGOALS)),) # test for the "list" target
+ dump_target_list:
+ @echo ÿ
+ @echo $(PROJECT_TITLE) build system -- supported compilers
+ @echo ÿ
+ @echo Several command-line compilers are supported on Win32:
+ @echo ÿ
+ @echo ÿÿmake setupÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿgcc (with Mingw)
+ @echo ÿÿmake setup visualcÿÿÿÿÿÿÿÿÿÿÿÿÿMicrosoft Visual C++
+ @echo ÿÿmake setup bcc32ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBorland C/C++
+ @echo ÿÿmake setup lccÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿWin32-LCC
+ @echo ÿÿmake setup intelcÿÿÿÿÿÿÿÿÿÿÿÿÿÿIntel C/C++
+ @echo ÿ
+
+ setup: dump_target_list
+ .PHONY: dump_target_list list
+ else
+ setup: dos_setup
+ endif
+
+ # additionally, we provide hooks for various other compilers
+ #
+ ifneq ($(findstring visualc,$(MAKECMDGOALS)),) # Visual C/C++
+ CONFIG_FILE := w32-vcc.mk
+ CC := cl
+ visualc: setup
+ .PHONY: visualc
+ endif
+
+ ifneq ($(findstring intelc,$(MAKECMDGOALS)),) # Intel C/C++
+ CONFIG_FILE := w32-intl.mk
+ CC := cl
+ visualc: setup
+ .PHONY: intelc
+ endif
+
+ ifneq ($(findstring watcom,$(MAKECMDGOALS)),) # Watcom C/C++
+ CONFIG_FILE := w32-wat.mk
+ CC := wcc386
+ watcom: setup
+ .PHONY: watcom
+ endif
+
+ ifneq ($(findstring visualage,$(MAKECMDGOALS)),) # Visual Age C++
+ CONFIG_FILE := w32-icc.mk
+ CC := icc
+ visualage: setup
+ .PHONY: visualage
+ endif
+
+ ifneq ($(findstring lcc,$(MAKECMDGOALS)),) # LCC-Win32
+ CONFIG_FILE := w32-lcc.mk
+ CC := lcc
+ lcc: setup
+ .PHONY: lcc
+ endif
+
+ ifneq ($(findstring mingw32,$(MAKECMDGOALS)),) # mingw32
+ CONFIG_FILE := w32-mingw32.mk
+ CC := gcc
+ mingw32: setup
+ .PHONY: mingw32
+ endif
+
+ ifneq ($(findstring bcc32,$(MAKECMDGOALS)),) # Borland C++
+ CONFIG_FILE := w32-bcc.mk
+ CC := bcc32
+ bcc32: setup
+ .PHONY: bcc32
+ endif
+
+ ifneq ($(findstring devel-bcc,$(MAKECMDGOALS)),) # development target
+ CONFIG_FILE := w32-bccd.mk
+ CC := bcc32
+ devel-bcc: setup
+ .PHONY: devel-bcc
+ endif
+
+ ifneq ($(findstring devel-gcc,$(MAKECMDGOALS)),) # development target
+ CONFIG_FILE := w32-dev.mk
+ CC := gcc
+ devel-gcc: setup
+ .PHONY: devel-gcc
+ endif
+
+endif # test PLATFORM win32
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/win32/ftdebug.c b/src/3rdparty/freetype/builds/win32/ftdebug.c
new file mode 100644
index 0000000..8f7a9ab
--- /dev/null
+++ b/src/3rdparty/freetype/builds/win32/ftdebug.c
@@ -0,0 +1,248 @@
+/***************************************************************************/
+/* */
+/* ftdebug.c */
+/* */
+/* Debugging and logging component for Win32 (body). */
+/* */
+/* Copyright 1996-2001, 2002, 2005, 2008 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* This component contains various macros and functions used to ease the */
+ /* debugging of the FreeType engine. Its main purpose is in assertion */
+ /* checking, tracing, and error detection. */
+ /* */
+ /* There are now three debugging modes: */
+ /* */
+ /* - trace mode */
+ /* */
+ /* Error and trace messages are sent to the log file (which can be the */
+ /* standard error output). */
+ /* */
+ /* - error mode */
+ /* */
+ /* Only error messages are generated. */
+ /* */
+ /* - release mode: */
+ /* */
+ /* No error message is sent or generated. The code is free from any */
+ /* debugging parts. */
+ /* */
+ /*************************************************************************/
+
+
+#include <ft2build.h>
+#include FT_INTERNAL_DEBUG_H
+
+
+#ifdef FT_DEBUG_LEVEL_ERROR
+
+
+#include <stdarg.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <windows.h>
+
+
+#ifdef _WIN32_WCE
+
+ void
+ OutputDebugStringEx( const char* str )
+ {
+ static WCHAR buf[8192];
+
+
+ int sz = MultiByteToWideChar( CP_ACP, 0, str, -1, buf,
+ sizeof ( buf ) / sizeof ( *buf ) );
+ if ( !sz )
+ lstrcpyW( buf, L"OutputDebugStringEx: MultiByteToWideChar failed" );
+
+ OutputDebugStringW( buf );
+ }
+
+#else
+
+#define OutputDebugStringEx OutputDebugStringA
+
+#endif
+
+
+ FT_BASE_DEF( void )
+ FT_Message( const char* fmt, ... )
+ {
+ static char buf[8192];
+ va_list ap;
+
+
+ va_start( ap, fmt );
+ vprintf( fmt, ap );
+ /* send the string to the debugger as well */
+ vsprintf( buf, fmt, ap );
+ OutputDebugStringEx( buf );
+ va_end( ap );
+ }
+
+
+ FT_BASE_DEF( void )
+ FT_Panic( const char* fmt, ... )
+ {
+ static char buf[8192];
+ va_list ap;
+
+
+ va_start( ap, fmt );
+ vsprintf( buf, fmt, ap );
+ OutputDebugStringEx( buf );
+ va_end( ap );
+
+ exit( EXIT_FAILURE );
+ }
+
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+
+
+ /* array of trace levels, initialized to 0 */
+ int ft_trace_levels[trace_count];
+
+ /* define array of trace toggle names */
+#define FT_TRACE_DEF( x ) #x ,
+
+ static const char* ft_trace_toggles[trace_count + 1] =
+ {
+#include FT_INTERNAL_TRACE_H
+ NULL
+ };
+
+#undef FT_TRACE_DEF
+
+
+ /*************************************************************************/
+ /* */
+ /* Initialize the tracing sub-system. This is done by retrieving the */
+ /* value of the "FT2_DEBUG" environment variable. It must be a list of */
+ /* toggles, separated by spaces, `;' or `,'. Example: */
+ /* */
+ /* "any:3 memory:6 stream:5" */
+ /* */
+ /* This will request that all levels be set to 3, except the trace level */
+ /* for the memory and stream components which are set to 6 and 5, */
+ /* respectively. */
+ /* */
+ /* See the file <freetype/internal/fttrace.h> for details of the */
+ /* available toggle names. */
+ /* */
+ /* The level must be between 0 and 6; 0 means quiet (except for serious */
+ /* runtime errors), and 6 means _very_ verbose. */
+ /* */
+ FT_BASE_DEF( void )
+ ft_debug_init( void )
+ {
+#ifdef _WIN32_WCE
+
+ /* Windows Mobile doesn't have environment API: */
+ /* GetEnvironmentStrings, GetEnvironmentVariable, getenv. */
+ /* */
+ /* FIXME!!! How to set debug mode? */
+ const char* ft2_debug = 0;
+
+#else
+
+ const char* ft2_debug = getenv( "FT2_DEBUG" );
+
+#endif
+
+ if ( ft2_debug )
+ {
+ const char* p = ft2_debug;
+ const char* q;
+
+
+ for ( ; *p; p++ )
+ {
+ /* skip leading whitespace and separators */
+ if ( *p == ' ' || *p == '\t' || *p == ',' || *p == ';' || *p == '=' )
+ continue;
+
+ /* read toggle name, followed by ':' */
+ q = p;
+ while ( *p && *p != ':' )
+ p++;
+
+ if ( *p == ':' && p > q )
+ {
+ int n, i, len = p - q;
+ int level = -1, found = -1;
+
+
+ for ( n = 0; n < trace_count; n++ )
+ {
+ const char* toggle = ft_trace_toggles[n];
+
+
+ for ( i = 0; i < len; i++ )
+ {
+ if ( toggle[i] != q[i] )
+ break;
+ }
+
+ if ( i == len && toggle[i] == 0 )
+ {
+ found = n;
+ break;
+ }
+ }
+
+ /* read level */
+ p++;
+ if ( *p )
+ {
+ level = *p++ - '0';
+ if ( level < 0 || level > 7 )
+ level = -1;
+ }
+
+ if ( found >= 0 && level >= 0 )
+ {
+ if ( found == trace_any )
+ {
+ /* special case for "any" */
+ for ( n = 0; n < trace_count; n++ )
+ ft_trace_levels[n] = level;
+ }
+ else
+ ft_trace_levels[found] = level;
+ }
+ }
+ }
+ }
+ }
+
+
+#else /* !FT_DEBUG_LEVEL_TRACE */
+
+
+ FT_BASE_DEF( void )
+ ft_debug_init( void )
+ {
+ /* nothing */
+ }
+
+
+#endif /* !FT_DEBUG_LEVEL_TRACE */
+
+#endif /* FT_DEBUG_LEVEL_ERROR */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/builds/win32/visualc/freetype.dsp b/src/3rdparty/freetype/builds/win32/visualc/freetype.dsp
new file mode 100644
index 0000000..c8b76e8
--- /dev/null
+++ b/src/3rdparty/freetype/builds/win32/visualc/freetype.dsp
@@ -0,0 +1,396 @@
+# Microsoft Developer Studio Project File - Name="freetype" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=freetype - Win32 Debug Singlethreaded
+!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 "freetype.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 "freetype.mak" CFG="freetype - Win32 Debug Singlethreaded"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "freetype - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "freetype - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "freetype - Win32 Debug Multithreaded" (based on "Win32 (x86) Static Library")
+!MESSAGE "freetype - Win32 Release Multithreaded" (based on "Win32 (x86) Static Library")
+!MESSAGE "freetype - Win32 Release Singlethreaded" (based on "Win32 (x86) Static Library")
+!MESSAGE "freetype - Win32 Debug Singlethreaded" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "freetype - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\objs\release"
+# PROP Intermediate_Dir "..\..\..\objs\release"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /MD /Za /W4 /GX /O2 /I "..\..\..\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT2_BUILD_LIBRARY" /FD /c
+# SUBTRACT CPP /nologo /Z<none> /YX
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype236.lib"
+
+!ELSEIF "$(CFG)" == "freetype - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\objs\debug"
+# PROP Intermediate_Dir "..\..\..\objs\debug"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /MDd /Za /W4 /GX /Z7 /Od /I "..\..\..\include" /D "_DEBUG" /D "FT_DEBUG_LEVEL_ERROR" /D "FT_DEBUG_LEVEL_TRACE" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT2_BUILD_LIBRARY" /FD /GZ /c
+# SUBTRACT CPP /nologo /X /YX
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype236_D.lib"
+
+!ELSEIF "$(CFG)" == "freetype - Win32 Debug Multithreaded"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "freetype___Win32_Debug_Multithreaded"
+# PROP BASE Intermediate_Dir "freetype___Win32_Debug_Multithreaded"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\objs\debug_mt"
+# PROP Intermediate_Dir "..\..\..\objs\debug_mt"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /Za /W3 /Gm /GX /ZI /Od /I "..\freetype\include\\" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT_FLAT_COMPILE" /YX /FD /GZ /c
+# SUBTRACT BASE CPP /X
+# ADD CPP /MTd /Za /W4 /GX /Z7 /Od /I "..\..\..\include" /D "_DEBUG" /D "FT_DEBUG_LEVEL_ERROR" /D "FT_DEBUG_LEVEL_TRACE" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT2_BUILD_LIBRARY" /FD /GZ /c
+# SUBTRACT CPP /nologo /X /YX
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"lib\freetype236_D.lib"
+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype236MT_D.lib"
+
+!ELSEIF "$(CFG)" == "freetype - Win32 Release Multithreaded"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "freetype___Win32_Release_Multithreaded"
+# PROP BASE Intermediate_Dir "freetype___Win32_Release_Multithreaded"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\objs\release_mt"
+# PROP Intermediate_Dir "..\..\..\objs\release_mt"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /Za /W3 /GX /O2 /I "..\freetype\include\\" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT_FLAT_COMPILE" /YX /FD /c
+# ADD CPP /MT /Za /W4 /GX /O2 /I "..\..\..\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT2_BUILD_LIBRARY" /FD /c
+# SUBTRACT CPP /nologo /Z<none> /YX
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"lib\freetype236.lib"
+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype236MT.lib"
+
+!ELSEIF "$(CFG)" == "freetype - Win32 Release Singlethreaded"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "freetype___Win32_Release_Singlethreaded"
+# PROP BASE Intermediate_Dir "freetype___Win32_Release_Singlethreaded"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\objs\release_st"
+# PROP Intermediate_Dir "..\..\..\objs\release_st"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /Za /W4 /GX /Zi /O2 /I "..\..\..\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /FD /c
+# SUBTRACT BASE CPP /YX
+# ADD CPP /Za /W4 /GX /O2 /I "..\..\..\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT2_BUILD_LIBRARY" /FD /c
+# SUBTRACT CPP /nologo /Z<none> /YX
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype236.lib"
+# ADD LIB32 /out:"..\..\..\objs\freetype236ST.lib"
+# SUBTRACT LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "freetype - Win32 Debug Singlethreaded"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "freetype___Win32_Debug_Singlethreaded"
+# PROP BASE Intermediate_Dir "freetype___Win32_Debug_Singlethreaded"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\objs\debug_st"
+# PROP Intermediate_Dir "..\..\..\objs\debug_st"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /Za /W4 /Gm /GX /Zi /Od /I "..\..\..\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT_DEBUG_LEVEL_ERROR" /D "FT_DEBUG_LEVEL_TRACE" /FD /GZ /c
+# SUBTRACT BASE CPP /X /YX
+# ADD CPP /Za /W4 /GX /Z7 /Od /I "..\..\..\include" /D "_DEBUG" /D "FT_DEBUG_LEVEL_ERROR" /D "FT_DEBUG_LEVEL_TRACE" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT2_BUILD_LIBRARY" /FD /GZ /c
+# SUBTRACT CPP /nologo /X /YX
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype236_D.lib"
+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype236ST_D.lib"
+
+!ENDIF
+
+# Begin Target
+
+# Name "freetype - Win32 Release"
+# Name "freetype - Win32 Debug"
+# Name "freetype - Win32 Debug Multithreaded"
+# Name "freetype - Win32 Release Multithreaded"
+# Name "freetype - Win32 Release Singlethreaded"
+# Name "freetype - Win32 Debug Singlethreaded"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\src\autofit\autofit.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\bdf\bdf.c
+# SUBTRACT CPP /Fr
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\cff\cff.c
+# SUBTRACT CPP /Fr
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\base\ftbase.c
+# SUBTRACT CPP /Fr
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\base\ftbbox.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\base\ftbdf.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\base\ftbitmap.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\base\ftgasp.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\cache\ftcache.c
+# SUBTRACT CPP /Fr
+# End Source File
+# Begin Source File
+
+SOURCE=..\ftdebug.c
+# ADD CPP /Ze
+# SUBTRACT CPP /Fr
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\base\ftglyph.c
+# SUBTRACT CPP /Fr
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\base\ftgxval.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\gzip\ftgzip.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\base\ftinit.c
+# SUBTRACT CPP /Fr
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\lzw\ftlzw.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\base\ftmm.c
+# SUBTRACT CPP /Fr
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\base\ftotval.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\base\ftpfr.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\base\ftstroke.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\base\ftsynth.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\base\ftsystem.c
+# SUBTRACT CPP /Fr
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\base\fttype1.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\base\ftwinfnt.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\base\ftxf86.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\pcf\pcf.c
+# SUBTRACT CPP /Fr
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\pfr\pfr.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\psaux\psaux.c
+# SUBTRACT CPP /Fr
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\pshinter\pshinter.c
+# SUBTRACT CPP /Fr
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\psnames\psmodule.c
+# SUBTRACT CPP /Fr
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\raster\raster.c
+# SUBTRACT CPP /Fr
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\sfnt\sfnt.c
+# SUBTRACT CPP /Fr
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\smooth\smooth.c
+# SUBTRACT CPP /Fr
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\truetype\truetype.c
+# SUBTRACT CPP /Fr
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\type1\type1.c
+# SUBTRACT CPP /Fr
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\cid\type1cid.c
+# SUBTRACT CPP /Fr
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\type42\type42.c
+# SUBTRACT CPP /Fr
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\winfonts\winfnt.c
+# SUBTRACT CPP /Fr
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\include\ft2build.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\include\freetype\config\ftconfig.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\include\freetype\config\ftheader.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\include\freetype\config\ftmodule.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\include\freetype\config\ftoption.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\include\freetype\config\ftstdlib.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/src/3rdparty/freetype/builds/win32/visualc/freetype.dsw b/src/3rdparty/freetype/builds/win32/visualc/freetype.dsw
new file mode 100644
index 0000000..b1b375d
--- /dev/null
+++ b/src/3rdparty/freetype/builds/win32/visualc/freetype.dsw
@@ -0,0 +1,29 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "freetype"=.\freetype.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/src/3rdparty/freetype/builds/win32/visualc/freetype.sln b/src/3rdparty/freetype/builds/win32/visualc/freetype.sln
new file mode 100644
index 0000000..470d4fa
--- /dev/null
+++ b/src/3rdparty/freetype/builds/win32/visualc/freetype.sln
@@ -0,0 +1,31 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "freetype", "freetype.vcproj", "{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug Multithreaded|Win32 = Debug Multithreaded|Win32
+ Debug Singlethreaded|Win32 = Debug Singlethreaded|Win32
+ Debug|Win32 = Debug|Win32
+ Release Multithreaded|Win32 = Release Multithreaded|Win32
+ Release Singlethreaded|Win32 = Release Singlethreaded|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Multithreaded|Win32.ActiveCfg = Debug Multithreaded|Win32
+ {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Multithreaded|Win32.Build.0 = Debug Multithreaded|Win32
+ {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Singlethreaded|Win32.ActiveCfg = Debug Singlethreaded|Win32
+ {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Singlethreaded|Win32.Build.0 = Debug Singlethreaded|Win32
+ {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug|Win32.Build.0 = Debug|Win32
+ {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release Multithreaded|Win32.ActiveCfg = Release Multithreaded|Win32
+ {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release Multithreaded|Win32.Build.0 = Release Multithreaded|Win32
+ {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release Singlethreaded|Win32.ActiveCfg = Release Singlethreaded|Win32
+ {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release Singlethreaded|Win32.Build.0 = Release Singlethreaded|Win32
+ {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release|Win32.ActiveCfg = Release|Win32
+ {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/src/3rdparty/freetype/builds/win32/visualc/freetype.vcproj b/src/3rdparty/freetype/builds/win32/visualc/freetype.vcproj
new file mode 100644
index 0000000..8089110
--- /dev/null
+++ b/src/3rdparty/freetype/builds/win32/visualc/freetype.vcproj
@@ -0,0 +1,2155 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="freetype"
+ ProjectGUID="{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory=".\..\..\..\objs\release"
+ IntermediateDirectory=".\..\..\..\objs\release"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="NDEBUG;WIN32;_LIB;FT2_BUILD_LIBRARY"
+ StringPooling="true"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ DisableLanguageExtensions="true"
+ PrecompiledHeaderFile=".\..\..\..\objs\release/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\release/"
+ ObjectFile=".\..\..\..\objs\release/"
+ ProgramDataBaseFileName=".\..\..\..\objs\release/"
+ WarningLevel="4"
+ DebugInformationFormat="0"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release Multithreaded|Win32"
+ OutputDirectory=".\..\..\..\objs\release_mt"
+ IntermediateDirectory=".\..\..\..\objs\release_mt"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="NDEBUG;WIN32;_LIB;FT2_BUILD_LIBRARY"
+ StringPooling="true"
+ RuntimeLibrary="0"
+ EnableFunctionLevelLinking="true"
+ DisableLanguageExtensions="true"
+ PrecompiledHeaderFile=".\..\..\..\objs\release_mt/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\release_mt/"
+ ObjectFile=".\..\..\..\objs\release_mt/"
+ ProgramDataBaseFileName=".\..\..\..\objs\release_mt/"
+ WarningLevel="4"
+ DebugInformationFormat="0"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236MT.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release Singlethreaded|Win32"
+ OutputDirectory=".\..\..\..\objs\release_st"
+ IntermediateDirectory=".\..\..\..\objs\release_st"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="NDEBUG;WIN32;_LIB;FT2_BUILD_LIBRARY"
+ StringPooling="true"
+ RuntimeLibrary="0"
+ EnableFunctionLevelLinking="true"
+ DisableLanguageExtensions="true"
+ PrecompiledHeaderFile=".\..\..\..\objs\release_st/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\release_st/"
+ ObjectFile=".\..\..\..\objs\release_st/"
+ ProgramDataBaseFileName=".\..\..\..\objs\release_st/"
+ WarningLevel="4"
+ DebugInformationFormat="0"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236ST.lib"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory=".\..\..\..\objs\debug"
+ IntermediateDirectory=".\..\..\..\objs\debug"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="_DEBUG;WIN32;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="true"
+ PrecompiledHeaderFile=".\..\..\..\objs\debug/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\debug/"
+ ObjectFile=".\..\..\..\objs\debug/"
+ ProgramDataBaseFileName=".\..\..\..\objs\debug/"
+ WarningLevel="4"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236_D.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug Singlethreaded|Win32"
+ OutputDirectory=".\..\..\..\objs\debug_st"
+ IntermediateDirectory=".\..\..\..\objs\debug_st"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="_DEBUG;WIN32;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ DisableLanguageExtensions="true"
+ PrecompiledHeaderFile=".\..\..\..\objs\debug_st/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\debug_st/"
+ ObjectFile=".\..\..\..\objs\debug_st/"
+ ProgramDataBaseFileName=".\..\..\..\objs\debug_st/"
+ WarningLevel="4"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236ST_D.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug Multithreaded|Win32"
+ OutputDirectory=".\..\..\..\objs\debug_mt"
+ IntermediateDirectory=".\..\..\..\objs\debug_mt"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="_DEBUG;WIN32;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;_CRT_SECURE_NO_DEPRECATE"
+ GeneratePreprocessedFile="0"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ DisableLanguageExtensions="true"
+ PrecompiledHeaderFile=".\..\..\..\objs\debug_mt/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\debug_mt/"
+ ObjectFile=".\..\..\..\objs\debug_mt/"
+ ProgramDataBaseFileName=".\..\..\..\objs\debug_mt/"
+ WarningLevel="4"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236MT_D.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+ >
+ <File
+ RelativePath="..\..\..\src\autofit\autofit.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\src\bdf\bdf.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\cff\cff.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\base\ftbase.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\base\ftbitmap.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\src\base\ftgasp.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\src\cache\ftcache.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\ftdebug.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\base\ftglyph.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\gzip\ftgzip.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\base\ftinit.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\lzw\ftlzw.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\base\ftstroke.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\src\base\ftsystem.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\smooth\smooth.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ </File>
+ <Filter
+ Name="FT_MODULES"
+ >
+ <File
+ RelativePath="..\..\..\src\base\ftbbox.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\src\base\ftmm.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\base\ftpfr.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\src\base\ftsynth.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\src\base\fttype1.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\src\base\ftwinfnt.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\src\pcf\pcf.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\pfr\pfr.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\psaux\psaux.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\pshinter\pshinter.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\psnames\psmodule.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\raster\raster.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\sfnt\sfnt.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\truetype\truetype.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\type1\type1.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\cid\type1cid.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\type42\type42.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\winfonts\winfnt.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl"
+ >
+ <File
+ RelativePath="..\..\..\include\ft2build.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\include\freetype\config\ftconfig.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\include\freetype\config\ftheader.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\include\freetype\config\ftmodule.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\include\freetype\config\ftoption.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\include\freetype\config\ftstdlib.h"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/src/3rdparty/freetype/builds/win32/visualc/index.html b/src/3rdparty/freetype/builds/win32/visualc/index.html
new file mode 100644
index 0000000..d7a6f38
--- /dev/null
+++ b/src/3rdparty/freetype/builds/win32/visualc/index.html
@@ -0,0 +1,37 @@
+<html>
+<header>
+<title>
+ FreeType&nbsp;2 Project Files for Visual&nbsp;C++ and VS.NET&nbsp;2005
+</title>
+
+<body>
+<h1>
+ FreeType&nbsp;2 Project Files for Visual&nbsp;C++ and VS.NET&nbsp;2005
+</h1>
+
+<p>This directory contains project files for Visual C++, named
+<tt>freetype.dsp</tt>, and Visual Studio, called <tt>freetype.sln</tt>. It
+compiles the following libraries from the FreeType 2.3.6 sources:</p>
+
+<ul>
+ <pre>
+ freetype236.lib - release build; single threaded
+ freetype236_D.lib - debug build; single threaded
+ freetype236MT.lib - release build; multi-threaded
+ freetype236MT_D.lib - debug build; multi-threaded</pre>
+</ul>
+
+<p>Be sure to extract the files with the Windows (CR+LF) line endings. ZIP
+archives are already stored this way, so no further action is required. If
+you use some <tt>.tar.*z</tt> archives, be sure to configure your extracting
+tool to convert the line endings. For example, with <a
+href="http://www.winzip.com">WinZip</a>, you should activate the <it>TAR
+file smart CR/LF Conversion</it> option. Alternatively, you may consider
+using the <tt>unix2dos</tt> or <tt>u2d</tt> utilities that are floating
+around, which specifically deal with this particular problem.
+
+<p>Build directories are placed in the top-level <tt>objs</tt>
+directory.</p>
+
+</body>
+</html>
diff --git a/src/3rdparty/freetype/builds/win32/visualce/freetype.dsp b/src/3rdparty/freetype/builds/win32/visualce/freetype.dsp
new file mode 100644
index 0000000..c8b76e8
--- /dev/null
+++ b/src/3rdparty/freetype/builds/win32/visualce/freetype.dsp
@@ -0,0 +1,396 @@
+# Microsoft Developer Studio Project File - Name="freetype" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=freetype - Win32 Debug Singlethreaded
+!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 "freetype.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 "freetype.mak" CFG="freetype - Win32 Debug Singlethreaded"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "freetype - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "freetype - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "freetype - Win32 Debug Multithreaded" (based on "Win32 (x86) Static Library")
+!MESSAGE "freetype - Win32 Release Multithreaded" (based on "Win32 (x86) Static Library")
+!MESSAGE "freetype - Win32 Release Singlethreaded" (based on "Win32 (x86) Static Library")
+!MESSAGE "freetype - Win32 Debug Singlethreaded" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "freetype - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\objs\release"
+# PROP Intermediate_Dir "..\..\..\objs\release"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /MD /Za /W4 /GX /O2 /I "..\..\..\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT2_BUILD_LIBRARY" /FD /c
+# SUBTRACT CPP /nologo /Z<none> /YX
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype236.lib"
+
+!ELSEIF "$(CFG)" == "freetype - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\objs\debug"
+# PROP Intermediate_Dir "..\..\..\objs\debug"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /MDd /Za /W4 /GX /Z7 /Od /I "..\..\..\include" /D "_DEBUG" /D "FT_DEBUG_LEVEL_ERROR" /D "FT_DEBUG_LEVEL_TRACE" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT2_BUILD_LIBRARY" /FD /GZ /c
+# SUBTRACT CPP /nologo /X /YX
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype236_D.lib"
+
+!ELSEIF "$(CFG)" == "freetype - Win32 Debug Multithreaded"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "freetype___Win32_Debug_Multithreaded"
+# PROP BASE Intermediate_Dir "freetype___Win32_Debug_Multithreaded"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\objs\debug_mt"
+# PROP Intermediate_Dir "..\..\..\objs\debug_mt"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /Za /W3 /Gm /GX /ZI /Od /I "..\freetype\include\\" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT_FLAT_COMPILE" /YX /FD /GZ /c
+# SUBTRACT BASE CPP /X
+# ADD CPP /MTd /Za /W4 /GX /Z7 /Od /I "..\..\..\include" /D "_DEBUG" /D "FT_DEBUG_LEVEL_ERROR" /D "FT_DEBUG_LEVEL_TRACE" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT2_BUILD_LIBRARY" /FD /GZ /c
+# SUBTRACT CPP /nologo /X /YX
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"lib\freetype236_D.lib"
+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype236MT_D.lib"
+
+!ELSEIF "$(CFG)" == "freetype - Win32 Release Multithreaded"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "freetype___Win32_Release_Multithreaded"
+# PROP BASE Intermediate_Dir "freetype___Win32_Release_Multithreaded"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\objs\release_mt"
+# PROP Intermediate_Dir "..\..\..\objs\release_mt"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /Za /W3 /GX /O2 /I "..\freetype\include\\" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT_FLAT_COMPILE" /YX /FD /c
+# ADD CPP /MT /Za /W4 /GX /O2 /I "..\..\..\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT2_BUILD_LIBRARY" /FD /c
+# SUBTRACT CPP /nologo /Z<none> /YX
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"lib\freetype236.lib"
+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype236MT.lib"
+
+!ELSEIF "$(CFG)" == "freetype - Win32 Release Singlethreaded"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "freetype___Win32_Release_Singlethreaded"
+# PROP BASE Intermediate_Dir "freetype___Win32_Release_Singlethreaded"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\objs\release_st"
+# PROP Intermediate_Dir "..\..\..\objs\release_st"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /Za /W4 /GX /Zi /O2 /I "..\..\..\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /FD /c
+# SUBTRACT BASE CPP /YX
+# ADD CPP /Za /W4 /GX /O2 /I "..\..\..\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT2_BUILD_LIBRARY" /FD /c
+# SUBTRACT CPP /nologo /Z<none> /YX
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype236.lib"
+# ADD LIB32 /out:"..\..\..\objs\freetype236ST.lib"
+# SUBTRACT LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "freetype - Win32 Debug Singlethreaded"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "freetype___Win32_Debug_Singlethreaded"
+# PROP BASE Intermediate_Dir "freetype___Win32_Debug_Singlethreaded"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\objs\debug_st"
+# PROP Intermediate_Dir "..\..\..\objs\debug_st"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /Za /W4 /Gm /GX /Zi /Od /I "..\..\..\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT_DEBUG_LEVEL_ERROR" /D "FT_DEBUG_LEVEL_TRACE" /FD /GZ /c
+# SUBTRACT BASE CPP /X /YX
+# ADD CPP /Za /W4 /GX /Z7 /Od /I "..\..\..\include" /D "_DEBUG" /D "FT_DEBUG_LEVEL_ERROR" /D "FT_DEBUG_LEVEL_TRACE" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT2_BUILD_LIBRARY" /FD /GZ /c
+# SUBTRACT CPP /nologo /X /YX
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype236_D.lib"
+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype236ST_D.lib"
+
+!ENDIF
+
+# Begin Target
+
+# Name "freetype - Win32 Release"
+# Name "freetype - Win32 Debug"
+# Name "freetype - Win32 Debug Multithreaded"
+# Name "freetype - Win32 Release Multithreaded"
+# Name "freetype - Win32 Release Singlethreaded"
+# Name "freetype - Win32 Debug Singlethreaded"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\src\autofit\autofit.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\bdf\bdf.c
+# SUBTRACT CPP /Fr
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\cff\cff.c
+# SUBTRACT CPP /Fr
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\base\ftbase.c
+# SUBTRACT CPP /Fr
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\base\ftbbox.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\base\ftbdf.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\base\ftbitmap.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\base\ftgasp.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\cache\ftcache.c
+# SUBTRACT CPP /Fr
+# End Source File
+# Begin Source File
+
+SOURCE=..\ftdebug.c
+# ADD CPP /Ze
+# SUBTRACT CPP /Fr
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\base\ftglyph.c
+# SUBTRACT CPP /Fr
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\base\ftgxval.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\gzip\ftgzip.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\base\ftinit.c
+# SUBTRACT CPP /Fr
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\lzw\ftlzw.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\base\ftmm.c
+# SUBTRACT CPP /Fr
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\base\ftotval.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\base\ftpfr.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\base\ftstroke.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\base\ftsynth.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\base\ftsystem.c
+# SUBTRACT CPP /Fr
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\base\fttype1.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\base\ftwinfnt.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\base\ftxf86.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\pcf\pcf.c
+# SUBTRACT CPP /Fr
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\pfr\pfr.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\psaux\psaux.c
+# SUBTRACT CPP /Fr
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\pshinter\pshinter.c
+# SUBTRACT CPP /Fr
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\psnames\psmodule.c
+# SUBTRACT CPP /Fr
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\raster\raster.c
+# SUBTRACT CPP /Fr
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\sfnt\sfnt.c
+# SUBTRACT CPP /Fr
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\smooth\smooth.c
+# SUBTRACT CPP /Fr
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\truetype\truetype.c
+# SUBTRACT CPP /Fr
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\type1\type1.c
+# SUBTRACT CPP /Fr
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\cid\type1cid.c
+# SUBTRACT CPP /Fr
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\type42\type42.c
+# SUBTRACT CPP /Fr
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\winfonts\winfnt.c
+# SUBTRACT CPP /Fr
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\include\ft2build.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\include\freetype\config\ftconfig.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\include\freetype\config\ftheader.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\include\freetype\config\ftmodule.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\include\freetype\config\ftoption.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\include\freetype\config\ftstdlib.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/src/3rdparty/freetype/builds/win32/visualce/freetype.dsw b/src/3rdparty/freetype/builds/win32/visualce/freetype.dsw
new file mode 100644
index 0000000..b1b375d
--- /dev/null
+++ b/src/3rdparty/freetype/builds/win32/visualce/freetype.dsw
@@ -0,0 +1,29 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "freetype"=.\freetype.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/src/3rdparty/freetype/builds/win32/visualce/freetype.vcproj b/src/3rdparty/freetype/builds/win32/visualce/freetype.vcproj
new file mode 100644
index 0000000..109542f
--- /dev/null
+++ b/src/3rdparty/freetype/builds/win32/visualce/freetype.vcproj
@@ -0,0 +1,13861 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8,00"
+ Name="freetype"
+ ProjectGUID="{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="Pocket PC 2003 (ARMV4)"
+ />
+ <Platform
+ Name="Smartphone 2003 (ARMV4)"
+ />
+ <Platform
+ Name="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ />
+ <Platform
+ Name="Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ />
+ <Platform
+ Name="Windows Mobile 6 Professional SDK (ARMV4I)"
+ />
+ <Platform
+ Name="Windows Mobile 6 Standard SDK (ARMV4I)"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory=".\..\..\..\objs\release"
+ IntermediateDirectory=".\..\..\..\objs\release"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="NDEBUG;WIN32;_LIB;FT2_BUILD_LIBRARY"
+ StringPooling="true"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ DisableLanguageExtensions="true"
+ PrecompiledHeaderFile=".\..\..\..\objs\release/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\release/"
+ ObjectFile=".\..\..\..\objs\release/"
+ ProgramDataBaseFileName=".\..\..\..\objs\release/"
+ WarningLevel="4"
+ DebugInformationFormat="0"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release Multithreaded|Win32"
+ OutputDirectory=".\..\..\..\objs\release_mt"
+ IntermediateDirectory=".\..\..\..\objs\release_mt"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="NDEBUG;WIN32;_LIB;FT2_BUILD_LIBRARY"
+ StringPooling="true"
+ RuntimeLibrary="0"
+ EnableFunctionLevelLinking="true"
+ DisableLanguageExtensions="true"
+ PrecompiledHeaderFile=".\..\..\..\objs\release_mt/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\release_mt/"
+ ObjectFile=".\..\..\..\objs\release_mt/"
+ ProgramDataBaseFileName=".\..\..\..\objs\release_mt/"
+ WarningLevel="4"
+ DebugInformationFormat="0"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236MT.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release Singlethreaded|Win32"
+ OutputDirectory=".\..\..\..\objs\release_st"
+ IntermediateDirectory=".\..\..\..\objs\release_st"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="NDEBUG;WIN32;_LIB;FT2_BUILD_LIBRARY"
+ StringPooling="true"
+ RuntimeLibrary="0"
+ EnableFunctionLevelLinking="true"
+ DisableLanguageExtensions="true"
+ PrecompiledHeaderFile=".\..\..\..\objs\release_st/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\release_st/"
+ ObjectFile=".\..\..\..\objs\release_st/"
+ ProgramDataBaseFileName=".\..\..\..\objs\release_st/"
+ WarningLevel="4"
+ DebugInformationFormat="0"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236ST.lib"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory=".\..\..\..\objs\debug"
+ IntermediateDirectory=".\..\..\..\objs\debug"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="_DEBUG;WIN32;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="true"
+ PrecompiledHeaderFile=".\..\..\..\objs\debug/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\debug/"
+ ObjectFile=".\..\..\..\objs\debug/"
+ ProgramDataBaseFileName=".\..\..\..\objs\debug/"
+ WarningLevel="4"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236_D.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug Singlethreaded|Win32"
+ OutputDirectory=".\..\..\..\objs\debug_st"
+ IntermediateDirectory=".\..\..\..\objs\debug_st"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="_DEBUG;WIN32;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ DisableLanguageExtensions="true"
+ PrecompiledHeaderFile=".\..\..\..\objs\debug_st/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\debug_st/"
+ ObjectFile=".\..\..\..\objs\debug_st/"
+ ProgramDataBaseFileName=".\..\..\..\objs\debug_st/"
+ WarningLevel="4"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236ST_D.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug Multithreaded|Win32"
+ OutputDirectory=".\..\..\..\objs\debug_mt"
+ IntermediateDirectory=".\..\..\..\objs\debug_mt"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="_DEBUG;WIN32;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;_CRT_SECURE_NO_DEPRECATE"
+ GeneratePreprocessedFile="0"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ DisableLanguageExtensions="true"
+ PrecompiledHeaderFile=".\..\..\..\objs\debug_mt/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\debug_mt/"
+ ObjectFile=".\..\..\..\objs\debug_mt/"
+ ProgramDataBaseFileName=".\..\..\..\objs\debug_mt/"
+ WarningLevel="4"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236MT_D.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Pocket PC 2003 (ARMV4)"
+ OutputDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)"
+ IntermediateDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="1"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ ExecutionBucket="7"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY"
+ StringPooling="false"
+ MinimalRebuild="true"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="false"
+ DisableLanguageExtensions="false"
+ PrecompiledHeaderFile=".\..\..\..\objs\release/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\release/"
+ ObjectFile=".\..\..\..\objs\release/"
+ ProgramDataBaseFileName=".\..\..\..\objs\release/"
+ WarningLevel="4"
+ DebugInformationFormat="0"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCCodeSignTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ <DeploymentTool
+ ForceDirty="-1"
+ RemoteDirectory=""
+ RegisterOutput="0"
+ AdditionalFiles=""
+ />
+ <DebuggerTool
+ />
+ </Configuration>
+ <Configuration
+ Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
+ OutputDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)"
+ IntermediateDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="1"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ ExecutionBucket="7"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY"
+ StringPooling="true"
+ RuntimeLibrary="0"
+ EnableFunctionLevelLinking="true"
+ DisableLanguageExtensions="false"
+ PrecompiledHeaderFile=".\..\..\..\objs\release_mt/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\release_mt/"
+ ObjectFile=".\..\..\..\objs\release_mt/"
+ ProgramDataBaseFileName=".\..\..\..\objs\release_mt/"
+ WarningLevel="4"
+ DebugInformationFormat="0"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236MT.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCCodeSignTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ <DeploymentTool
+ ForceDirty="-1"
+ RemoteDirectory=""
+ RegisterOutput="0"
+ AdditionalFiles=""
+ />
+ <DebuggerTool
+ />
+ </Configuration>
+ <Configuration
+ Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
+ OutputDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)"
+ IntermediateDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="1"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ ExecutionBucket="7"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);NDEBUG;WIN32;_LIB;FT2_BUILD_LIBRARY"
+ StringPooling="false"
+ RuntimeLibrary="0"
+ EnableFunctionLevelLinking="false"
+ DisableLanguageExtensions="false"
+ PrecompiledHeaderFile=".\..\..\..\objs\release_st/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\release_st/"
+ ObjectFile=".\..\..\..\objs\release_st/"
+ ProgramDataBaseFileName=".\..\..\..\objs\release_st/"
+ WarningLevel="4"
+ DebugInformationFormat="0"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236ST.lib"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCCodeSignTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ <DeploymentTool
+ ForceDirty="-1"
+ RemoteDirectory=""
+ RegisterOutput="0"
+ AdditionalFiles=""
+ />
+ <DebuggerTool
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|Pocket PC 2003 (ARMV4)"
+ OutputDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)"
+ IntermediateDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="1"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ ExecutionBucket="7"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="false"
+ PrecompiledHeaderFile=".\..\..\..\objs\debug/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\debug/"
+ ObjectFile=".\..\..\..\objs\debug/"
+ ProgramDataBaseFileName=".\..\..\..\objs\debug/"
+ WarningLevel="4"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236_D.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCCodeSignTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ <DeploymentTool
+ ForceDirty="-1"
+ RemoteDirectory=""
+ RegisterOutput="0"
+ AdditionalFiles=""
+ />
+ <DebuggerTool
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
+ OutputDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)"
+ IntermediateDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="1"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ ExecutionBucket="7"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
+ RuntimeLibrary="1"
+ DisableLanguageExtensions="true"
+ PrecompiledHeaderFile=".\..\..\..\objs\debug_st/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\debug_st/"
+ ObjectFile=".\..\..\..\objs\debug_st/"
+ ProgramDataBaseFileName=".\..\..\..\objs\debug_st/"
+ WarningLevel="4"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236ST_D.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCCodeSignTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ <DeploymentTool
+ ForceDirty="-1"
+ RemoteDirectory=""
+ RegisterOutput="0"
+ AdditionalFiles=""
+ />
+ <DebuggerTool
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
+ OutputDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)"
+ IntermediateDirectory="Pocket PC 2003 (ARMV4)\$(ConfigurationName)"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="1"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ ExecutionBucket="7"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;_CRT_SECURE_NO_DEPRECATE"
+ GeneratePreprocessedFile="0"
+ RuntimeLibrary="1"
+ DisableLanguageExtensions="false"
+ PrecompiledHeaderFile=".\..\..\..\objs\debug_mt/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\debug_mt/"
+ ObjectFile=".\..\..\..\objs\debug_mt/"
+ ProgramDataBaseFileName=".\..\..\..\objs\debug_mt/"
+ WarningLevel="4"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236MT_D.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCCodeSignTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ <DeploymentTool
+ ForceDirty="-1"
+ RemoteDirectory=""
+ RegisterOutput="0"
+ AdditionalFiles=""
+ />
+ <DebuggerTool
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Smartphone 2003 (ARMV4)"
+ OutputDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)"
+ IntermediateDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="1"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ ExecutionBucket="7"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY"
+ StringPooling="false"
+ MinimalRebuild="true"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="false"
+ DisableLanguageExtensions="false"
+ PrecompiledHeaderFile=".\..\..\..\objs\release/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\release/"
+ ObjectFile=".\..\..\..\objs\release/"
+ ProgramDataBaseFileName=".\..\..\..\objs\release/"
+ WarningLevel="4"
+ DebugInformationFormat="0"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCCodeSignTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ <DeploymentTool
+ ForceDirty="-1"
+ RemoteDirectory=""
+ RegisterOutput="0"
+ AdditionalFiles=""
+ />
+ <DebuggerTool
+ />
+ </Configuration>
+ <Configuration
+ Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
+ OutputDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)"
+ IntermediateDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="1"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ ExecutionBucket="7"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY"
+ StringPooling="true"
+ RuntimeLibrary="0"
+ EnableFunctionLevelLinking="true"
+ DisableLanguageExtensions="false"
+ PrecompiledHeaderFile=".\..\..\..\objs\release_mt/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\release_mt/"
+ ObjectFile=".\..\..\..\objs\release_mt/"
+ ProgramDataBaseFileName=".\..\..\..\objs\release_mt/"
+ WarningLevel="4"
+ DebugInformationFormat="0"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236MT.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCCodeSignTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ <DeploymentTool
+ ForceDirty="-1"
+ RemoteDirectory=""
+ RegisterOutput="0"
+ AdditionalFiles=""
+ />
+ <DebuggerTool
+ />
+ </Configuration>
+ <Configuration
+ Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
+ OutputDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)"
+ IntermediateDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="1"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ ExecutionBucket="7"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);NDEBUG;WIN32;_LIB;FT2_BUILD_LIBRARY"
+ StringPooling="false"
+ RuntimeLibrary="0"
+ EnableFunctionLevelLinking="false"
+ DisableLanguageExtensions="false"
+ PrecompiledHeaderFile=".\..\..\..\objs\release_st/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\release_st/"
+ ObjectFile=".\..\..\..\objs\release_st/"
+ ProgramDataBaseFileName=".\..\..\..\objs\release_st/"
+ WarningLevel="4"
+ DebugInformationFormat="0"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236ST.lib"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCCodeSignTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ <DeploymentTool
+ ForceDirty="-1"
+ RemoteDirectory=""
+ RegisterOutput="0"
+ AdditionalFiles=""
+ />
+ <DebuggerTool
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|Smartphone 2003 (ARMV4)"
+ OutputDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)"
+ IntermediateDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="1"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ ExecutionBucket="7"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="false"
+ PrecompiledHeaderFile=".\..\..\..\objs\debug/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\debug/"
+ ObjectFile=".\..\..\..\objs\debug/"
+ ProgramDataBaseFileName=".\..\..\..\objs\debug/"
+ WarningLevel="4"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236_D.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCCodeSignTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ <DeploymentTool
+ ForceDirty="-1"
+ RemoteDirectory=""
+ RegisterOutput="0"
+ AdditionalFiles=""
+ />
+ <DebuggerTool
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
+ OutputDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)"
+ IntermediateDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="1"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ ExecutionBucket="7"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
+ RuntimeLibrary="1"
+ DisableLanguageExtensions="true"
+ PrecompiledHeaderFile=".\..\..\..\objs\debug_st/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\debug_st/"
+ ObjectFile=".\..\..\..\objs\debug_st/"
+ ProgramDataBaseFileName=".\..\..\..\objs\debug_st/"
+ WarningLevel="4"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236ST_D.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCCodeSignTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ <DeploymentTool
+ ForceDirty="-1"
+ RemoteDirectory=""
+ RegisterOutput="0"
+ AdditionalFiles=""
+ />
+ <DebuggerTool
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
+ OutputDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)"
+ IntermediateDirectory="Smartphone 2003 (ARMV4)\$(ConfigurationName)"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="1"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ ExecutionBucket="7"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;_CRT_SECURE_NO_DEPRECATE"
+ GeneratePreprocessedFile="0"
+ RuntimeLibrary="1"
+ DisableLanguageExtensions="false"
+ PrecompiledHeaderFile=".\..\..\..\objs\debug_mt/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\debug_mt/"
+ ObjectFile=".\..\..\..\objs\debug_mt/"
+ ProgramDataBaseFileName=".\..\..\..\objs\debug_mt/"
+ WarningLevel="4"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236MT_D.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCCodeSignTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ <DeploymentTool
+ ForceDirty="-1"
+ RemoteDirectory=""
+ RegisterOutput="0"
+ AdditionalFiles=""
+ />
+ <DebuggerTool
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ OutputDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
+ IntermediateDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="1"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ ExecutionBucket="7"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY"
+ StringPooling="false"
+ MinimalRebuild="true"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="false"
+ DisableLanguageExtensions="false"
+ PrecompiledHeaderFile=".\..\..\..\objs\release/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\release/"
+ ObjectFile=".\..\..\..\objs\release/"
+ ProgramDataBaseFileName=".\..\..\..\objs\release/"
+ WarningLevel="4"
+ DebugInformationFormat="0"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCCodeSignTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ <DeploymentTool
+ ForceDirty="-1"
+ RemoteDirectory=""
+ RegisterOutput="0"
+ AdditionalFiles=""
+ />
+ <DebuggerTool
+ />
+ </Configuration>
+ <Configuration
+ Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ OutputDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
+ IntermediateDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="1"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ ExecutionBucket="7"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY"
+ StringPooling="true"
+ RuntimeLibrary="0"
+ EnableFunctionLevelLinking="true"
+ DisableLanguageExtensions="false"
+ PrecompiledHeaderFile=".\..\..\..\objs\release_mt/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\release_mt/"
+ ObjectFile=".\..\..\..\objs\release_mt/"
+ ProgramDataBaseFileName=".\..\..\..\objs\release_mt/"
+ WarningLevel="4"
+ DebugInformationFormat="0"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236MT.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCCodeSignTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ <DeploymentTool
+ ForceDirty="-1"
+ RemoteDirectory=""
+ RegisterOutput="0"
+ AdditionalFiles=""
+ />
+ <DebuggerTool
+ />
+ </Configuration>
+ <Configuration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ OutputDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
+ IntermediateDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="1"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ ExecutionBucket="7"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);NDEBUG;WIN32;_LIB;FT2_BUILD_LIBRARY"
+ StringPooling="false"
+ RuntimeLibrary="0"
+ EnableFunctionLevelLinking="false"
+ DisableLanguageExtensions="false"
+ PrecompiledHeaderFile=".\..\..\..\objs\release_st/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\release_st/"
+ ObjectFile=".\..\..\..\objs\release_st/"
+ ProgramDataBaseFileName=".\..\..\..\objs\release_st/"
+ WarningLevel="4"
+ DebugInformationFormat="0"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236ST.lib"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCCodeSignTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ <DeploymentTool
+ ForceDirty="-1"
+ RemoteDirectory=""
+ RegisterOutput="0"
+ AdditionalFiles=""
+ />
+ <DebuggerTool
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ OutputDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
+ IntermediateDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="1"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ ExecutionBucket="7"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="false"
+ PrecompiledHeaderFile=".\..\..\..\objs\debug/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\debug/"
+ ObjectFile=".\..\..\..\objs\debug/"
+ ProgramDataBaseFileName=".\..\..\..\objs\debug/"
+ WarningLevel="4"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236_D.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCCodeSignTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ <DeploymentTool
+ ForceDirty="-1"
+ RemoteDirectory=""
+ RegisterOutput="0"
+ AdditionalFiles=""
+ />
+ <DebuggerTool
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ OutputDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
+ IntermediateDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="1"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ ExecutionBucket="7"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
+ RuntimeLibrary="1"
+ DisableLanguageExtensions="true"
+ PrecompiledHeaderFile=".\..\..\..\objs\debug_st/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\debug_st/"
+ ObjectFile=".\..\..\..\objs\debug_st/"
+ ProgramDataBaseFileName=".\..\..\..\objs\debug_st/"
+ WarningLevel="4"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236ST_D.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCCodeSignTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ <DeploymentTool
+ ForceDirty="-1"
+ RemoteDirectory=""
+ RegisterOutput="0"
+ AdditionalFiles=""
+ />
+ <DebuggerTool
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ OutputDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
+ IntermediateDirectory="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\$(ConfigurationName)"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="1"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ ExecutionBucket="7"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;_CRT_SECURE_NO_DEPRECATE"
+ GeneratePreprocessedFile="0"
+ RuntimeLibrary="1"
+ DisableLanguageExtensions="false"
+ PrecompiledHeaderFile=".\..\..\..\objs\debug_mt/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\debug_mt/"
+ ObjectFile=".\..\..\..\objs\debug_mt/"
+ ProgramDataBaseFileName=".\..\..\..\objs\debug_mt/"
+ WarningLevel="4"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236MT_D.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCCodeSignTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ <DeploymentTool
+ ForceDirty="-1"
+ RemoteDirectory=""
+ RegisterOutput="0"
+ AdditionalFiles=""
+ />
+ <DebuggerTool
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ OutputDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)"
+ IntermediateDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="1"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ ExecutionBucket="7"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY"
+ StringPooling="false"
+ MinimalRebuild="true"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="false"
+ DisableLanguageExtensions="false"
+ PrecompiledHeaderFile=".\..\..\..\objs\release/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\release/"
+ ObjectFile=".\..\..\..\objs\release/"
+ ProgramDataBaseFileName=".\..\..\..\objs\release/"
+ WarningLevel="4"
+ DebugInformationFormat="0"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCCodeSignTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ <DeploymentTool
+ ForceDirty="-1"
+ RemoteDirectory=""
+ RegisterOutput="0"
+ AdditionalFiles=""
+ />
+ <DebuggerTool
+ />
+ </Configuration>
+ <Configuration
+ Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ OutputDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)"
+ IntermediateDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="1"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ ExecutionBucket="7"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY"
+ StringPooling="true"
+ RuntimeLibrary="0"
+ EnableFunctionLevelLinking="true"
+ DisableLanguageExtensions="false"
+ PrecompiledHeaderFile=".\..\..\..\objs\release_mt/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\release_mt/"
+ ObjectFile=".\..\..\..\objs\release_mt/"
+ ProgramDataBaseFileName=".\..\..\..\objs\release_mt/"
+ WarningLevel="4"
+ DebugInformationFormat="0"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236MT.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCCodeSignTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ <DeploymentTool
+ ForceDirty="-1"
+ RemoteDirectory=""
+ RegisterOutput="0"
+ AdditionalFiles=""
+ />
+ <DebuggerTool
+ />
+ </Configuration>
+ <Configuration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ OutputDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)"
+ IntermediateDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="1"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ ExecutionBucket="7"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);NDEBUG;WIN32;_LIB;FT2_BUILD_LIBRARY"
+ StringPooling="false"
+ RuntimeLibrary="0"
+ EnableFunctionLevelLinking="false"
+ DisableLanguageExtensions="false"
+ PrecompiledHeaderFile=".\..\..\..\objs\release_st/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\release_st/"
+ ObjectFile=".\..\..\..\objs\release_st/"
+ ProgramDataBaseFileName=".\..\..\..\objs\release_st/"
+ WarningLevel="4"
+ DebugInformationFormat="0"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236ST.lib"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCCodeSignTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ <DeploymentTool
+ ForceDirty="-1"
+ RemoteDirectory=""
+ RegisterOutput="0"
+ AdditionalFiles=""
+ />
+ <DebuggerTool
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ OutputDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)"
+ IntermediateDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="1"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ ExecutionBucket="7"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="false"
+ PrecompiledHeaderFile=".\..\..\..\objs\debug/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\debug/"
+ ObjectFile=".\..\..\..\objs\debug/"
+ ProgramDataBaseFileName=".\..\..\..\objs\debug/"
+ WarningLevel="4"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236_D.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCCodeSignTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ <DeploymentTool
+ ForceDirty="-1"
+ RemoteDirectory=""
+ RegisterOutput="0"
+ AdditionalFiles=""
+ />
+ <DebuggerTool
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ OutputDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)"
+ IntermediateDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="1"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ ExecutionBucket="7"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
+ RuntimeLibrary="1"
+ DisableLanguageExtensions="true"
+ PrecompiledHeaderFile=".\..\..\..\objs\debug_st/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\debug_st/"
+ ObjectFile=".\..\..\..\objs\debug_st/"
+ ProgramDataBaseFileName=".\..\..\..\objs\debug_st/"
+ WarningLevel="4"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236ST_D.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCCodeSignTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ <DeploymentTool
+ ForceDirty="-1"
+ RemoteDirectory=""
+ RegisterOutput="0"
+ AdditionalFiles=""
+ />
+ <DebuggerTool
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ OutputDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)"
+ IntermediateDirectory="Windows Mobile 5.0 Smartphone SDK (ARMV4I)\$(ConfigurationName)"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="1"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ ExecutionBucket="7"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;_CRT_SECURE_NO_DEPRECATE"
+ GeneratePreprocessedFile="0"
+ RuntimeLibrary="1"
+ DisableLanguageExtensions="false"
+ PrecompiledHeaderFile=".\..\..\..\objs\debug_mt/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\debug_mt/"
+ ObjectFile=".\..\..\..\objs\debug_mt/"
+ ProgramDataBaseFileName=".\..\..\..\objs\debug_mt/"
+ WarningLevel="4"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236MT_D.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCCodeSignTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ <DeploymentTool
+ ForceDirty="-1"
+ RemoteDirectory=""
+ RegisterOutput="0"
+ AdditionalFiles=""
+ />
+ <DebuggerTool
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+ OutputDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)"
+ IntermediateDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="1"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ ExecutionBucket="7"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY"
+ StringPooling="false"
+ MinimalRebuild="true"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="false"
+ DisableLanguageExtensions="false"
+ PrecompiledHeaderFile=".\..\..\..\objs\release/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\release/"
+ ObjectFile=".\..\..\..\objs\release/"
+ ProgramDataBaseFileName=".\..\..\..\objs\release/"
+ WarningLevel="4"
+ DebugInformationFormat="0"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCCodeSignTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ <DeploymentTool
+ ForceDirty="-1"
+ RemoteDirectory=""
+ RegisterOutput="0"
+ AdditionalFiles=""
+ />
+ <DebuggerTool
+ />
+ </Configuration>
+ <Configuration
+ Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ OutputDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)"
+ IntermediateDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="1"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ ExecutionBucket="7"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY"
+ StringPooling="true"
+ RuntimeLibrary="0"
+ EnableFunctionLevelLinking="true"
+ DisableLanguageExtensions="false"
+ PrecompiledHeaderFile=".\..\..\..\objs\release_mt/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\release_mt/"
+ ObjectFile=".\..\..\..\objs\release_mt/"
+ ProgramDataBaseFileName=".\..\..\..\objs\release_mt/"
+ WarningLevel="4"
+ DebugInformationFormat="0"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236MT.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCCodeSignTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ <DeploymentTool
+ ForceDirty="-1"
+ RemoteDirectory=""
+ RegisterOutput="0"
+ AdditionalFiles=""
+ />
+ <DebuggerTool
+ />
+ </Configuration>
+ <Configuration
+ Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ OutputDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)"
+ IntermediateDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="1"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ ExecutionBucket="7"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);NDEBUG;WIN32;_LIB;FT2_BUILD_LIBRARY"
+ StringPooling="false"
+ RuntimeLibrary="0"
+ EnableFunctionLevelLinking="false"
+ DisableLanguageExtensions="false"
+ PrecompiledHeaderFile=".\..\..\..\objs\release_st/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\release_st/"
+ ObjectFile=".\..\..\..\objs\release_st/"
+ ProgramDataBaseFileName=".\..\..\..\objs\release_st/"
+ WarningLevel="4"
+ DebugInformationFormat="0"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236ST.lib"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCCodeSignTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ <DeploymentTool
+ ForceDirty="-1"
+ RemoteDirectory=""
+ RegisterOutput="0"
+ AdditionalFiles=""
+ />
+ <DebuggerTool
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
+ OutputDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)"
+ IntermediateDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="1"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ ExecutionBucket="7"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="false"
+ PrecompiledHeaderFile=".\..\..\..\objs\debug/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\debug/"
+ ObjectFile=".\..\..\..\objs\debug/"
+ ProgramDataBaseFileName=".\..\..\..\objs\debug/"
+ WarningLevel="4"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236_D.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCCodeSignTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ <DeploymentTool
+ ForceDirty="-1"
+ RemoteDirectory=""
+ RegisterOutput="0"
+ AdditionalFiles=""
+ />
+ <DebuggerTool
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ OutputDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)"
+ IntermediateDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="1"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ ExecutionBucket="7"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
+ RuntimeLibrary="1"
+ DisableLanguageExtensions="true"
+ PrecompiledHeaderFile=".\..\..\..\objs\debug_st/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\debug_st/"
+ ObjectFile=".\..\..\..\objs\debug_st/"
+ ProgramDataBaseFileName=".\..\..\..\objs\debug_st/"
+ WarningLevel="4"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236ST_D.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCCodeSignTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ <DeploymentTool
+ ForceDirty="-1"
+ RemoteDirectory=""
+ RegisterOutput="0"
+ AdditionalFiles=""
+ />
+ <DebuggerTool
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ OutputDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)"
+ IntermediateDirectory="Windows Mobile 6 Professional SDK (ARMV4I)\$(ConfigurationName)"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="1"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ ExecutionBucket="7"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;_CRT_SECURE_NO_DEPRECATE"
+ GeneratePreprocessedFile="0"
+ RuntimeLibrary="1"
+ DisableLanguageExtensions="false"
+ PrecompiledHeaderFile=".\..\..\..\objs\debug_mt/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\debug_mt/"
+ ObjectFile=".\..\..\..\objs\debug_mt/"
+ ProgramDataBaseFileName=".\..\..\..\objs\debug_mt/"
+ WarningLevel="4"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236MT_D.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCCodeSignTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ <DeploymentTool
+ ForceDirty="-1"
+ RemoteDirectory=""
+ RegisterOutput="0"
+ AdditionalFiles=""
+ />
+ <DebuggerTool
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+ OutputDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)"
+ IntermediateDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="1"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ ExecutionBucket="7"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY"
+ StringPooling="false"
+ MinimalRebuild="true"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="false"
+ DisableLanguageExtensions="false"
+ PrecompiledHeaderFile=".\..\..\..\objs\release/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\release/"
+ ObjectFile=".\..\..\..\objs\release/"
+ ProgramDataBaseFileName=".\..\..\..\objs\release/"
+ WarningLevel="4"
+ DebugInformationFormat="0"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCCodeSignTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ <DeploymentTool
+ ForceDirty="-1"
+ RemoteDirectory=""
+ RegisterOutput="0"
+ AdditionalFiles=""
+ />
+ <DebuggerTool
+ />
+ </Configuration>
+ <Configuration
+ Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ OutputDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)"
+ IntermediateDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="1"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ ExecutionBucket="7"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT2_BUILD_LIBRARY"
+ StringPooling="true"
+ RuntimeLibrary="0"
+ EnableFunctionLevelLinking="true"
+ DisableLanguageExtensions="false"
+ PrecompiledHeaderFile=".\..\..\..\objs\release_mt/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\release_mt/"
+ ObjectFile=".\..\..\..\objs\release_mt/"
+ ProgramDataBaseFileName=".\..\..\..\objs\release_mt/"
+ WarningLevel="4"
+ DebugInformationFormat="0"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236MT.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCCodeSignTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ <DeploymentTool
+ ForceDirty="-1"
+ RemoteDirectory=""
+ RegisterOutput="0"
+ AdditionalFiles=""
+ />
+ <DebuggerTool
+ />
+ </Configuration>
+ <Configuration
+ Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ OutputDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)"
+ IntermediateDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="1"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ ExecutionBucket="7"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;NDEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);NDEBUG;WIN32;_LIB;FT2_BUILD_LIBRARY"
+ StringPooling="false"
+ RuntimeLibrary="0"
+ EnableFunctionLevelLinking="false"
+ DisableLanguageExtensions="false"
+ PrecompiledHeaderFile=".\..\..\..\objs\release_st/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\release_st/"
+ ObjectFile=".\..\..\..\objs\release_st/"
+ ProgramDataBaseFileName=".\..\..\..\objs\release_st/"
+ WarningLevel="4"
+ DebugInformationFormat="0"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236ST.lib"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCCodeSignTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ <DeploymentTool
+ ForceDirty="-1"
+ RemoteDirectory=""
+ RegisterOutput="0"
+ AdditionalFiles=""
+ />
+ <DebuggerTool
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
+ OutputDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)"
+ IntermediateDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="1"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ ExecutionBucket="7"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="false"
+ PrecompiledHeaderFile=".\..\..\..\objs\debug/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\debug/"
+ ObjectFile=".\..\..\..\objs\debug/"
+ ProgramDataBaseFileName=".\..\..\..\objs\debug/"
+ WarningLevel="4"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236_D.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCCodeSignTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ <DeploymentTool
+ ForceDirty="-1"
+ RemoteDirectory=""
+ RegisterOutput="0"
+ AdditionalFiles=""
+ />
+ <DebuggerTool
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ OutputDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)"
+ IntermediateDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="1"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ ExecutionBucket="7"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"
+ RuntimeLibrary="1"
+ DisableLanguageExtensions="true"
+ PrecompiledHeaderFile=".\..\..\..\objs\debug_st/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\debug_st/"
+ ObjectFile=".\..\..\..\objs\debug_st/"
+ ProgramDataBaseFileName=".\..\..\..\objs\debug_st/"
+ WarningLevel="4"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236ST_D.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCCodeSignTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ <DeploymentTool
+ ForceDirty="-1"
+ RemoteDirectory=""
+ RegisterOutput="0"
+ AdditionalFiles=""
+ />
+ <DebuggerTool
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ OutputDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)"
+ IntermediateDirectory="Windows Mobile 6 Standard SDK (ARMV4I)\$(ConfigurationName)"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="1"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ ExecutionBucket="7"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\include"
+ PreprocessorDefinitions="_WIN32_WCE=$(CEVER);UNDER_CE=$(CEVER);WINCE;_DEBUG;$(PLATFORMDEFINES);$(ARCHFAM);$(_ARCHFAM_);_DEBUG;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;_CRT_SECURE_NO_DEPRECATE"
+ GeneratePreprocessedFile="0"
+ RuntimeLibrary="1"
+ DisableLanguageExtensions="false"
+ PrecompiledHeaderFile=".\..\..\..\objs\debug_mt/freetype.pch"
+ AssemblerListingLocation=".\..\..\..\objs\debug_mt/"
+ ObjectFile=".\..\..\..\objs\debug_mt/"
+ ProgramDataBaseFileName=".\..\..\..\objs\debug_mt/"
+ WarningLevel="4"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="..\..\..\objs\freetype236MT_D.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCCodeSignTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ <DeploymentTool
+ ForceDirty="-1"
+ RemoteDirectory=""
+ RegisterOutput="0"
+ AdditionalFiles=""
+ />
+ <DebuggerTool
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+ >
+ <File
+ RelativePath="..\..\..\src\autofit\autofit.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\src\bdf\bdf.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\cff\cff.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\base\ftbase.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\base\ftbitmap.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\src\cache\ftcache.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\ftdebug.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\base\ftgasp.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\src\base\ftglyph.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\gzip\ftgzip.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\base\ftinit.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\lzw\ftlzw.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\base\ftstroke.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\src\base\ftsystem.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\smooth\smooth.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <Filter
+ Name="FT_MODULES"
+ >
+ <File
+ RelativePath="..\..\..\src\base\ftbbox.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\src\base\ftmm.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\base\ftpfr.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\src\base\ftsynth.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\src\base\fttype1.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\src\base\ftwinfnt.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\src\pcf\pcf.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\pfr\pfr.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\psaux\psaux.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\pshinter\pshinter.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\psnames\psmodule.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\raster\raster.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\sfnt\sfnt.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\truetype\truetype.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\type1\type1.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\cid\type1cid.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\type42\type42.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\src\winfonts\winfnt.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl"
+ >
+ <File
+ RelativePath="..\..\..\include\ft2build.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\include\freetype\config\ftconfig.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\include\freetype\config\ftheader.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\include\freetype\config\ftmodule.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\include\freetype\config\ftoption.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\include\freetype\config\ftstdlib.h"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/src/3rdparty/freetype/builds/win32/visualce/index.html b/src/3rdparty/freetype/builds/win32/visualce/index.html
new file mode 100644
index 0000000..39a2ba5
--- /dev/null
+++ b/src/3rdparty/freetype/builds/win32/visualce/index.html
@@ -0,0 +1,47 @@
+<html>
+<header>
+<title>
+ FreeType&nbsp;2 Project Files for Visual&nbsp;C++ and VS.NET&nbsp;2005
+ (Pocket PC)
+</title>
+
+<body>
+<h1>
+ FreeType&nbsp;2 Project Files for Visual&nbsp;C++ and VS.NET&nbsp;2005
+ (Pocket PC)
+</h1>
+
+<p>This directory contains project files for Visual C++, named
+<tt>freetype.dsp</tt>, and Visual Studio, called <tt>freetype.sln</tt> for
+the following targets:
+
+<ul>
+ <li>PPC/SP 2003 (Pocket PC 2003)</li>
+ <li>PPC/SP WM5 (Windows Mobile 5)</li>
+ <li>PPC/SP WM6 (Windows Mobile 6)</li>
+</ul>
+
+It compiles the following libraries from the FreeType 2.3.6 sources:</p>
+
+<ul>
+ <pre>
+ freetype236.lib - release build; single threaded
+ freetype236_D.lib - debug build; single threaded
+ freetype236MT.lib - release build; multi-threaded
+ freetype236MT_D.lib - debug build; multi-threaded</pre>
+</ul>
+
+<p>Be sure to extract the files with the Windows (CR+LF) line endings. ZIP
+archives are already stored this way, so no further action is required. If
+you use some <tt>.tar.*z</tt> archives, be sure to configure your extracting
+tool to convert the line endings. For example, with <a
+href="http://www.winzip.com">WinZip</a>, you should activate the <it>TAR
+file smart CR/LF Conversion</it> option. Alternatively, you may consider
+using the <tt>unix2dos</tt> or <tt>u2d</tt> utilities that are floating
+around, which specifically deal with this particular problem.
+
+<p>Build directories are placed in the top-level <tt>objs</tt>
+directory.</p>
+
+</body>
+</html>
diff --git a/src/3rdparty/freetype/builds/win32/w32-bcc.mk b/src/3rdparty/freetype/builds/win32/w32-bcc.mk
new file mode 100644
index 0000000..a9f48fc
--- /dev/null
+++ b/src/3rdparty/freetype/builds/win32/w32-bcc.mk
@@ -0,0 +1,28 @@
+#
+# FreeType 2 Borland C++ on Win32
+#
+
+
+# Copyright 1996-2000, 2003, 2005 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+# default definitions of the export list
+#
+EXPORTS_LIST = $(OBJ_DIR)/freetype.def
+EXPORTS_OPTIONS = /DEF:$(EXPORTS_LIST)
+APINAMES_OPTIONS := -dfreetype.dll -wB
+
+include $(TOP_DIR)/builds/win32/win32-def.mk
+include $(TOP_DIR)/builds/compiler/bcc.mk
+
+# include linking instructions
+include $(TOP_DIR)/builds/link_dos.mk
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/win32/w32-bccd.mk b/src/3rdparty/freetype/builds/win32/w32-bccd.mk
new file mode 100644
index 0000000..51b15d9
--- /dev/null
+++ b/src/3rdparty/freetype/builds/win32/w32-bccd.mk
@@ -0,0 +1,26 @@
+#
+# FreeType 2 Borland C++ on Win32 + debugging
+#
+
+
+# Copyright 1996-2000, 2003, 2006 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+DEVEL_DIR := $(TOP_DIR)/devel
+
+include $(TOP_DIR)/builds/win32/win32-def.mk
+
+include $(TOP_DIR)/builds/compiler/bcc-dev.mk
+
+# include linking instructions
+include $(TOP_DIR)/builds/link_dos.mk
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/win32/w32-dev.mk b/src/3rdparty/freetype/builds/win32/w32-dev.mk
new file mode 100644
index 0000000..00cacb0
--- /dev/null
+++ b/src/3rdparty/freetype/builds/win32/w32-dev.mk
@@ -0,0 +1,32 @@
+#
+# FreeType 2 configuration rules for Win32 + GCC
+#
+# Development version without optimizations.
+#
+
+
+# Copyright 1996-2000, 2003, 2006 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+# NOTE: This version requires that GNU Make is invoked from the Windows
+# Shell (_not_ Cygwin BASH)!
+#
+
+DEVEL_DIR := $(TOP_DIR)/devel
+
+include $(TOP_DIR)/builds/win32/win32-def.mk
+
+include $(TOP_DIR)/builds/compiler/gcc-dev.mk
+
+# include linking instructions
+include $(TOP_DIR)/builds/link_dos.mk
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/win32/w32-gcc.mk b/src/3rdparty/freetype/builds/win32/w32-gcc.mk
new file mode 100644
index 0000000..580afc5
--- /dev/null
+++ b/src/3rdparty/freetype/builds/win32/w32-gcc.mk
@@ -0,0 +1,31 @@
+#
+# FreeType 2 configuration rules for Win32 + GCC
+#
+
+
+# Copyright 1996-2000, 2003, 2005 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+# default definitions of the export list
+#
+EXPORTS_LIST = $(OBJ_DIR)/freetype.def
+EXPORTS_OPTIONS = $(EXPORTS_LIST)
+APINAMES_OPTIONS := -dfreetype.dll -w
+
+# include Win32-specific definitions
+include $(TOP_DIR)/builds/win32/win32-def.mk
+
+# include gcc-specific definitions
+include $(TOP_DIR)/builds/compiler/gcc.mk
+
+# include linking instructions
+include $(TOP_DIR)/builds/link_dos.mk
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/win32/w32-icc.mk b/src/3rdparty/freetype/builds/win32/w32-icc.mk
new file mode 100644
index 0000000..8819a1f
--- /dev/null
+++ b/src/3rdparty/freetype/builds/win32/w32-icc.mk
@@ -0,0 +1,28 @@
+#
+# FreeType 2 configuration rules for Win32 + IBM Visual Age C++
+#
+
+
+# Copyright 1996-2000, 2005 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+# default definitions of the export list
+#
+EXPORTS_LIST = $(OBJ_DIR)/freetype.def
+EXPORTS_OPTIONS = /DEF:$(EXPORTS_LIST)
+APINAMES_OPTIONS := -dfreetype.dll -w
+
+include $(TOP_DIR)/builds/win32/win32-def.mk
+include $(TOP_DIR)/builds/compiler/visualage.mk
+
+# include linking instructions
+include $(TOP_DIR)/builds/link_dos.mk
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/win32/w32-intl.mk b/src/3rdparty/freetype/builds/win32/w32-intl.mk
new file mode 100644
index 0000000..ae62e1b
--- /dev/null
+++ b/src/3rdparty/freetype/builds/win32/w32-intl.mk
@@ -0,0 +1,28 @@
+#
+# FreeType 2 configuration rules for Intel C/C++ on Win32
+#
+
+
+# Copyright 1996-2000, 2003, 2005 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+# default definitions of the export list
+#
+EXPORTS_LIST = $(OBJ_DIR)/freetype.def
+EXPORTS_OPTIONS = /DEF:$(EXPORTS_LIST)
+APINAMES_OPTIONS := -dfreetype.dll -w
+
+include $(TOP_DIR)/builds/win32/win32-def.mk
+include $(TOP_DIR)/builds/compiler/intelc.mk
+
+# include linking instructions
+include $(TOP_DIR)/builds/link_dos.mk
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/win32/w32-lcc.mk b/src/3rdparty/freetype/builds/win32/w32-lcc.mk
new file mode 100644
index 0000000..a147c4c
--- /dev/null
+++ b/src/3rdparty/freetype/builds/win32/w32-lcc.mk
@@ -0,0 +1,24 @@
+#
+# FreeType 2 configuration rules for Win32 + LCC
+#
+
+
+# Copyright 1996-2000 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+SEP := /
+include $(TOP_DIR)/builds/win32/win32-def.mk
+include $(TOP_DIR)/builds/compiler/win-lcc.mk
+
+# include linking instructions
+include $(TOP_DIR)/builds/link_dos.mk
+
+# EOF
+
diff --git a/src/3rdparty/freetype/builds/win32/w32-mingw32.mk b/src/3rdparty/freetype/builds/win32/w32-mingw32.mk
new file mode 100644
index 0000000..04e9e21
--- /dev/null
+++ b/src/3rdparty/freetype/builds/win32/w32-mingw32.mk
@@ -0,0 +1,33 @@
+#
+# FreeType 2 configuration rules for mingw32
+#
+
+
+# Copyright 1996-2000, 2003, 2005 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+# default definitions of the export list
+#
+EXPORTS_LIST = $(OBJ_DIR)/freetype.def
+EXPORTS_OPTIONS = $(EXPORTS_LIST)
+APINAMES_OPTIONS := -dfreetype.dll -w
+
+# include Win32-specific definitions
+include $(TOP_DIR)/builds/win32/win32-def.mk
+
+LIBRARY := lib$(PROJECT)
+
+# include gcc-specific definitions
+include $(TOP_DIR)/builds/compiler/gcc.mk
+
+# include linking instructions
+include $(TOP_DIR)/builds/link_dos.mk
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/win32/w32-vcc.mk b/src/3rdparty/freetype/builds/win32/w32-vcc.mk
new file mode 100644
index 0000000..7fb8794
--- /dev/null
+++ b/src/3rdparty/freetype/builds/win32/w32-vcc.mk
@@ -0,0 +1,28 @@
+#
+# FreeType 2 Visual C++ on Win32
+#
+
+
+# Copyright 1996-2000, 2003, 2005 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+# definitions of the export list
+#
+EXPORTS_LIST = $(OBJ_DIR)/freetype.def
+EXPORTS_OPTIONS = /DEF:$(EXPORTS_LIST)
+APINAMES_OPTIONS := -dfreetype.dll -w
+
+include $(TOP_DIR)/builds/win32/win32-def.mk
+include $(TOP_DIR)/builds/compiler/visualc.mk
+
+# include linking instructions
+include $(TOP_DIR)/builds/link_dos.mk
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/win32/w32-wat.mk b/src/3rdparty/freetype/builds/win32/w32-wat.mk
new file mode 100644
index 0000000..820b817
--- /dev/null
+++ b/src/3rdparty/freetype/builds/win32/w32-wat.mk
@@ -0,0 +1,28 @@
+#
+# FreeType 2 configuration rules for Watcom C/C++
+#
+
+
+# Copyright 1996-2000, 2003, 2005 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+# redefine export symbol definitions
+#
+EXPORTS_LIST = $(OBJ_DIR)/watcom-ftexports.lbc
+EXPORTS_OPTIONS = -\"export @$(EXPORTS_LIST)\"-
+APINAMES_OPTIONS := -wW
+
+include $(TOP_DIR)/builds/win32/win32-def.mk
+include $(TOP_DIR)/builds/compiler/watcom.mk
+
+# include linking instructions
+include $(TOP_DIR)/builds/link_dos.mk
+
+
+# EOF
diff --git a/src/3rdparty/freetype/builds/win32/win32-def.mk b/src/3rdparty/freetype/builds/win32/win32-def.mk
new file mode 100644
index 0000000..a82b146
--- /dev/null
+++ b/src/3rdparty/freetype/builds/win32/win32-def.mk
@@ -0,0 +1,46 @@
+#
+# FreeType 2 Win32 specific definitions
+#
+
+
+# Copyright 1996-2000, 2003, 2005, 2006 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+DELETE := del
+CAT := type
+SEP := $(strip \ )
+BUILD_DIR := $(TOP_DIR)/builds/win32
+PLATFORM := win32
+
+# The executable file extension (for tools). NOTE: WE INCLUDE THE DOT HERE !!
+#
+E := .exe
+
+
+# The directory where all library files are placed.
+#
+# By default, this is the same as $(OBJ_DIR); however, this can be changed
+# to suit particular needs.
+#
+LIB_DIR := $(OBJ_DIR)
+
+
+# The name of the final library file. Note that the DOS-specific Makefile
+# uses a shorter (8.3) name.
+#
+LIBRARY := $(PROJECT)
+
+
+# The NO_OUTPUT macro is used to ignore the output of commands.
+#
+NO_OUTPUT = 2> nul
+
+
+# EOF
diff --git a/src/3rdparty/freetype/configure b/src/3rdparty/freetype/configure
new file mode 100755
index 0000000..c72e44b
--- /dev/null
+++ b/src/3rdparty/freetype/configure
@@ -0,0 +1,100 @@
+#!/bin/sh
+#
+# Copyright 2002, 2003, 2004, 2005, 2006 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+#
+#
+# Call the `configure' script located in `builds/unix'.
+#
+
+rm -f config.mk builds/unix/unix-def.mk builds/unix/unix-cc.mk
+
+if test "x$GNUMAKE" = x; then
+ GNUMAKE=make
+fi
+
+if test -z "`$GNUMAKE -v 2>/dev/null | grep GNU`"; then
+ if test -z "`$GNUMAKE -v 2>/dev/null | grep makepp`"; then
+ echo "GNU make (>= 3.79.1) or makepp (>= 1.19) is required to build FreeType2." >&2
+ echo "Please try" >&2
+ echo " \`GNUMAKE=<GNU make command name> $0'." >&2
+ echo "or >&2"
+ echo " \`GNUMAKE=\"makepp --norc-substitution\" $0'." >&2
+ exit 1
+ fi
+fi
+
+# Get `dirname' functionality. This is taken and adapted from autoconf's
+# m4sh.m4 (_AS_EXPR_PREPARE, AS_DIRNAME_EXPR, and AS_DIRNAME_SED).
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ ft_expr=expr
+else
+ ft_expr=false
+fi
+
+ft2_dir=`(dirname "$0") 2>/dev/null ||
+ $ft_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$0" : 'X\(//\)[^/]' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+ echo X"$0" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+abs_curr_dir=`pwd`
+abs_ft2_dir=`cd "$ft2_dir" && pwd`
+
+# build a dummy Makefile if we are not building in the source tree
+
+if test "$abs_curr_dir" != "$abs_ft2_dir"; then
+ mkdir reference
+ echo "Copying \`modules.cfg'"
+ cp $abs_ft2_dir/modules.cfg $abs_curr_dir
+ echo "Generating \`Makefile'"
+ echo "TOP_DIR := $abs_ft2_dir" > Makefile
+ echo "OBJ_DIR := $abs_curr_dir" >> Makefile
+ echo "OBJ_BUILD := \$(OBJ_DIR)" >> Makefile
+ echo "DOC_DIR := \$(OBJ_DIR)/reference" >> Makefile
+ echo "LIBTOOL := \$(OBJ_DIR)/libtool" >> Makefile
+ echo "ifndef FT2DEMOS" >> Makefile
+ echo " include \$(TOP_DIR)/Makefile" >> Makefile
+ echo "else" >> Makefile
+ echo " TOP_DIR_2 := \$(TOP_DIR)/../ft2demos" >> Makefile
+ echo " PROJECT := freetype" >> Makefile
+ echo " CONFIG_MK := \$(OBJ_DIR)/config.mk" >> Makefile
+ echo " include \$(TOP_DIR_2)/Makefile" >> Makefile
+ echo "endif" >> Makefile
+fi
+
+# call make
+
+CFG=
+for x in ${1+"$@"}; do
+ CFG="$CFG '$x'"
+done
+CFG=$CFG $GNUMAKE setup unix
+
+# eof
diff --git a/src/3rdparty/freetype/devel/ft2build.h b/src/3rdparty/freetype/devel/ft2build.h
new file mode 100644
index 0000000..c1d38c3
--- /dev/null
+++ b/src/3rdparty/freetype/devel/ft2build.h
@@ -0,0 +1,41 @@
+/***************************************************************************/
+/* */
+/* ft2build.h */
+/* */
+/* FreeType 2 build and setup macros. */
+/* (Generic version) */
+/* */
+/* Copyright 1996-2001, 2003, 2006 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+ /*
+ * This is a development version of <ft2build.h> that is used
+ * to build the library in debug mode. Its only difference with
+ * the reference is that it forces the use of the local `ftoption.h'
+ * which contains different settings for all configuration macros.
+ *
+ * To use it, you must define the environment variable FT2_BUILD_INCLUDE
+ * to point to the directory containing these two files (`ft2build.h' and
+ * `ftoption.h'), then invoke Jam as usual.
+ */
+
+#ifndef __FT2_BUILD_DEVEL_H__
+#define __FT2_BUILD_DEVEL_H__
+
+#define FT_CONFIG_OPTIONS_H <ftoption.h>
+
+#include <freetype/config/ftheader.h>
+
+#endif /* __FT2_BUILD_DEVEL_H__ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/devel/ftoption.h b/src/3rdparty/freetype/devel/ftoption.h
new file mode 100644
index 0000000..b3bace1
--- /dev/null
+++ b/src/3rdparty/freetype/devel/ftoption.h
@@ -0,0 +1,672 @@
+/***************************************************************************/
+/* */
+/* ftoption.h (for development) */
+/* */
+/* User-selectable configuration macros (specification only). */
+/* */
+/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef __FTOPTION_H__
+#define __FTOPTION_H__
+
+
+#include <ft2build.h>
+
+
+FT_BEGIN_HEADER
+
+ /*************************************************************************/
+ /* */
+ /* USER-SELECTABLE CONFIGURATION MACROS */
+ /* */
+ /* This file contains the default configuration macro definitions for */
+ /* a standard build of the FreeType library. There are three ways to */
+ /* use this file to build project-specific versions of the library: */
+ /* */
+ /* - You can modify this file by hand, but this is not recommended in */
+ /* cases where you would like to build several versions of the */
+ /* library from a single source directory. */
+ /* */
+ /* - You can put a copy of this file in your build directory, more */
+ /* precisely in `$BUILD/freetype/config/ftoption.h', where `$BUILD' */
+ /* is the name of a directory that is included _before_ the FreeType */
+ /* include path during compilation. */
+ /* */
+ /* The default FreeType Makefiles and Jamfiles use the build */
+ /* directory `builds/<system>' by default, but you can easily change */
+ /* that for your own projects. */
+ /* */
+ /* - Copy the file <ft2build.h> to `$BUILD/ft2build.h' and modify it */
+ /* slightly to pre-define the macro FT_CONFIG_OPTIONS_H used to */
+ /* locate this file during the build. For example, */
+ /* */
+ /* #define FT_CONFIG_OPTIONS_H <myftoptions.h> */
+ /* #include <freetype/config/ftheader.h> */
+ /* */
+ /* will use `$BUILD/myftoptions.h' instead of this file for macro */
+ /* definitions. */
+ /* */
+ /* Note also that you can similarly pre-define the macro */
+ /* FT_CONFIG_MODULES_H used to locate the file listing of the modules */
+ /* that are statically linked to the library at compile time. By */
+ /* default, this file is <freetype/config/ftmodule.h>. */
+ /* */
+ /* We highly recommend using the third method whenever possible. */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /**** ****/
+ /**** G E N E R A L F R E E T Y P E 2 C O N F I G U R A T I O N ****/
+ /**** ****/
+ /*************************************************************************/
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* Uncomment the line below if you want to activate sub-pixel rendering */
+ /* (a.k.a. LCD rendering, or ClearType) in this build of the library. */
+ /* */
+ /* Note that this feature is covered by several Microsoft patents */
+ /* and should not be activated in any default build of the library. */
+ /* */
+ /* This macro has no impact on the FreeType API, only on its */
+ /* _implementation_. For example, using FT_RENDER_MODE_LCD when calling */
+ /* FT_Render_Glyph still generates a bitmap that is 3 times larger than */
+ /* the original size; the difference will be that each triplet of */
+ /* subpixels has R=G=B. */
+ /* */
+ /* This is done to allow FreeType clients to run unmodified, forcing */
+ /* them to display normal gray-level anti-aliased glyphs. */
+ /* */
+#define FT_CONFIG_OPTION_SUBPIXEL_RENDERING
+
+
+ /*************************************************************************/
+ /* */
+ /* Many compilers provide a non-ANSI 64-bit data type that can be used */
+ /* by FreeType to speed up some computations. However, this will create */
+ /* some problems when compiling the library in strict ANSI mode. */
+ /* */
+ /* For this reason, the use of 64-bit integers is normally disabled when */
+ /* the __STDC__ macro is defined. You can however disable this by */
+ /* defining the macro FT_CONFIG_OPTION_FORCE_INT64 here. */
+ /* */
+ /* For most compilers, this will only create compilation warnings when */
+ /* building the library. */
+ /* */
+ /* ObNote: The compiler-specific 64-bit integers are detected in the */
+ /* file `ftconfig.h' either statically or through the */
+ /* `configure' script on supported platforms. */
+ /* */
+#undef FT_CONFIG_OPTION_FORCE_INT64
+
+
+ /*************************************************************************/
+ /* */
+ /* LZW-compressed file support. */
+ /* */
+ /* FreeType now handles font files that have been compressed with the */
+ /* `compress' program. This is mostly used to parse many of the PCF */
+ /* files that come with various X11 distributions. The implementation */
+ /* uses NetBSD's `zopen' to partially uncompress the file on the fly */
+ /* (see src/lzw/ftgzip.c). */
+ /* */
+ /* Define this macro if you want to enable this `feature'. */
+ /* */
+#define FT_CONFIG_OPTION_USE_LZW
+
+
+ /*************************************************************************/
+ /* */
+ /* Gzip-compressed file support. */
+ /* */
+ /* FreeType now handles font files that have been compressed with the */
+ /* `gzip' program. This is mostly used to parse many of the PCF files */
+ /* that come with XFree86. The implementation uses `zlib' to */
+ /* partially uncompress the file on the fly (see src/gzip/ftgzip.c). */
+ /* */
+ /* Define this macro if you want to enable this `feature'. See also */
+ /* the macro FT_CONFIG_OPTION_SYSTEM_ZLIB below. */
+ /* */
+#define FT_CONFIG_OPTION_USE_ZLIB
+
+
+ /*************************************************************************/
+ /* */
+ /* ZLib library selection */
+ /* */
+ /* This macro is only used when FT_CONFIG_OPTION_USE_ZLIB is defined. */
+ /* It allows FreeType's `ftgzip' component to link to the system's */
+ /* installation of the ZLib library. This is useful on systems like */
+ /* Unix or VMS where it generally is already available. */
+ /* */
+ /* If you let it undefined, the component will use its own copy */
+ /* of the zlib sources instead. These have been modified to be */
+ /* included directly within the component and *not* export external */
+ /* function names. This allows you to link any program with FreeType */
+ /* _and_ ZLib without linking conflicts. */
+ /* */
+ /* Do not #undef this macro here since the build system might define */
+ /* it for certain configurations only. */
+ /* */
+/* #define FT_CONFIG_OPTION_SYSTEM_ZLIB */
+
+
+ /*************************************************************************/
+ /* */
+ /* DLL export compilation */
+ /* */
+ /* When compiling FreeType as a DLL, some systems/compilers need a */
+ /* special keyword in front OR after the return type of function */
+ /* declarations. */
+ /* */
+ /* Two macros are used within the FreeType source code to define */
+ /* exported library functions: FT_EXPORT and FT_EXPORT_DEF. */
+ /* */
+ /* FT_EXPORT( return_type ) */
+ /* */
+ /* is used in a function declaration, as in */
+ /* */
+ /* FT_EXPORT( FT_Error ) */
+ /* FT_Init_FreeType( FT_Library* alibrary ); */
+ /* */
+ /* */
+ /* FT_EXPORT_DEF( return_type ) */
+ /* */
+ /* is used in a function definition, as in */
+ /* */
+ /* FT_EXPORT_DEF( FT_Error ) */
+ /* FT_Init_FreeType( FT_Library* alibrary ) */
+ /* { */
+ /* ... some code ... */
+ /* return FT_Err_Ok; */
+ /* } */
+ /* */
+ /* You can provide your own implementation of FT_EXPORT and */
+ /* FT_EXPORT_DEF here if you want. If you leave them undefined, they */
+ /* will be later automatically defined as `extern return_type' to */
+ /* allow normal compilation. */
+ /* */
+ /* Do not #undef these macros here since the build system might define */
+ /* them for certain configurations only. */
+ /* */
+/* #define FT_EXPORT(x) extern x */
+/* #define FT_EXPORT_DEF(x) x */
+
+
+ /*************************************************************************/
+ /* */
+ /* Glyph Postscript Names handling */
+ /* */
+ /* By default, FreeType 2 is compiled with the `PSNames' module. This */
+ /* module is in charge of converting a glyph name string into a */
+ /* Unicode value, or return a Macintosh standard glyph name for the */
+ /* use with the TrueType `post' table. */
+ /* */
+ /* Undefine this macro if you do not want `PSNames' compiled in your */
+ /* build of FreeType. This has the following effects: */
+ /* */
+ /* - The TrueType driver will provide its own set of glyph names, */
+ /* if you build it to support postscript names in the TrueType */
+ /* `post' table. */
+ /* */
+ /* - The Type 1 driver will not be able to synthetize a Unicode */
+ /* charmap out of the glyphs found in the fonts. */
+ /* */
+ /* You would normally undefine this configuration macro when building */
+ /* a version of FreeType that doesn't contain a Type 1 or CFF driver. */
+ /* */
+#define FT_CONFIG_OPTION_POSTSCRIPT_NAMES
+
+
+ /*************************************************************************/
+ /* */
+ /* Postscript Names to Unicode Values support */
+ /* */
+ /* By default, FreeType 2 is built with the `PSNames' module compiled */
+ /* in. Among other things, the module is used to convert a glyph name */
+ /* into a Unicode value. This is especially useful in order to */
+ /* synthetize on the fly a Unicode charmap from the CFF/Type 1 driver */
+ /* through a big table named the `Adobe Glyph List' (AGL). */
+ /* */
+ /* Undefine this macro if you do not want the Adobe Glyph List */
+ /* compiled in your `PSNames' module. The Type 1 driver will not be */
+ /* able to synthetize a Unicode charmap out of the glyphs found in the */
+ /* fonts. */
+ /* */
+#define FT_CONFIG_OPTION_ADOBE_GLYPH_LIST
+
+
+ /*************************************************************************/
+ /* */
+ /* Support for Mac fonts */
+ /* */
+ /* Define this macro if you want support for outline fonts in Mac */
+ /* format (mac dfont, mac resource, macbinary containing a mac */
+ /* resource) on non-Mac platforms. */
+ /* */
+ /* Note that the `FOND' resource isn't checked. */
+ /* */
+#define FT_CONFIG_OPTION_MAC_FONTS
+
+
+ /*************************************************************************/
+ /* */
+ /* Guessing methods to access embedded resource forks */
+ /* */
+ /* Enable extra Mac fonts support on non-Mac platforms (e.g. */
+ /* GNU/Linux). */
+ /* */
+ /* Resource forks which include fonts data are stored sometimes in */
+ /* locations which users or developers don't expected. In some cases, */
+ /* resource forks start with some offset from the head of a file. In */
+ /* other cases, the actual resource fork is stored in file different */
+ /* from what the user specifies. If this option is activated, */
+ /* FreeType tries to guess whether such offsets or different file */
+ /* names must be used. */
+ /* */
+ /* Note that normal, direct access of resource forks is controlled via */
+ /* the FT_CONFIG_OPTION_MAC_FONTS option. */
+ /* */
+#ifdef FT_CONFIG_OPTION_MAC_FONTS
+#define FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK
+#endif
+
+
+ /*************************************************************************/
+ /* */
+ /* Allow the use of FT_Incremental_Interface to load typefaces that */
+ /* contain no glyph data, but supply it via a callback function. */
+ /* This allows FreeType to be used with the PostScript language, using */
+ /* the GhostScript interpreter. */
+ /* */
+/* #define FT_CONFIG_OPTION_INCREMENTAL */
+
+
+ /*************************************************************************/
+ /* */
+ /* The size in bytes of the render pool used by the scan-line converter */
+ /* to do all of its work. */
+ /* */
+ /* This must be greater than 4KByte if you use FreeType to rasterize */
+ /* glyphs; otherwise, you may set it to zero to avoid unnecessary */
+ /* allocation of the render pool. */
+ /* */
+#define FT_RENDER_POOL_SIZE 16384L
+
+
+ /*************************************************************************/
+ /* */
+ /* FT_MAX_MODULES */
+ /* */
+ /* The maximum number of modules that can be registered in a single */
+ /* FreeType library object. 32 is the default. */
+ /* */
+#define FT_MAX_MODULES 32
+
+
+ /*************************************************************************/
+ /* */
+ /* Debug level */
+ /* */
+ /* FreeType can be compiled in debug or trace mode. In debug mode, */
+ /* errors are reported through the `ftdebug' component. In trace */
+ /* mode, additional messages are sent to the standard output during */
+ /* execution. */
+ /* */
+ /* Define FT_DEBUG_LEVEL_ERROR to build the library in debug mode. */
+ /* Define FT_DEBUG_LEVEL_TRACE to build it in trace mode. */
+ /* */
+ /* Don't define any of these macros to compile in `release' mode! */
+ /* */
+ /* Do not #undef these macros here since the build system might define */
+ /* them for certain configurations only. */
+ /* */
+#define FT_DEBUG_LEVEL_ERROR
+#define FT_DEBUG_LEVEL_TRACE
+
+
+ /*************************************************************************/
+ /* */
+ /* Memory Debugging */
+ /* */
+ /* FreeType now comes with an integrated memory debugger that is */
+ /* capable of detecting simple errors like memory leaks or double */
+ /* deletes. To compile it within your build of the library, you */
+ /* should define FT_DEBUG_MEMORY here. */
+ /* */
+ /* Note that the memory debugger is only activated at runtime when */
+ /* when the _environment_ variable `FT2_DEBUG_MEMORY' is defined also! */
+ /* */
+ /* Do not #undef this macro here since the build system might define */
+ /* it for certain configurations only. */
+ /* */
+#define FT_DEBUG_MEMORY
+
+
+ /*************************************************************************/
+ /* */
+ /* Module errors */
+ /* */
+ /* If this macro is set (which is _not_ the default), the higher byte */
+ /* of an error code gives the module in which the error has occurred, */
+ /* while the lower byte is the real error code. */
+ /* */
+ /* Setting this macro makes sense for debugging purposes only, since */
+ /* it would break source compatibility of certain programs that use */
+ /* FreeType 2. */
+ /* */
+ /* More details can be found in the files ftmoderr.h and fterrors.h. */
+ /* */
+#undef FT_CONFIG_OPTION_USE_MODULE_ERRORS
+
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /**** ****/
+ /**** S F N T D R I V E R C O N F I G U R A T I O N ****/
+ /**** ****/
+ /*************************************************************************/
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* Define TT_CONFIG_OPTION_EMBEDDED_BITMAPS if you want to support */
+ /* embedded bitmaps in all formats using the SFNT module (namely */
+ /* TrueType & OpenType). */
+ /* */
+#define TT_CONFIG_OPTION_EMBEDDED_BITMAPS
+
+
+ /*************************************************************************/
+ /* */
+ /* Define TT_CONFIG_OPTION_POSTSCRIPT_NAMES if you want to be able to */
+ /* load and enumerate the glyph Postscript names in a TrueType or */
+ /* OpenType file. */
+ /* */
+ /* Note that when you do not compile the `PSNames' module by undefining */
+ /* the above FT_CONFIG_OPTION_POSTSCRIPT_NAMES, the `sfnt' module will */
+ /* contain additional code used to read the PS Names table from a font. */
+ /* */
+ /* (By default, the module uses `PSNames' to extract glyph names.) */
+ /* */
+#define TT_CONFIG_OPTION_POSTSCRIPT_NAMES
+
+
+ /*************************************************************************/
+ /* */
+ /* Define TT_CONFIG_OPTION_SFNT_NAMES if your applications need to */
+ /* access the internal name table in a SFNT-based format like TrueType */
+ /* or OpenType. The name table contains various strings used to */
+ /* describe the font, like family name, copyright, version, etc. It */
+ /* does not contain any glyph name though. */
+ /* */
+ /* Accessing SFNT names is done through the functions declared in */
+ /* `freetype/ftnames.h'. */
+ /* */
+#define TT_CONFIG_OPTION_SFNT_NAMES
+
+
+ /*************************************************************************/
+ /* */
+ /* TrueType CMap support */
+ /* */
+ /* Here you can fine-tune which TrueType CMap table format shall be */
+ /* supported. */
+#define TT_CONFIG_CMAP_FORMAT_0
+#define TT_CONFIG_CMAP_FORMAT_2
+#define TT_CONFIG_CMAP_FORMAT_4
+#define TT_CONFIG_CMAP_FORMAT_6
+#define TT_CONFIG_CMAP_FORMAT_8
+#define TT_CONFIG_CMAP_FORMAT_10
+#define TT_CONFIG_CMAP_FORMAT_12
+#define TT_CONFIG_CMAP_FORMAT_14
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /**** ****/
+ /**** T R U E T Y P E D R I V E R C O N F I G U R A T I O N ****/
+ /**** ****/
+ /*************************************************************************/
+ /*************************************************************************/
+
+ /*************************************************************************/
+ /* */
+ /* Define TT_CONFIG_OPTION_BYTECODE_INTERPRETER if you want to compile */
+ /* a bytecode interpreter in the TrueType driver. Note that there are */
+ /* important patent issues related to the use of the interpreter. */
+ /* */
+ /* By undefining this, you will only compile the code necessary to load */
+ /* TrueType glyphs without hinting. */
+ /* */
+ /* Do not #undef this macro here, since the build system might */
+ /* define it for certain configurations only. */
+ /* */
+#define TT_CONFIG_OPTION_BYTECODE_INTERPRETER
+
+
+ /*************************************************************************/
+ /* */
+ /* If you define TT_CONFIG_OPTION_UNPATENTED_HINTING, a special version */
+ /* of the TrueType bytecode interpreter is used that doesn't implement */
+ /* any of the patented opcodes and algorithms. Note that the */
+ /* the TT_CONFIG_OPTION_UNPATENTED_HINTING macro is *ignored* if you */
+ /* define TT_CONFIG_OPTION_BYTECODE_INTERPRETER; with other words, */
+ /* either define TT_CONFIG_OPTION_BYTECODE_INTERPRETER or */
+ /* TT_CONFIG_OPTION_UNPATENTED_HINTING but not both at the same time. */
+ /* */
+ /* This macro is only useful for a small number of font files (mostly */
+ /* for Asian scripts) that require bytecode interpretation to properly */
+ /* load glyphs. For all other fonts, this produces unpleasant results, */
+ /* thus the unpatented interpreter is never used to load glyphs from */
+ /* TrueType fonts unless one of the following two options is used. */
+ /* */
+ /* - The unpatented interpreter is explicitly activated by the user */
+ /* through the FT_PARAM_TAG_UNPATENTED_HINTING parameter tag */
+ /* when opening the FT_Face. */
+ /* */
+ /* - FreeType detects that the FT_Face corresponds to one of the */
+ /* `trick' fonts (e.g., `Mingliu') it knows about. The font engine */
+ /* contains a hard-coded list of font names and other matching */
+ /* parameters (see function `tt_face_init' in file */
+ /* `src/truetype/ttobjs.c'). */
+ /* */
+ /* Here a sample code snippet for using FT_PARAM_TAG_UNPATENTED_HINTING. */
+ /* */
+ /* { */
+ /* FT_Parameter parameter; */
+ /* FT_Open_Args open_args; */
+ /* */
+ /* */
+ /* parameter.tag = FT_PARAM_TAG_UNPATENTED_HINTING; */
+ /* */
+ /* open_args.flags = FT_OPEN_PATHNAME | FT_OPEN_PARAMS; */
+ /* open_args.pathname = my_font_pathname; */
+ /* open_args.num_params = 1; */
+ /* open_args.params = &parameter; */
+ /* */
+ /* error = FT_Open_Face( library, &open_args, index, &face ); */
+ /* ... */
+ /* } */
+ /* */
+/* #define TT_CONFIG_OPTION_UNPATENTED_HINTING */
+
+
+ /*************************************************************************/
+ /* */
+ /* Define TT_CONFIG_OPTION_INTERPRETER_SWITCH to compile the TrueType */
+ /* bytecode interpreter with a huge switch statement, rather than a call */
+ /* table. This results in smaller and faster code for a number of */
+ /* architectures. */
+ /* */
+ /* Note however that on some compiler/processor combinations, undefining */
+ /* this macro will generate faster, though larger, code. */
+ /* */
+#define TT_CONFIG_OPTION_INTERPRETER_SWITCH
+
+
+ /*************************************************************************/
+ /* */
+ /* Define TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED to compile the */
+ /* TrueType glyph loader to use Apple's definition of how to handle */
+ /* component offsets in composite glyphs. */
+ /* */
+ /* Apple and MS disagree on the default behavior of component offsets */
+ /* in composites. Apple says that they should be scaled by the scaling */
+ /* factors in the transformation matrix (roughly, it's more complex) */
+ /* while MS says they should not. OpenType defines two bits in the */
+ /* composite flags array which can be used to disambiguate, but old */
+ /* fonts will not have them. */
+ /* */
+ /* http://partners.adobe.com/asn/developer/opentype/glyf.html */
+ /* http://fonts.apple.com/TTRefMan/RM06/Chap6glyf.html */
+ /* */
+#undef TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED
+
+
+ /*************************************************************************/
+ /* */
+ /* Define TT_CONFIG_OPTION_GX_VAR_SUPPORT if you want to include */
+ /* support for Apple's distortable font technology (fvar, gvar, cvar, */
+ /* and avar tables). This has many similarities to Type 1 Multiple */
+ /* Masters support. */
+ /* */
+#define TT_CONFIG_OPTION_GX_VAR_SUPPORT
+
+
+ /*************************************************************************/
+ /* */
+ /* Define TT_CONFIG_OPTION_BDF if you want to include support for */
+ /* an embedded `BDF ' table within SFNT-based bitmap formats. */
+ /* */
+#define TT_CONFIG_OPTION_BDF
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /**** ****/
+ /**** T Y P E 1 D R I V E R C O N F I G U R A T I O N ****/
+ /**** ****/
+ /*************************************************************************/
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* T1_MAX_DICT_DEPTH is the maximal depth of nest dictionaries and */
+ /* arrays in the Type 1 stream (see t1load.c). A minimum of 4 is */
+ /* required. */
+ /* */
+#define T1_MAX_DICT_DEPTH 5
+
+
+ /*************************************************************************/
+ /* */
+ /* T1_MAX_SUBRS_CALLS details the maximum number of nested sub-routine */
+ /* calls during glyph loading. */
+ /* */
+#define T1_MAX_SUBRS_CALLS 16
+
+
+ /*************************************************************************/
+ /* */
+ /* T1_MAX_CHARSTRING_OPERANDS is the charstring stack's capacity. A */
+ /* minimum of 16 is required. */
+ /* */
+ /* The Chinese font MingTiEG-Medium (CNS 11643 character set) needs 256. */
+ /* */
+#define T1_MAX_CHARSTRINGS_OPERANDS 256
+
+
+ /*************************************************************************/
+ /* */
+ /* Define this configuration macro if you want to prevent the */
+ /* compilation of `t1afm', which is in charge of reading Type 1 AFM */
+ /* files into an existing face. Note that if set, the T1 driver will be */
+ /* unable to produce kerning distances. */
+ /* */
+#undef T1_CONFIG_OPTION_NO_AFM
+
+
+ /*************************************************************************/
+ /* */
+ /* Define this configuration macro if you want to prevent the */
+ /* compilation of the Multiple Masters font support in the Type 1 */
+ /* driver. */
+ /* */
+#undef T1_CONFIG_OPTION_NO_MM_SUPPORT
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /**** ****/
+ /**** A U T O F I T M O D U L E C O N F I G U R A T I O N ****/
+ /**** ****/
+ /*************************************************************************/
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* Compile autofit module with CJK (Chinese, Japanese, Korean) script */
+ /* support. */
+ /* */
+#define AF_CONFIG_OPTION_CJK
+
+
+ /*************************************************************************/
+ /* */
+ /* Compile autofit module with Indic script support. */
+ /* */
+#define AF_CONFIG_OPTION_INDIC
+
+ /* */
+
+
+ /*
+ * Define this variable if you want to keep the layout of internal
+ * structures that was used prior to FreeType 2.2. This also compiles in
+ * a few obsolete functions to avoid linking problems on typical Unix
+ * distributions.
+ *
+ * For embedded systems or building a new distribution from scratch, it
+ * is recommended to disable the macro since it reduces the library's code
+ * size and activates a few memory-saving optimizations as well.
+ */
+#undef FT_CONFIG_OPTION_OLD_INTERNALS
+
+
+ /*
+ * This variable is defined if either unpatented or native TrueType
+ * hinting is requested by the definitions above.
+ */
+#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
+#define TT_USE_BYTECODE_INTERPRETER
+#elif defined TT_CONFIG_OPTION_UNPATENTED_HINTING
+#define TT_USE_BYTECODE_INTERPRETER
+#endif
+
+FT_END_HEADER
+
+
+#endif /* __FTOPTION_H__ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/docs/CHANGES b/src/3rdparty/freetype/docs/CHANGES
new file mode 100644
index 0000000..8129ec7
--- /dev/null
+++ b/src/3rdparty/freetype/docs/CHANGES
@@ -0,0 +1,3148 @@
+
+CHANGES BETWEEN 2.3.6 and 2.3.5
+
+ I. IMPORTANT BUG FIXES
+
+ - A bunch of potential security problems have been found. All
+ users should update.
+
+ - Microsoft Unicode cmaps in TrueType fonts are now always
+ preferred over Apple cmaps. This is not a bug per se, but there
+ exist some buggy fonts created for MS which have broken Apple
+ cmaps. This affects only the automatic selection of FreeType;
+ it's always possible to manually select an Apple Unicode cmap if
+ desired.
+
+ - Many bug fixes to the TrueType bytecode interpreter.
+
+ - Improved Mac support.
+
+ - Subsetted CID-keyed CFFs are now supported correctly.
+
+ - CID-keyed CFFs with subfonts which are scaled in a non-standard
+ way are now handled correctly.
+
+ - A call to FT_Open_Face with `face_index' < 0 crashed FreeType if
+ the font was a Windows (bitmap) FNT/FON.
+
+
+ II. IMPORTANT CHANGES
+
+ - The new function `FT_Get_CID_Registry_Ordering_Supplement' gives
+ access to those fields in a CID-keyed font. The code has been
+ contributed by Derek Clegg.
+
+ - George Williams contributed code to validate the new `MATH'
+ OpenType table (within the `otvalid' module). The `ftvalid'
+ demo program has been extended accordingly.
+
+ - An API for cmap 14 support (for Unicode Variant Selectors, UVS)
+ has been contributed by George Williams.
+
+ - A new face flag FT_FACE_FLAG_CID_KEYED has been added, together
+ with a macro FT_IS_CID_KEYED which evaluates to 1 if the font is
+ CID-keyed.
+
+
+ III. MISCELLANEOUS
+
+ - Build support for symbian has been contributed.
+
+ - Better WGL4 glyph name support, contributed by Sergey Tolstov.
+
+ - Debugging output of the various FT_TRACEX macros is now sent to
+ stderr.
+
+ - The `ftview' demo program now provides artificial slanting too.
+
+ - The `ftvalid' demo program has a new option `-f' to select the
+ font index.
+
+
+======================================================================
+
+CHANGES BETWEEN 2.3.5 and 2.3.4
+
+ I. IMPORTANT BUG FIXES
+
+ - Some subglyphs in TrueType fonts were handled incorrectly due to
+ a missing graphics state reinitialization.
+
+ - Large .Z files (as distributed with some X11 packages) weren't
+ handled correctly, making FreeType increase the heap stack in an
+ endless loop.
+
+ - A large number of bugs have been fixed to avoid crashes and
+ endless loops with invalid fonts.
+
+
+ II. IMPORTANT CHANGES
+
+ - The two new cache functions `FTC_ImageCache_LookupScaler' and
+ `FTC_SBit_Cache_LookupScaler' have been added to allow lookup of
+ glyphs using an `FTC_Scaler' object; this makes it possible to
+ use fractional pixel sizes in the cache. The demo programs have
+ been updated accordingly to use this feature.
+
+ - A new API `FT_Get_CMap_Format' has been added to get the cmap
+ format of a TrueType font. This is useful in handling PDF
+ files. The code has been contributed by Derek Clegg.
+
+ - The auto-hinter now produces better output by default for
+ non-Latin scripts like Indic. This was done by using the CJK
+ hinting module as the default instead of the Latin one. Thanks
+ to Rahul Bhalerao for this suggestion.
+
+ - A new API `FT_Face_CheckTrueTypePatents' has been added to find
+ out whether a given TrueType font uses patented bytecode
+ instructions. The `ft2demos' bundle contains a new program
+ called `ftpatchk' which demonstrates its usage.
+
+ - A new API `FT_Face_SetUnpatentedHinting' has been added to
+ enable or disable the unpatented hinter.
+
+ - Support for Windows FON files in PE format has been contributed
+ by Dmitry Timoshkov.
+
+
+ III. MISCELLANEOUS
+
+ - Vincent Richomme contributed Visual C++ project files for Pocket
+ PCs.
+
+
+======================================================================
+
+CHANGES BETWEEN 2.3.4 and 2.3.3
+
+ I. IMPORTANT BUG FIXES
+
+ - A serious bug in the handling of bitmap fonts (and bitmap
+ strikes of outline fonts) has been introduced in 2.3.3.
+
+
+======================================================================
+
+CHANGES BETWEEN 2.3.3 and 2.3.2
+
+ I. IMPORTANT BUG FIXES
+
+ - Remove a serious regression in the TrueType bytecode interpreter
+ that was introduced in version 2.3.2. Note that this does not
+ disable the improvements introduced to the interpreter in
+ version 2.3.2, only some ill cases that occurred with certain
+ fonts (though a few popular ones).
+
+ - The auto-hinter now ignores single-point contours for computing
+ blue zones. This bug created `wavy' baselines when rendering
+ text with various fonts that use these contours to model
+ mark-attach points (these are points that are never rasterized
+ and are placed outside of the glyph's real outline).
+
+ - The `rsb_delta' and `lsb_delta' glyph slot fields are now set to
+ zero for mono-spaced fonts. Otherwise code that uses them would
+ essentially ruin the fixed-advance property.
+
+ - Fix CVE-2007-1351 which can cause an integer overflow while
+ parsing BDF fonts, leading to a potentially exploitable heap
+ overflow condition.
+
+
+ II. MISCELLANEOUS
+
+ - Fixed compilation issues on some 64-bit platforms (see ChangeLog
+ for details).
+
+ - A new demo program `ftdiff' has been added to compare TrueType
+ hinting, FreeType's auto hinting, and rendering without hinting
+ in three columns.
+
+
+======================================================================
+
+CHANGES BETWEEN 2.3.2 and 2.3.1
+
+ I. IMPORTANT BUG FIXES
+
+ - FreeType returned incorrect kerning information from TrueType
+ fonts when the bytecode interpreter was enabled. This happened
+ due to a typo introduced in version 2.3.0.
+
+ - Negative kerning values from PFM files are now reported
+ correctly (they were read as 16-bit unsigned values from the
+ file).
+
+ - Fixed a small memory leak when `FT_Init_FreeType' failed for
+ some reason.
+
+ - The Postscript hinter placed and sized very thin and ghost stems
+ incorrectly.
+
+ - The TrueType bytecode interpreter has been fixed to get rid of
+ most of the rare differences seen in comparison to the Windows
+ font loader.
+
+
+ II. IMPORTANT CHANGES
+
+ - The auto-hinter now better deals with serifs and corner cases
+ (e.g., glyph '9' in Arial at 9pt, 96dpi). It also improves
+ spacing adjustments and doesn't change widths for non-spacing
+ glyphs.
+
+ - Many Mac-specific functions are deprecated (but still
+ available); modern replacements have been provided for them.
+ See the documentation in file `ftmac.h'.
+
+
+======================================================================
+
+CHANGES BETWEEN 2.3.1 and 2.3.0
+
+ I. IMPORTANT BUG FIXES
+
+ - The TrueType interpreter sometimes returned incorrect horizontal
+ metrics due to a bug in the handling of the SHZ instruction.
+
+ - A typo in a security check introduced after version 2.2.1
+ prevented FreeType to render some glyphs in CFF fonts.
+
+
+======================================================================
+
+CHANGES BETWEEN 2.3.0 and 2.2.1
+
+ I. IMPORTANT BUG FIXES
+
+ - The PCF font loader is now much more robust while loading
+ malformed font files.
+
+ - Various memory leaks have been found and fixed.
+
+ - The TrueType name loader now deals properly with some fonts that
+ encode their names in UTF-16 (the specification was vague, and
+ the code incorrectly assumed UCS-4).
+
+ - Fixed the TrueType bytecode loader to deal properly with subtle
+ monochrome/gray issues when scaling the CVT. Some fonts
+ exhibited bad rendering artifacts otherwise.
+
+ - `FT_GlyphSlot_Embolden' now supports vertical layouts correctly
+ (it mangled the vertical advance height).
+
+ - Fixed byte endian issues of `ftmac.c' to support Mac OS X on
+ i386.
+
+ - The PFR font loader no longer erroneously tags font files
+ without any outlines as FT_FACE_FLAG_SCALABLE.
+
+
+ II. NEW API FUNCTIONS
+
+ - `FT_Library_SetLcdFilter' allows you to select a special filter
+ to be applied to the bitmaps generated by `FT_Render_Glyph' if
+ one of the FT_RENDER_MODE_LCD and FT_RENDER_MODE_LCD_V modes has
+ been selected. This filter is used to reduce color fringes;
+ several settings are available through the FT_LCD_FILTER_XXX
+ enumeration.
+
+ Its declaration and documentation can be found in file
+ `include/freetype/ftlcdfil.h' (to be accessed with macro
+ FT_LCD_FILTER_H).
+
+ *IMPORTANT*: This function returns an error
+ (FT_Err_Unimplemented_Feature) in default builds of the library
+ for patent reasons. See below.
+
+ - `FT_Get_Gasp' allows you to query the flags of the TrueType
+ `gasp' table for a given character pixel size. This is useful
+ to duplicate the text rendering of MS Windows when the native
+ bytecode interpreter is enabled (which isn't the default for
+ other patent reasons).
+
+ Its declaration and documentation can be found in file
+ `include/freetype/ftgasp.h' (to be accessed with macro
+ FT_GASP_H).
+
+
+ III. IMPORTANT CHANGES
+
+ - The auto-hinter has been tuned a lot to improve its results with
+ serif fonts, resulting in much better font rendering of many web
+ pages.
+
+ - The unpatented hinter is now part of the default build of the
+ library; we have added code to automatically support `tricky'
+ fonts that need it.
+
+ This means that FreeType should `just work' with certain Asian
+ fonts, like MingLiU, which cannot properly be loaded without a
+ bytecode interpreter, but which fortunately do not use any of
+ the patented bytecode opcodes. We detect these fonts by name,
+ so please report any font file that doesn't seem to work with
+ FreeType, and we shall do what we can to support it in a next
+ release.
+
+ Note that the API hasn't changed, so you can still force
+ unpatented hinting with a special parameter to `FT_Open_Face' as
+ well. This might be useful in same cases; for example, a PDF
+ reader might present a user option to activate it to deal with
+ certain `tricky' embedded fonts which cannot be clearly
+ identified.
+
+ If you are a developer for embedded systems, you might want to
+ *disable* the feature to save code space by undefining
+ TT_CONFIG_OPTION_UNPATENTED_HINTING in file `ftoption.h'.
+
+ - LCD-optimized rendering is now *disabled* in all default builds
+ of the library, mainly due to patent issues. For more
+ information see:
+
+ http://lists.gnu.org/archive/html/freetype/2006-09/msg00064.html
+
+ A new configuration macro FT_CONFIG_OPTION_SUBPIXEL_RENDERING
+ has been introduced in `ftoption.h'; manually define it in this
+ file if you want to re-enable the feature.
+
+ The change only affects the implementation, not the FreeType
+ API. This means that clients don't need to be modified, because
+ the library still generates LCD decimated bitmaps, but with the
+ added constraint that R=G=B on each triplet.
+
+ The displayed result should be equal to normal anti-aliased
+ rendering.
+
+ Additionally, if FT_CONFIG_OPTION_SUBPIXEL_RENDERING is not
+ defined, the new `FT_Library_SetLcdFilter' function returns the
+ FT_Err_Unimplemented_Feature error code.
+
+ - Some computation bugs in the TrueType bytecode interpreter were
+ found, which allow us to get rid of very subtle and rare
+ differences we had experienced with the Windows renderer.
+
+ - It is now possible to cross-compile the library easily. See the
+ file `docs/INSTALL.CROSS' for details.
+
+ - The file `src/base/ftmac.c' now contains code for Mac OS X only;
+ its deprecated function `FT_GetFile_From_Mac_Font_Name' always
+ returns an error even if the QuickDraw framework is available.
+ The previous version has been moved to `builds/mac/ftmac.c'.
+
+ Selecting configure option `--with-quickdraw-carbon' makes the
+ build process use the original `ftmac.c' file instead of the Mac
+ OS X-only version.
+
+
+ IV. MISCELLANEOUS
+
+ - Various performance and memory footprint optimizations have been
+ performed on the TrueType and CFF font loaders, sometimes with
+ very drastic benefits (e.g., the TrueType loader is now about
+ 25% faster; FreeType should use less heap memory under nearly
+ all conditions).
+
+ - The anti-aliased rasterizer has been optimized and is now 15% to
+ 25% percent faster than in previous versions, depending on
+ content.
+
+ - The Type 1 loader has been improved; as an example, it now skips
+ top-level dictionaries properly.
+
+ - Better support for Mac fonts on POSIX systems, plus compilation
+ fixes for Mac OS X on ppc64 where `ftmac.c' cannot be built.
+
+ - Configuration without `--with-old-mac-fonts' does not include
+ `ftmac.c' (this was the behaviour in FreeType version 2.1.10).
+
+ - The TrueTypeGX validator (gxvalid) checks the order of glyph IDs
+ in the kern table.
+
+
+======================================================================
+
+CHANGES BETWEEN 2.2.1 and 2.2
+
+ I. IMPORTANT BUG FIXES
+
+ - Various integer overflows have been fixed.
+
+ - PFB fonts with MacOS resource fork weren't handled correctly on
+ non-MacOS platforms.
+
+
+======================================================================
+
+CHANGES BETWEEN 2.2 and 2.1.10
+
+(not released officially)
+
+ I. IMPORTANT BUG FIXES
+
+ - Vertical metrics for SFNT fonts were incorrect sometimes.
+
+ - The FT_HAS_KERNING macro always returned 0.
+
+ - CFF OpenType fonts didn't return correct vertical metrics for
+ glyphs with outlines.
+
+ - If FreeType was compiled without hinters, all font formats based
+ on PS outlines weren't scaled correctly.
+
+
+ II. IMPORTANT CHANGES
+
+ - Version 2.2 no longer exposes its internals, this is, the header
+ files located in the `include/freetype/internal' directory of
+ the source package are not copied anymore by the `make install'
+ command. Consequently, a number of rogue clients which directly
+ access FreeType's internal functions and structures won't
+ compile without modification.
+
+ We provide patches for most of those rogue clients. See the
+ following page for more information:
+
+ http://www.freetype.org/freetype2/patches/rogue-patches.html
+
+ Note that, as a convenience to our Unix desktop users, version
+ 2.2 is *binary* compatible with FreeType 2.1.7, which means that
+ installing this release on an existing distribution shall not
+ break any working desktop.
+
+ - FreeType's build mechanism has been redesigned. With GNU make
+ it is now sufficient in most cases to edit two files:
+ `modules.cfg', to select the library components, and the
+ configuration file `include/freetype/config/ftoption.h' (which
+ can be copied to the objects directory). Removing unused module
+ directories to prevent its compilation and editing
+ `include/freetype/config/ftmodule.h' is no longer necessary.
+
+ - The LIGHT hinting algorithm produces more pleasant results.
+ Also, using the FT_LOAD_TARGET_LIGHT flags within FT_Load_Glyph
+ always forces auto-hinting, as a special exception. This allows
+ you to experiment with it even if you have enabled the TrueType
+ bytecode interpreter in your build.
+
+ - The auto hinter now employs a new algorithm for CJK fonts, based
+ on Akito Hirai's patch. Note that this only works for fonts
+ with a Unicode charmap at the moment.
+
+ - The following callback function types have changed slightly (by
+ adding the `const' keyword where appropriate):
+
+ FT_Outline_MoveToFunc
+ FT_Outline_LineToFunc
+ FT_Outline_ConicToFunc
+ FT_Outline_CubicToFunc
+ FT_SpanFunc
+ FT_Raster_RenderFunc
+
+ FT_Glyph_TransformFunc
+ FT_Renderer_RenderFunc
+ FT_Renderer_TransformFunc
+
+ Note that this doesn't affect binary backward compatibility.
+
+ - On MacOS, new APIs have been added as replacements for legacy
+ APIs: `FT_New_Face_From_FSRef' for `FT_New_Face_From_FSSpec',
+ and `FT_GetFile_From_Mac_ATS_Name' for
+ `FT_GetFile_From_Mac_Name'. Legacy APIs are still available, if
+ FreeType is built without disabling them.
+
+ - A new API `FT_Select_Size' has been added to select a bitmap
+ strike by its index. Code using other functions to select
+ bitmap strikes should be updated to use this function.
+
+ - A new API `FT_Get_SubGlyph_Info' has been added to retrieve
+ subglyph data. This can be used by rogue clients which used to
+ access the internal headers to get the corresponding data.
+
+ - In 2.1.10, the behaviour of `FT_Set_Pixel_Sizes' was changed for
+ BDF/PCF fonts, and only for them. This causes inconsistency.
+ In this release, we undo the change. The intent of the change
+ in 2.1.10 is to allow size selection through real dimensions,
+ which can now be done through `FT_Request_Size'.
+
+ - Some security issues were discovered and fixed in the CFF and
+ Type 1 loader, causing crashes of FreeType by malformed font
+ files.
+
+
+ III. MISCELLANEOUS
+
+ - The documentation for FT_LOAD_TARGET_XXX and FT_RENDER_MODE_XXX
+ values now better reflects its usage and differences: One set is
+ used to specify the hinting algorithm, the other to specify the
+ pixel rendering mode.
+
+ - `FT_New_Face' and `FT_New_Face_From_FSSpec' in ftmac.c have been
+ changed to count supported scalable faces (sfnt, LWFN) only, and
+ to return the number of available faces via face->num_faces.
+ Unsupported bitmap faces (fbit, NFNT) are ignored.
+
+ - builds/unix/configure has been improved for MacOS X. It now
+ automatically checks available functions in Carbon library, and
+ prepare to use newest functions by default. Options to specify
+ the dependencies of each Carbon APIs (FSSpec, FSRef, old/new
+ QuickDraw, ATS) are available too. By manual disabling of all
+ QuickDraw functionality, FreeType can be built without
+ `deprecated function' warnings on MacOS 10.4.x, but
+ FT_GetFile_Mac_Name in ftmac.c then is changed to a dummy
+ function, and returns an `unimplemented' error. For details see
+ builds/mac/README.
+
+ - SFNT cmap handling has been improved, mainly to run much faster
+ with CJK fonts.
+
+ - A new function `FT_Get_TrueType_Engine_Type (declared in
+ `FT_MODULE_H') is provided to determine the status of the
+ TrueType bytecode interpreter compiled into the library
+ (patented, unpatented, unimplemented).
+
+ - Vertical metrics of glyphs are synthesized if the font does not
+ provide such information. You can tell whether the metrics are
+ synthesized or not by checking the FT_FACE_FLAG_VERTICAL flag of
+ the face.
+
+ - The demo programs `ftview' and `ftstring' have been rewritten
+ for better readability. `ftview' has a new switch `-p' to test
+ FT_New_Memory_Face (instead of FT_New_Face).
+
+ - FreeType now honours bit 1 in the `head' table of TrueType fonts
+ (meaning `left sidebearing point at x=0'). This helps with some
+ buggy fonts.
+
+ - Rudimentary support for Adobe's new `SING Glyphlet' format. See
+
+ http://www.adobe.com/products/indesign/sing_gaiji.html
+
+ for more information.
+
+ - The `ftdump' program from the `ft2demos' bundle now shows some
+ information about charmaps. It also supports a new switch `-v'
+ to increase verbosity.
+
+ - Better AFM support. This includes track kerning support.
+
+
+======================================================================
+
+CHANGES BETWEEN 2.1.10 and 2.1.9
+
+ I. IMPORTANT BUG FIXES
+
+ - The size comparison for BDF and PCF files could fail sometimes.
+
+ - Some CFF files were still not loaded correctly. Patch from
+ Derek Noonburg.
+
+ - The stroker still had some serious bugs.
+
+ - Boris Letocha fixed a bug in the TrueType interpreter: The
+ NPUSHW instruction wasn't skipped correctly in IF clauses. Some
+ fonts like `Helvetica 75 Bold' failed.
+
+ - Another serious bug in handling TrueType hints caused many
+ distortions. It has been introduced in version 2.1.8, and it is
+ highly recommended to upgrade.
+
+ - FreeType didn't properly parse empty Type 1 glyphs.
+
+ - An unbound dynamic buffer growth was fixed in the PFR loader.
+
+ - Several bugs have been fixed in the cache sub-system.
+
+ - FreeType behaved incorrectly when resizing two distinct but very
+ close character pixel sizes through `FT_Set_Char_Size' (Savannah
+ bug #12263).
+
+ - The auto-hinter didn't work properly for fonts without a Unicode
+ charmap -- it even refused to load the glyphs.
+
+
+ II. IMPORTANT CHANGES
+
+ - Many fixes have been applied to drastically reduce the amount of
+ heap memory used by FreeType, especially when using
+ memory-mapped font files (which is the default on Unix systems
+ which support them).
+
+ - The auto-hinter has been replaced with a new module, called the
+ `auto-fitter'. It consumes less memory than its predecessor,
+ and it is prepared to support non-latin scripts better in next
+ releases.
+
+ - George Williams contributed code to read kerning data from PFM
+ files.
+
+ - FreeType now uses the TT_NAME_ID_PREFERRED_FAMILY and
+ TT_NAME_ID_PREFERRED_SUBFAMILY strings (if available) for
+ setting family and style in SFNT fonts (patch from Kornfeld
+ Eliyahu Peter).
+
+ - A new API `FT_Sfnt_Table_Info' (in FT_TRUETYPE_TABLES_H) has
+ been added to retrieve name and size information of SFNT tables.
+
+ - A new API `FT_OpenType_Validate' (in FT_OPENTYPE_VALIDATE_H) has
+ been added to validate OpenType tables (BASE, GDEF, GPOS, GSUB,
+ JSTF). After validation it is no longer necessary to check
+ for errors in those tables while accessing them.
+
+ Note that this module might be moved to another library in the
+ future to avoid a tight dependency between FreeType and the
+ OpenType specification.
+
+ - A new API in FT_BITMAP_H (`FT_Bitmap_New', `FT_Bitmap_Convert',
+ `FT_Bitmap_Copy', `FT_Bitmap_Embolden', `FT_Bitmap_Done') has
+ been added. Its use is to convert an FT_Bitmap structure in
+ 1bpp, 2bpp, 4bpp, or 8bpp format into another 8bpp FT_Bitmap,
+ probably using a different pitch, and to further manipulate it.
+
+ - A new API `FT_Outline_Embolden' (in FT_OUTLINE_H) gives finer
+ control how outlines are embolded.
+
+ - `FT_GlyphSlot_Embolden' (in FT_SYNTHESIS_H) now handles bitmaps
+ also (code contributed by Chia I Wu). Note that this function
+ is still experimental and may be replaced with a better API.
+
+ - The method how BDF and PCF bitmap fonts are accessed has been
+ refined. Formerly, FT_Set_Pixel_Sizes and FT_Set_Char_Size
+ were synonyms in FreeType's BDF and PCF interface. This has
+ changed now. FT_Set_Pixel_Sizes should be used to select the
+ actual font dimensions (the `strike', which is the sum of the
+ `FONT_ASCENT' and `FONT_DESCENT' properties), while
+ FT_Set_Char_Size selects the `nominal' size (the `PIXELSIZE'
+ property). In both functions, the width parameter is ignored.
+
+
+ III. MISCELLANEOUS
+
+ - The BDF driver no longer converts all returned bitmaps with a
+ depth of 2bpp or 4bpp to a depth of 8bpp. The documentation has
+ not mentioned this explicitly, but implementors might have
+ relied on this after looking into the source files.
+
+ - A new option `--ftversion' has been added to freetype-config to
+ return the FreeType version.
+
+ - The memory debugger has been updated to dump allocation
+ statistics on all allocation sources in the library. This is
+ useful to spot greedy allocations when loading and processing
+ fonts.
+
+ - We removed a huge array of constant pointers to constant strings
+ in the `psnames' module. The problem was that compilations in
+ PIC mode (i.e., when generating a Unix shared object/dll) put
+ the array into the non-shared writable section of the library
+ since absolute pointers are not relocatable by nature.
+
+ This reduces the memory consumption by approximately 16KByte per
+ process linked to FreeType. We now also store the array in a
+ compressed form (as a trie) which saves about 20KByte of code as
+ well.
+
+ - Kirill Smelkov provided patches to make src/raster/ftraster.c
+ compile stand-alone again.
+
+
+======================================================================
+
+CHANGES BETWEEN 2.1.9 and 2.1.8
+
+ I. IMPORTANT BUG FIXES
+
+ - The function `FT_Get_CharMap_Index' was only declared, without
+ any real code. For consistency, it has been renamed to
+ `FT_Get_Charmap_Index'. (This function is needed to implement
+ cmap caches.)
+
+ - `FT_Outline_Get_BBox' sometimes returned incorrect values for
+ conic outlines (e.g., for TrueType fonts).
+
+ - Handling of `bhed' table has been fixed.
+
+ - The TrueType driver with enabled byte code interpreter sometimes
+ returned artifacts due to incorrect rounding. This bug has been
+ introduced after version 2.1.4.
+
+ - The BDF driver dropped the last glyph in the font.
+
+ - The BDF driver now uses the DEFAULT_CHAR property (if available)
+ to select a glyph shape for the undefined glyph.
+
+ - The stroker failed for closed outlines and single points.
+
+
+ II. IMPORTANT CHANGES
+
+ - George Williams contributed code to handle Apple's font
+ distortion technology found in GX fonts (`avar', `cvar', `fvar',
+ and `gvar' tables; the Multiple Masters API has been slightly
+ extended to cope with the new functionality).
+
+ - The `FT_GlyphSlotRec' structure has been extended: The elements
+ `lsb_delta' and `rsb_delta' give the difference between hinted
+ and unhinted left and right side bearings if autohinting is
+ active. Using those values can improve the inter-letter spacing
+ considerably. See the documentation of `FT_GlyphSlotRec' and
+ the `ftstring' demo program how to use it.
+
+ - Loading TrueType and Type 1 fonts has been made much faster.
+
+ - The stroker is no longer experimental (but the cache subsystem
+ still is).
+
+
+ III. MISCELLANEOUS
+
+ - A new documentation file `formats.txt' describes various font
+ formats supported (and not supported) by FreeType.
+
+
+======================================================================
+
+CHANGES BETWEEN 2.1.8 and 2.1.7
+
+ I. IMPORTANT BUG FIXES
+
+ - The native TrueType hinter contained some bugs which prevented
+ some fonts to be rendered correctly, most notably Legendum.otf.
+
+ - The PostScript hinter now produces improved results.
+
+ - The linear advance width and height values were incorrectly
+ rounded, making them virtually unusable if not loaded with
+ FT_LOAD_LINEAR_DESIGN.
+
+ - Indexing CID-keyed CFF fonts is now working: The glyph index is
+ correctly treated as a CID, similar to FreeType's CID driver
+ module. Note that CID CMap support is still missing.
+
+ - The FT_FACE_FLAGS_GLYPH_NAMES flag is now set correctly for all
+ font formats.
+
+ - Some subsetted Type 1 fonts weren't parsed correctly. This bug
+ has been introduced in 2.1.7. In summary, the Type 1 parser has
+ become more robust.
+
+ - Non-decimal numbers weren't parsed correctly in PS fonts.
+
+ - The WinFNT driver now correctly reports FT_ENCODING_NONE for all
+ but one encoding. Use the new FT_WinFNT_ID_XXX values together
+ with `FT_Get_WinFNT_Header' to get the WinFNT charset ID.
+
+ - The descender metrics (face->size->metrics.descender) for WinFNT
+ bitmap fonts had the wrong sign.
+
+ - The (emulated) `seac' support for CFF fonts was broken.
+
+ - The `flex' operator didn't work for CFF fonts.
+
+ - PS glyphs which use the `hintmask' operator haven't been
+ rendered correctly in some cases.
+
+ - Metrics for BDF and PCF bitmap font formats have been fixed.
+
+ - Autohinting is now disabled for glyphs which are vertically
+ distorted or mirrored (using a transformation matrix). This
+ fixes a bug which produced zero-height glyphs.
+
+ - The `freetype-config' script now handles --prefix and
+ --exec-prefix correctly; it also returns the proper --rpath (or
+ -R) value if FreeType has been built as a shared library.
+
+
+ II. IMPORTANT CHANGES
+
+ - Both PCF and BDF drivers now handle the SETWIDTH_NAME and
+ ADD_STYLE_NAME properties. Values are appended to
+ face->style_name; example: `Bold SemiCondensed'.
+
+ - The PCF driver now handles bitmap fonts compressed with the LZW
+ algorithm (extension .pcf.Z, compressed with `compress').
+
+ - A new API function `FT_Get_CMap_Language_ID' (declared in
+ `tttables.h') is available to get the language ID of a
+ TrueType/SFNT cmap.
+
+ - The hexadecimal format of data after the `StartData' command in
+ CID-keyed Type 1 fonts is now supported. While this can't occur
+ in file-based fonts, it can happen in document-embedded
+ resources of PostScript documents.
+
+ - Embedded bitmaps in SFNT-based CFF fonts are now supported.
+
+ - A simple API is now available to control FreeType's tracing
+ mechanism if compiled with FT_DEBUG_LEVEL_TRACE. See the file
+ `ftdebug.h' for more details.
+
+ - YAMATO Masatake contributed improved handling of MacOS resource
+ forks on non-MacOS platforms (for example, Linux can mount MacOS
+ file systems).
+
+ - Support for MacOS has been improved; there is now a new function
+ `FT_New_Face_From_FSSpec' similar to `FT_New_Face' except that
+ it accepts an FSSpec instead of a path.
+
+ - The cache sub-system has been rewritten.
+
+ - There is now support for deinstallation of faces.
+
+ - A new API function `FTC_Manager_RemoveFaceID' has been added
+ to delete all `idle' nodes that correspond to a given
+ FTC_FaceID. All `locked' nodes (i.e., those with a reference
+ count > 0), will be modified to prevent them from appearing in
+ further lookups (they will be cleaned normally when their
+ reference count reaches 0).
+
+ - There is now support for point scaling (i.e., providing
+ character sizes in points + dpis, instead of pixels).
+
+ - Three abstract cache classes are now available:
+
+ FTC_GCache: Used to store one glyph item per cache node,
+ with the ability to group common attributes into
+ `families'. This replaces the old
+ FTC_GlyphCache class.
+
+ FTC_ICache: Used to store one FT_Glyph per cache node. This
+ extends FTC_GCache. Family definition, family
+ comparison, and glyph loading are however left
+ to sub-classes.
+
+ FTC_SCache: Used to store up to 16 small bitmaps per cache
+ node. This extends FTC_GCache. Family
+ definition, family comparison and glyph loading
+ are however left to sub-classes.
+
+ - The file `src/cache/ftcbasic.c' implements:
+
+ FTC_ImageCache: Extends FTC_ICache; implements family
+ definitions and glyph loading similar to the
+ old API.
+
+ FTC_SBitCache: Extends FTC_SCache, implements family
+ definitions and glyph loading similar to the
+ old API
+
+ Client applications should be able to extend FTC_GCache,
+ FTC_ICache, or FTC_SCache much more easily (i.e., less code to
+ write, and less callbacks). For example, one could envision
+ caches that are capable of storing transformed (obliqued),
+ stroked, emboldened, or colored glyph images. Use
+ `ftcbasic.c' as an example.
+
+ - All public APIs are now in `include/freetype/ftcache.h', (to
+ be accessed as `FT_CACHE_H'). The contents of
+ `include/freetype/cache/' is only needed by applications that
+ wish to implement their own caches.
+
+ - There were some major performance improvements through the use
+ of various programming tricks. Cache hits are up to 70%
+ faster than in the old code.
+
+ - The FTC_CMapCache has been simplified. Charmaps can only be
+ accessed by index right now. There is also a new API named
+ `FT_Charmap_GetIndex' for this purpose.
+
+ - The demo programs have been updated to the new code. The
+ previous versions will not work with the current one.
+
+ - Using an invalid face index in FT_Open_Face and friends now
+ causes an error even if the font contains a single face only.
+
+
+ III. MISCELLANEOUS
+
+ - Wolfgang Domröse contributed support files for building FreeType
+ on the Atari using the PureC compiler. Note that the Atari is a
+ 16bit platform.
+
+ - Vitaliy Pasternak contributed project files for VS.NET 2003.
+
+
+======================================================================
+
+CHANGES BETWEEN 2.1.7 and 2.1.6
+
+ I. IMPORTANT BUG FIXES
+
+ - Updated to newest libtool version, fixing build problems on
+ various platforms.
+
+ - On Unix platforms, `make install' didn't copy the correct
+ `ftconfig.h' file.
+
+ Note that version 2.1.7 contains the same library C source code as
+ version 2.1.6.
+
+
+======================================================================
+
+CHANGES BETWEEN 2.1.6 and 2.1.5
+
+ I. IMPORTANT BUG FIXES
+
+ - The PFR font driver didn't load kerning tables correctly, and
+ the functions in FT_PFR_H didn't work at all.
+
+ - Type 1 font files in binary format (PFB) with an end-of-file
+ indicator weren't accepted by the FreeType engine.
+
+ - Fonts which contain /PaintType and /StrokeWidth no longer cause
+ a segfault. This bug has been introduced in version 2.1.5.
+
+ - Fonts loaded with FT_LOAD_RENDER no longer cause strange
+ results. This bug has been introduced in version 2.1.5.
+
+ - Some Windows (bitmap) FNT/FON files couldn't be handled
+ correctly.
+
+
+ II. IMPORTANT CHANGES
+
+ - The internal module API has been heavily changed in favor of
+ massive simplifications within the font engine. This also means
+ that authors of third-party modules must adapt their code to the
+ new scheme.
+
+ NOTE: THE NEW SCHEME IS NOT COMPLETED YET. PLEASE WAIT UNTIL A
+ FINAL ANNOUNCEMENT!
+
+ - The PostScript parser has been enhanced to handle comments and
+ strings correctly. Additionally, more syntax forms are
+ recognized.
+
+ - Added the optional unpatented hinting system for TrueType. It
+ allows typefaces which need hinting to produce correct glyph
+ forms (e.g., Chinese typefaces from Dynalab) to work acceptably
+ without infringing Apple patents. This system is compiled only
+ if TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING is defined in
+ ftoption.h (activated by default).
+
+
+ III. MISCELLANEOUS
+
+ - There is now a guard in the public header files to protect
+ against inclusion of freetype.h from FreeType 1.
+
+ - Direct inclusion of freetype.h and other public header files no
+ longer works. You have to use the documented scheme
+
+ #include <ft2build.h>
+ #include FT_FREETYPE_H
+
+ to load freetype.h with a symbolic name. This protects against
+ renaming of public header files (which shouldn't happen but
+ actually has, avoiding two public header files with the same
+ name).
+
+
+======================================================================
+
+CHANGES BETWEEN 2.1.5 and 2.1.4
+
+ I. IMPORTANT BUG FIXES
+
+ - Parsing the /CIDFontName field now removes the leading slash to
+ be in sync with other font drivers.
+
+ - gzip support was buggy. Some fonts could not be read.
+
+ - Fonts which have nested subglyphs more than one level deep no
+ longer cause a segfault.
+
+ - Creation of synthetic cmaps for fonts in CFF format was broken
+ partially.
+
+ - Numeric font dictionary entries for synthetic fonts are no
+ longer overwritten.
+
+ - The font matrix wasn't applied to the advance width for Type1,
+ CID, and CFF fonts. This caused problems when loading certain
+ synthetic Type 1 fonts like `Helvetica Narrow'.
+
+ - The test for the charset registry in BDF and PCF fonts is now
+ case-insensitive.
+
+ - FT_Vector_Rotate sometimes returned strange values due to
+ rounding errors.
+
+ - The PCF driver now returns the correct number of glyphs
+ (including an artificial `notdef' glyph at index 0).
+
+ - FreeType now supports buggy CMaps which are contained in many
+ CJK fonts from Dynalab.
+
+ - Opening an invalid font on a Mac caused a segfault due to
+ double-freeing memory.
+
+ - BDF fonts with more than 32768 glyphs weren't supported
+ properly.
+
+
+ II. IMPORTANT CHANGES
+
+ - Accessing bitmap font formats has been synchronized. To do that
+ the FT_Bitmap_Size structure has been extended to contain new
+ fields `size', `x_ppem', and `y_ppem'.
+
+ - The FNT driver now returns multiple faces, not multiple strikes.
+
+ - The `psnames' module has been updated to the Adobe Glyph List
+ version 2.0.
+
+ - The `psnames' module now understands `uXXXX[X[X]]' glyph names.
+
+ - The algorithm for guessing the font style has been improved.
+
+ - For fonts in SFNT format, root->height is no longer increased if
+ the line gap is zero. There exist fonts (containing e.g. form
+ drawing characters) which intentionally have a zero line gap
+ value.
+
+ - ft_glyph_bbox_xxx flags are now deprecated in favour of
+ FT_GLYPH_BBOX_XXX.
+
+ - ft_module_xxx flags are now deprecated in favour of
+ FT_MODULE_XXX.
+
+ - FT_ENCODING_MS_{SJIS,GB2312,BIG5,WANSUNG,JOHAB} are now
+ deprecated in favour of
+ FT_ENCODING_{SJIS,GB2312,GIB5,WANSONG,JOHAB} -- those encodings
+ are not specific to Microsoft.
+
+
+ III. MISCELLANEOUS
+
+ - The autohinter has been further improved; for example, `m'
+ glyphs now retain its vertical symmetry.
+
+ - Partial support of Mac fonts on non-Mac platforms.
+
+ - `make refdoc' (after first `make') builds the HTML
+ documentation. You need Python for this.
+
+ - The make build system should now work more reliably on DOS-like
+ platforms.
+
+ - Support for EMX gcc and Watson C/C++ compilers on MS-DOS has
+ been added.
+
+ - Better VMS build support.
+
+ - Support for the pkg-config package by providing a `freetype.pc'
+ file.
+
+ - New configure option --with-old-mac-fonts for Darwin.
+
+ - Some source files have been renamed (mainly to fit into the 8.3
+ naming scheme).
+
+
+======================================================================
+
+CHANGES BETWEEN 2.1.4 and 2.1.3
+
+ I. IMPORTANT BUG FIXES
+
+ - Updated to newest libtool version, fixing build problems on
+ various platforms.
+
+ - A fix in the Gzip stream reader: It couldn't read certain .gz
+ files properly due to a small typo. In certain cases, FreeType
+ could also loop endlessly when trying to load tiny gzipped
+ files.
+
+ - The configure script now tries to use the system-wide zlib when
+ it finds one (instead of the copy found in src/gzip). And
+ `freetype-config' has been updated to return relevant flags in
+ this case when invoked with `--libs' (e.g. `-lzlib').
+
+ - Certain fonts couldn't be loaded by 2.1.3 because they lacked a
+ Unicode charmap (e.g. SYMBOL.TTF). FreeType erroneously
+ rejected them.
+
+ - The CFF loader was modified to accept fonts which only contain a
+ subset of their reference charset. This prevented the correct
+ use of PDF-embedded fonts.
+
+ - The logic to detect Unicode charmaps has been modified. This is
+ required to support fonts which include both 16-bit and 32-bit
+ charmaps (like very recent asian ones) using the new 10 and 12
+ SFNT formats.
+
+ - The TrueType loader now limits the depth of composite glyphs.
+ This is necessary to prevent broken fonts to break the engine by
+ blowing the stack with recursive glyph definitions.
+
+ - The CMap cache is now capable of managing UCS-4 character codes
+ that are mapped through extended charmaps in recent
+ TrueType/OpenType fonts.
+
+ - The cache sub-system now properly manages out-of-memory
+ conditions instead of blindly reporting them to the caller.
+ This means that it will try to empty the cache before restarting
+ its allocations to see if that can help.
+
+ - The PFR driver didn't return the list of available embedded
+ bitmaps properly.
+
+ - There was a nasty memory leak when using embedded bitmaps in
+ certain font formats.
+
+
+ II. IMPORTANT CHANGES
+
+ - David Chester contributed some enhancements to the auto-hinter
+ that significantly increase the quality of its output. The
+ Postscript hinter was also improved in several ways.
+
+ - The FT_RENDER_MODE_LIGHT render mode was implemented.
+
+ - A new API function called `FT_Get_BDF_Property' has been added
+ to FT_BDF_H to retrieve BDF properties from BDF _and_ PCF font
+ files. THIS IS STILL EXPERIMENTAL, since it hasn't been
+ properly tested yet.
+
+ - A Windows FNT specific API has been added, mostly to access font
+ headers. This is used by Wine.
+
+ - TrueType tables without an `hmtx' table are now tolerated when
+ an incremental interface is used. This happens for certain
+ Type42 fonts passed from Ghostscript to FreeType.
+
+ - The PFR font driver is now capable of returning the font family
+ and style names when they are available (instead of the sole
+ `FontID'). This is performed by parsing an *undocumented*
+ portion of the font file!
+
+
+ III. MISCELLANEOUS
+
+ - The path stroker in FT_STROKER_H has entered beta stage. It now
+ works very well, but its interface might change a bit in the
+ future. More on this in later releases.
+
+ - The documentation for FT_Size_Metrics didn't appear properly in
+ the API reference.
+
+ - The file docs/VERSION.DLL has been updated to explain versioning
+ with FreeType (i.e., comparing release/libtool/so numbers, and
+ how to use them in autoconf scripts).
+
+ - The installation documentation has been seriously revamped.
+ Everything is now in the `docs' directory.
+
+
+======================================================================
+
+CHANGES BETWEEN 2.1.3 and 2.1.2
+
+ I. IMPORTANT BUG FIXES
+
+ - FT_Vector_Transform had been incorrectly modified in 2.1.2,
+ resulting in incorrect transformations being applied (for
+ example, rotations were processed in opposite angles).
+
+ - The format 8 and 12 TrueType charmap enumeration routines have
+ been fixed (FT_Get_Next_Char returned invalid values).
+
+ - The PFR font driver returned incorrect advance widths if the
+ outline and metrics resolution defined in the font file were
+ different.
+
+ - FT_Glyph_To_Bitmap now returns successfully when called with an
+ FT_BitmapGlyph argument (it previously returned an error).
+
+ - A bug in the Type 1 loader that prevented valid font bounding
+ boxes to be loaded from multiple master fonts.
+
+ - The SFNT validation code has been rewritten. FreeType can now
+ load `broken' fonts that were usable on Windows, but not with
+ previous versions of the library.
+
+ - The computation of bearings in the BDF driver has been fixed.
+
+ - The Postscript hinter crashed when trying to hint certain glyphs
+ (more precisely, when trying to apply hints to an empty glyph
+ outline).
+
+ - The TrueType glyph loader now supports composites in `Apple
+ format' (they differ slightly from Microsoft/OpenType ones in
+ the way transformation offsets are computed).
+
+ - FreeType was very slow at opening certain asian CID/CFF fonts,
+ due to fixed increment in dynamic array re-allocations. This
+ has been changed to exponential behaviour to get acceptable
+ performance.
+
+
+
+ II. IMPORTANT CHANGES
+
+ - The PCF driver now supports gzip-compressed font files natively.
+ This means that you will be able to use all these bitmap fonts
+ that come with XFree86 with FreeType (and libXft/libXft2, by
+ extension).
+
+ - The automatic and postscript hinters have both been updated.
+ This results in a relatively important increase of rendering
+ quality since many nasty defaults have been suppressed. Please
+ visit the web page:
+
+ http://www.freetype.org/hinting/smooth-hinting.html
+
+ for additional details on this topic.
+
+ - The `load_flags' parameter of `FT_Load_Glyph' is now an FT_Int32
+ (instead of just being an FT_Int). This breaks source and
+ binary compatibility for 16bit systems only, while retaining
+ both of them for 32 and 64 bit ones.
+
+ Some new flags have been added consequently:
+
+ FT_LOAD_NO_AUTOHINT :: Disable the use of the auto-hinter
+ (but not native format hinters).
+
+ FT_LOAD_TARGET_NORMAL :: Hint and render for normal
+ anti-aliased displays.
+
+ FT_LOAD_TARGET_MONO :: Hint and render for 1-bit displays.
+
+ FT_LOAD_TARGET_LCD :: Hint and render for horizontal RGB or
+ BGR sub-pixel displays (like LCD
+ screens). THIS IS STILL
+ EXPERIMENTAL!
+
+ FT_LOAD_TARGET_LCD_V :: Same as FT_LOAD_TARGET_LCD, for
+ vertical sub-pixel displays (like
+ rotated LCD screens). THIS IS STILL
+ EXPERIMENTAL!
+
+ FT_LOAD_MONOCHROME is still supported, but only affects
+ rendering, not the hinting.
+
+ Note that the `ftview' demo program available in the `ft2demos'
+ package has been updated to support LCD-optimized display on
+ non-paletted displays (under Win32 and X11).
+
+ - The PFR driver now supports embedded bitmaps (all formats
+ supported), and returns correct kerning metrics for all glyphs.
+
+ - The TrueType charmap loader now supports certain `broken' fonts
+ that load under Windows without problems.
+
+ - The cache API has been slightly modified (it's still a beta!):
+
+ - The type FTC_ImageDesc has been removed; it is now replaced
+ by FTC_ImageTypeRec. Note that one of its fields is a
+ `load_flag' parameter for FT_Load_Glyph.
+
+ - The field `num_grays' of FT_SBitRec has been changed to
+ `max_grays' in order to fit within a single byte. Its
+ maximum value is thus 255 (instead of 256 as previously).
+
+
+ III. MISCELLANEOUS
+
+ - Added support for the DESTDIR variable during `make install'.
+ This simplifies packaging of FreeType.
+
+ - Included modified copies of the ZLib sources in `src/gzip' in
+ order to support gzip-compressed PCF fonts. We do not use the
+ system-provided zlib for now, though this is a probable
+ enhancement for future releases.
+
+ - The DocMaker tool used to generate the on-line API reference has
+ been completely rewritten. It is now located in
+ `src/tools/docmaker/docmaker.py'. Features:
+
+ - better cross-referenced output
+ - more polished output
+ - uses Python regular expressions (though it didn't speed the
+ program)
+ - much more modular structure, which allows for different
+ `backends' in order to generate HTML, XML, or whatever
+ format.
+
+ One can regenerate the API reference by calling:
+
+ python src/tools/docmaker/docmaker.py \
+ --prefix=ft2 \
+ --title=FreeType-2.1.3 \
+ --output=<outputdirectory>
+ include/freetype/*.h \
+ include/freetype/config/*.h \
+ include/freetype/cache/*.h
+
+ - A new, experimental, support for incremental font loading (i.e.,
+ loading of fonts where the glyphs are not in the font file
+ itself, but provided by an external component, like a Postscript
+ interpreter) has been added by Graham Asher. This is still work
+ in progress, however.
+
+ - A new, EXPERIMENTAL, path stroker has been added. It doesn't
+ suffer from severe rounding errors and treat bezier arcs
+ directly. Still work in progress (i.e. not part of the official
+ API). See the file <freetype/ftstroker.h> for some of the
+ details.
+
+ - The massive re-formatting of sources and internal re-design is
+ still under-way. Many internal functions, constants, and types
+ have been renamed.
+
+
+======================================================================
+
+CHANGES BETWEEN 2.1.2 and 2.1.1
+
+ I. IMPORTANT BUG FIXES
+
+ - Many font drivers didn't select a Unicode charmap by default
+ when a new face was opened (with the FT_CONFIG_OPTION_USE_CMAPS
+ options enabled), causing many applications to not be able to
+ display text correctly with the 2.1.x releases.
+
+ - The PFR driver had a bug in its composite loading code that
+ produces incorrectly placed accents with many fonts.
+
+ - The Type42 driver crashed sometimes due to a nasty bug.
+
+ - The Type 1 custom encoding charmap didn't handle the case where
+ the first glyph index wasn't 0.
+
+ - A serious typo in the TrueType composite loader produced
+ incorrectly placed glyphs in fonts like `Wingdings' and a few
+ others.
+
+
+ II. MISCELLANEOUS
+
+ - The Win32 Visual C++ project file has been updated to include
+ the PFR driver as well.
+
+ - `freetype.m4' is now installed by default by `make install' on
+ Unix systems.
+
+ - The function FT_Get_PS_Font_Info now works with CID and Type42
+ fonts as well.
+
+
+======================================================================
+
+CHANGES BETWEEN 2.1.1 and 2.1.0
+
+ I. IMPORTANT BUG FIXES
+
+ - The `version_info' returned by `freetype-config' in 2.1.0
+ returned an invalid value. It now returns 9:1:3 (2.0.9 returned
+ 9:0:3).
+
+ - Version 2.1.0 couldn't be linked against applications on Win32
+ and Amiga systems due to a new debug function that wasn't
+ properly propagated to the system-specific directory in
+ `builds'.
+
+ - Various MacOS and Mac OS X specific fixes.
+
+ - Fixed a bug in the TrueType charmap validation routines that
+ made version 2.1.0 too restrictive -- many popular fonts have
+ been rejected.
+
+ - There was still a very small difference between the monochrome
+ glyph bitmaps produced by FreeType 1.x and FreeType 2.x with the
+ bytecode interpreter enabled. This was caused by an invalid
+ flag setting in the TrueType glyph loader, making the rasterizer
+ change its drop-out control mode. Now the results should
+ _really_ be completely identical.
+
+ - The TrueType name table loader has been improved to support many
+ popular though buggy Asian fonts. It now ignores empty name
+ entries, invalid pointer offsets and a few other incorrect
+ subtleties. Moreover, name strings are now loaded on demand,
+ which reduces the memory load of many faces (e.g. the ARIAL.TTF
+ font file contains a 10kByte name table with 70 names).
+
+ - Fixed a bug in the Postscript hinter that prevented family blues
+ substitution to happen correctly.
+
+
+ II. NEW FEATURES
+
+ - Three new font drivers in this release:
+
+ * A BDF font driver, contributed by Franco Zappa Nardelli,
+ heavily modified by Werner Lemberg. It also supports
+ anti-aliased bitmaps (using a slightly extended BDF format).
+
+ * A Type42 font driver, contributed by Roberto Alameda. It is
+ still experimental but seems to work relatively well.
+
+ * A PFR font driver, contributed by David Turner himself. It
+ doesn't support PFR hinting -- note that BitStream has at
+ least two patents on this format!
+
+
+ III. MISCELLANEOUS
+
+ - The cache sub-system has been optimized in important ways.
+ Cache hits are now significantly faster. For example, using the
+ CMap cache is about twice faster than calling FT_Get_Char_Index
+ on most platforms. Similarly, using an SBit cache is about five
+ times faster than loading the bitmaps from a bitmap file, and
+ 300 to 500 times faster than generating them from a scalable
+ format.
+
+ Note that you should recompile your sources if you designed a
+ custom cache class for the FT2 Cache subsystem, since the
+ changes performed are source, but not binary, compatible.
+
+
+======================================================================
+
+CHANGES BETWEEN 2.1.0 and 2.0.9
+
+ I. IMPORTANT BUG FIXES
+
+ - The TrueType bytecode interpreter has been fixed to produce
+ _exactly_ the same output as FreeType 1.x. Previous differences
+ were due to slightly distinct fixed-point computation routines
+ used to perform dot products and vector length measurements.
+
+ It seems that native TrueType hinting is _extremely_ sensitive
+ to rounding errors. The required vector computation routines
+ have been optimized and placed within the `ttinterp.c' file.
+
+ - Fixed the parsing of accelerator tables in the PCF font driver.
+
+ - Fixed the Type1 glyph loader routine used to compute the font's
+ maximum advance width.
+
+
+ II. NEW FEATURES
+
+ - The `configure' script used on Unix systems has been modified to
+ check that GNU Make is being used to build the library.
+ Otherwise, it will display a message proposing to use the
+ GNUMAKE environment variable to name it.
+
+ The Unix-specific file README.UNX has been modified accordingly.
+
+
+ III. MISCELLANEOUS
+
+ - The FreeType License in `docs/FTL.TXT' has been updated to
+ include a proposed preferred disclaimer. If you are using
+ FreeType in your products, you are encouraged (but not mandated)
+ to use the following text in your documentation:
+
+ """
+ Portions of this software are copyright © 1996-2002 The
+ FreeType Project (www.freetype.org). All rights reserved.
+ """
+
+ - The default size of the render pool has been reduced to 16kByte.
+ This shouldn't result in any noticeable performance penalty,
+ unless you are using the engine as-is to render very large and
+ complex glyphs.
+
+ - The FreeType 2 redesign has begun. More information can be
+ found at this URL:
+
+ http://www.freetype.org/freetype2/redesign.html
+
+ The following internal changes have been performed within the
+ sources of this release:
+
+ - Many internal types have been renamed to increase
+ consistency. The following should be true, except for
+ public types:
+
+ * All structure types have a name ending in `Rec' (short
+ for `record').
+
+ * A pointer-to-structure type has the same name as the
+ structure, _without_ the `Rec' suffix.
+
+ Example:
+
+ typedef struct FooRec_
+ {
+ ...
+
+ } FooRec, *Foo;
+
+ - Many internal macros have been renamed to increase
+ consistency. The following should be true:
+
+ * All macros have a name beginning with `FT_'. This
+ required a few changes like
+
+ ALLOC => FT_ALLOC
+ FREE => FT_FREE
+ REALLOC => FT_REALLOC
+
+ * All macros are completely UPPERCASE. This required a
+ few changes like:
+
+ READ_Short => FT_READ_SHORT
+ NEXT_Short => FT_NEXT_SHORT
+ GET_ULongLE => FT_GET_ULONG_LE
+ MEM_Set => FT_MEM_SET
+ MEM_Copy => FT_MEM_COPY
+ etc.
+
+ * Whenever possible, all macro names follow the
+ FT_<OBJECT>_<METHOD> pattern. For example
+
+ ACCESS_Frame => FT_FRAME_ENTER
+ FORGET_Frame => FT_FRAME_EXIT
+ EXTRACT_Frame => FT_FRAME_EXTRACT
+ RELEASE_Frame => FT_FRAME_RELEASE
+
+ FILE_Pos => FT_STREAM_POS
+ FILE_Seek => FT_STREAM_SEEK
+ FILE_Read => FT_STREAM_READ
+ FILE_ReadAt => FT_STREAM_READ_AT
+ READ_Fields => FT_STREAM_READ_FIELDS
+
+ - Many internal functions have been renamed to follow the
+ FT_<Object>_<Method> pattern. For example:
+
+ FT_Seek_Stream => FT_Stream_Seek
+ FT_Read_Stream_At => FT_Stream_ReadAt
+ FT_Done_Stream => FT_Stream_Close
+ FT_New_Stream => FT_Stream_Open
+ FT_New_Memory_Stream => FT_Stream_OpenMemory
+ FT_Extract_Frame => FT_Stream_ExtractFrame
+
+ Note that method names do not contain `_'.
+
+ - The FT_ALLOC_ARRAY and FT_REALLOC_ARRAY have been replaced
+ with FT_NEW_ARRAY and FT_RENEW_ARRAY which do not take a
+ type as the fourth argument. Instead, the array element
+ type size is computed automatically from the type of the
+ target pointer used.
+
+ - A new object class, FT_CMap, has been introduced. These
+ internal objects are used to model character maps. This
+ eases the support of additional charmap types within the
+ engine.
+
+ - A new configuration file named `ftstdlib.h' has been added
+ to `include/freetype/config'. It is used to define aliases
+ for _every_ routine of the ISO C library that the font
+ engine uses. Each aliases has a `ft_' prefix
+ (e.g. `ft_strlen' is an alias for `strlen').
+
+ This is used to ease the porting of FreeType 2 to exotic
+ runtime environments where the ISO C Library isn't available
+ (e.g. XFree86 extension modules).
+
+ More details are available in the `ChangeLog' file.
+
+
+======================================================================
+
+CHANGES BETWEEN 2.0.9 and 2.0.8
+
+ I. IMPORTANT BUG FIXES
+
+ - Certain fonts like `foxjump.ttf' contain broken name tables with
+ invalid entries and wild offsets. This caused FreeType to crash
+ when trying to load them.
+
+ The SFNT `name' table loader has been fixed to be able to
+ support these strange fonts.
+
+ Moreover, the code in charge of processing this table has been
+ changed to always favour Windows-formatted entries over other
+ ones. Hence, a font that works on Windows but not on the Mac
+ will load cleanly in FreeType and report accurate values for
+ Family & PostScript names.
+
+ - The CID font driver has been fixed. It unfortunately returned a
+ Postscript Font name with a leading slash, as in
+ `/MunhwaGothic-Regular'.
+
+ - FreeType 2 should now compile fine on AIX 4.3.3 as a shared
+ library.
+
+ - A bug in the Postscript hinter has been found and fixed,
+ removing un-even stem widths at small pixel sizes (like 14-17).
+
+ This improves the quality of a certain number of Postscript
+ fonts.
+
+
+ II. NEW FEATURES
+
+ - A new function named `FT_Library_Version' has been added to
+ return the current library's major, minor, and patch version
+ numbers. This is important since the macros FREETYPE_MAJOR,
+ FREETYPE_MINOR, and FREETYPE_PATCH cannot be used when the
+ library is dynamically linked by a program.
+
+ - Two new APIs have been added: `FT_Get_First_Char' and
+ `FT_Get_Next_Char'.
+
+ Together, these can be used to iterate efficiently over the
+ currently selected charmap of a given face. Read the API
+ reference for more details.
+
+
+ III. MISCELLANEOUS
+
+ - The FreeType sources are under heavy internal re-factoring. As
+ a consequence, we have created a branch named `STABLE' on the
+ CVS to hold all future releases/fixes in the 2.0.x family.
+
+ The HEAD branch now contains the re-factored sources and
+ shouldn't be used for testing or packaging new releases. In
+ case you would like to access the 2.0.9 sources from our CVS
+ repository, use the tag `VER-2-0-9'.
+
+
+======================================================================
+
+CHANGES BETWEEN 2.0.8 and 2.0.7
+
+ I. IMPORTANT BUG FIXES
+
+ - There was a small but nasty bug in `freetype-config.in' which
+ caused the `freetype-config' script to fail on Unix.
+
+ This didn't prevent the installation of the library or even its
+ execution, but caused problems when trying to compile many Unix
+ packages that depend on it.
+
+ - Some TrueType or OpenType fonts embedded in PDF documents do not
+ have a 'cmap', 'post' and 'name' as is required by the
+ specification. FreeType no longer refuses to load such fonts.
+
+ - Various fixes to the PCF font driver.
+
+
+======================================================================
+
+CHANGES BETWEEN 2.0.7 and 2.0.6
+
+ I. IMPORTANT BUG FIXES
+
+ - Fixed two bugs in the Type 1 font driver. The first one
+ resulted in a memory leak in subtle cases. The other one caused
+ FreeType to crash when trying to load `.gsf' files (Ghostscript
+ so-called Postscript fonts).
+
+ (This made _many_ KDE applications crash on certain systems.
+ FreeType _is_ becoming a critical system component on Linux :-)
+
+ - Fixed a memory leak in the CFF font driver.
+
+ - Fixed a memory leak in the PCF font driver.
+
+ - Fixed the Visual C++ project file
+ `builds/win32/visualc/freetype.dsp' since it didn't include the
+ Postscript hinter component, causing errors at build time.
+
+ - Fixed a small rendering bug in the anti-aliased renderer that
+ only occurred when trying to draw thin (less than 1 pixel)
+ strokes.
+
+ - Fixed `builds/unix/freetype2.a4' which is used to generate a
+ valid `freetype2.m4' for use with autoconf.
+
+ - Fixed the OpenVMS Makefiles.
+
+
+ II. MISCELLANEOUS
+
+ - Added `configure' and `install' scripts to the top-level
+ directory. A GNU-style installation is thus now easily possible
+ with
+
+ ./configure <options>
+ make
+ make install
+
+
+======================================================================
+
+CHANGES BETWEEN 2.0.6 and 2.0.5
+
+ I. IMPORTANT BUG FIXES
+
+ - It wasn't possible to load embedded bitmaps when the auto-hinter
+ was used. This is now fixed.
+
+ - The TrueType font driver didn't load some composites properly
+ (the sub-glyphs were slightly shifted, and this was only
+ noticeable when using monochrome rendering).
+
+ - Various fixes to the auto-hinter. They merely improve the
+ output of sans-serif fonts. Note that there are still problems
+ with serifed fonts and composites (accented characters).
+
+ - All scalable font drivers erroneously returned un-fitted glyph
+ advances when hinting was requested. This created problems for
+ a number of layout applications. This is a very old bug that
+ got undetected mainly because most test/demo program perform
+ rounding explicitly or implicitly (through the cache).
+
+ - `FT_Glyph_To_Bitmap' did erroneously modify the source glyph in
+ certain cases.
+
+ - `glnames.py' still contained a bug that made FreeType return
+ invalid names for certain glyphs.
+
+ - The library crashed when loading certain Type 1 fonts like
+ `sadn.pfb' (`Stalingrad Normal'), which appear to contain
+ pathetic font info dictionaries.
+
+ - The TrueType glyph loader is now much more paranoid and checks
+ everything when loading a given glyph image. This was necessary
+ to avoid problems (crashes and/or memory overwrites) with broken
+ fonts that came from a really buggy automatic font converter.
+
+
+ II. IMPORTANT UPDATES AND NEW FEATURES
+
+ - Important updates to the Mac-specific parts of the library.
+
+ - The caching sub-system has been completely re-designed, and its
+ API has evolved (the old one is still supported for backward
+ compatibility).
+
+ The documentation for it is not yet completed, sorry. For now,
+ you are encouraged to continue using the old API. However, the
+ ftview demo program in the ft2demos package has already been
+ updated to use the new caching functions.
+
+ - A new charmap cache is provided too. See `FTC_CMapCache'. This
+ is useful to perform character code -> glyph index translations
+ quickly, without the need for an opened FT_Face.
+
+ - A NEW POSTSCRIPT HINTER module has been added to support native
+ hints in the following formats: PostScript Type 1, PostScript
+ CID, and CFF/CEF.
+
+ Please test! Note that the auto-hinter produces better results
+ for a number of badly-hinted fonts (mostly auto-generated ones)
+ though.
+
+ - A memory debugger is now part of the standard FreeType sources.
+ To enable it, define FT_DEBUG_MEMORY in
+ <freetype/config/ftoption.h>, and recompile the library.
+
+ Additionally, define the _environment_ variable FT_DEBUG_MEMORY
+ and run any program using FreeType. When the library is exited,
+ a summary of memory footprints and possible leaks will be
+ displayed.
+
+ This works transparently with _any_ program that uses FreeType.
+ However, you will need a lot of memory to use this (allocated
+ blocks are never released to the heap to detect double deletes
+ easily).
+
+
+ III. MISCELLANEOUS
+
+ - We are aware of subtle differences between the output of
+ FreeType versions 1 and 2 when it comes to monochrome
+ TrueType-hinted glyphs. These are most probably due to small
+ differences in the monochrome rasterizers and will be worked out
+ in an upcoming release.
+
+ - We have decided to fork the sources in a `stable' branch, and an
+ `unstable' one, since FreeType is becoming a critical component
+ of many Unix systems.
+
+ The next bug-fix releases of the library will be named 2.0.7,
+ 2.0.8, etc., while the `2.1' branch will contain a version of
+ the sources where we will start major reworking of the library's
+ internals, in order to produce FreeType 2.2.0 (or even 3.0) in a
+ more distant future.
+
+ We also hope that this scheme will allow much more frequent
+ releases than in the past.
+
+
+======================================================================
+
+CHANGES BETWEEN 2.0.5 and 2.0.4
+
+ NOTE THAT 2.0.5 DOES NOT CONTAIN THE POSTSCRIPT HINTER. THIS MODULE
+ WILL BE PART OF THE NEXT RELEASE (EITHER 2.0.6 or 2.1)
+
+ - Fixed a bug that made certain glyphs, like `Cacute', `cacute' and
+ `lslash' unavailable from Unicode charmaps of Postscript fonts.
+ This prevented the correct display of Polish text, for example.
+
+ - The kerning table of Type 1 fonts was loaded by FreeType, when its
+ AFM file was attached to its face, but the
+ FT_FACE_FLAG_HAS_KERNING bit flags was not set correctly,
+ preventing FT_Get_Kerning to return meaningful values.
+
+ - Improved SFNT (TrueType & OpenType) charmap support. Slightly
+ better performance, as well as support for the new formats defined
+ by the OpenType 1.3 specification (8, 10, and 12)
+
+ - Fixed a serious typo in `src/base/ftcalc.c' which caused invalid
+ computations in certain rare cases, producing ugly artefacts.
+
+ - The size of the EM square is computed with a more accurate
+ algorithm for Postscript fonts. The old one caused slight errors
+ with embedded fonts found in PDF documents.
+
+ - Fixed a bug in the cache manager that prevented normal LRU
+ behaviour within the cache manager, causing unnecessary reloads
+ (for FT_Face and FT_Size objects only).
+
+ - Added a new function named `FT_Get_Name_Index' to retrieve the
+ glyph index of a given glyph name, when found in a face.
+
+ - Added a new function named `FT_Get_Postscript_Name' to retrieve
+ the `unique' Postscript font name of a given face.
+
+ - Added a new public header size named FT_SIZES_H (or
+ <freetype/ftsizes.h>) providing new FT_Size-management functions:
+ FT_New_Size, FT_Activate_Size, FT_Done_Size.
+
+ - Fixed a reallocation bug that generated a dangling pointer (and
+ possibly memory leaks) with Postscript fonts (in
+ src/psaux/psobjs.c).
+
+ - Many fixes for 16-bit correctness.
+
+ - Removed many pedantic compiler warnings from the sources.
+
+ - Added an Amiga build directory in `builds/amiga'.
+
+
+======================================================================
+
+CHANGES BETWEEN 2.0.4 and 2.0.3
+
+ - Fixed a rather annoying bug that was introduced in 2.0.3. Namely,
+ the font transformation set through FT_Set_Transform was applied
+ twice to auto-hinted glyphs, resulting in incorrectly rotated text
+ output.
+
+ - Fixed _many_ compiler warnings. FT2 should now compile cleanly
+ with Visual C++'s most pedantic warning level (/W4). It already
+ compiled fine with GCC and a few other compilers.
+
+ - Fixed a bug that prevented the linear advance width of composite
+ TrueType glyphs to be correctly returned.
+
+ - Fixed the Visual C++ project files located in
+ `builds/win32/visualc' (previous versions used older names of the
+ library).
+
+ - Many 32-bit constants have an `L' appended to their value, in
+ order to improve the 16-bitness of the code. Someone is actually
+ trying to use FT2 on an Atari ST machine!
+
+ - Updated the `builds/detect.mk' file in order to automatically
+ build FT2 on AIX systems. AIX uses `/usr/sbin/init' instead of
+ `/sbin/init' and wasn't previously detected as a Unix platform by
+ the FreeType build system.
+
+ - Updated the Unix-specific portions of the build system (new
+ libtool version, etc.).
+
+ - The SFNT kerning loader now ensures that the table is sorted
+ (since some problem fonts do not meet this requirement).
+
+
+=======================================================================
+
+CHANGES BETWEEN 2.0.3 and 2.0.2
+
+ I. CHANGES TO THE MODULES / FONT DRIVERS
+
+ - THE AUTO-HINTER HAS BEEN SLIGHTLY IMPROVED, in order to fix
+ several annoying artefacts, mainly:
+
+ - Blue zone alignment of horizontal stems wasn't performed
+ correctly, resulting in artefacts like the `d' being placed
+ one pixel below the `b' in some fonts like Time New Roman.
+
+ - Overshoot thresholding wasn't performed correctly, creating
+ unpleasant artefacts at large character pixel sizes.
+
+ - Composite glyph loading has been simplified. This gets rid
+ of various artefacts where the components of a composite
+ glyphs were not correctly spaced.
+
+ These are the last changes to the current auto-hinting module.
+ A new hinting sub-system is currently in the work in order to
+ support native hints in Type 1 / CFF / OpenType fonts, as well
+ as globally improve rendering.
+
+ - The PCF driver has been fixed. It reported invalid glyph
+ dimensions for the fonts available on Solaris.
+
+ - The Type 1, CID and CFF drivers have been modified to fix the
+ computation of the EM size.
+
+ - The Type 1 driver has been fixed to avoid a dangerous bug that
+ crashed the library with non-conforming fonts (i.e. ones that do
+ not place the .notdef glyph at position 0).
+
+ - The TrueType driver had a rather subtle bug (dangling pointer
+ when loading composite glyphs) that could crash the library in
+ rare occasions!
+
+
+ II. HIGH-LEVEL API CHANGES
+
+ - The error code enumeration values have been changed. An error
+ value is decomposed in a generic error code, and a module
+ number. see <freetype/fterrors.h> for details.
+
+ - A new public header file has been introduced, named
+ FT_TRIGONOMETRY_H (include/freetype/fttrig.h), providing
+ trigonometric functions to compute sines, cosines, arctangents,
+ etc. with 16.16 fixed precision. The implementation is based on
+ the CORDIC algorithm and is very fast while being sufficiently
+ accurate.
+
+
+ III. INTERNALS
+
+ - Added BeOS-specific files in the old build sub-system. Note
+ that no changes were required to compile the library with Jam.
+
+ - The configuration is now capable of automatically detecting
+ 64-bit integers on a set of predefined compilers (GCC, Visual
+ C++, Borland C++) and will use them by default. This provides a
+ small performance boost.
+
+ - A small memory leak that happened when opening 0-sized files
+ (duh!) have been fixed.
+
+ - Fixed bezier stack depth bug in the routines provided by the
+ FT_BBOX_H header file. Also fixed similar bugs in the
+ rasterizers.
+
+ - The outline bounding box code has been rewritten to use direct
+ computations, instead of bezier sub-division, to compute the
+ exact bounding box of glyphs. This is slightly slower but more
+ accurate.
+
+ - The build system has been improved and fixed, mainly to support
+ `make' on Windows 2000 correctly, avoid problems with `make
+ distclean' on non Unix systems, etc.
+
+ - Hexadecimal constants have been suffixed with `U' to avoid
+ problems with certain compilers on 64-bit platforms.
+
+ - A new directory named `src/tools' has been created. It contains
+ Python scripts and simple unit test programs used to develop the
+ library.
+
+ - The DocMaker tool has been moved from `docs' to `src/tools' and
+ has been updated with the following:
+
+ - Now accepts the `--title=XXXX' or `-t XXXX' option from the
+ command line to set the project's name in the generated API
+ reference.
+
+ - Now accepts the `--output=DIR' or `-o DIR' option from the
+ command line to set the output directory for all generated
+ HTML files.
+
+ - Now accepts the `--prefix=XXXX' or `-p XXX' option from the
+ command line to set the file prefix to use for all
+ generated HTML files.
+
+ - Now generates the current time/data on each generated page
+ in order to distinguish between versions.
+
+ DocMaker can be used with other projects now, not only FT2
+ (e.g. MLib, FTLayout, etc.).
+
+
+======================================================================
+
+CHANGES BETWEEN 2.0.2 and 2.0.1
+
+ I. CHANGES TO THE MODULES / FONT DRIVERS
+
+ - THE TRUETYPE BYTECODE INTERPRETER IS NOW TURNED OFF, in order to
+ avoid legal problems with the Apple patents. It seems that we
+ mistakenly turned this option on in previous releases of the
+ build.
+
+ Note that if you want to use the bytecode interpreter in order
+ to get high-quality TrueType rendering, you will need to toggle
+ by hand the definition of the
+ TT_CONFIG_OPTION_BYTECODE_INTERPRETER macro in the file
+ `include/freetype/config/ftoption.h'.
+
+ - The CFF driver has been improved by Tom Kacvinsky and Sander van
+ der Wal:
+
+ * Support for `seac' emulation.
+ * Support for `dotsection'.
+ * Support for retrieving glyph names through
+ `FT_Get_Glyph_Name'.
+
+ The first two items are necessary to correctly a large number of
+ Type 1 fonts converted to the CFF formats by Adobe Acrobat.
+
+ - The Type 1 driver was also improved by Tom & others:
+
+ * Better EM size computation.
+ * Better support for synthetic (transformed) fonts.
+ * The Type 1 driver returns the charstrings corresponding to
+ each glyph in the `glyph->control_data' field after a call to
+ `FT_Load_Glyph' (thanks Ha Shao).
+
+ - Various other bugfixes, including the following:
+
+ * Fixed a nasty memory leak in the Type 1 driver.
+ * The autohinter and the pcf driver used static writable data
+ when they shouldn't.
+ * Many casts were added to make the code more 64-bits safe. It
+ also now compiles on Windows XP 64-bits without warnings.
+ * Some incorrect writable statics were removed in the `autohint'
+ and `pcf' drivers. FreeType 2 now compiles on Epoc again.
+
+
+ II. CHANGES TO THE HIGH-LEVEL API
+
+ - The library header files inclusion scheme has been changed. The
+ old scheme looked like:
+
+ #include <freetype/freetype.h>
+ #include <freetype/ftglyph.h>
+ #include <freetype/ftcache.h>
+ #include <freetype/cache/ftimage.h>
+
+ Now you should use:
+
+ #include <ft2build.h>
+ #include FT_FREETYPE_H
+ #include FT_GLYPH_H
+ #include FT_CACHE_H
+ #include FT_CACHE_IMAGE_H
+
+ NOTE THAT THE OLD INCLUSION SCHEME WILL STILL WORK WITH THIS
+ RELEASE. HOWEVER, WE DO NOT GUARANTEE THAT THIS WILL STILL BE
+ TRUE IN THE NEXT ONE (A.K.A. FREETYPE 2.1).
+
+ The file <ft2build.h> is used to define the header filename
+ macros. The complete and commented list of macros is available
+ in the API reference under the section name `Header File Macros'
+ in Chapter I.
+
+ For more information, see section I of the following document:
+
+ http://www.freetype.org/
+ freetype2/docs/tutorial/step1.html
+
+ or
+
+ http://freetype.sourceforge.net/
+ freetype2/docs/tutorial/step1.html
+
+ - Many, many comments have been added to the public source file in
+ order to automatically generate the API Reference through the
+ `docmaker.py' Python script.
+
+ The latter has been updated to support the grouping of sections
+ in chapters and better index sort. See:
+
+ http://www.freetype.org/freetype2/docs/reference/ft2-toc.html
+
+
+ III. CHANGES TO THE BUILD PROCESS
+
+ - If you are not building FreeType 2 with its own build system
+ (but with your own Makefiles or project files), you will need to
+ be aware that the build process has changed a little bit.
+
+ You don't need to put the `src' directory in the include path
+ when compiling any FT2 component. Instead, simply put the
+ component's directory in the current include path.
+
+ So, if you were doing something like:
+
+ cc -c -Iinclude -Isrc src/base/ftbase.c
+
+ change the line to:
+
+ cc -c -Iinclude -Isrc/base src/base/ftbase.c
+
+ If you were doing something like:
+
+ cd src/base
+ cc -c -I../../include -I.. ftbase.c
+
+ change it to:
+
+ cd src/base
+ cc -c -I../../include ftbase.c
+
+
+======================================================================
+
+CHANGES BETWEEN 2.0.1 and 2.0
+
+ 2.0.1 introduces a few changes:
+
+ - Fixed many bugs related to the support of CFF / OpenType fonts.
+ These formats are now much better supported though there is
+ still work planned to deal with charset tables and PDF-embedded
+ CFF files that use the old `seac' command.
+
+ - The library could not be compiled in debug mode with a very
+ small number of C compilers whose pre-processors didn't
+ implement the `##' directive correctly (i.e. per se the ANSI C
+ specification!) An elegant fix was found.
+
+ - Added support for the free Borland command-line C++ Builder
+ compiler. Use `make setup bcc32'. Also fixed a few source
+ lines that generated new warnings with BCC32.
+
+ - Fixed a bug in FT_Outline_Get_BBox when computing the extrema of
+ a conic Bezier arc.
+
+ - Updated the INSTALL file to add IDE compilation.
+
+ - Other minor bug fixes, from invalid Type 1 style flags to
+ correct support of synthetic (obliqued) fonts in the
+ auto-hinter, better support for embedded bitmaps in a SFNT font.
+
+ - Fixed some problems with `freetype-config'.
+
+ Finally, the `standard' scheme for including FreeType headers is now
+ gradually changing, but this will be explained in a later release
+ (probably 2.0.2).
+
+ And very special thanks to Tom Kacvinsky and YAMANO-UCHI Hidetoshi
+ for their contributions!
+
+
+======================================================================
+
+CHANGES BETWEEN beta8 and 2.0
+
+ - Changed the default installation path for public headers from
+ `include/freetype' to `include/freetype2'.
+
+ Also added a new `freetype-config' that is automatically generated
+ and installed on Unix and Cygwin systems. The script itself is
+ used to retrieve the current install path, C compilation flags as
+ well as linker flags.
+
+ - Fixed several small bugs:
+
+ * Incorrect max advance width for fixed-pitch Type 1 fonts.
+ * Incorrect glyph names for certain TrueType fonts.
+ * The glyph advance was not copied when FT_Glyph_To_Bitmap was
+ called.
+ * The linearHoriAdvance and linearVertAdvance fields were not
+ correctly returned for glyphs processed by the auto-hinter.
+ * `type1z' renamed back to `type1'; the old `type1' module has
+ been removed.
+
+ - Revamped the build system to make it a lot more generic. This
+ will allow us to re-use nearly un-modified in lots of other
+ projects (including FreeType Layout).
+
+ - Changed `cid' to use `psaux' too.
+
+ - Added the cache sub-system. See <freetype/ftcache.h> as well as
+ the sources in `src/cache'. Note that it compiles but is still
+ untested for now.
+
+ - Updated `docs/docmaker.py', a draft API reference is available at
+ http://www.freetype.org/ft2api.html.
+
+ - Changed `type1' to use `psaux'.
+
+ - Created a new module named `psaux' to hold the Type 1 & Type 2
+ parsing routines. It should be used by `type1', `cid', and `cff'
+ in the future.
+
+ - Fixed an important bug in `FT_Glyph_Get_CBox'.
+
+ - Fixed some compiler warnings that happened since the TrueType
+ bytecode decoder was deactivated by default.
+
+ - Fixed two memory leaks:
+
+ * The memory manager (16 bytes) isn't released in
+ FT_Done_FreeType!
+ * Using custom input streams, the copy of the original stream was
+ never released.
+
+ - Fixed the auto-hinter by performing automatic computation of the
+ `filling direction' of each glyph. This is done through a simple
+ and fast approximation, and seems to work (problems spotted by
+ Werner though). The Arphic fonts are a lot nicer though there are
+ still a lot of things to do to handle Asian fonts correctly.
+
+
+======================================================================
+
+BETA-8 (RELEASE CANDIDATE) CHANGES
+
+ - Deactivated the TrueType bytecode interpreter by default.
+
+ - Deactivated the `src/type1' font driver. Now `src/type1z' is used
+ by default.
+
+ - Updates to the build system. We now compile the library correctly
+ under Unix system through `configure' which is automatically
+ called on the first `make' invocation.
+
+ - Added the auto-hinting module! Fixing some bugs here and there.
+
+ - Found some bugs in the composite loader (seac) of the Type1-based
+ font drivers.
+
+ - Renamed the directory `freetype2/config' to `freetype2/builds' and
+ updated all relevant files.
+
+ - Found a memory leak in the `type1' driver.
+
+ - Incorporated Tom's patches to support flex operators correctly in
+ OpenType/CFF fonts. Now all I need is to support pure CFF and CEF
+ fonts to be done with this driver :-)
+
+ - Added the Windows FNT/FON driver in `src/winfonts'. For now, it
+ always `simulates' a Unicode charmap, so it shouldn't be
+ considered completed right now.
+
+ It is there to be more a proof of concept than anything else
+ anyway. The driver is a single C source file, that compiles to 3
+ Kb of code.
+
+ I'm still working on the PCF/BDF drivers, but I'm too lazy to
+ finish them now.
+
+ - CHANGES TO THE HIGH-LEVEL API
+
+ * FT_Get_Kerning has a new parameter that allows you to select the
+ coordinates of the kerning vector (font units, scaled, scaled +
+ grid-fitted).
+ * The outline functions are now in <freetype/ftoutln.h> and not
+ part of <freetype/freetype.h> anymore.
+ * <freetype/ftmodule.h> now contains declarations for
+ FT_New_Library, FT_Done_Library, FT_Add_Default_Modules.
+ * The so-called convenience functions have moved from `ftoutln.c'
+ to `ftglyph.c', and are thus available with this optional
+ component of the library. They are declared in
+ <freetype/ftglyph.h> now.
+ * Anti-aliased rendering is now the default for FT_Render_Glyph
+ (i.e. corresponds to render_mode == 0 == ft_render_mode_normal).
+ To generate a monochrome bitmap, use ft_render_mode_mono, or the
+ FT_LOAD_MONOCHROME flag in FT_Load_Glyph/FT_Load_Char.
+ FT_LOAD_ANTI_ALIAS is still defined, but values to 0.
+ * <freetype/freetype.h> now include <freetype/config/ftconfig.h>,
+ solving a few headaches :-)
+ * The type FT_GlyphSlotRec has now a `library' field.
+
+ - CHANGES TO THE `ftglyph.h' API
+
+ This API has been severely modified in order to make it simpler,
+ clearer, and more efficient. It certainly now looks like a real
+ `glyph factory' object, and allows client applications to manage
+ (i.e. transform, bbox and render) glyph images without ever
+ knowing their original format.
+
+ - Added support for CID-keyed fonts to the CFF driver. Maybe
+ support for pure CFF + CEF fonts should come in?
+
+ - Cleaned up source code in order to avoid two functions with the
+ same name. Also changed the names of the files in `type1z' from
+ `t1XXXX' to `z1XXXX' in order to avoid any conflicts.
+
+ `make multi' now works well :-)
+
+ Also removed the use of `cidafm' for now, even if the source files
+ are still there. This functionality will certainly go into a
+ specific module.
+
+ - ADDED SUPPORT FOR THE AUTO-HINTER
+
+ It works :-) I have a demo program which simply is a copy of
+ `ftview' that does a `FT_Add_Module(library,
+ &autohinter_module_class)' after library initialization, and Type
+ 1 & OpenType/CFF fonts are now hinted.
+
+ CID fonts are not hinted, as they include no charmap and the
+ auto-hinter doesn't include `generic' global metrics computations
+ yet.
+
+ Now, I need to release this thing to the FreeType 2 source.
+
+ - CHANGES TO THE RENDERER MODULES
+
+ The monochrome and smooth renderers are now in two distinct
+ directories, namely `src/raster1' and `src/smooth'. Note that the
+ old `src/renderer' is now gone.
+
+ I ditched the 5-gray-levels renderers. Basically, it involved a
+ simple #define toggle in 'src/raster1/ftraster.c'.
+
+ FT_Render_Glyph, FT_Outline_Render & FT_Outline_Get_Bitmap now
+ select the best renderer available, depending on render mode. If
+ the current renderer for a given glyph image format isn't capable
+ of supporting the render mode, another one will be found in the
+ library's list. This means that client applications do not need
+ to switch or set the renderers themselves (as in the latest
+ change), they'll get what they want automatically. At last.
+
+ Changed the demo programs accordingly.
+
+ - MAJOR INTERNAL REDESIGN:
+
+ A lot of internal modifications have been performed lately on the
+ source in order to provide the following enhancements:
+
+ * More generic module support:
+
+ The FT_Module type is now defined to represent a handle to a
+ given module. The file <freetype/ftmodule.h> contains the
+ FT_Module_Class definition, as well as the module-loading public
+ API.
+
+ The FT_Driver type is still defined, and still represents a
+ pointer to a font driver. Note that FT_Add_Driver is replaced
+ by FT_Add_Module, FT_Get_Driver by FT_Get_Module, etc.
+
+ * Support for generic glyph image types:
+
+ The FT_Renderer type is a pointer to a module used to perform
+ various operations on glyph image.
+
+ Each renderer is capable of handling images in a single format
+ (e.g. ft_glyph_format_outline). Its functions are used to:
+
+ - transform an glyph image
+ - render a glyph image into a bitmap
+ - return the control box (dimensions) of a given glyph image
+
+ The scan converters `ftraster.c' and `ftgrays.c' have been moved
+ to the new directory `src/renderer', and are used to provide two
+ default renderer modules.
+
+ One corresponds to the `standard' scan-converter, the other to
+ the `smooth' one.
+
+ he current renderer can be set through the new function
+ FT_Set_Renderer.
+
+ The old raster-related function FT_Set_Raster, FT_Get_Raster and
+ FT_Set_Raster_Mode have now disappeared, in favor of the new:
+
+ FT_Get_Renderer
+ FT_Set_Renderer
+
+ See the file <freetype/ftrender.h> for more details.
+
+ These changes were necessary to properly support different
+ scalable formats in the future, like bi-color glyphs, etc.
+
+ * Glyph loader object:
+
+ A new internal object, called a 'glyph loader' has been
+ introduced in the base layer. It is used by all scalable format
+ font drivers to load glyphs and composites.
+
+ This object has been created to reduce the code size of each
+ driver, as each one of them basically re-implemented its
+ functionality.
+
+ See <freetype/internal/ftobjs.h> and the FT_GlyphLoader type for
+ more information.
+
+ * FT_GlyphSlot has new fields:
+
+ In order to support extended features (see below), the
+ FT_GlyphSlot structure has a few new fields:
+
+ linearHoriAdvance:
+
+ This field gives the linearly scaled (i.e. scaled but
+ unhinted) advance width for the glyph, expressed as a 16.16
+ fixed pixel value. This is useful to perform WYSIWYG text.
+
+ linearVertAdvance:
+ This field gives the linearly scaled advance height for the
+ glyph (relevant in vertical glyph layouts only). This is
+ useful to perform WYSIWYG text.
+
+ Note that the two above field replace the removed `metrics2'
+ field in the glyph slot.
+
+ advance:
+ This field is a vector that gives the transformed advance for
+ the glyph. By default, it corresponds to the advance width,
+ unless FT_LOAD_VERTICAL_LAYOUT was specified when calling
+ FT_Load_Glyph or FT_Load_Char.
+
+ bitmap_left:
+ This field gives the distance in integer pixels from the
+ current pen position to the left-most pixel of a glyph image
+ IF IT IS A BITMAP. It is only valid when the `format' field
+ is set to `ft_glyph_format_bitmap', for example, after calling
+ the new function FT_Render_Glyph.
+
+ bitmap_top:
+ This field gives the distance in integer pixels from the
+ current pen position (located on the baseline) to the top-most
+ pixel of the glyph image IF IT IS A BITMAP. Positive values
+ correspond to upwards Y.
+
+ loader:
+ This is a new private field for the glyph slot. Client
+ applications should not touch it.
+
+
+ * Support for transforms and direct rendering in FT_Load_Glyph:
+
+ Most of the functionality found in <freetype/ftglyph.h> has been
+ moved to the core library. Hence, the following:
+
+ - A transform can be specified for a face through
+ FT_Set_Transform. this transform is applied by FT_Load_Glyph
+ to scalable glyph images (i.e. NOT TO BITMAPS) before the
+ function returns, unless the bit flag FT_LOAD_IGNORE_TRANSFORM
+ was set in the load flags.
+
+ - Once a glyph image has been loaded, it can be directly
+ converted to a bitmap by using the new FT_Render_Glyph
+ function. Note that this function takes the glyph image from
+ the glyph slot, and converts it to a bitmap whose properties
+ are returned in `face.glyph.bitmap', `face.glyph.bitmap_left'
+ and `face.glyph.bitmap_top'. The original native image might
+ be lost after the conversion.
+
+ - When using the new bit flag FT_LOAD_RENDER, the FT_Load_Glyph
+ and FT_Load_Char functions will call FT_Render_Glyph
+ automatically when needed.
+
+ - Reformatted all modules source code in order to get rid of the
+ basic data types redifinitions (i.e. `TT_Int' instead of `FT_Int',
+ `T1_Fixed' instead of `FT_Fixed'). Hence the format-specific
+ prefixes like `TT_', `T1_', `T2_' and `CID_' are only used for
+ relevant structures.
+
+
+======================================================================
+
+OLD CHANGES FOR BETA 7
+
+ - bug-fixed the OpenType/CFF parser. It now loads and displays my
+ two fonts nicely, but I'm pretty certain that more testing is
+ needed :-)
+
+ - fixed the crummy Type 1 hinter, it now handles accented characters
+ correctly (well, the accent is not always well placed, but that's
+ another problem..)
+
+ - added the CID-keyed Type 1 driver in `src/cid'. Works pretty well
+ for only 13 Kb of code ;-) Doesn't read AFM files though, nor the
+ really useful CMAP files..
+
+ - fixed two bugs in the smooth renderer (src/base/ftgrays.c).
+ Thanks to Boris Letocha for spotting them and providing a fix.
+
+ - fixed potential `divide by zero' bugs in ftcalc.c.
+
+ - added source code for the OpenType/CFF driver (still incomplete
+ though..)
+
+ - modified the SFNT driver slightly to perform more robust header
+ checks in TT_Load_SFNT_Header. This prevents certain font files
+ (e.g. some Type 1 Multiple Masters) from being incorrectly
+ `recognized' as TrueType font files..
+
+ - moved a lot of stuff from the TrueType driver to the SFNT module,
+ this allows greater code re-use between font drivers
+ (e.g. TrueType, OpenType, Compact-TrueType, etc..)
+
+ - added a tiny segment cache to the SFNT Charmap 4 decoder, in order
+ to minimally speed it up..
+
+ - added support for Multiple Master fonts in `type1z'. There is
+ also a new file named <freetype/ftmm.h> which defines functions to
+ manage them from client applications.
+
+ The new file `src/base/ftmm.c' is also optional to the engine..
+
+ - various formatting changes (e.g. EXPORT_DEF -> FT_EXPORT_DEF) +
+ small bug fixes in FT_Load_Glyph, the `type1' driver, etc..
+
+ - a minor fix to the Type 1 driver to let them apply the font matrix
+ correctly (used for many oblique fonts..)
+
+ - some fixes for 64-bit systems (mainly changing some FT_TRACE calls
+ to use %p instead of %lx). Thanks to Karl Robillard.
+
+ - fixed some bugs in the sbit loader (src/base/sfnt/ttsbit.c) +
+ added a new flag, FT_LOAD_CROP_BITMAP to query that bitmaps be
+ cropped when loaded from a file (maybe I should move the bitmap
+ cropper to the base layer ??).
+
+ - changed the default number of gray levels of the smooth renderer
+ to 256 (instead of the previous 128). Of course, the human eye
+ can't see any difference ;-)
+
+ - removed TT_MAX_SUBGLYPHS, there is no static limit on the number
+ of subglyphs in a TrueType font now..
+
+
+======================================================================
+
+OLD CHANGES 16 May 2000
+
+ - tagged `BETA-6' in the CVS tree. This one is a serious release
+ candidate even though it doesn't incorporate the auto-hinter yet..
+
+ - various obsolete files were removed, and copyright header updated
+
+ - finally updated the standard raster to fix the monochrome
+ rendering bug + re-enable support for 5-gray levels anti-aliasing
+ (suck, suck..)
+
+ - created new header files, and modified sources accordingly:
+
+ <freetype/fttypes.h>
+ - simple FreeType types, without the API
+ <freetype/internal/ftmemory.h>
+ - definition of memory-management macros
+
+ - added the `DSIG' (OpenType Digital Signature) tag to
+ <freetype/tttags.h>
+
+ - light update/cleaning of the build system + changes to the sources
+ in order to get rid of _all_ compiler warnings with three
+ compilers, i.e:
+
+ gcc with `-ansi -pedantic -Wall -W', Visual C++ with `/W3 /WX' and
+ LCC
+
+ IMPORTANT NOTE FOR WIN32-LCC USERS:
+ |
+ | It seems the C pre-processor that comes with LCC is broken, it
+ | doesn't recognize the ANSI standard directives # and ##
+ | correctly when one of the argument is a macro. Also,
+ | something like:
+ |
+ | #define F(x) print##x
+ |
+ | F(("hello"))
+ |
+ | will get incorrectly translated to:
+ |
+ | print "hello")
+ |
+ | by its pre-processor. For this reason, you simply cannot build
+ | FreeType 2 in debug mode with this compiler..
+
+ - yet another massive grunt work. I've changed the definition of
+ the EXPORT_DEF, EXPORT_FUNC, BASE_DEF & BASE_FUNC macros. These
+ now take an argument, which is the function's return value type.
+
+ This is necessary to compile FreeType as a DLL on Windows and
+ OS/2. Depending on the compiler used, a compiler-specific keyword
+ like __export or __system must be placed before (VisualC++) or
+ after (BorlandC++) the type..
+
+ Of course, this needed a lot of changes throughout the source code
+ to make it compile again... All cleaned up now, apparently..
+
+ Note also that there is a new EXPORT_VAR macro defined to allow
+ the _declaration_ of an exportable public (constant)
+ variable. This is the case of the raster interfaces (see
+ ftraster.h and ftgrays.h), as well as each module's interface (see
+ sfdriver.h, psdriver.h, etc..)
+
+ - new feature: it is now possible to pass extra parameters to font
+ drivers when creating a new face object. For now,
+ this capability is unused. It could however prove to
+ be useful in a near future..
+
+ the FT_Open_Args structure was changes, as well as the internal
+ driver interface (the specific `init_face' module function has
+ now a different signature).
+
+ - updated the tutorial (not finished though).
+
+ - updated the top-level BUILD document
+
+ - fixed a potential memory leak that could occur when loading
+ embedded bitmaps.
+
+ - added the declaration of FT_New_Memory_Face in
+ <freetype/freetype.h>, as it was missing from the public header
+ (the implementation was already in `ftobjs.c').
+
+ - the file <freetype/fterrors.h> has been seriously updated in order
+ to allow the automatic generation of error message tables. See
+ the comments within it for more information.
+
+ - major directory hierarchy re-organisation. This was done for two
+ things:
+
+ * first, to ease the `manual' compilation of the library by
+ requiring at lot less include paths :-)
+
+ * second, to allow external programs to effectively access
+ internal data fields. For example, this can be extremely
+ useful if someone wants to write a font producer or a font
+ manager on top of FreeType.
+
+ Basically, you should now use the 'freetype/' prefix for header
+ inclusion, as in:
+
+ #include <freetype/freetype.h>
+ #include <freetype/ftglyph.h>
+
+ Some new include sub-directories are available:
+
+ a. the `freetype/config' directory, contains two files used to
+ configure the build of the library. Client applications
+ should not need to look at these normally, but they can if
+ they want.
+
+ #include <freetype/config/ftoption.h>
+ #include <freetype/config/ftconfig.h>
+
+ b. the `freetype/internal' directory, contains header files that
+ describes library internals. These are the header files that
+ were previously found in the `src/base' and `src/shared'
+ directories.
+
+
+ As usual, the build system and the demos have been updated to
+ reflect the change..
+
+ Here's a layout of the new directory hierarchy:
+
+ TOP_DIR
+ include/
+ freetype/
+ freetype.h
+ ...
+ config/
+ ftoption.h
+ ftconfig.h
+ ftmodule.h
+
+ internal/
+ ftobjs.h
+ ftstream.h
+ ftcalc.h
+ ...
+
+ src/
+ base/
+ ...
+
+ sfnt/
+ psnames/
+ truetype/
+ type1/
+ type1z/
+
+
+ Compiling a module is now much easier, for example, the following
+ should work when in the TOP_DIR directory on an ANSI build:
+
+ gcc -c -I./include -I./src/base src/base/ftbase.c
+ gcc -c -I./include -I./src/sfnt src/sfnt/sfnt.c
+ etc..
+
+ (of course, using -Iconfig/<system> if you provide system-specific
+ configuration files).
+
+ - updated the structure of FT_Outline_Funcs in order to allow direct
+ coordinate scaling within the outline decomposition routine (this
+ is important for virtual `on' points with TrueType outlines) +
+ updates to the rasters to support this..
+
+ - updated the OS/2 table loading code in `src/sfnt/ttload.c' in
+ order to support version 2 of the table (see OpenType 1.2 spec)
+
+ - created `include/tttables.h' and `include/t1tables.h' to allow
+ client applications to access some of the SFNT and T1 tables of a
+ face with a procedural interface (see `FT_Get_Sfnt_Table') +
+ updates to internal source files to reflect the change..
+
+ - some cleanups in the source code to get rid of warnings when
+ compiling with the `-Wall -W -ansi -pedantic' options in gcc.
+
+ - debugged and moved the smooth renderer to `src/base/ftgrays.c' and
+ its header to `include/ftgrays.h'
+
+ - updated TT_MAX_SUBGLYPHS to 96 as some CJK fonts have composites
+ with up to 80 sub-glyphs !! Thanks to Werner
+
+
+======================================================================
+
+OLD CHANGES - 14-apr-2000
+
+ - fixed a bug in the TrueType glyph loader that prevented the
+ correct loading of some CJK glyphs in mingli.ttf
+
+ - improved the standard Type 1 hinter in `src/type1'
+
+ - fixed two bugs in the experimental Type 1 driver in `src/type1z'
+ to handle the new XFree86 4.0 fonts (and a few other ones..)
+
+ - the smooth renderer is now complete and supports sub-banding to
+ render large glyphs at high speed. However, it is still located
+ in `demos/src/ftgrays.c' and should move to the library itself in
+ the next beta. NOTE: The smooth renderer doesn't compile in
+ stand-alone mode anymore, but this should be fixed RSN..
+
+ - introduced convenience functions to more easily deal with glyph
+ images, see `include/ftglyph.h' for more details, as well as the
+ new demo program named `demos/src/ftstring.c' that demonstrates
+ its use
+
+ - implemented FT_LOAD_NO_RECURSE in both the TrueType and Type 1
+ drivers (this is required by the auto-hinter to improve its
+ results).
+
+ - changed the raster interface, in order to allow client
+ applications to provide their own span-drawing callbacks.
+ However, only the smooth renderer supports this. See
+ `FT_Raster_Params' in the file `include/ftimage.h'.
+
+ - fixed a small bug in FT_MulFix that caused incorrect transform
+ computation!
+
+ - Note: The tutorial is out-of-date.
+
+
+======================================================================
+
+OLD CHANGES - 12-mar-2000
+
+ - changed the layout of configuration files : now, all ANSI
+ configuration files are located in
+ `freetype2/config'. System-specific over-rides can be placed in
+ `freetype2/config/<system>'.
+
+ - moved all configuration macros to `config/ftoption.h'
+
+ - improvements in the Type 1 driver with AFM support
+
+ - changed the fields in the FT_Outline structure : the old `flags'
+ array is re-named `tags', while all ancient flags are encoded into
+ a single unsigned int named `flags'.
+
+ - introduced new flags in FT_Outline.flags (see
+ ft_outline_.... enums in `ftimage.h').
+
+ - changed outline functions to `FT_Outline_<action>' syntax
+
+ - added a smooth anti-alias renderer to the demonstration programs
+
+ - added Mac graphics driver (thanks Just)
+
+ - FT_Open_Face changed in order to received a pointer to a
+ FT_Open_Args descriptor..
+
+ - various cleanups, a few more API functions implemented (see
+ FT_Attach_File)
+
+ - updated some docs
+
+
+======================================================================
+
+OLD CHANGES - 22-feb-2000
+
+ - introduced the `psnames' module. It is used to:
+
+ o convert a Postscript glyph name into the equivalent Unicode
+ character code (used by the Type 1 driver(s) to synthesize on
+ the fly a Unicode charmap).
+
+ o provide an interface to retrieve the Postscript names of the
+ Macintosh, Adobe Standard & Adobe Expert character codes.
+ (the Macintosh names are used by the SFNT-module postscript
+ names support routines, while the other two tables are used by
+ the Type 1 driver(s)).
+
+ - introduced the `type1z' alternate Type 1 driver. This is a (still
+ experimental) driver for the Type 1 format that will ultimately
+ replace the one in `src/type1'. It uses pattern matching to load
+ data from the font, instead of a finite state analyzer. It works
+ much better than the `old' driver with `broken' fonts. It is also
+ much smaller (under 15 Kb).
+
+ - the Type 1 drivers (both in `src/type1' and `src/type1z') are
+ nearly complete. They both provide automatic Unicode charmap
+ synthesis through the `psnames' module. No re-encoding vector is
+ needed. (note that they still leak memory due to some code
+ missing, and I'm getting lazy).
+
+ Trivial AFM support has been added to read kerning information but
+ wasn't exactly tested as it should ;-)
+
+ - The TrueType glyph loader has been seriously rewritten (see the
+ file `src/truetype/ttgload.c'. It is now much, much simpler as
+ well as easier to read, maintain and understand :-) Preliminary
+ versions introduced a memory leak that has been reported by Jack
+ Davis, and is now fixed..
+
+ - introduced the new `ft_glyph_format_plotter', used to represent
+ stroked outlines like Windows `Vector' fonts, and certain Type 1
+ fonts like `Hershey'. The corresponding raster will be written
+ soon.
+
+ - FT_New_Memory_Face is gone. Likewise, FT_Open_Face has a new
+ interface that uses a structure to describe the input stream, the
+ driver (if required), etc..
+
+
+TODO
+
+ - Write FT_Get_Glyph_Bitmap and FT_Load_Glyph_Bitmap
+
+ - Add a function like FT_Load_Character(face, char_code, load_flags)
+ that would really embed a call to FT_Get_Char_Index then
+ FT_Load_Glyph to ease developer's work.
+
+ - Update the tutorial!
+
+ - consider adding support for Multiple Master fonts in the Type 1
+ drivers.
+
+ - Test the AFM routines of the Type 1 drivers to check that kerning
+ information is returned correctly.
+
+ - write a decent auto-gridding component !! We need this to release
+ FreeType 2.0 gold !
+
+
+less urgent needs:
+
+ - add a CFF/Type2 driver
+ - add a BDF driver
+ - add a FNT/PCF/HBF driver
+ - add a Speedo driver from the X11 sources
+
+
+======================================================================
+
+OLDER CHANGES - 27-jan-2000
+
+ - updated the `sfnt' module interface to allow several SFNT-based
+ drivers to co-exist peacefully
+
+ - updated the `T1_Face' type to better separate Postscript font
+ content from the rest of the FT_Face structure. Might be used
+ later by the CFF/Type2 driver..
+
+ - added an experimental replacement Type 1 driver featuring advanced
+ (and speedy) pattern matching to retrieve the data from postscript
+ fonts.
+
+ - very minor changes in the implementation of FT_Set_Char_Size and
+ FT_Set_Pixel_Sizes (they now implement default to lighten the font
+ driver's code).
+
+
+======================================================================
+
+OLD MESSAGE
+
+This file summarizes the changes that occurred since the last `beta'
+of FreeType 2. Because the list is important, it has been divided into
+separate sections:
+
+Table Of Contents:
+
+ I High-Level Interface (easier !)
+ II Directory Structure
+ III Glyph Image Formats
+ IV Build System
+ V Portability
+ VI Font Drivers
+
+
+----------------------------------------------------------------------
+
+High-Level Interface:
+
+ The high-level API has been considerably simplified. Here is how:
+
+ - resource objects have disappeared. this means that face objects
+ can now be created with a single function call (see FT_New_Face
+ and FT_Open_Face)
+
+ - when calling either FT_New_Face & FT_Open_Face, a size object
+ and a glyph slot object are automatically created for the face,
+ and can be accessed through `face->glyph' and `face->size' if
+ one really needs to. In most cases, there's no need to call
+ FT_New_Size or FT_New_Glyph.
+
+ - similarly, FT_Load_Glyph now only takes a `face' argument
+ (instead of a glyph slot and a size). Also, its `result'
+ parameter is gone, as the glyph image type is returned in the
+ field `face->glyph.format'
+
+ - the list of available charmaps is directly accessible through
+ `face->charmaps', counting `face->num_charmaps' elements. Each
+ charmap has an 'encoding' field which specifies which known
+ encoding it deals with. Valid values are, for example:
+
+ ft_encoding_unicode (for ASCII, Latin-1 and Unicode)
+ ft_encoding_apple_roman
+ ft_encoding_sjis
+ ft_encoding_adobe_standard
+ ft_encoding_adobe_expert
+
+ other values may be added in the future. Each charmap still
+ holds its `platform_id' and `encoding_id' values in case the
+ encoding is too exotic for the current library
+
+
+----------------------------------------------------------------------
+
+Directory Structure:
+
+ Should seem obvious to most of you:
+
+ freetype/
+ config/ -- configuration sub-makefiles
+ ansi/
+ unix/ -- platform-specific configuration files
+ win32/
+ os2/
+ msdos/
+
+ include/ -- public header files, those to be included
+ directly by client apps
+
+ src/ -- sources of the library
+ base/ -- the base layer
+ sfnt/ -- the sfnt `driver' (see the drivers section
+ below)
+ truetype/ -- the truetype driver
+ type1/ -- the type1 driver
+ shared/ -- some header files shared between drivers
+
+ demos/ -- demos/tools
+
+ docs/ -- documentation (a bit empty for now)
+
+
+----------------------------------------------------------------------
+
+Glyph Image Formats:
+
+ Drivers are now able to register new glyph image formats within the
+ library. For now, the base layer supports of course bitmaps and
+ vector outlines, but one could imagine something different like
+ colored bitmaps, bi-color vectors or whatever else (Metafonts anyone
+ ??).
+
+ See the file `include/ftimage.h'. Note also that the type
+ FT_Raster_Map is gone, and is now replaced by FT_Bitmap, which
+ should encompass all known bitmap types.
+
+ Each new image format must provide at least one `raster', i.e. a
+ module capable of transforming the glyph image into a bitmap. It's
+ also possible to change the default raster used for a given glyph
+ image format.
+
+ The default outline scan-converter now uses 128 levels of grays by
+ default, which tends to smooth many things. Note that the demo
+ programs have been updated significantly in order to display these..
+
+
+----------------------------------------------------------------------
+
+Build system:
+
+ You still need GNU Make to build the library. The build system has
+ been very seriously re-vamped in order to provide things like :
+
+ - automatic host platform detection (reverting to 'config/ansi' if
+ it is not detected, with pseudo-standard compilation flags)
+
+ - the ability to compile from the Makefiles with very different and
+ exotic compilers. Note that linking the library can be difficult
+ for some platforms.
+
+ For example, the file `config/win32/lcclib.bat' is invoked by the
+ build system to create the `.lib' file with LCC-Win32 because its
+ librarian has too many flaws to be invoked directly from the
+ Makefile.
+
+ Here's how it works:
+
+ - the first time you type `make', the build system runs a series of
+ sub-makefiles in order to detect your host platform. It then
+ dumps what it found, and creates a file called `config.mk' in the
+ current directory. This is a sub-Makefile used to define many
+ important Make variables used to build the library.
+
+ - the second time, the build system detects the `config.mk' then use
+ it to build the library. All object files go into 'obj' by
+ default, as well as the library file, but this can easily be
+ changed.
+
+ Note that you can run `make setup' to force another host platform
+ detection even if a `config.mk' is present in the current
+ directory. Another solution is simply to delete the file, then
+ re-run make.
+
+ Finally, the default compiler for all platforms is gcc (for now,
+ this will hopefully changed in the future). You can however specify
+ a different compiler by specifying it after the 'setup' target as
+ in:
+
+ gnumake setup lcc on Win32 to use the LCC compiler
+ gnumake setup visualc on Win32 to use Visual C++
+
+ See the file `config/<system>/detect.mk' for a list of supported
+ compilers for your platforms.
+
+ It should be relatively easy to write new detection rules files and
+ config.mk..
+
+ Finally, to build the demo programs, go to `demos' and launch GNU
+ Make, it will use the `config.mk' in the top directory to build the
+ test programs..
+
+
+----------------------------------------------------------------------
+
+Portability:
+
+ In the previous beta, a single FT_System object was used to
+ encompass all low-level operations like thread synchronisation,
+ memory management and i/o access. This has been greatly simplified:
+
+ - thread synchronisation has been dropped, for the simple reason
+ that the library is already re-entrant, and that if you really
+ need two threads accessing the same FT_Library, you should
+ really synchronize access to it yourself with a simple mutex.
+
+ - memory management is performed through a very simple object
+ called `FT_Memory', which really is a table containing a table
+ of pointers to functions like malloc, realloc and free as well
+ as some user data (closure).
+
+ - resources have disappeared (they created more problems than they
+ solved), and i/o management have been simplified greatly as a
+ result. Streams are defined through FT_Stream objects, which
+ can be either memory-based or disk-based.
+
+ Note that each face has its own stream, which is closed only
+ when the face object is destroyed. Hence, a function like
+ TT_Flush_Face in 1.x cannot be directly supported. However, if
+ you really need something like this, you can easily tailor your
+ own streams to achieve the same feature at a lower level (and
+ use FT_Open_Face instead of FT_New_Face to create the face).
+
+ See the file `include/ftsystem.h' for more details, as well as the
+ implementations found in `config/unix' and `config/ansi'.
+
+
+----------------------------------------------------------------------
+
+Font Drivers:
+
+ The Font Driver interface has been modified in order to support
+ extensions & versioning.
+
+
+ The list of the font drivers that are statically linked to the
+ library at compile time is managed through a new configuration file
+ called `config/<platform>/ftmodule.h'.
+
+ This file is autogenerated when invoking `make modules'. This
+ target will parse all sub-directories of 'src', looking for a
+ `module.mk' rules file, used to describe the driver to the build
+ system.
+
+ Hence, one should call `make modules' each time a font driver is
+ added or removed from the `src' directory.
+
+ Finally, this version provides a `pseudo-driver' in `src/sfnt'.
+ This driver doesn't support font files directly, but provides
+ services used by all TrueType-like font drivers. Hence, its code is
+ shared between the TrueType & OpenType font formats, and possibly
+ more formats to come if we're lucky..
+
+
+----------------------------------------------------------------------
+
+Extensions support:
+
+ The extensions support is inspired by the one found in 1.x.
+
+ Now, each font driver has its own `extension registry', which lists
+ which extensions are available for the font faces managed by the
+ driver.
+
+ Extension ids are now strings, rather than 4-byte tags, as this is
+ usually more readable.
+
+ Each extension has:
+ - some data, associated to each face object
+ - an interface (table of function pointers)
+
+ An extension that is format-specific should simply register itself
+ to the correct font driver. Here is some example code:
+
+ // Registering an extensions
+ //
+ FT_Error FT_Init_XXXX_Extension( FT_Library library )
+ {
+ FT_DriverInterface* tt_driver;
+
+ driver = FT_Get_Driver( library, "truetype" );
+ if (!driver) return FT_Err_Unimplemented_Feature;
+
+ return FT_Register_Extension( driver, &extension_class );
+ }
+
+
+ // Implementing the extensions
+ //
+ FT_Error FT_Proceed_Extension_XXX( FT_Face face )
+ {
+ FT_XXX_Extension ext;
+ FT_XXX_Extension_Interface ext_interface;
+
+ ext = FT_Get_Extension( face, "extensionid", &ext_interface );
+ if (!ext) return error;
+
+ return ext_interface->do_it(ext);
+ }
+
+------------------------------------------------------------------------
+
+Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by
+David Turner, Robert Wilhelm, and Werner Lemberg.
+
+This file is part of the FreeType project, and may only be used,
+modified, and distributed under the terms of the FreeType project
+license, LICENSE.TXT. By continuing to use, modify, or distribute this
+file you indicate that you have read the license and understand and
+accept it fully.
+
+
+Local Variables:
+version-control: never
+coding: utf-8
+End:
+
+--- end of CHANGES ---
diff --git a/src/3rdparty/freetype/docs/CUSTOMIZE b/src/3rdparty/freetype/docs/CUSTOMIZE
new file mode 100644
index 0000000..7d7d474
--- /dev/null
+++ b/src/3rdparty/freetype/docs/CUSTOMIZE
@@ -0,0 +1,150 @@
+How to customize the compilation of the library
+===============================================
+
+ FreeType is highly customizable to fit various needs, and this
+ document describes how it is possible to select options and
+ components at compilation time.
+
+
+I. Configuration macros
+
+ The file found in `include/freetype/config/ftoption.h' contains a
+ list of commented configuration macros that can be toggled by
+ developers to indicate which features should be active while
+ building the library.
+
+ These options range from debug level to availability of certain
+ features, like native TrueType hinting through a bytecode
+ interpreter.
+
+ We invite you to read this file for more information. You can
+ change the file's content to suit your needs, or override it with
+ one of the techniques described below.
+
+
+II. Modules list
+
+ If you use GNU make please edit the top-level file `modules.cfg'.
+ It contains a list of available FreeType modules and extensions to
+ be compiled. Change it to suit your own preferences. Be aware that
+ certain modules depend on others, as described in the file. GNU
+ make uses `modules.cfg' to generate `ftmodule.h' (in the object
+ directory).
+
+ If you don't use GNU make you have to manually edit the file
+ `include/freetype/config/ftmodule.h' (which is *not* used with if
+ compiled with GNU make) to add or remove the drivers and components
+ you want to compile into the library. See `INSTALL.ANY' for more
+ information.
+
+
+III. System interface
+
+ FreeType's default interface to the system (i.e., the parts that
+ deal with memory management and i/o streams) is located in
+ `src/base/ftsystem.c'.
+
+ The current implementation uses standard C library calls to manage
+ memory and to read font files. It is however possible to write
+ custom implementations to suit specific systems.
+
+ To tell the GNU Make-based build system to use a custom system
+ interface, you have to define the environment variable FTSYS_SRC to
+ point to the relevant implementation:
+
+ on Unix:
+
+ ./configure <your options>
+ export FTSYS_SRC=foo/my_ftsystem.c
+ make
+ make install
+
+ on Windows:
+
+ make setup <compiler>
+ set FTSYS_SRC=foo/my_ftsystem.c
+ make
+
+
+IV. Overriding default configuration and module headers
+
+ It is possible to override the default configuration and module
+ headers without changing the original files. There are three ways
+ to do that:
+
+
+ 1. With GNU make
+
+ [This is actually a combination of method 2 and 3.]
+
+ Just put your custom `ftoption.h' file into the objects directory
+ (normally `<topdir>/objs'), which GNU make prefers over the
+ standard location. No action is needed for `ftmodule.h' because
+ it is generated automatically in the objects directory.
+
+
+ 2. Using the C include path
+
+ Use the C include path to ensure that your own versions of the
+ files are used at compile time when the lines
+
+ #include FT_CONFIG_OPTIONS_H
+ #include FT_CONFIG_MODULES_H
+
+ are compiled. Their default values being
+ <freetype/config/ftoption.h> and <freetype/config/ftmodule.h>, you
+ can do something like:
+
+ custom/
+ freetype/
+ config/
+ ftoption.h => custom options header
+ ftmodule.h => custom modules list
+
+ include/ => normal FreeType 2 include
+ freetype/
+ ...
+
+ then change the C include path to always give the path to `custom'
+ before the FreeType 2 `include'.
+
+
+ 3. Redefining FT_CONFIG_OPTIONS_H and FT_CONFIG_MODULES_H
+
+ Another way to do the same thing is to redefine the macros used to
+ name the configuration headers. To do so, you need a custom
+ `ft2build.h' whose content can be as simple as:
+
+ #ifndef __FT2_BUILD_MY_PLATFORM_H__
+ #define __FT2_BUILD_MY_PLATFORM_H__
+
+ #define FT_CONFIG_OPTIONS_H <custom/my-ftoption.h>
+ #define FT_CONFIG_MODULES_H <custom/my-ftmodule.h>
+
+ #include <freetype/config/ftheader.h>
+
+ #endif /* __FT2_BUILD_MY_PLATFORM_H__ */
+
+ Place those files in a separate directory, e.g.,
+
+ custom/
+ ft2build.h => custom version described above
+ my-ftoption.h => custom options header
+ my-ftmodule.h => custom modules list header
+
+ and change the C include path to ensure that `custom' is always
+ placed before the FT2 `include' during compilation.
+
+----------------------------------------------------------------------
+
+Copyright 2003, 2005, 2006 by
+David Turner, Robert Wilhelm, and Werner Lemberg.
+
+This file is part of the FreeType project, and may only be used,
+modified, and distributed under the terms of the FreeType project
+license, LICENSE.TXT. By continuing to use, modify, or distribute
+this file you indicate that you have read the license and understand
+and accept it fully.
+
+
+--- end of CUSTOMIZE ---
diff --git a/src/3rdparty/freetype/docs/DEBUG b/src/3rdparty/freetype/docs/DEBUG
new file mode 100644
index 0000000..1fccc21
--- /dev/null
+++ b/src/3rdparty/freetype/docs/DEBUG
@@ -0,0 +1,199 @@
+Debugging within the FreeType sources
+=====================================
+
+I. Configuration macros
+-----------------------
+
+There are several ways to enable debugging features in a FreeType 2
+builds. This is controlled through the definition of special macros
+located in the file `ftoptions.h'. The macros are:
+
+
+ FT_DEBUG_LEVEL_ERROR
+
+ #define this macro if you want to compile the FT_ERROR macro calls
+ to print error messages during program execution. This will not
+ stop the program. Very useful to spot invalid fonts during
+ development and to code workarounds for them.
+
+ FT_DEBUG_LEVEL_TRACE
+
+ #define this macro if you want to compile both macros FT_ERROR and
+ FT_TRACE. This also includes the variants FT_TRACE0, FT_TRACE1,
+ FT_TRACE2, ..., FT_TRACE7.
+
+ The trace macros are used to send debugging messages when an
+ appropriate `debug level' is configured at runtime through the
+ FT2_DEBUG environment variable (more on this later).
+
+ FT_DEBUG_MEMORY
+
+ If this macro is #defined, the FreeType engine is linked with a
+ small but effective debugging memory manager that tracks all
+ allocations and frees that are performed within the font engine.
+
+ When the FT2_DEBUG_MEMORY environment variable is defined at
+ runtime, a call to FT_Done_FreeType will dump memory statistics,
+ including the list of leaked memory blocks with the source locations
+ where these were allocated. It is always a very good idea to define
+ this in development builds. This works with _any_ program linked to
+ FreeType, but requires a big deal of memory (the debugging memory
+ manager never frees the blocks to the heap in order to detect double
+ frees).
+
+ When FT2_DEBUG_MEMORY isn't defined at runtime, the debugging memory
+ manager is ignored, and performance is unaffected.
+
+
+II. Debugging macros
+--------------------
+
+Several macros can be used within the FreeType sources to help debugging
+its code:
+
+
+ 1. FT_ERROR(( ... ))
+
+ This macro is used to send debug messages that indicate relatively
+ serious errors (like broken font files), but will not stop the
+ execution of the running program. Its code is compiled only when
+ either FT_DEBUG_LEVEL_ERROR or FT_DEBUG_LEVEL_TRACE are defined in
+ `ftoption.h'.
+
+ Note that you have to use a printf-like signature, but with double
+ parentheses, like in
+
+ FT_ERROR(( "your %s is not %s\n", "foo", "bar" ));
+
+
+ 2. FT_ASSERT( condition )
+
+ This macro is used to check strong assertions at runtime. If its
+ condition isn't TRUE, the program will abort with a panic message.
+ Its code is compiled when either FT_DEBUG_LEVEL_ERROR or
+ FT_DEBUG_LEVEL_TRACE are defined. You don't need double parentheses
+ here. For example
+
+ FT_ASSERT( ptr != NULL );
+
+
+ 3. FT_TRACE( level, (message...) )
+
+ The FT_TRACE macro is used to send general-purpose debugging
+ messages during program execution. This macro uses an *implicit*
+ macro named FT_COMPONENT used to name the current FreeType component
+ being run.
+
+ The developer should always define FT_COMPONENT as appropriate, for
+ example as in
+
+ #undef FT_COMPONENT
+ #define FT_COMPONENT trace_io
+
+ The value of the FT_COMPONENT macro is an enumeration named
+ trace_XXXX where XXXX is one of the component names defined in the
+ internal file `freetype/internal/fttrace.h'.
+
+ Each such component is assigned a `debug level', ranging from 0
+ to 7, through the use of the FT2_DEBUG environment variable
+ (described below) when a program linked with FreeType starts.
+
+ When FT_TRACE is called, its level is compared to the one of the
+ corresponding component. Messages with trace levels *higher* than
+ the corresponding component level are filtered and never printed.
+
+ This means that trace messages with level 0 are always printed,
+ those with level 2 are only printed when the component level is *at
+ least* 2.
+
+ The second parameter to FT_TRACE must contain parentheses and
+ correspond to a printf-like call, as in
+
+ FT_TRACE( 2, ( "your %s is not %s\n", "foo", "bar" ) )
+
+ The shortcut macros FT_TRACE0, FT_TRACE1, FT_TRACE2, ..., FT_TRACE7
+ can be used with constant level indices, and are much cleaner to
+ use, as in
+
+ FT_TRACE2(( "your %s is not %s\n", "foo", "bar" ));
+
+
+III. Environment variables
+--------------------------
+
+The following environment variables control debugging output and
+behaviour of FreeType at runtime.
+
+
+ FT2_DEBUG
+
+ This variable is only used when FreeType is built with
+ FT_DEBUG_LEVEL_TRACE defined. It contains a list of component level
+ definitions, following this format:
+
+ component1:level1 component2:level2 component3:level3 ...
+
+ where `componentX' is the name of a tracing component, as defined in
+ `fttrace.h', but without the `trace_' prefix. `levelX' is the
+ corresponding level to use at runtime.
+
+ `any' is a special component name that will be interpreted as
+ `any/all components'. For example, the following definitions
+
+ set FT2_DEBUG=any:2 memory:5 io:4 (on Windows)
+ export FT2_DEBUG="any:2 memory:5 io:4" (on Linux with bash)
+
+ both stipulate that all components should have level 2, except for
+ the memory and io components which will be set to trace levels 5 and
+ 4, respectively.
+
+
+ FT2_DEBUG_MEMORY
+
+ This environment variable, when defined, tells FreeType to use a
+ debugging memory manager that will track leaking memory blocks as
+ well as other common errors like double frees. It is also capable
+ of reporting _where_ the leaking blocks were allocated, which
+ considerably saves time when debugging new additions to the library.
+
+ This code is only compiled when FreeType is built with the
+ FT_DEBUG_MEMORY macro #defined in `ftoption.h' though, it will be
+ ignored in other builds.
+
+
+ FT2_ALLOC_TOTAL_MAX
+
+ This variable is ignored if FT2_DEBUG_MEMORY is not defined. It
+ allows you to specify a maximum heap size for all memory allocations
+ performed by FreeType. This is very useful to test the robustness
+ of the font engine and programs that use it in tight memory
+ conditions.
+
+ If it is undefined, or if its value is not strictly positive, then
+ no allocation bounds are checked at runtime.
+
+
+ FT2_ALLOC_COUNT_MAX
+
+ This variable is ignored if FT2_DEBUG_MEMORY is not defined. It
+ allows you to specify a maximum number of memory allocations
+ performed by FreeType before returning the error
+ FT_Err_Out_Of_Memory. This is useful for debugging and testing the
+ engine's robustness.
+
+ If it is undefined, or if its value is not strictly positive, then
+ no allocation bounds are checked at runtime.
+
+------------------------------------------------------------------------
+
+Copyright 2002, 2003, 2004, 2005 by
+David Turner, Robert Wilhelm, and Werner Lemberg.
+
+This file is part of the FreeType project, and may only be used,
+modified, and distributed under the terms of the FreeType project
+license, LICENSE.TXT. By continuing to use, modify, or distribute this
+file you indicate that you have read the license and understand and
+accept it fully.
+
+
+--- end of DEBUG ---
diff --git a/src/3rdparty/freetype/docs/FTL.TXT b/src/3rdparty/freetype/docs/FTL.TXT
new file mode 100644
index 0000000..bbaba33
--- /dev/null
+++ b/src/3rdparty/freetype/docs/FTL.TXT
@@ -0,0 +1,169 @@
+ The FreeType Project LICENSE
+ ----------------------------
+
+ 2006-Jan-27
+
+ Copyright 1996-2002, 2006 by
+ David Turner, Robert Wilhelm, and Werner Lemberg
+
+
+
+Introduction
+============
+
+ The FreeType Project is distributed in several archive packages;
+ some of them may contain, in addition to the FreeType font engine,
+ various tools and contributions which rely on, or relate to, the
+ FreeType Project.
+
+ This license applies to all files found in such packages, and
+ which do not fall under their own explicit license. The license
+ affects thus the FreeType font engine, the test programs,
+ documentation and makefiles, at the very least.
+
+ This license was inspired by the BSD, Artistic, and IJG
+ (Independent JPEG Group) licenses, which all encourage inclusion
+ and use of free software in commercial and freeware products
+ alike. As a consequence, its main points are that:
+
+ o We don't promise that this software works. However, we will be
+ interested in any kind of bug reports. (`as is' distribution)
+
+ o You can use this software for whatever you want, in parts or
+ full form, without having to pay us. (`royalty-free' usage)
+
+ o You may not pretend that you wrote this software. If you use
+ it, or only parts of it, in a program, you must acknowledge
+ somewhere in your documentation that you have used the
+ FreeType code. (`credits')
+
+ We specifically permit and encourage the inclusion of this
+ software, with or without modifications, in commercial products.
+ We disclaim all warranties covering The FreeType Project and
+ assume no liability related to The FreeType Project.
+
+
+ Finally, many people asked us for a preferred form for a
+ credit/disclaimer to use in compliance with this license. We thus
+ encourage you to use the following text:
+
+ """
+ Portions of this software are copyright © <year> The FreeType
+ Project (www.freetype.org). All rights reserved.
+ """
+
+ Please replace <year> with the value from the FreeType version you
+ actually use.
+
+
+Legal Terms
+===========
+
+0. Definitions
+--------------
+
+ Throughout this license, the terms `package', `FreeType Project',
+ and `FreeType archive' refer to the set of files originally
+ distributed by the authors (David Turner, Robert Wilhelm, and
+ Werner Lemberg) as the `FreeType Project', be they named as alpha,
+ beta or final release.
+
+ `You' refers to the licensee, or person using the project, where
+ `using' is a generic term including compiling the project's source
+ code as well as linking it to form a `program' or `executable'.
+ This program is referred to as `a program using the FreeType
+ engine'.
+
+ This license applies to all files distributed in the original
+ FreeType Project, including all source code, binaries and
+ documentation, unless otherwise stated in the file in its
+ original, unmodified form as distributed in the original archive.
+ If you are unsure whether or not a particular file is covered by
+ this license, you must contact us to verify this.
+
+ The FreeType Project is copyright (C) 1996-2000 by David Turner,
+ Robert Wilhelm, and Werner Lemberg. All rights reserved except as
+ specified below.
+
+1. No Warranty
+--------------
+
+ THE FREETYPE PROJECT IS PROVIDED `AS IS' WITHOUT WARRANTY OF ANY
+ KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE. IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS
+ BE LIABLE FOR ANY DAMAGES CAUSED BY THE USE OR THE INABILITY TO
+ USE, OF THE FREETYPE PROJECT.
+
+2. Redistribution
+-----------------
+
+ This license grants a worldwide, royalty-free, perpetual and
+ irrevocable right and license to use, execute, perform, compile,
+ display, copy, create derivative works of, distribute and
+ sublicense the FreeType Project (in both source and object code
+ forms) and derivative works thereof for any purpose; and to
+ authorize others to exercise some or all of the rights granted
+ herein, subject to the following conditions:
+
+ o Redistribution of source code must retain this license file
+ (`FTL.TXT') unaltered; any additions, deletions or changes to
+ the original files must be clearly indicated in accompanying
+ documentation. The copyright notices of the unaltered,
+ original files must be preserved in all copies of source
+ files.
+
+ o Redistribution in binary form must provide a disclaimer that
+ states that the software is based in part of the work of the
+ FreeType Team, in the distribution documentation. We also
+ encourage you to put an URL to the FreeType web page in your
+ documentation, though this isn't mandatory.
+
+ These conditions apply to any software derived from or based on
+ the FreeType Project, not just the unmodified files. If you use
+ our work, you must acknowledge us. However, no fee need be paid
+ to us.
+
+3. Advertising
+--------------
+
+ Neither the FreeType authors and contributors nor you shall use
+ the name of the other for commercial, advertising, or promotional
+ purposes without specific prior written permission.
+
+ We suggest, but do not require, that you use one or more of the
+ following phrases to refer to this software in your documentation
+ or advertising materials: `FreeType Project', `FreeType Engine',
+ `FreeType library', or `FreeType Distribution'.
+
+ As you have not signed this license, you are not required to
+ accept it. However, as the FreeType Project is copyrighted
+ material, only this license, or another one contracted with the
+ authors, grants you the right to use, distribute, and modify it.
+ Therefore, by using, distributing, or modifying the FreeType
+ Project, you indicate that you understand and accept all the terms
+ of this license.
+
+4. Contacts
+-----------
+
+ There are two mailing lists related to FreeType:
+
+ o freetype@nongnu.org
+
+ Discusses general use and applications of FreeType, as well as
+ future and wanted additions to the library and distribution.
+ If you are looking for support, start in this list if you
+ haven't found anything to help you in the documentation.
+
+ o freetype-devel@nongnu.org
+
+ Discusses bugs, as well as engine internals, design issues,
+ specific licenses, porting, etc.
+
+ Our home page can be found at
+
+ http://www.freetype.org
+
+
+--- end of FTL.TXT ---
diff --git a/src/3rdparty/freetype/docs/GPL.TXT b/src/3rdparty/freetype/docs/GPL.TXT
new file mode 100644
index 0000000..b2fe7b6
--- /dev/null
+++ b/src/3rdparty/freetype/docs/GPL.TXT
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/src/3rdparty/freetype/docs/INSTALL b/src/3rdparty/freetype/docs/INSTALL
new file mode 100644
index 0000000..585c4db
--- /dev/null
+++ b/src/3rdparty/freetype/docs/INSTALL
@@ -0,0 +1,89 @@
+
+There are several ways to build the FreeType library, depending on
+your system and the level of customization you need. Here is a short
+overview of the documentation available:
+
+
+I. Normal installation and upgrades
+===================================
+
+ 1. Native TrueType Hinting
+
+ Native TrueType hinting is disabled by default[1]. If you really
+ need it, read the file `TRUETYPE' for information.
+
+
+ 2. Unix Systems (including Mac OS X, Cygwin, and MSys on Windows)
+
+ Please read *both* `UPGRADE.UNIX' and `INSTALL.UNIX' to install or
+ upgrade FreeType 2 on a Unix system. Note that you *need* GNU
+ Make for automatic compilation, since other make tools won't work
+ (this includes BSD Make).
+
+
+ 3. On VMS with the `mms' build tool
+
+ See `INSTALL.VMS' for installation instructions on this platform.
+
+
+ 4. Other systems using GNU Make
+
+ On non-Unix platforms, it is possible to build the library using
+ GNU Make utility. Note that *NO OTHER MAKE TOOL WILL WORK*[2]!
+ This methods supports several compilers on Windows, OS/2, and
+ BeOS, including MinGW, Visual C++, Borland C++, and more.
+
+ Instructions are provided in the file `INSTALL.GNU'.
+
+
+ 5. With an IDE Project File (e.g., for Visual Studio or CodeWarrior)
+
+ We provide a small number of `project files' for various IDEs to
+ automatically build the library as well. Note that these files
+ are not supported and only sporadically maintained by FreeType
+ developers, so don't expect them to work in each release.
+
+ To find them, have a look at the content of the `builds/<system>'
+ directory, where <system> stands for your OS or environment.
+
+
+ 6. From you own IDE, or own Makefiles
+
+ If you want to create your own project file, follow the
+ instructions given in the `INSTALL.ANY' document of this
+ directory.
+
+
+II. Custom builds of the library
+================================
+
+ Customizing the compilation of FreeType is easy, and allows you to
+ select only the components of the font engine that you really need.
+ For more details read the file `CUSTOMIZE'.
+
+
+----------------------------------------------------------------------
+
+[1] More details on: http://www.freetype.org/patents.html
+
+[2] make++, a make tool written in Perl, has sufficient support of GNU
+ make extensions to build FreeType. See
+
+ http://makepp.sourceforge.net
+
+ for more information; you need version 1.19 or newer, and you must
+ pass option `--norc-substitution'.
+
+----------------------------------------------------------------------
+
+Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 by
+David Turner, Robert Wilhelm, and Werner Lemberg.
+
+This file is part of the FreeType project, and may only be used,
+modified, and distributed under the terms of the FreeType project
+license, LICENSE.TXT. By continuing to use, modify, or distribute
+this file you indicate that you have read the license and understand
+and accept it fully.
+
+
+--- end of INSTALL ---
diff --git a/src/3rdparty/freetype/docs/INSTALL.ANY b/src/3rdparty/freetype/docs/INSTALL.ANY
new file mode 100644
index 0000000..06f65d7
--- /dev/null
+++ b/src/3rdparty/freetype/docs/INSTALL.ANY
@@ -0,0 +1,139 @@
+Instructions on how to build FreeType with your own build tool
+==============================================================
+
+See the file `CUSTOMIZE' to learn how to customize FreeType to
+specific environments.
+
+
+I. Standard procedure
+---------------------
+
+ * DISABLE PRE-COMPILED HEADERS! This is very important for Visual
+ C++, because FreeType uses lines like:
+
+ #include FT_FREETYPE_H
+
+ which are not correctly supported by this compiler while being ISO
+ C compliant!
+
+ * You need to add the directories `freetype2/include' to your
+ include path when compiling the library.
+
+ * FreeType 2 is made of several components; each of them is located
+ in a subdirectory of `freetype2/src'. For example,
+ `freetype2/src/truetype/' contains the TrueType font driver.
+
+ * DO NOT COMPILE ALL C FILES! Rather, compile the following ones.
+
+ -- base components (required)
+
+ src/base/ftsystem.c
+ src/base/ftinit.c
+ src/base/ftdebug.c
+
+ src/base/ftbase.c
+
+ src/base/ftbbox.c -- recommended, see <freetype/ftbbox.h>
+ src/base/ftglyph.c -- recommended, see <freetype/ftglyph.h>
+
+ src/base/ftbdf.c -- optional, see <freetype/ftbdf.h>
+ src/base/ftbitmap.c -- optional, see <freetype/ftbitmap.h>
+ src/base/ftgxval.c -- optional, see <freetype/ftgxval.h>
+ src/base/ftmm.c -- optional, see <freetype/ftmm.h>
+ src/base/ftotval.c -- optional, see <freetype/ftotval.h>
+ src/base/ftpfr.c -- optional, see <freetype/ftpfr.h>
+ src/base/ftstroke.c -- optional, see <freetype/ftstroke.h>
+ src/base/ftsynth.c -- optional, see <freetype/ftsynth.h>
+ src/base/fttype1.c -- optional, see <freetype/t1tables.h>
+ src/base/ftwinfnt.c -- optional, see <freetype/ftwinfnt.h>
+
+ src/base/ftmac.c -- only on the Macintosh
+
+ -- font drivers (optional; at least one is needed)
+
+ src/bdf/bdf.c -- BDF font driver
+ src/cff/cff.c -- CFF/OpenType font driver
+ src/cid/type1cid.c -- Type 1 CID-keyed font driver
+ src/pcf/pcf.c -- PCF font driver
+ src/pfr/pfr.c -- PFR/TrueDoc font driver
+ src/sfnt/sfnt.c -- SFNT files support
+ (TrueType & OpenType)
+ src/truetype/truetype.c -- TrueType font driver
+ src/type1/type1.c -- Type 1 font driver
+ src/type42/type42.c -- Type 42 font driver
+ src/winfonts/winfnt.c -- Windows FONT / FNT font driver
+
+ -- rasterizers (optional; at least one is needed for
+ vector formats)
+
+ src/raster/raster.c -- monochrome rasterizer
+ src/smooth/smooth.c -- anti-aliasing rasterizer
+
+ -- auxiliary modules (optional)
+
+ src/autofit/autofit.c -- auto hinting module
+ src/cache/ftcache.c -- cache sub-system (in beta)
+ src/gzip/ftgzip.c -- support for compressed fonts (.gz)
+ src/lzw/ftlzw.c -- support for compressed fonts (.Z)
+ src/gxvalid/gxvalid.c -- TrueTypeGX/AAT table validation
+ src/otvalid/otvalid.c -- OpenType table validation
+ src/psaux/psaux.c -- PostScript Type 1 parsing
+ src/pshinter/pshinter.c -- PS hinting module
+ src/psnames/psnames.c -- PostScript glyph names support
+
+
+ Notes:
+
+ `cff.c' needs `sfnt.c', `pshinter.c', and `psnames.c'
+ `truetype.c' needs `sfnt.c' and `psnames.c'
+ `type1.c' needs `psaux.c' `pshinter.c', and `psnames.c'
+ `type1cid.c' needs `psaux.c', `pshinter.c', and `psnames.c'
+ `type42.c' needs `truetype.c'
+
+
+ Read the file `CUSTOMIZE' in case you want to compile only a subset
+ of the drivers, renderers, and optional modules; a detailed
+ description of the various base extension is given in the top-level
+ file `modules.cfg'.
+
+ You are done. In case of problems, see the archives of the FreeType
+ development mailing list.
+
+
+II. Support for flat-directory compilation
+------------------------------------------
+
+ It is possible to put all FreeType 2 source files into a single
+ directory, with the *exception* of the `include' hierarchy.
+
+ 1. Copy all files in current directory
+
+ cp freetype2/src/base/*.[hc] .
+ cp freetype2/src/raster1/*.[hc] .
+ cp freetype2/src/smooth/*.[hc] .
+ etc.
+
+ 2. Compile sources
+
+ cc -c -Ifreetype2/include ftsystem.c
+ cc -c -Ifreetype2/include ftinit.c
+ cc -c -Ifreetype2/include ftdebug.c
+ cc -c -Ifreetype2/include ftbase.c
+ etc.
+
+ You don't need to define the FT_FLAT_COMPILATION macro (as this
+ was required in previous releases of FreeType 2).
+
+----------------------------------------------------------------------
+
+Copyright 2003, 2005, 2006 by
+David Turner, Robert Wilhelm, and Werner Lemberg.
+
+This file is part of the FreeType project, and may only be used,
+modified, and distributed under the terms of the FreeType project
+license, LICENSE.TXT. By continuing to use, modify, or distribute
+this file you indicate that you have read the license and understand
+and accept it fully.
+
+
+--- end of INSTALL.ANY ---
diff --git a/src/3rdparty/freetype/docs/INSTALL.CROSS b/src/3rdparty/freetype/docs/INSTALL.CROSS
new file mode 100644
index 0000000..1a0c00c
--- /dev/null
+++ b/src/3rdparty/freetype/docs/INSTALL.CROSS
@@ -0,0 +1,135 @@
+This document contains instructions on how to cross-build the FreeType
+library on Unix systems, for example, building binaries for Linux/MIPS
+on FreeBSD/i386. Before reading this document, please consult
+INSTALL.UNIX for required tools and the basic self-building procedure.
+
+
+ 1. Required Tools
+ -----------------
+
+ For self-building the FreeType library on a Unix system, GNU Make
+ 3.78.1 or newer is required. INSTALL.UNIX contains hints how to
+ check the installed `make'.
+
+ The GNU C compiler to cross-build the target system is required.
+ At present, using non-GNU cross compiler is not tested. The cross
+ compiler is expected to be installed with a system prefix. For
+ example, if your building system is FreeBSD/i386 and the target
+ system is Linux/MIPS, the cross compiler should be installed with
+ the name `mips-ip22-linuxelf-gcc'.
+
+ A C compiler for a self-build is required also, to build a tool
+ that is executed during the building procedure. Non-GNU self
+ compilers are acceptable, but such a setup is not tested yet.
+
+
+ 2. Configuration
+ ----------------
+
+ 2.1. Building and target system
+
+ To configure for cross-build, the options `--host=<system>' and
+ `--build=<system>' must be passed to configure. For example, if
+ your building system is FreeBSD/i386 and the target system is
+ Linux/MIPS, say
+
+ ./configure \
+ --build=i386-unknown-freebsd \
+ --host=mips-ip22-linuxelf \
+ [other options]
+
+ It should be noted that `--host=<system>' specifies the system
+ where the built binaries will be executed, not the system where
+ the build actually happens. Older versions of GNU autoconf use
+ the option pair `--host=' and `--target='. This is broken and
+ doesn't work. Similarly, an explicit CC specification like
+
+ env CC=mips-ip22-linux-gcc ./configure
+
+ or
+
+ env CC=/usr/local/mips-ip22-linux/bin/gcc ./configure
+
+ doesn't work either; such a configuration confuses the
+ `configure' script while trying to find the cross and native C
+ compilers.
+
+
+ 2.2. The prefix to install FreeType2
+
+ Setting `--prefix=<prefix>' properly is important. The prefix
+ to install FreeType2 is written into the freetype-config script
+ and freetype2.pc configuration file.
+
+ If the built FreeType 2 library is used as a part of the
+ cross-building system, the prefix is expected to be different
+ from the self-building system. For example, configuration with
+ `--prefix=/usr/local' installs binaries into the system wide
+ `/usr/local' directory which then can't be executed. This
+ causes confusion in configuration of all applications which use
+ FreeType2. Instead, use a prefix to install the cross-build
+ into a separate system tree, for example,
+ `--prefix=/usr/local/mips-ip22-linux/'.
+
+ On the other hand, if the built FreeType2 is used as a part of
+ the target system, the prefix to install should reflect the file
+ system structure of the target system.
+
+
+ 3. Building command
+ -------------------
+
+ If the configuration finishes successfully, invoking GNU make
+ builds FreeType2. Just say
+
+ make
+
+ or
+
+ gmake
+
+ depending on the name the GNU make binary actually has.
+
+
+ 4. Installation
+ ---------------
+
+ Saying
+
+ make install
+
+ as usual to install FreeType2 into the directory tree specified by
+ the argument of the `--prefix' option.
+
+ As noted in section 2.2, FreeType2 is sometimes configured to be
+ installed into the system directory of the target system, and
+ should not be installed in the cross-building system. In such
+ cases, the make variable `DESTDIR' is useful to change the root
+ directory in the installation. For example, after
+
+ make DESTDIR=/mnt/target_system_root/ install
+
+ the built FreeType2 library files are installed into the directory
+ `/mnt/target_system_root/<prefix_in_configure>/lib'.
+
+
+ 5. TODO
+ -------
+
+ Cross building between Cygwin (or MSys) and Unix must be tested.
+
+
+----------------------------------------------------------------------
+
+Copyright 2006 by suzuki toshiya
+David Turner, Robert Wilhelm, and Werner Lemberg.
+
+
+This file is part of the FreeType project, and may only be used,
+modified, and distributed under the terms of the FreeType project
+license, LICENSE.TXT. By continuing to use, modify, or distribute
+this file you indicate that you have read the license and understand
+and accept it fully.
+
+
+--- end of INSTALL.CROSS ---
diff --git a/src/3rdparty/freetype/docs/INSTALL.GNU b/src/3rdparty/freetype/docs/INSTALL.GNU
new file mode 100644
index 0000000..7b588cb
--- /dev/null
+++ b/src/3rdparty/freetype/docs/INSTALL.GNU
@@ -0,0 +1,159 @@
+This document contains instructions how to build the FreeType library
+on non-Unix systems with the help of GNU Make. Note that if you are
+running Cygwin or MSys in Windows, you should follow the instructions
+in the file INSTALL.UNIX instead.
+
+
+ FreeType 2 includes a powerful and flexible build system that allows
+ you to easily compile it on a great variety of platforms from the
+ command line. To do so, just follow these simple instructions.
+
+ 1. Install GNU Make
+ -------------------
+
+ Because GNU Make is the only Make tool supported to compile
+ FreeType 2, you should install it on your machine.
+
+ The FreeType 2 build system relies on many features special to GNU
+ Make.
+
+ NEARLY ALL OTHER MAKE TOOLS FAIL, INCLUDING `BSD MAKE', SO REALLY
+ INSTALL A RECENT VERSION OF GNU MAKE ON YOUR SYSTEM!
+
+ Note that make++, a make tool written in Perl, supports enough
+ features of GNU make to compile FreeType. See
+
+ http://makepp.sourceforge.net
+
+ for more information; you need version 1.19 or newer, and you must
+ pass option `--norc-substitution'.
+
+ Make sure that you are invoking GNU Make from the command line, by
+ typing something like:
+
+ make -v
+
+ to display its version number.
+
+ VERSION 3.78.1 OR NEWER IS NEEDED!
+
+
+ 2. Invoke `make'
+ ----------------
+
+ Go to the root directory of FreeType 2, then simply invoke GNU
+ Make from the command line. This will launch the FreeType 2 host
+ platform detection routines. A summary will be displayed, for
+ example, on Win32.
+
+
+ ==============================================================
+ FreeType build system -- automatic system detection
+
+ The following settings are used:
+
+ platform win32
+ compiler gcc
+ configuration directory .\builds\win32
+ configuration rules .\builds\win32\w32-gcc.mk
+
+ If this does not correspond to your system or settings please
+ remove the file 'config.mk' from this directory then read the
+ INSTALL file for help.
+
+ Otherwise, simply type 'make' again to build the library
+ or 'make refdoc' to build the API reference (the latter needs
+ python).
+ =============================================================
+
+
+ If the detected settings correspond to your platform and compiler,
+ skip to step 5. Note that if your platform is completely alien to
+ the build system, the detected platform will be `ansi'.
+
+
+ 3. Configure the build system for a different compiler
+ ------------------------------------------------------
+
+ If the build system correctly detected your platform, but you want
+ to use a different compiler than the one specified in the summary
+ (for most platforms, gcc is the default compiler), invoke GNU Make
+ with
+
+ make setup <compiler>
+
+ Examples:
+
+ to use Visual C++ on Win32, type: `make setup visualc'
+ to use Borland C++ on Win32, type `make setup bcc32'
+ to use Watcom C++ on Win32, type `make setup watcom'
+ to use Intel C++ on Win32, type `make setup intelc'
+ to use LCC-Win32 on Win32, type: `make setup lcc'
+ to use Watcom C++ on OS/2, type `make setup watcom'
+ to use VisualAge C++ on OS/2, type `make setup visualage'
+
+ The <compiler> name to use is platform-dependent. The list of
+ available compilers for your system is available in the file
+ `builds/<system>/detect.mk'.
+
+ If you are satisfied by the new configuration summary, skip to
+ step 5.
+
+
+ 4. Configure the build system for an unknown platform/compiler
+ --------------------------------------------------------------
+
+ The auto-detection/setup phase of the build system copies a file
+ to the current directory under the name `config.mk'.
+
+ For example, on OS/2+gcc, it would simply copy
+ `builds/os2/os2-gcc.mk' to `./config.mk'.
+
+ If for some reason your platform isn't correctly detected, copy
+ manually the configuration sub-makefile to `./config.mk' and go to
+ step 5.
+
+ Note that this file is a sub-Makefile used to specify Make
+ variables for compiler and linker invocation during the build.
+ You can easily create your own version from one of the existing
+ configuration files, then copy it to the current directory under
+ the name `./config.mk'.
+
+
+ 5. Build the library
+ --------------------
+
+ The auto-detection/setup phase should have copied a file in the
+ current directory, called `./config.mk'. This file contains
+ definitions of various Make variables used to invoke the compiler
+ and linker during the build. [It has also generated a file called
+ `ftmodule.h' in the objects directory (which is normally
+ `<toplevel>/objs/'); please read the file `docs/CUSTOMIZE' for
+ customization of FreeType.]
+
+ To launch the build, simply invoke GNU Make again: The top
+ Makefile will detect the configuration file and run the build with
+ it.
+
+
+ Final note
+
+ The build system builds a statically linked library of the font
+ engine in the `objs' directory. It does _not_ support the build
+ of DLLs on Windows and OS/2. If you need these, you have to
+ either use an IDE-specific project file, or follow the
+ instructions in `INSTALL.ANY' to create your own Makefiles.
+
+----------------------------------------------------------------------
+
+Copyright 2003, 2004, 2005, 2006 by
+David Turner, Robert Wilhelm, and Werner Lemberg.
+
+This file is part of the FreeType project, and may only be used,
+modified, and distributed under the terms of the FreeType project
+license, LICENSE.TXT. By continuing to use, modify, or distribute
+this file you indicate that you have read the license and understand
+and accept it fully.
+
+
+--- end of INSTALL.GNU ---
diff --git a/src/3rdparty/freetype/docs/INSTALL.MAC b/src/3rdparty/freetype/docs/INSTALL.MAC
new file mode 100644
index 0000000..42bb0d8
--- /dev/null
+++ b/src/3rdparty/freetype/docs/INSTALL.MAC
@@ -0,0 +1,32 @@
+Please follow the instructions in INSTALL.UNIX to install FreeType on
+Mac OS X.
+
+Currently FreeType2 functions based on some deprecated Carbon APIs
+return FT_Err_Unimplemented_Feature always, even if FreeType2 is
+configured and built on the system that deprecated Carbon APIs are
+available. To enable deprecated FreeType2 functions as far as possible,
+replace src/base/ftmac.c by builds/mac/ftmac.c.
+
+Starting with Mac OS X 10.5, gcc defaults the deployment target
+to 10.5. In previous versions of Mac OS X, this defaulted to 10.1.
+If you want your built binaries to run only on 10.5, this change
+does not concern you. If you want them to also run on older versions
+of Mac OS X, then you must either set the MACOSX_DEPLOYMENT_TARGET
+environment variable or pass -mmacosx-version-min to gcc. You should
+specify the oldest version of Mac OS you want the code to run on.
+For example, if you use Bourne shell:
+
+ export MACOSX_DEPLOYMENT_TARGET=10.2
+
+or, if you use C shell:
+
+ setenv MACOSX_DEPLOYMENT_TARGET 10.2
+
+Alternatively, you could pass "-mmacosx-version-min=10.2" to gcc.
+
+Here the number 10.2 is the lowest version that the built binaries
+can run on. In the cases in above, the built binaries will run on
+Mac OS X 10.2 and later, but _not_ earlier. If you want to run on
+earlier, you have to set lower version, e.g. 10.0.
+
+For classic Mac OS (Mac OS 7, 8, 9) please refer to builds/mac/README.
diff --git a/src/3rdparty/freetype/docs/INSTALL.UNIX b/src/3rdparty/freetype/docs/INSTALL.UNIX
new file mode 100644
index 0000000..3ddfb8e
--- /dev/null
+++ b/src/3rdparty/freetype/docs/INSTALL.UNIX
@@ -0,0 +1,96 @@
+This document contains instructions on how to build the FreeType
+library on Unix systems. This also works for emulations like Cygwin
+or MSys on Win32:
+
+
+ 1. Ensure that you are using GNU Make
+ -------------------------------------
+
+ The FreeType build system _exclusively_ works with GNU Make. You
+ will not be able to compile the library with the instructions
+ below using any other alternative (including BSD Make).
+
+ Check that you have GNU make by running the command:
+
+ make -v
+
+ This should dump some text that begins with:
+
+ GNU Make <version number>
+ Copyright (C) <year> Free Software Foundation Inc.
+
+ Note that version 3.78.1 or higher is *required* or the build will
+ fail.
+
+ It is also fine to have GNU Make under another name (e.g. 'gmake')
+ if you use the GNUMAKE variable as described below.
+
+ As a special exception, 'makepp' can also be used to build
+ FreeType 2. See the file docs/MAKEPP for details.
+
+
+ 2. Regenerate the configure script if needed
+ --------------------------------------------
+
+ This only applies if you are building a CVS snapshot or checkout,
+ *not* if you grabbed the sources of an official release.
+
+ You need to invoke the `autogen.sh' script in the top-level
+ directory in order to create the `configure' script for your
+ platform. Normally, this simply means typing:
+
+ sh autogen.sh
+
+ In case of problems, you may need to install or upgrade Automake,
+ Autoconf or Libtool. See README.CVS in the top-level directory
+ for more information.
+
+
+ 3. Build and install the library
+ --------------------------------
+
+ The following should work on all Unix systems where the `make'
+ command invokes GNU Make:
+
+ ./configure [options]
+ make
+ make install (as root)
+
+ The default installation path is `/usr/local'. It can be changed
+ with the `--prefix=<path>' option. Example:
+
+ ./configure --prefix=/usr
+
+ When using a different command to invoke GNU Make, use the GNUMAKE
+ variable. For example, if `gmake' is the command to use on your
+ system, do something like:
+
+ GNUMAKE=gmake ./configure [options]
+ gmake
+ gmake install (as root)
+
+ If this still doesn't work, there must be a problem with your
+ system (e.g., you are using a very old version of GNU Make).
+
+ It is possible to compile FreeType in a different directory.
+ Assuming the FreeType source files in directory `/src/freetype' a
+ compilation in directory `foo' works as follows:
+
+ cd foo
+ /src/freetype/configure [options]
+ make
+ make install
+
+----------------------------------------------------------------------
+
+Copyright 2003, 2004, 2005, 2006, 2007 by
+David Turner, Robert Wilhelm, and Werner Lemberg.
+
+This file is part of the FreeType project, and may only be used,
+modified, and distributed under the terms of the FreeType project
+license, LICENSE.TXT. By continuing to use, modify, or distribute
+this file you indicate that you have read the license and understand
+and accept it fully.
+
+
+--- end of INSTALL.UNIX ---
diff --git a/src/3rdparty/freetype/docs/INSTALL.VMS b/src/3rdparty/freetype/docs/INSTALL.VMS
new file mode 100644
index 0000000..994e566
--- /dev/null
+++ b/src/3rdparty/freetype/docs/INSTALL.VMS
@@ -0,0 +1,62 @@
+How to build the freetype2 library on VMS
+-----------------------------------------
+
+It is actually very straightforward to install the Freetype2 library.
+Just execute vms_make.com from the toplevel directory to build the
+library. This procedure currently accepts the following options:
+
+DEBUG
+ Build the library with debug information and without optimization.
+
+lopts=<value>
+ Options to pass to the link command e.g. lopts=/traceback
+
+ccopt=<value>
+ Options to pass to the C compiler e.g. ccopt=/float=ieee
+
+In case you did download the demos, place them in a separate directory
+sharing the same toplevel as the directory of Freetype2 and follow the
+same instructions as above for the demos from there. The build
+process relies on this to figure the location of the Freetype2 include
+files.
+
+
+To rebuild the sources it is necessary to have MMS/MMK installed on
+the system.
+
+The library is available in the directory
+
+ [.LIB]
+
+To compile applications using FreeType 2 you have to define the
+logical FREETYPE pointing to the directory
+
+ [.INCLUDE.FREETYPE]
+
+i.e., if the directory in which this INSTALL.VMS file is located is
+$disk:[freetype] then define the logical with
+
+ define freetype $disk:[freetype.include.freetype]
+
+This version has been tested with Compaq C V6.2-006 on OpenVMS Alpha
+V7.2-1.
+
+
+ Any problems can be reported to
+
+ Jouk Jansen <joukj@hrem.stm.tudelft.nl> or
+ Martin P.J. Zinser <zinser@zinser.no-ip.info>
+
+------------------------------------------------------------------------
+
+Copyright 2000, 2004 by
+David Turner, Robert Wilhelm, and Werner Lemberg.
+
+This file is part of the FreeType project, and may only be used,
+modified, and distributed under the terms of the FreeType project
+license, LICENSE.TXT. By continuing to use, modify, or distribute this
+file you indicate that you have read the license and understand and
+accept it fully.
+
+
+--- end of INSTALL.VMS ---
diff --git a/src/3rdparty/freetype/docs/LICENSE.TXT b/src/3rdparty/freetype/docs/LICENSE.TXT
new file mode 100644
index 0000000..102a03d
--- /dev/null
+++ b/src/3rdparty/freetype/docs/LICENSE.TXT
@@ -0,0 +1,28 @@
+
+The FreeType 2 font engine is copyrighted work and cannot be used
+legally without a software license. In order to make this project
+usable to a vast majority of developers, we distribute it under two
+mutually exclusive open-source licenses.
+
+This means that *you* must choose *one* of the two licenses described
+below, then obey all its terms and conditions when using FreeType 2 in
+any of your projects or products.
+
+ - The FreeType License, found in the file `FTL.TXT', which is similar
+ to the original BSD license *with* an advertising clause that forces
+ you to explicitly cite the FreeType project in your product's
+ documentation. All details are in the license file. This license
+ is suited to products which don't use the GNU General Public
+ License.
+
+ - The GNU General Public License version 2, found in `GPL.TXT' (any
+ later version can be used also), for programs which already use the
+ GPL. Note that the FTL is incompatible with the GPL due to its
+ advertisement clause.
+
+The contributed PCF driver comes with a license similar to that of the X
+Window System. It is compatible to the above two licenses (see file
+src/pcf/readme).
+
+
+--- end of LICENSE.TXT ---
diff --git a/src/3rdparty/freetype/docs/MAKEPP b/src/3rdparty/freetype/docs/MAKEPP
new file mode 100644
index 0000000..58eaf55
--- /dev/null
+++ b/src/3rdparty/freetype/docs/MAKEPP
@@ -0,0 +1,5 @@
+As a special exception, FreeType can also be built with the 'makepp'
+build tool, available from http://makepp.sourceforge.net.
+
+Note, however. that you will need at least version 1.19 and pass the
+option --norc-substitution to have it work correctly.
diff --git a/src/3rdparty/freetype/docs/PATENTS b/src/3rdparty/freetype/docs/PATENTS
new file mode 100644
index 0000000..f36778b
--- /dev/null
+++ b/src/3rdparty/freetype/docs/PATENTS
@@ -0,0 +1,27 @@
+
+ FreeType Patents Disclaimer
+ August 1999
+
+
+
+WE HAVE DISCOVERED THAT APPLE OWNS SEVERAL PATENTS RELATED TO THE
+RENDERING OF TRUETYPE FONTS. THIS COULD MEAN THAT THE FREE USE OF
+FREETYPE MIGHT BE ILLEGAL IN THE USA, JAPAN, AND POSSIBLY OTHER
+COUNTRIES, BE IT IN PROPRIETARY OR FREE SOFTWARE PRODUCTS.
+
+FOR MORE DETAILS, WE STRONGLY ADVISE YOU TO GO TO THE FREETYPE
+PATENTS PAGE AT THE FOLLOWING WEB ADDRESS:
+
+ http://www.freetype.org/patents.html
+
+WE WILL NOT PLACE INFORMATION IN THIS FILE AS THE SITUATION IS STILL
+UNDETERMINED FOR NOW. AT THE TIME THESE LINES ARE WRITTEN, WE HAVE
+CONTACTED APPLE'S LEGAL DEPARTMENT AND ARE STILL WAITING FOR THEIR
+ANSWER ON THE SUBJECT.
+
+PLEASE READ THE `INSTALL' FILE TO SEE HOW TO DISABLE THE ENGINE'S
+BYTECODE INTERPRETER IN ORDER TO BUILD A PATENT-FREE ENGINE, AT THE
+COST OF RENDERING QUALITY.
+
+
+--- end of PATENTS ---
diff --git a/src/3rdparty/freetype/docs/PROBLEMS b/src/3rdparty/freetype/docs/PROBLEMS
new file mode 100644
index 0000000..9b59896
--- /dev/null
+++ b/src/3rdparty/freetype/docs/PROBLEMS
@@ -0,0 +1,77 @@
+This file describes various problems that have been encountered in
+compiling, installing and running FreeType 2. Suggestions for
+additions or other improvements to this file are welcome.
+
+----------------------------------------------------------------------
+
+Running Problems
+================
+
+
+* Some Type 1, Multiple Masters, and CID-keyed PostScript fonts aren't
+ handled correctly.
+
+-----
+
+Of course, there might be bugs in FreeType, but some fonts based on
+the PostScript format can't behandled indeed. The reason is that
+FreeType doesn't contain a full PostScript interpreter but applies
+pattern matching instead. In case a font doesn't follow the standard
+structure of the given font format, FreeType fails. A typical example
+is Adobe's `Optima' font family which contains extra code to switch
+between low and high resolution versions of the glyphs.
+
+It might be possible to patch FreeType in some situations, though.
+Please report failing fonts so that we investigate the problem and set
+up a list of such problematic fonts.
+
+----------------------------------------------------------------------
+
+
+Compilation Problems
+====================
+
+
+* I get an `internal compilation error' (ICE) while compiling FreeType
+ 2.2.1 with Intel C++.
+
+ This has been reported for the following compiler version:
+
+ Intel(R) C++ Compiler for 32-bit applications,
+ Version 9.0 Build 20050430Z Package ID: W_CC_P_9.0.019
+
+-----
+
+The best solution is to update the compiler to version
+
+ Intel(R) C++ Compiler for 32-bit applications,
+ Version 9.1 Build 20060323Z Package ID: W_CC_P_9.1.022
+
+or newer. If this isn't feasible, apply the following patch.
+
+
+--- src/cache/ftcbasic.c 20 Mar 2006 12:10:24 -0000 1.20
++++ src/cache/ftcbasic.c.patched 15 May 2006 02:51:02 -0000
+@@ -252,7 +252,7 @@
+ */
+
+ FT_CALLBACK_TABLE_DEF
+- const FTC_IFamilyClassRec ftc_basic_image_family_class =
++ FTC_IFamilyClassRec ftc_basic_image_family_class =
+ {
+ {
+ sizeof ( FTC_BasicFamilyRec ),
+@@ -266,7 +266,7 @@
+
+
+ FT_CALLBACK_TABLE_DEF
+- const FTC_GCacheClassRec ftc_basic_image_cache_class =
++ FTC_GCacheClassRec ftc_basic_image_cache_class =
+ {
+ {
+ ftc_inode_new,
+
+
+----------------------------------------------------------------------
+
+--- end of PROBLEMS ---
diff --git a/src/3rdparty/freetype/docs/TODO b/src/3rdparty/freetype/docs/TODO
new file mode 100644
index 0000000..be60d6f
--- /dev/null
+++ b/src/3rdparty/freetype/docs/TODO
@@ -0,0 +1,40 @@
+Here is a list of items that need to be addressed in FreeType 2
+---------------------------------------------------------------
+
+* Implement stem3/counter hints properly in the Postscript hinter.
+
+* Add CIDCMap support to the CID driver.
+
+* Add track kerning support to the PFR driver.
+
+* Add kerning (AFM file) support to the CID driver.
+
+
+Here is a list of bugs which should be handled
+----------------------------------------------
+
+Other bugs have been registered at the savannah bugzilla of FreeType.
+
+* CID driver:
+ Handle the case where a CID font has a top-level font matrix also
+ (see PLRM, 5.11.3, Type 0 CIDFonts). Since CID_FaceInfoRec lacks
+ a font_matrix entry we have to directly apply it to all subfont
+ matrices.
+
+* CID driver:
+ Use top-level font matrix entry for setting the upem value, not the
+ entries in the FDarray. If absent, use 1000.
+
+------------------------------------------------------------------------
+
+Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007 by
+David Turner, Robert Wilhelm, and Werner Lemberg.
+
+This file is part of the FreeType project, and may only be used,
+modified, and distributed under the terms of the FreeType project
+license, LICENSE.TXT. By continuing to use, modify, or distribute this
+file you indicate that you have read the license and understand and
+accept it fully.
+
+
+--- end of TODO ---
diff --git a/src/3rdparty/freetype/docs/TRUETYPE b/src/3rdparty/freetype/docs/TRUETYPE
new file mode 100644
index 0000000..3e1614a
--- /dev/null
+++ b/src/3rdparty/freetype/docs/TRUETYPE
@@ -0,0 +1,40 @@
+How to enable the TrueType native hinter if you need it
+-------------------------------------------------------
+
+ The TrueType bytecode interpreter is disabled in all public releases
+ of the FreeType packages for patents reasons; see
+
+ http://www.freetype.org/patents.html
+
+ for more details.
+
+ However, many Linux distributions do enable the interpreter in the
+ FreeType packages (DEB/RPM/etc.) they produce for their platforms. If
+ you are using TrueType fonts on your system, you most probably want to
+ enable it manually by doing the following:
+
+ - open the file `include/freetype/config/ftoption.h'
+
+ - locate a line that says:
+
+ /* #define TT_CONFIG_OPTION_BYTECODE_INTERPRETER */
+
+ - change it to:
+
+ #define TT_CONFIG_OPTION_BYTECODE_INTERPRETER
+
+ These steps must be done _before_ compiling the library.
+
+------------------------------------------------------------------------
+
+Copyright 2003, 2005, 2006 by
+David Turner, Robert Wilhelm, and Werner Lemberg.
+
+This file is part of the FreeType project, and may only be used,
+modified, and distributed under the terms of the FreeType project
+license, LICENSE.TXT. By continuing to use, modify, or distribute this
+file you indicate that you have read the license and understand and
+accept it fully.
+
+
+--- end of TRUETYPE ---
diff --git a/src/3rdparty/freetype/docs/UPGRADE.UNIX b/src/3rdparty/freetype/docs/UPGRADE.UNIX
new file mode 100644
index 0000000..48c746d
--- /dev/null
+++ b/src/3rdparty/freetype/docs/UPGRADE.UNIX
@@ -0,0 +1,137 @@
+
+SPECIAL NOTE FOR UNIX USERS
+===========================
+
+ If you are installing this release of FreeType on a system that
+ already uses release 2.0.5 (or even an older version), you have to
+ perform a few special steps to ensure that everything goes well.
+
+
+ 1. Enable the TrueType bytecode hinter if you need it
+ -----------------------------------------------------
+
+ See the instructions in the file `TRUETYPE' of this directory.
+
+ Note that FreeType supports TrueType fonts without the bytecode
+ interpreter through its auto-hinter, which now generates relatively
+ good results with most fonts.
+
+
+ 2. Determine the correct installation path
+ ------------------------------------------
+
+ By default, the configure script installs the library in
+ `/usr/local'. However, many Unix distributions now install the
+ library in `/usr', since FreeType is becoming a critical system
+ component.
+
+ If FreeType is already installed on your system, type
+
+ freetype-config --prefix
+
+ on the command line. This should return the installation path
+ (e.g., `/usr' or `/usr/local'). To avoid problems of parallel
+ FreeType versions, use this path for the --prefix option of the
+ configure script.
+
+ Otherwise, simply use `/usr' (or whatever you think is adequate for
+ your installation).
+
+
+ 3. Ensure that you are using GNU Make
+ -------------------------------------
+
+ The FreeType build system _exclusively_ works with GNU Make (as an
+ exception you can use make++ which emulates GNU Make sufficiently;
+ see http://makepp.sourceforge.net). You will not be able to compile
+ the library with the instructions below using any other alternative
+ (including BSD Make).
+
+ Trying to compile the library with a different Make tool prints a
+ message like:
+
+ Sorry, GNU make is required to build FreeType2.
+
+ and the build process is aborted. If this happens, install GNU Make
+ on your system, and use the GNUMAKE environment variable to name it.
+
+
+ 4. Build and install the library
+ --------------------------------
+
+ The following should work on all Unix systems where the `make'
+ command invokes GNU Make:
+
+ ./configure --prefix=<yourprefix>
+ make
+ make install (as root)
+
+ where `<yourprefix>' must be replaced by the prefix returned by the
+ `freetype-config' command.
+
+ When using a different command to invoke GNU Make, use the GNUMAKE
+ variable. For example, if `gmake' is the command to use on your
+ system, do something like:
+
+ GNUMAKE=gmake ./configure --prefix=<yourprefix>
+ gmake
+ gmake install (as root)
+
+
+ 5. Take care of XFree86 version 4
+ ---------------------------------
+
+ Certain Linux distributions install _several_ versions of FreeType
+ on your system. For example, on a fresh Mandrake 8.1 system, you
+ can find the following files:
+
+ /usr/lib/libfreetype.so which links to
+ /usr/lib/libfreetype.6.1.0.so
+
+ and
+
+ /usr/X11R6/lib/libfreetype.so which links to
+ /usr/X11R6/lib/libfreetype.6.0.so
+
+ Note that these files correspond to two distinct versions of the
+ library! It seems that this surprising issue is due to the install
+ scripts of recent XFree86 servers (from 4.1.0) which install their
+ own (dated) version of the library in `/usr/X11R6/lib'.
+
+ In certain _rare_ cases you may experience minor problems if you
+ install this release of the library in `/usr' only, namely, that
+ certain applications do not benefit from the bug fixes and rendering
+ improvements you would expect.
+
+ There are two good ways to deal with this situation:
+
+ - Install the library _twice_, in `/usr' and in `/usr/X11R6' (you
+ have to do that each time you install a new FreeType release
+ though).
+
+ - Change the link in /usr/X11R6/lib/libfreetype.so to point to
+
+ /usr/lib/libfreetype.so,
+
+ and get rid of
+
+ /usr/X11R6/lib/libfreetype.6.0.so
+
+ The FreeType Team is not responsible for this problem, so please
+ contact either the XFree86 development team or your Linux
+ distributor to help clear this issue in case the information given
+ here doesn't help.
+
+------------------------------------------------------------------------
+
+Copyright 2003, 2005 by
+David Turner, Robert Wilhelm, and Werner Lemberg.
+
+This file is part of the FreeType project, and may only be used,
+modified, and distributed under the terms of the FreeType project
+license, LICENSE.TXT. By continuing to use, modify, or distribute this
+file you indicate that you have read the license and understand and
+accept it fully.
+
+
+---- end of UPGRADE.UNIX ---
diff --git a/src/3rdparty/freetype/docs/VERSION.DLL b/src/3rdparty/freetype/docs/VERSION.DLL
new file mode 100644
index 0000000..5275431
--- /dev/null
+++ b/src/3rdparty/freetype/docs/VERSION.DLL
@@ -0,0 +1,132 @@
+Due to our use of `libtool' to generate and install the FreeType 2
+libraries on Unix systems, as well as other historical events, it is
+generally very difficult to know precisely which release of the font
+engine is installed on a given system.
+
+This file tries to explain why and to document ways to properly detect
+FreeType on Unix.
+
+
+1. Version and Release numbers
+------------------------------
+
+For each new public release of FreeType 2, there are generally *three*
+distinct `version' numbers to consider:
+
+ * The official FreeType 2 release number, like 2.0.9 or 2.1.3.
+
+ * The libtool (and Unix) specific version number, like 9.2.3. This is
+ what `freetype-config --version' returns.
+
+ * The platform-specific shared object number, used for example when
+ the library is installed as `/usr/lib/libfreetype.so.6.3.2'.
+
+The platform-specific number is, unsurprisingly, platform-specific and
+varies with the operating system you are using (several variants of
+Linux, FreeBSD, Solaris, etc.). You should thus _never_ use it, even
+for simple tests.
+
+The libtool-specific number does not equal the release number but is
+tied to it.
+
+The release number is available at *compile* time through the following
+macros defined in FT_FREETYPE_H:
+
+ - FREETYPE_MAJOR: major release number
+ - FREETYPE_MINOR: minor release number
+ - FREETYPE_PATCH: patch release number
+
+See below for a small autoconf fragment.
+
+The release number is also available at *runtime* through the
+`FT_Library_Version' API. Unfortunately, this one wasn't available or
+working correctly before the 2.1.3 official release.
+
+
+2. History
+----------
+
+The following table gives, for each official release, the corresponding
+libtool number, as well as the shared object number found on _most_
+systems, but not all of them:
+
+
+ release libtool so
+ -------------------------------
+ 2.3.6 9.17.3 6.3.17
+ 2.3.5 9.16.3 6.3.16
+ 2.3.4 9.15.3 6.3.15
+ 2.3.3 9.14.3 6.3.14
+ 2.3.2 9.13.3 6.3.13
+ 2.3.1 9.12.3 6.3.12
+ 2.3.0 9.11.3 6.3.11
+ 2.2.1 9.10.3 6.3.10
+ 2.2.0 9.9.3 6.3.9
+ 2.1.10 9.8.3 6.3.8
+ 2.1.9 9.7.3 6.3.7
+ 2.1.8 9.6.3 6.3.6
+ 2.1.7 9.5.3 6.3.5
+ 2.1.6 9.5.3 6.3.5
+ 2.1.5 9.4.3 6.3.4
+ 2.1.4 9.3.3 6.3.3
+ 2.1.3 9.2.3 6.3.2
+ 2.1.2 9.1.3 6.3.1
+ 2.1.1 9.0.3 ?
+ 2.1.0 8.0.2 ?
+ 2.0.9 9.0.3 ?
+ 2.0.8 8.0.2 ?
+ 2.0.4 7.0.1 ?
+ 2.0.1 6.1.0 ?
+
+The libtool numbers are a bit inconsistent due to the library's history:
+
+ - 2.1.0 was created as a development branch from 2.0.8 (hence the same
+ libtool numbers).
+
+ - 2.0.9 was a bug-fix release of the `stable' branch, and we
+ incorrectly increased its libtool number.
+
+ - 2.1.4 was a development version, however it was stable enough to be
+ the basis of the 2.2.0 release.
+
+
+3. Autoconf Code Fragment
+-------------------------
+
+Lars Clausen contributed the following autoconf fragment to detect which
+version of FreeType is installed on a system. This one tests for a
+version that is at least 2.0.9; you should change it to check against
+other release numbers.
+
+
+ AC_MSG_CHECKING([whether FreeType version is 2.0.9 or higher])
+ old_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS=`freetype-config --cflags`
+ AC_TRY_CPP([
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+#if (FREETYPE_MAJOR*1000 + FREETYPE_MINOR)*1000 + FREETYPE_PATCH < 2000009
+#error Freetype version too low.
+#endif
+ ],
+ [AC_MSG_RESULT(yes)
+ FREETYPE_LIBS=`freetype-config --libs`
+ AC_SUBST(FREETYPE_LIBS)
+ AC_DEFINE(HAVE_FREETYPE,1,[Define if you have the FreeType2 library])
+ CPPFLAGS="$old_CPPFLAGS"],
+ [AC_MSG_ERROR([Need FreeType library version 2.0.9 or higher])])
+
+------------------------------------------------------------------------
+
+Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008 by
+David Turner, Robert Wilhelm, and Werner Lemberg.
+
+This file is part of the FreeType project, and may only be used,
+modified, and distributed under the terms of the FreeType project
+license, LICENSE.TXT. By continuing to use, modify, or distribute this
+file you indicate that you have read the license and understand and
+accept it fully.
+
+
+--- end of VERSION.DLL ---
diff --git a/src/3rdparty/freetype/docs/formats.txt b/src/3rdparty/freetype/docs/formats.txt
new file mode 100644
index 0000000..2f7c3d9
--- /dev/null
+++ b/src/3rdparty/freetype/docs/formats.txt
@@ -0,0 +1,154 @@
+This file contains a list of various font formats. It gives the
+reference document and whether it is supported in FreeType 2.
+
+
+ file type:
+ The only special case is `MAC'; on older Mac OS versions, a `file'
+ is stored as a data and a resource fork, this is, within two
+ separate data chunks. In all other cases, the font data is stored
+ in a single file.
+
+ wrapper format:
+ The format used to represent the font data. In the table below it
+ is used only if the font format differs. Possible values are `SFNT'
+ (binary), `PS' (a text header, followed by binary or text data), and
+ `LZW' (compressed with either `gzip' or `compress').
+
+ font format:
+ How the font is to be accessed, possibly after converting the file
+ type and wrapper format into a generic form. Bitmap formats are
+ `BDF', `PCF', and one form of `WINFNT'; all others are vector
+ formats.
+
+ font type:
+ Sub-formats of the font format. `SBIT' and `MACSBIT' are bitmap
+ formats, `MM' and `VAR' support optical axes.
+
+ glyph access:
+ If not specified, the glyph access is `standard' to the font format.
+ Values are `CID' for CID-keyed fonts, `SYNTHETIC' for fonts which
+ are modified versions of other fonts by means of a transformation
+ matrix, `COLLECTION' for collecting multiple fonts (sharing most of
+ the data) into a single file, and `TYPE_0' for PS fonts which are to
+ be accessed in a tree-like structure.
+
+ FreeType driver:
+ The module in the FreeType library which handles the specific font
+ format. A missing entry means that FreeType doesn't support the
+ font format (yet).
+
+
+Please send additions and/or corrections to wl@gnu.org or to the
+FreeType developer's list at freetype-devel@nongnu.org (for subscribers
+only). If you can provide a font example for a format which isn't
+supported yet please send a mail too.
+
+
+file wrapper font font glyph FreeType reference
+type format format type access driver documents
+----------------------------------------------------------------------------
+
+--- --- BDF --- --- bdf 5005.BDF_Spec.pdf, X11
+
+
+--- SFNT PS TYPE_1 --- --- Type 1 GX Font Format
+ (for the Mac)
+MAC SFNT PS TYPE_1 --- --- Type 1 GX Font Format
+ (for the Mac)
+--- SFNT PS TYPE_1 CID --- 5180.sfnt.pdf (for the Mac)
+MAC SFNT PS TYPE_1 CID --- 5180.sfnt.pdf (for the Mac)
+--- SFNT PS CFF --- cff OT spec, 5176.CFF.pdf
+ (`OTTO' format)
+MAC SFNT PS CFF --- cff OT spec, 5176.CFF.pdf
+ (`OTTO' format)
+--- SFNT PS CFF CID cff OT spec, 5176.CFF.pdf
+MAC SFNT PS CFF CID cff OT spec, 5176.CFF.pdf
+--- SFNT PS CFF SYNTHETIC --- OT spec, 5176.CFF.pdf
+MAC SFNT PS CFF SYNTHETIC --- OT spec, 5176.CFF.pdf
+--- SFNT TT SBIT --- sfnt XFree86 (bitmaps only;
+ with `head' table)
+--- SFNT TT MACSBIT --- sfnt OT spec (for the Mac;
+ bitmaps only; `bhed' table)
+MAC SFNT TT MACSBIT --- sfnt OT spec (for the Mac;
+ bitmaps only; `bhed' table)
+--- SFNT TT --- --- truetype OT spec (`normal' TT font)
+MAC SFNT TT --- --- truetype OT spec (`normal' TT font)
+MAC SFNT TT VAR --- truetype GX spec (`?var' tables)
+--- SFNT TT --- COLLECTION truetype OT spec (this can't be CFF)
+MAC SFNT TT --- COLLECTION truetype OT spec (this can't be CFF)
+
+
+--- --- PS TYPE_1 --- type1 T1_SPEC.pdf
+ (`normal' Type 1 font)
+MAC --- PS TYPE_1 --- type1 T1_SPEC.pdf
+ (`normal' Type 1 font)
+--- --- PS TYPE_1 CID cid PLRM.pdf (CID Font Type 0;
+ Type 9 font)
+--- --- PS MM --- type1 5015.Type1_Supp.pdf
+ (Multiple Masters)
+--- --- PS CFF --- cff 5176.CFF.pdf (`pure' CFF)
+--- --- PS CFF CID cff 5176.CFF.pdf (`pure' CFF)
+--- --- PS CFF SYNTHETIC --- 5176.CFF.pdf (`pure' CFF)
+--- PS PS CFF --- --- PLRM.pdf (Type 2) [1]
+--- PS PS CFF CID --- PLRM.pdf (Type 2) [1]
+--- PS PS CFF SYNTHETIC --- PLRM.pdf (Type 2) [1]
+--- --- PS --- TYPE_0 --- PLRM.pdf
+--- --- PS TYPE_3 --- --- PLRM.pdf (never supported)
+--- --- PS TYPE_3 CID --- PLRM.pdf (CID Font Type 1;
+ Type 10 font; never supported)
+--- PS PS TYPE_14 --- --- PLRM.pdf (Chameleon font;
+ Type 14 font; never supported?)
+--- --- PS TYPE_32 CID --- PLRM.pdf (CID Font Type 4;
+ Type 32 font; never supported?)
+--- PS TT --- --- type42 5012.Type42_Spec.pdf
+ (Type 42 font)
+--- PS TT --- CID --- PLRM.pdf (CID Font Type 2;
+ Type 11 font)
+
+
+--- ? ? CEF ? cff ?
+
+
+--- --- PCF --- --- pcf X11
+--- LZW PCF --- --- pcf X11
+
+
+--- --- PFR PFR0 --- pfr [2]
+--- --- PFR PFR1 --- --- (undocumented, proprietary;
+ probably never supported)
+
+
+--- --- WINFNT --- --- winfonts MS Windows 3 Developer's Notes
+--- --- WINFNT VECTOR --- --- MS Windows 3 Developer's Notes
+
+
+[1] Support should be rather simple since this is identical to `CFF' but
+ in a PS wrapper.
+
+[2] Official PFR specification:
+
+ http://www.bitstream.com/categories/developer/truedoc/pfrspec.html
+ http://www.bitstream.com/categories/developer/truedoc/pfrspec1.2.pdf
+
+ The syntax of the auxiliary data is not defined there, but is
+ partially defined in MHP 1.0.3 (also called ETSI TS 101812 V1.3.1)
+ section 7.4.
+
+ http://www.etsi.org/
+ http://webapp.etsi.org/workprogram/Report_WorkItem.asp?WKI_ID=18799
+
+ (free registration required).
+
+------------------------------------------------------------------------
+
+Copyright 2004, 2005 by
+David Turner, Robert Wilhelm, and Werner Lemberg.
+
+This file is part of the FreeType project, and may only be used,
+modified, and distributed under the terms of the FreeType project
+license, LICENSE.TXT. By continuing to use, modify, or distribute this
+file you indicate that you have read the license and understand and
+accept it fully.
+
+
+--- end of formats.txt ---
diff --git a/src/3rdparty/freetype/docs/raster.txt b/src/3rdparty/freetype/docs/raster.txt
new file mode 100644
index 0000000..95d9e24
--- /dev/null
+++ b/src/3rdparty/freetype/docs/raster.txt
@@ -0,0 +1,635 @@
+
+ How FreeType's rasterizer work
+
+ by David Turner
+
+ Revised 2007-Feb-01
+
+
+This file is an attempt to explain the internals of the FreeType
+rasterizer. The rasterizer is of quite general purpose and could
+easily be integrated into other programs.
+
+
+ I. Introduction
+
+ II. Rendering Technology
+ 1. Requirements
+ 2. Profiles and Spans
+ a. Sweeping the Shape
+ b. Decomposing Outlines into Profiles
+ c. The Render Pool
+ d. Computing Profiles Extents
+ e. Computing Profiles Coordinates
+ f. Sweeping and Sorting the Spans
+
+
+I. Introduction
+===============
+
+ A rasterizer is a library in charge of converting a vectorial
+ representation of a shape into a bitmap. The FreeType rasterizer
+ has been originally developed to render the glyphs found in
+ TrueType files, made up of segments and second-order Béziers.
+ Meanwhile it has been extended to render third-order Bézier curves
+ also. This document is an explanation of its design and
+ implementation.
+
+ While these explanations start from the basics, a knowledge of
+ common rasterization techniques is assumed.
+
+
+II. Rendering Technology
+========================
+
+1. Requirements
+---------------
+
+ We assume that all scaling, rotating, hinting, etc., has been
+ already done. The glyph is thus described by a list of points in
+ the device space.
+
+ - All point coordinates are in the 26.6 fixed float format. The
+ used orientation is:
+
+
+ ^ y
+ | reference orientation
+ |
+ *----> x
+ 0
+
+
+ `26.6' means that 26 bits are used for the integer part of a
+ value and 6 bits are used for the fractional part.
+ Consequently, the `distance' between two neighbouring pixels is
+ 64 `units' (1 unit = 1/64th of a pixel).
+
+ Note that, for the rasterizer, pixel centers are located at
+ integer coordinates. The TrueType bytecode interpreter,
+ however, assumes that the lower left edge of a pixel (which is
+ taken to be a square with a length of 1 unit) has integer
+ coordinates.
+
+
+ ^ y ^ y
+ | |
+ | (1,1) | (0.5,0.5)
+ +-----------+ +-----+-----+
+ | | | | |
+ | | | | |
+ | | | o-----+-----> x
+ | | | (0,0) |
+ | | | |
+ o-----------+-----> x +-----------+
+ (0,0) (-0.5,-0.5)
+
+ TrueType bytecode interpreter FreeType rasterizer
+
+
+ A pixel line in the target bitmap is called a `scanline'.
+
+ - A glyph is usually made of several contours, also called
+ `outlines'. A contour is simply a closed curve that delimits an
+ outer or inner region of the glyph. It is described by a series
+ of successive points of the points table.
+
+ Each point of the glyph has an associated flag that indicates
+ whether it is `on' or `off' the curve. Two successive `on'
+ points indicate a line segment joining the two points.
+
+ One `off' point amidst two `on' points indicates a second-degree
+ (conic) Bézier parametric arc, defined by these three points
+ (the `off' point being the control point, and the `on' ones the
+ start and end points). Similarly, a third-degree (cubic) Bézier
+ curve is described by four points (two `off' control points
+ between two `on' points).
+
+ Finally, for second-order curves only, two successive `off'
+ points forces the rasterizer to create, during rendering, an
+ `on' point amidst them, at their exact middle. This greatly
+ facilitates the definition of successive Bézier arcs.
+
+ The parametric form of a second-order Bézier curve is:
+
+ P(t) = (1-t)^2*P1 + 2*t*(1-t)*P2 + t^2*P3
+
+ (P1 and P3 are the end points, P2 the control point.)
+
+ The parametric form of a third-order Bézier curve is:
+
+ P(t) = (1-t)^3*P1 + 3*t*(1-t)^2*P2 + 3*t^2*(1-t)*P3 + t^3*P4
+
+ (P1 and P4 are the end points, P2 and P3 the control points.)
+
+ For both formulae, t is a real number in the range [0..1].
+
+ Note that the rasterizer does not use these formulae directly.
+ They exhibit, however, one very useful property of Bézier arcs:
+ Each point of the curve is a weighted average of the control
+ points.
+
+ As all weights are positive and always sum up to 1, whatever the
+ value of t, each arc point lies within the triangle (polygon)
+ defined by the arc's three (four) control points.
+
+ In the following, only second-order curves are discussed since
+ rasterization of third-order curves is completely identical.
+
+ Here some samples for second-order curves.
+
+
+ * # on curve
+ * off curve
+ __---__
+ #-__ _-- -_
+ --__ _- -
+ --__ # \
+ --__ #
+ -#
+ Two `on' points
+ Two `on' points and one `off' point
+ between them
+
+ *
+ # __ Two `on' points with two `off'
+ \ - - points between them. The point
+ \ / \ marked `0' is the middle of the
+ - 0 \ `off' points, and is a `virtual
+ -_ _- # on' point where the curve passes.
+ -- It does not appear in the point
+ * list.
+
+
+2. Profiles and Spans
+---------------------
+
+ The following is a basic explanation of the _kind_ of computations
+ made by the rasterizer to build a bitmap from a vector
+ representation. Note that the actual implementation is slightly
+ different, due to performance tuning and other factors.
+
+ However, the following ideas remain in the same category, and are
+ more convenient to understand.
+
+
+ a. Sweeping the Shape
+
+ The best way to fill a shape is to decompose it into a number of
+ simple horizontal segments, then turn them on in the target
+ bitmap. These segments are called `spans'.
+
+ __---__
+ _-- -_
+ _- -
+ - \
+ / \
+ / \
+ | \
+
+ __---__ Example: filling a shape
+ _----------_ with spans.
+ _--------------
+ ----------------\
+ /-----------------\ This is typically done from the top
+ / \ to the bottom of the shape, in a
+ | | \ movement called a `sweep'.
+ V
+
+ __---__
+ _----------_
+ _--------------
+ ----------------\
+ /-----------------\
+ /-------------------\
+ |---------------------\
+
+
+ In order to draw a span, the rasterizer must compute its
+ coordinates, which are simply the x coordinates of the shape's
+ contours, taken on the y scanlines.
+
+
+ /---/ |---| Note that there are usually
+ /---/ |---| several spans per scanline.
+ | /---/ |---|
+ | /---/_______|---| When rendering this shape to the
+ V /----------------| current scanline y, we must
+ /-----------------| compute the x values of the
+ a /----| |---| points a, b, c, and d.
+ - - - * * - - - - * * - - y -
+ / / b c| |d
+
+
+ /---/ |---|
+ /---/ |---| And then turn on the spans a-b
+ /---/ |---| and c-d.
+ /---/_______|---|
+ /----------------|
+ /-----------------|
+ a /----| |---|
+ - - - ####### - - - - ##### - - y -
+ / / b c| |d
+
+
+ b. Decomposing Outlines into Profiles
+
+ For each scanline during the sweep, we need the following
+ information:
+
+ o The number of spans on the current scanline, given by the
+ number of shape points intersecting the scanline (these are
+ the points a, b, c, and d in the above example).
+
+ o The x coordinates of these points.
+
+ x coordinates are computed before the sweep, in a phase called
+ `decomposition' which converts the glyph into *profiles*.
+
+ Put it simply, a `profile' is a contour's portion that can only
+ be either ascending or descending, i.e., it is monotonic in the
+ vertical direction (we also say y-monotonic). There is no such
+ thing as a horizontal profile, as we shall see.
+
+ Here are a few examples:
+
+
+ this square
+ 1 2
+ ---->---- is made of two
+ | | | |
+ | | profiles | |
+ ^ v ^ + v
+ | | | |
+ | | | |
+ ----<----
+
+ up down
+
+
+ this triangle
+
+ P2 1 2
+
+ |\ is made of two | \
+ ^ | \ \ | \
+ | | \ \ profiles | \ |
+ | | \ v ^ | \ |
+ | \ | | + \ v
+ | \ | | \
+ P1 ---___ \ ---___ \
+ ---_\ ---_ \
+ <--__ P3 up down
+
+
+
+ A more general contour can be made of more than two profiles:
+
+ __ ^
+ / | / ___ / |
+ / | / | / | / |
+ | | / / => | v / /
+ | | | | | | ^ |
+ ^ | |___| | | ^ + | + | + v
+ | | | v | |
+ | | | up |
+ |___________| | down |
+
+ <-- up down
+
+
+ Successive profiles are always joined by horizontal segments
+ that are not part of the profiles themselves.
+
+ For the rasterizer, a profile is simply an *array* that
+ associates one horizontal *pixel* coordinate to each bitmap
+ *scanline* crossed by the contour's section containing the
+ profile. Note that profiles are *oriented* up or down along the
+ glyph's original flow orientation.
+
+ In other graphics libraries, profiles are also called `edges' or
+ `edgelists'.
+
+
+ c. The Render Pool
+
+ FreeType has been designed to be able to run well on _very_
+ light systems, including embedded systems with very few memory.
+
+ A render pool will be allocated once; the rasterizer uses this
+ pool for all its needs by managing this memory directly in it.
+ The algorithms that are used for profile computation make it
+ possible to use the pool as a simple growing heap. This means
+ that this memory management is actually quite easy and faster
+ than any kind of malloc()/free() combination.
+
+ Moreover, we'll see later that the rasterizer is able, when
+ dealing with profiles too large and numerous to lie all at once
+ in the render pool, to immediately decompose recursively the
+ rendering process into independent sub-tasks, each taking less
+ memory to be performed (see `sub-banding' below).
+
+ The render pool doesn't need to be large. A 4KByte pool is
+ enough for nearly all renditions, though nearly 100% slower than
+ a more comfortable 16KByte or 32KByte pool (that was tested with
+ complex glyphs at sizes over 500 pixels).
+
+
+ d. Computing Profiles Extents
+
+ Remember that a profile is an array, associating a _scanline_ to
+ the x pixel coordinate of its intersection with a contour.
+
+ Though it's not exactly how the FreeType rasterizer works, it is
+ convenient to think that we need a profile's height before
+ allocating it in the pool and computing its coordinates.
+
+ The profile's height is the number of scanlines crossed by the
+ y-monotonic section of a contour. We thus need to compute these
+ sections from the vectorial description. In order to do that,
+ we are obliged to compute all (local and global) y extrema of
+ the glyph (minima and maxima).
+
+
+ P2 For instance, this triangle has only
+ two y-extrema, which are simply
+ |\
+ | \ P2.y as a vertical maximum
+ | \ P3.y as a vertical minimum
+ | \
+ | \ P1.y is not a vertical extremum (though
+ | \ it is a horizontal minimum, which we
+ P1 ---___ \ don't need).
+ ---_\
+ P3
+
+
+ Note that the extrema are expressed in pixel units, not in
+ scanlines. The triangle's height is certainly (P3.y-P2.y+1)
+ pixel units, but its profiles' heights are computed in
+ scanlines. The exact conversion is simple:
+
+ - min scanline = FLOOR ( min y )
+ - max scanline = CEILING( max y )
+
+ A problem arises with Bézier Arcs. While a segment is always
+ necessarily y-monotonic (i.e., flat, ascending, or descending),
+ which makes extrema computations easy, the ascent of an arc can
+ vary between its control points.
+
+
+ P2
+ *
+ # on curve
+ * off curve
+ __-x--_
+ _-- -_
+ P1 _- - A non y-monotonic Bézier arc.
+ # \
+ - The arc goes from P1 to P3.
+ \
+ \ P3
+ #
+
+
+ We first need to be able to easily detect non-monotonic arcs,
+ according to their control points. I will state here, without
+ proof, that the monotony condition can be expressed as:
+
+ P1.y <= P2.y <= P3.y for an ever-ascending arc
+
+ P1.y >= P2.y >= P3.y for an ever-descending arc
+
+ with the special case of
+
+ P1.y = P2.y = P3.y where the arc is said to be `flat'.
+
+ As you can see, these conditions can be very easily tested.
+ They are, however, extremely important, as any arc that does not
+ satisfy them necessarily contains an extremum.
+
+ Note also that a monotonic arc can contain an extremum too,
+ which is then one of its `on' points:
+
+
+ P1 P2
+ #---__ * P1P2P3 is ever-descending, but P1
+ -_ is an y-extremum.
+ -
+ ---_ \
+ -> \
+ \ P3
+ #
+
+
+ Let's go back to our previous example:
+
+
+ P2
+ *
+ # on curve
+ * off curve
+ __-x--_
+ _-- -_
+ P1 _- - A non-y-monotonic Bézier arc.
+ # \
+ - Here we have
+ \ P2.y >= P1.y &&
+ \ P3 P2.y >= P3.y (!)
+ #
+
+
+ We need to compute the vertical maximum of this arc to be able
+ to compute a profile's height (the point marked by an `x'). The
+ arc's equation indicates that a direct computation is possible,
+ but we rely on a different technique, which use will become
+ apparent soon.
+
+ Bézier arcs have the special property of being very easily
+ decomposed into two sub-arcs, which are themselves Bézier arcs.
+ Moreover, it is easy to prove that there is at most one vertical
+ extremum on each Bézier arc (for second-degree curves; similar
+ conditions can be found for third-order arcs).
+
+ For instance, the following arc P1P2P3 can be decomposed into
+ two sub-arcs Q1Q2Q3 and R1R2R3:
+
+
+ P2
+ *
+ # on curve
+ * off curve
+
+
+ original Bézier arc P1P2P3.
+ __---__
+ _-- --_
+ _- -_
+ - -
+ / \
+ / \
+ # #
+ P1 P3
+
+
+
+ P2
+ *
+
+
+
+ Q3 Decomposed into two subarcs
+ Q2 R2 Q1Q2Q3 and R1R2R3
+ * __-#-__ *
+ _-- --_
+ _- R1 -_ Q1 = P1 R3 = P3
+ - - Q2 = (P1+P2)/2 R2 = (P2+P3)/2
+ / \
+ / \ Q3 = R1 = (Q2+R2)/2
+ # #
+ Q1 R3 Note that Q2, R2, and Q3=R1
+ are on a single line which is
+ tangent to the curve.
+
+
+ We have then decomposed a non-y-monotonic Bézier curve into two
+ smaller sub-arcs. Note that in the above drawing, both sub-arcs
+ are monotonic, and that the extremum is then Q3=R1. However, in
+ a more general case, only one sub-arc is guaranteed to be
+ monotonic. Getting back to our former example:
+
+
+ Q2
+ *
+
+ __-x--_ R1
+ _-- #_
+ Q1 _- Q3 - R2
+ # \ *
+ -
+ \
+ \ R3
+ #
+
+
+ Here, we see that, though Q1Q2Q3 is still non-monotonic, R1R2R3
+ is ever descending: We thus know that it doesn't contain the
+ extremum. We can then re-subdivide Q1Q2Q3 into two sub-arcs and
+ go on recursively, stopping when we encounter two monotonic
+ subarcs, or when the subarcs become simply too small.
+
+ We will finally find the vertical extremum. Note that the
+ iterative process of finding an extremum is called `flattening'.
+
+
+ e. Computing Profiles Coordinates
+
+ Once we have the height of each profile, we are able to allocate
+ it in the render pool. The next task is to compute coordinates
+ for each scanline.
+
+ In the case of segments, the computation is straightforward,
+ using the Euclidean algorithm (also known as Bresenham).
+ However, for Bézier arcs, the job is a little more complicated.
+
+ We assume that all Béziers that are part of a profile are the
+ result of flattening the curve, which means that they are all
+ y-monotonic (ascending or descending, and never flat). We now
+ have to compute the intersections of arcs with the profile's
+ scanlines. One way is to use a similar scheme to flattening
+ called `stepping'.
+
+
+ Consider this arc, going from P1 to
+ --------------------- P3. Suppose that we need to
+ compute its intersections with the
+ drawn scanlines. As already
+ --------------------- mentioned this can be done
+ directly, but the involved
+ * P2 _---# P3 algorithm is far too slow.
+ ------------- _-- --
+ _-
+ _/ Instead, it is still possible to
+ ---------/----------- use the decomposition property in
+ / the same recursive way, i.e.,
+ | subdivide the arc into subarcs
+ ------|-------------- until these get too small to cross
+ | more than one scanline!
+ |
+ -----|--------------- This is very easily done using a
+ | rasterizer-managed stack of
+ | subarcs.
+ # P1
+
+
+ f. Sweeping and Sorting the Spans
+
+ Once all our profiles have been computed, we begin the sweep to
+ build (and fill) the spans.
+
+ As both the TrueType and Type 1 specifications use the winding
+ fill rule (but with opposite directions), we place, on each
+ scanline, the present profiles in two separate lists.
+
+ One list, called the `left' one, only contains ascending
+ profiles, while the other `right' list contains the descending
+ profiles.
+
+ As each glyph is made of closed curves, a simple geometric
+ property ensures that the two lists contain the same number of
+ elements.
+
+ Creating spans is thus straightforward:
+
+ 1. We sort each list in increasing horizontal order.
+
+ 2. We pair each value of the left list with its corresponding
+ value in the right list.
+
+
+ / / | | For example, we have here
+ / / | | four profiles. Two of
+ >/ / | | | them are ascending (1 &
+ 1// / ^ | | | 2 3), while the two others
+ // // 3| | | v are descending (2 & 4).
+ / //4 | | | On the given scanline,
+ a / /< | | the left list is (1,3),
+ - - - *-----* - - - - *---* - - y - and the right one is
+ / / b c| |d (4,2) (sorted).
+
+ There are then two spans, joining
+ 1 to 4 (i.e. a-b) and 3 to 2
+ (i.e. c-d)!
+
+
+ Sorting doesn't necessarily take much time, as in 99 cases out
+ of 100, the lists' order is kept from one scanline to the next.
+ We can thus implement it with two simple singly-linked lists,
+ sorted by a classic bubble-sort, which takes a minimum amount of
+ time when the lists are already sorted.
+
+ A previous version of the rasterizer used more elaborate
+ structures, like arrays to perform `faster' sorting. It turned
+ out that this old scheme is not faster than the one described
+ above.
+
+ Once the spans have been `created', we can simply draw them in
+ the target bitmap.
+
+------------------------------------------------------------------------
+
+Copyright 2003, 2007 by
+David Turner, Robert Wilhelm, and Werner Lemberg.
+
+This file is part of the FreeType project, and may only be used,
+modified, and distributed under the terms of the FreeType project
+license, LICENSE.TXT. By continuing to use, modify, or distribute this
+file you indicate that you have read the license and understand and
+accept it fully.
+
+
+--- end of raster.txt ---
+
+Local Variables:
+coding: utf-8
+End:
diff --git a/src/3rdparty/freetype/docs/reference/README b/src/3rdparty/freetype/docs/reference/README
new file mode 100644
index 0000000..51b04d6
--- /dev/null
+++ b/src/3rdparty/freetype/docs/reference/README
@@ -0,0 +1,5 @@
+After saying `make refdoc' this directory contains the FreeType API
+reference. You need python to make this target.
+
+This also works with Jam: Just type `jam refdoc' in the main directory.
+
diff --git a/src/3rdparty/freetype/docs/reference/ft2-base_interface.html b/src/3rdparty/freetype/docs/reference/ft2-base_interface.html
new file mode 100644
index 0000000..34e8a5e
--- /dev/null
+++ b/src/3rdparty/freetype/docs/reference/ft2-base_interface.html
@@ -0,0 +1,3425 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>FreeType-2.3.6 API Reference</title>
+<style type="text/css">
+ body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
+ color: #000000;
+ background: #FFFFFF; }
+
+ p { text-align: justify; }
+ h1 { text-align: center; }
+ li { text-align: justify; }
+ td { padding: 0 0.5em 0 0.5em; }
+ td.left { padding: 0 0.5em 0 0.5em;
+ text-align: left; }
+
+ a:link { color: #0000EF; }
+ a:visited { color: #51188E; }
+ a:hover { color: #FF0000; }
+
+ span.keyword { font-family: monospace;
+ text-align: left;
+ white-space: pre;
+ color: darkblue; }
+
+ pre.colored { color: blue; }
+
+ ul.empty { list-style-type: none; }
+</style>
+</head>
+<body>
+<center><h1>FreeType-2.3.6 API Reference</h1></center>
+
+<center><h1>
+Base Interface
+</h1></center>
+<h2>Synopsis</h2>
+<table align=center cellspacing=5 cellpadding=0 border=0>
+<tr><td></td><td><a href="#FT_Library">FT_Library</a></td><td></td><td><a href="#FT_IS_CID_KEYED">FT_IS_CID_KEYED</a></td><td></td><td><a href="#FT_Load_Char">FT_Load_Char</a></td></tr>
+<tr><td></td><td><a href="#FT_Face">FT_Face</a></td><td></td><td><a href="#FT_STYLE_FLAG_XXX">FT_STYLE_FLAG_XXX</a></td><td></td><td><a href="#FT_LOAD_XXX">FT_LOAD_XXX</a></td></tr>
+<tr><td></td><td><a href="#FT_Size">FT_Size</a></td><td></td><td><a href="#FT_Size_Internal">FT_Size_Internal</a></td><td></td><td><a href="#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_XXX</a></td></tr>
+<tr><td></td><td><a href="#FT_GlyphSlot">FT_GlyphSlot</a></td><td></td><td><a href="#FT_Size_Metrics">FT_Size_Metrics</a></td><td></td><td><a href="#FT_LOAD_TARGET_MODE">FT_LOAD_TARGET_MODE</a></td></tr>
+<tr><td></td><td><a href="#FT_CharMap">FT_CharMap</a></td><td></td><td><a href="#FT_SizeRec">FT_SizeRec</a></td><td></td><td><a href="#FT_Set_Transform">FT_Set_Transform</a></td></tr>
+<tr><td></td><td><a href="#FT_Encoding">FT_Encoding</a></td><td></td><td><a href="#FT_SubGlyph">FT_SubGlyph</a></td><td></td><td><a href="#FT_Render_Mode">FT_Render_Mode</a></td></tr>
+<tr><td></td><td><a href="#FT_Glyph_Metrics">FT_Glyph_Metrics</a></td><td></td><td><a href="#FT_Slot_Internal">FT_Slot_Internal</a></td><td></td><td><a href="#ft_render_mode_xxx">ft_render_mode_xxx</a></td></tr>
+<tr><td></td><td><a href="#FT_Bitmap_Size">FT_Bitmap_Size</a></td><td></td><td><a href="#FT_GlyphSlotRec">FT_GlyphSlotRec</a></td><td></td><td><a href="#FT_Render_Glyph">FT_Render_Glyph</a></td></tr>
+<tr><td></td><td><a href="#FT_Module">FT_Module</a></td><td></td><td><a href="#FT_Init_FreeType">FT_Init_FreeType</a></td><td></td><td><a href="#FT_Kerning_Mode">FT_Kerning_Mode</a></td></tr>
+<tr><td></td><td><a href="#FT_Driver">FT_Driver</a></td><td></td><td><a href="#FT_Done_FreeType">FT_Done_FreeType</a></td><td></td><td><a href="#ft_kerning_default">ft_kerning_default</a></td></tr>
+<tr><td></td><td><a href="#FT_Renderer">FT_Renderer</a></td><td></td><td><a href="#FT_OPEN_XXX">FT_OPEN_XXX</a></td><td></td><td><a href="#ft_kerning_unfitted">ft_kerning_unfitted</a></td></tr>
+<tr><td></td><td><a href="#FT_ENC_TAG">FT_ENC_TAG</a></td><td></td><td><a href="#FT_Parameter">FT_Parameter</a></td><td></td><td><a href="#ft_kerning_unscaled">ft_kerning_unscaled</a></td></tr>
+<tr><td></td><td><a href="#ft_encoding_xxx">ft_encoding_xxx</a></td><td></td><td><a href="#FT_Open_Args">FT_Open_Args</a></td><td></td><td><a href="#FT_Get_Kerning">FT_Get_Kerning</a></td></tr>
+<tr><td></td><td><a href="#FT_CharMapRec">FT_CharMapRec</a></td><td></td><td><a href="#FT_New_Face">FT_New_Face</a></td><td></td><td><a href="#FT_Get_Track_Kerning">FT_Get_Track_Kerning</a></td></tr>
+<tr><td></td><td><a href="#FT_Face_Internal">FT_Face_Internal</a></td><td></td><td><a href="#FT_New_Memory_Face">FT_New_Memory_Face</a></td><td></td><td><a href="#FT_Get_Glyph_Name">FT_Get_Glyph_Name</a></td></tr>
+<tr><td></td><td><a href="#FT_FaceRec">FT_FaceRec</a></td><td></td><td><a href="#FT_Open_Face">FT_Open_Face</a></td><td></td><td><a href="#FT_Get_Postscript_Name">FT_Get_Postscript_Name</a></td></tr>
+<tr><td></td><td><a href="#FT_FACE_FLAG_XXX">FT_FACE_FLAG_XXX</a></td><td></td><td><a href="#FT_Attach_File">FT_Attach_File</a></td><td></td><td><a href="#FT_Select_Charmap">FT_Select_Charmap</a></td></tr>
+<tr><td></td><td><a href="#FT_HAS_HORIZONTAL">FT_HAS_HORIZONTAL</a></td><td></td><td><a href="#FT_Attach_Stream">FT_Attach_Stream</a></td><td></td><td><a href="#FT_Set_Charmap">FT_Set_Charmap</a></td></tr>
+<tr><td></td><td><a href="#FT_HAS_VERTICAL">FT_HAS_VERTICAL</a></td><td></td><td><a href="#FT_Done_Face">FT_Done_Face</a></td><td></td><td><a href="#FT_Get_Charmap_Index">FT_Get_Charmap_Index</a></td></tr>
+<tr><td></td><td><a href="#FT_HAS_KERNING">FT_HAS_KERNING</a></td><td></td><td><a href="#FT_Select_Size">FT_Select_Size</a></td><td></td><td><a href="#FT_Get_Char_Index">FT_Get_Char_Index</a></td></tr>
+<tr><td></td><td><a href="#FT_IS_SCALABLE">FT_IS_SCALABLE</a></td><td></td><td><a href="#FT_Size_Request_Type">FT_Size_Request_Type</a></td><td></td><td><a href="#FT_Get_First_Char">FT_Get_First_Char</a></td></tr>
+<tr><td></td><td><a href="#FT_IS_SFNT">FT_IS_SFNT</a></td><td></td><td><a href="#FT_Size_RequestRec">FT_Size_RequestRec</a></td><td></td><td><a href="#FT_Get_Next_Char">FT_Get_Next_Char</a></td></tr>
+<tr><td></td><td><a href="#FT_IS_FIXED_WIDTH">FT_IS_FIXED_WIDTH</a></td><td></td><td><a href="#FT_Size_Request">FT_Size_Request</a></td><td></td><td><a href="#FT_Get_Name_Index">FT_Get_Name_Index</a></td></tr>
+<tr><td></td><td><a href="#FT_HAS_FIXED_SIZES">FT_HAS_FIXED_SIZES</a></td><td></td><td><a href="#FT_Request_Size">FT_Request_Size</a></td><td></td><td><a href="#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_XXX</a></td></tr>
+<tr><td></td><td><a href="#FT_HAS_FAST_GLYPHS">FT_HAS_FAST_GLYPHS</a></td><td></td><td><a href="#FT_Set_Char_Size">FT_Set_Char_Size</a></td><td></td><td><a href="#FT_Get_SubGlyph_Info">FT_Get_SubGlyph_Info</a></td></tr>
+<tr><td></td><td><a href="#FT_HAS_GLYPH_NAMES">FT_HAS_GLYPH_NAMES</a></td><td></td><td><a href="#FT_Set_Pixel_Sizes">FT_Set_Pixel_Sizes</a></td><td></td><td></td></tr>
+<tr><td></td><td><a href="#FT_HAS_MULTIPLE_MASTERS">FT_HAS_MULTIPLE_MASTERS</a></td><td></td><td><a href="#FT_Load_Glyph">FT_Load_Glyph</a></td><td></td><td></td></tr>
+</table><br><br>
+
+<table align=center width="87%"><tr><td>
+<p>This section describes the public high-level API of FreeType 2.</p>
+</td></tr></table><br>
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Library">FT_Library</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_LibraryRec_ *<b>FT_Library</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A handle to a FreeType library instance. Each &lsquo;library&rsquo; is completely independent from the others; it is the &lsquo;root&rsquo; of a set of objects like fonts, faces, sizes, etc.</p>
+<p>It also embeds a memory manager (see <a href="ft2-system_interface.html#FT_Memory">FT_Memory</a>), as well as a scan-line converter object (see <a href="ft2-raster.html#FT_Raster">FT_Raster</a>).</p>
+<p>For multi-threading applications each thread should have its own FT_Library object.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>Library objects are normally created by <a href="ft2-base_interface.html#FT_Init_FreeType">FT_Init_FreeType</a>, and destroyed with <a href="ft2-base_interface.html#FT_Done_FreeType">FT_Done_FreeType</a>.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Face">FT_Face</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_FaceRec_* <b>FT_Face</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A handle to a given typographic face object. A face object models a given typeface, in a given style.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>Each face object also owns a single <a href="ft2-base_interface.html#FT_GlyphSlot">FT_GlyphSlot</a> object, as well as one or more <a href="ft2-base_interface.html#FT_Size">FT_Size</a> objects.</p>
+<p>Use <a href="ft2-base_interface.html#FT_New_Face">FT_New_Face</a> or <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a> to create a new face object from a given filepathname or a custom input stream.</p>
+<p>Use <a href="ft2-base_interface.html#FT_Done_Face">FT_Done_Face</a> to destroy it (along with its slot and sizes).</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>also</b></em></td></tr><tr><td>
+<p>The <a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a> details the publicly accessible fields of a given face object.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Size">FT_Size</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_SizeRec_* <b>FT_Size</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A handle to an object used to model a face scaled to a given character size.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>Each <a href="ft2-base_interface.html#FT_Face">FT_Face</a> has an <i>active</i> <a href="ft2-base_interface.html#FT_Size">FT_Size</a> object that is used by functions like <a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a> to determine the scaling transformation which is used to load and hint glyphs and metrics.</p>
+<p>You can use <a href="ft2-base_interface.html#FT_Set_Char_Size">FT_Set_Char_Size</a>, <a href="ft2-base_interface.html#FT_Set_Pixel_Sizes">FT_Set_Pixel_Sizes</a>, <a href="ft2-base_interface.html#FT_Request_Size">FT_Request_Size</a> or even <a href="ft2-base_interface.html#FT_Select_Size">FT_Select_Size</a> to change the content (i.e., the scaling values) of the active <a href="ft2-base_interface.html#FT_Size">FT_Size</a>.</p>
+<p>You can use <a href="ft2-sizes_management.html#FT_New_Size">FT_New_Size</a> to create additional size objects for a given <a href="ft2-base_interface.html#FT_Face">FT_Face</a>, but they won't be used by other functions until you activate it through <a href="ft2-sizes_management.html#FT_Activate_Size">FT_Activate_Size</a>. Only one size can be activated at any given time per face.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>also</b></em></td></tr><tr><td>
+<p>The <a href="ft2-base_interface.html#FT_SizeRec">FT_SizeRec</a> structure details the publicly accessible fields of a given size object.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_GlyphSlot">FT_GlyphSlot</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_GlyphSlotRec_* <b>FT_GlyphSlot</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A handle to a given &lsquo;glyph slot&rsquo;. A slot is a container where it is possible to load any one of the glyphs contained in its parent face.</p>
+<p>In other words, each time you call <a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a> or <a href="ft2-base_interface.html#FT_Load_Char">FT_Load_Char</a>, the slot's content is erased by the new glyph data, i.e., the glyph's metrics, its image (bitmap or outline), and other control information.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>also</b></em></td></tr><tr><td>
+<p><a href="ft2-base_interface.html#FT_GlyphSlotRec">FT_GlyphSlotRec</a> details the publicly accessible glyph fields.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_CharMap">FT_CharMap</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_CharMapRec_* <b>FT_CharMap</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A handle to a given character map. A charmap is used to translate character codes in a given encoding into glyph indexes for its parent's face. Some font formats may provide several charmaps per font.</p>
+<p>Each face object owns zero or more charmaps, but only one of them can be &lsquo;active&rsquo; and used by <a href="ft2-base_interface.html#FT_Get_Char_Index">FT_Get_Char_Index</a> or <a href="ft2-base_interface.html#FT_Load_Char">FT_Load_Char</a>.</p>
+<p>The list of available charmaps in a face is available through the &lsquo;face-&gt;num_charmaps&rsquo; and &lsquo;face-&gt;charmaps&rsquo; fields of <a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a>.</p>
+<p>The currently active charmap is available as &lsquo;face-&gt;charmap&rsquo;. You should call <a href="ft2-base_interface.html#FT_Set_Charmap">FT_Set_Charmap</a> to change it.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>When a new face is created (either through <a href="ft2-base_interface.html#FT_New_Face">FT_New_Face</a> or <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a>), the library looks for a Unicode charmap within the list and automatically activates it.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>also</b></em></td></tr><tr><td>
+<p>The <a href="ft2-base_interface.html#FT_CharMapRec">FT_CharMapRec</a> details the publicly accessible fields of a given character map.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Encoding">FT_Encoding</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_Encoding_
+ {
+ <a href="ft2-base_interface.html#FT_ENC_TAG">FT_ENC_TAG</a>( <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_NONE</a>, 0, 0, 0, 0 ),
+
+ <a href="ft2-base_interface.html#FT_ENC_TAG">FT_ENC_TAG</a>( <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_SYMBOL</a>, 's', 'y', 'm', 'b' ),
+ <a href="ft2-base_interface.html#FT_ENC_TAG">FT_ENC_TAG</a>( <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_UNICODE</a>, 'u', 'n', 'i', 'c' ),
+
+ <a href="ft2-base_interface.html#FT_ENC_TAG">FT_ENC_TAG</a>( <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_SJIS</a>, 's', 'j', 'i', 's' ),
+ <a href="ft2-base_interface.html#FT_ENC_TAG">FT_ENC_TAG</a>( <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_GB2312</a>, 'g', 'b', ' ', ' ' ),
+ <a href="ft2-base_interface.html#FT_ENC_TAG">FT_ENC_TAG</a>( <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_BIG5</a>, 'b', 'i', 'g', '5' ),
+ <a href="ft2-base_interface.html#FT_ENC_TAG">FT_ENC_TAG</a>( <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_WANSUNG</a>, 'w', 'a', 'n', 's' ),
+ <a href="ft2-base_interface.html#FT_ENC_TAG">FT_ENC_TAG</a>( <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_JOHAB</a>, 'j', 'o', 'h', 'a' ),
+
+ /* for backwards compatibility */
+ <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_SJIS</a> = <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_SJIS</a>,
+ <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_GB2312</a> = <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_GB2312</a>,
+ <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_BIG5</a> = <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_BIG5</a>,
+ <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_WANSUNG</a> = <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_WANSUNG</a>,
+ <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_JOHAB</a> = <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_JOHAB</a>,
+
+ <a href="ft2-base_interface.html#FT_ENC_TAG">FT_ENC_TAG</a>( <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_ADOBE_STANDARD</a>, 'A', 'D', 'O', 'B' ),
+ <a href="ft2-base_interface.html#FT_ENC_TAG">FT_ENC_TAG</a>( <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_ADOBE_EXPERT</a>, 'A', 'D', 'B', 'E' ),
+ <a href="ft2-base_interface.html#FT_ENC_TAG">FT_ENC_TAG</a>( <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_ADOBE_CUSTOM</a>, 'A', 'D', 'B', 'C' ),
+ <a href="ft2-base_interface.html#FT_ENC_TAG">FT_ENC_TAG</a>( <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_ADOBE_LATIN_1</a>, 'l', 'a', 't', '1' ),
+
+ <a href="ft2-base_interface.html#FT_ENC_TAG">FT_ENC_TAG</a>( <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_OLD_LATIN_2</a>, 'l', 'a', 't', '2' ),
+
+ <a href="ft2-base_interface.html#FT_ENC_TAG">FT_ENC_TAG</a>( <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_APPLE_ROMAN</a>, 'a', 'r', 'm', 'n' )
+
+ } <b>FT_Encoding</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>An enumeration used to specify character sets supported by charmaps. Used in the <a href="ft2-base_interface.html#FT_Select_Charmap">FT_Select_Charmap</a> API function.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>Despite the name, this enumeration lists specific character repertories (i.e., charsets), and not text encoding methods (e.g., UTF-8, UTF-16, GB2312_EUC, etc.).</p>
+<p>Because of 32-bit charcodes defined in Unicode (i.e., surrogates), all character codes must be expressed as FT_Longs.</p>
+<p>Other encodings might be defined in the future.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>FT_ENCODING_NONE</b></td><td>
+<p>The encoding value 0 is reserved.</p>
+</td></tr>
+<tr valign=top><td><b>FT_ENCODING_UNICODE</b></td><td>
+<p>Corresponds to the Unicode character set. This value covers all versions of the Unicode repertoire, including ASCII and Latin-1. Most fonts include a Unicode charmap, but not all of them.</p>
+</td></tr>
+<tr valign=top><td><b>FT_ENCODING_MS_SYMBOL</b></td><td>
+<p>Corresponds to the Microsoft Symbol encoding, used to encode mathematical symbols in the 32..255 character code range. For more information, see &lsquo;http://www.ceviz.net/symbol.htm&rsquo;.</p>
+</td></tr>
+<tr valign=top><td><b>FT_ENCODING_SJIS</b></td><td>
+<p>Corresponds to Japanese SJIS encoding. More info at at &lsquo;http://langsupport.japanreference.com/encoding.shtml&rsquo;. See note on multi-byte encodings below.</p>
+</td></tr>
+<tr valign=top><td><b>FT_ENCODING_GB2312</b></td><td>
+<p>Corresponds to an encoding system for Simplified Chinese as used used in mainland China.</p>
+</td></tr>
+<tr valign=top><td><b>FT_ENCODING_BIG5</b></td><td>
+<p>Corresponds to an encoding system for Traditional Chinese as used in Taiwan and Hong Kong.</p>
+</td></tr>
+<tr valign=top><td><b>FT_ENCODING_WANSUNG</b></td><td>
+<p>Corresponds to the Korean encoding system known as Wansung. For more information see &lsquo;http://www.microsoft.com/typography/unicode/949.txt&rsquo;.</p>
+</td></tr>
+<tr valign=top><td><b>FT_ENCODING_JOHAB</b></td><td>
+<p>The Korean standard character set (KS C-5601-1992), which corresponds to MS Windows code page 1361. This character set includes all possible Hangeul character combinations.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_ENCODING_ADOBE_LATIN_1</b></td></tr>
+<tr valign=top><td></td><td>
+<p>Corresponds to a Latin-1 encoding as defined in a Type 1 Postscript font. It is limited to 256 character codes.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_ENCODING_ADOBE_STANDARD</b></td></tr>
+<tr valign=top><td></td><td>
+<p>Corresponds to the Adobe Standard encoding, as found in Type 1, CFF, and OpenType/CFF fonts. It is limited to 256 character codes.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_ENCODING_ADOBE_EXPERT</b></td></tr>
+<tr valign=top><td></td><td>
+<p>Corresponds to the Adobe Expert encoding, as found in Type 1, CFF, and OpenType/CFF fonts. It is limited to 256 character codes.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_ENCODING_ADOBE_CUSTOM</b></td></tr>
+<tr valign=top><td></td><td>
+<p>Corresponds to a custom encoding, as found in Type 1, CFF, and OpenType/CFF fonts. It is limited to 256 character codes.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_ENCODING_APPLE_ROMAN</b></td></tr>
+<tr valign=top><td></td><td>
+<p>Corresponds to the 8-bit Apple roman encoding. Many TrueType and OpenType fonts contain a charmap for this encoding, since older versions of Mac OS are able to use it.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_ENCODING_OLD_LATIN_2</b></td></tr>
+<tr valign=top><td></td><td>
+<p>This value is deprecated and was never used nor reported by FreeType. Don't use or test for it.</p>
+</td></tr>
+<tr valign=top><td><b>FT_ENCODING_MS_SJIS</b></td><td>
+<p>Same as FT_ENCODING_SJIS. Deprecated.</p>
+</td></tr>
+<tr valign=top><td><b>FT_ENCODING_MS_GB2312</b></td><td>
+<p>Same as FT_ENCODING_GB2312. Deprecated.</p>
+</td></tr>
+<tr valign=top><td><b>FT_ENCODING_MS_BIG5</b></td><td>
+<p>Same as FT_ENCODING_BIG5. Deprecated.</p>
+</td></tr>
+<tr valign=top><td><b>FT_ENCODING_MS_WANSUNG</b></td><td>
+<p>Same as FT_ENCODING_WANSUNG. Deprecated.</p>
+</td></tr>
+<tr valign=top><td><b>FT_ENCODING_MS_JOHAB</b></td><td>
+<p>Same as FT_ENCODING_JOHAB. Deprecated.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>By default, FreeType automatically synthetizes a Unicode charmap for Postscript fonts, using their glyph names dictionaries. However, it also reports the encodings defined explicitly in the font file, for the cases when they are needed, with the Adobe values as well.</p>
+<p>FT_ENCODING_NONE is set by the BDF and PCF drivers if the charmap is neither Unicode nor ISO-8859-1 (otherwise it is set to FT_ENCODING_UNICODE). Use <a href="ft2-bdf_fonts.html#FT_Get_BDF_Charset_ID">FT_Get_BDF_Charset_ID</a> to find out which encoding is really present. If, for example, the &lsquo;cs_registry&rsquo; field is &lsquo;KOI8&rsquo; and the &lsquo;cs_encoding&rsquo; field is &lsquo;R&rsquo;, the font is encoded in KOI8-R.</p>
+<p>FT_ENCODING_NONE is always set (with a single exception) by the winfonts driver. Use <a href="ft2-winfnt_fonts.html#FT_Get_WinFNT_Header">FT_Get_WinFNT_Header</a> and examine the &lsquo;charset&rsquo; field of the <a href="ft2-winfnt_fonts.html#FT_WinFNT_HeaderRec">FT_WinFNT_HeaderRec</a> structure to find out which encoding is really present. For example, <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1251</a> (204) means Windows code page 1251 (for Russian).</p>
+<p>FT_ENCODING_NONE is set if &lsquo;platform_id&rsquo; is <a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_MACINTOSH</a> and &lsquo;encoding_id&rsquo; is not <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_ROMAN</a> (otherwise it is set to FT_ENCODING_APPLE_ROMAN).</p>
+<p>If &lsquo;platform_id&rsquo; is <a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_MACINTOSH</a>, use the function c <a href="ft2-truetype_tables.html#FT_Get_CMap_Language_ID">FT_Get_CMap_Language_ID</a> to query the Mac language ID which may be needed to be able to distinguish Apple encoding variants. See</p>
+<p>http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/README.TXT</p>
+<p>to get an idea how to do that. Basically, if the language ID is 0, don't use it, otherwise subtract 1 from the language ID. Then examine &lsquo;encoding_id&rsquo;. If, for example, &lsquo;encoding_id&rsquo; is <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_ROMAN</a> and the language ID (minus 1) is &lsquo;TT_MAC_LANGID_GREEK&rsquo;, it is the Greek encoding, not Roman. <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_ARABIC</a> with &lsquo;TT_MAC_LANGID_FARSI&rsquo; means the Farsi variant the Arabic encoding.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Glyph_Metrics">FT_Glyph_Metrics</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Glyph_Metrics_
+ {
+ <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> width;
+ <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> height;
+
+ <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> horiBearingX;
+ <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> horiBearingY;
+ <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> horiAdvance;
+
+ <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> vertBearingX;
+ <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> vertBearingY;
+ <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> vertAdvance;
+
+ } <b>FT_Glyph_Metrics</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A structure used to model the metrics of a single glyph. The values are expressed in 26.6 fractional pixel format; if the flag <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_SCALE</a> has been used while loading the glyph, values are expressed in font units instead.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>width</b></td><td>
+<p>The glyph's width.</p>
+</td></tr>
+<tr valign=top><td><b>height</b></td><td>
+<p>The glyph's height.</p>
+</td></tr>
+<tr valign=top><td><b>horiBearingX</b></td><td>
+<p>Left side bearing for horizontal layout.</p>
+</td></tr>
+<tr valign=top><td><b>horiBearingY</b></td><td>
+<p>Top side bearing for horizontal layout.</p>
+</td></tr>
+<tr valign=top><td><b>horiAdvance</b></td><td>
+<p>Advance width for horizontal layout.</p>
+</td></tr>
+<tr valign=top><td><b>vertBearingX</b></td><td>
+<p>Left side bearing for vertical layout.</p>
+</td></tr>
+<tr valign=top><td><b>vertBearingY</b></td><td>
+<p>Top side bearing for vertical layout.</p>
+</td></tr>
+<tr valign=top><td><b>vertAdvance</b></td><td>
+<p>Advance height for vertical layout.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Bitmap_Size">FT_Bitmap_Size</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Bitmap_Size_
+ {
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> height;
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> width;
+
+ <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> size;
+
+ <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> x_ppem;
+ <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> y_ppem;
+
+ } <b>FT_Bitmap_Size</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>This structure models the metrics of a bitmap strike (i.e., a set of glyphs for a given point size and resolution) in a bitmap font. It is used for the &lsquo;available_sizes&rsquo; field of <a href="ft2-base_interface.html#FT_Face">FT_Face</a>.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>height</b></td><td>
+<p>The vertical distance, in pixels, between two consecutive baselines. It is always positive.</p>
+</td></tr>
+<tr valign=top><td><b>width</b></td><td>
+<p>The average width, in pixels, of all glyphs in the strike.</p>
+</td></tr>
+<tr valign=top><td><b>size</b></td><td>
+<p>The nominal size of the strike in 26.6 fractional points. This field is not very useful.</p>
+</td></tr>
+<tr valign=top><td><b>x_ppem</b></td><td>
+<p>The horizontal ppem (nominal width) in 26.6 fractional pixels.</p>
+</td></tr>
+<tr valign=top><td><b>y_ppem</b></td><td>
+<p>The vertical ppem (nominal height) in 26.6 fractional pixels.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>Windows FNT: The nominal size given in a FNT font is not reliable. Thus when the driver finds it incorrect, it sets &lsquo;size&rsquo; to some calculated values and sets &lsquo;x_ppem&rsquo; and &lsquo;y_ppem&rsquo; to the pixel width and height given in the font, respectively.</p>
+<p>TrueType embedded bitmaps: &lsquo;size&rsquo;, &lsquo;width&rsquo;, and &lsquo;height&rsquo; values are not contained in the bitmap strike itself. They are computed from the global font parameters.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Module">FT_Module</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_ModuleRec_* <b>FT_Module</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A handle to a given FreeType module object. Each module can be a font driver, a renderer, or anything else that provides services to the formers.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Driver">FT_Driver</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_DriverRec_* <b>FT_Driver</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A handle to a given FreeType font driver object. Each font driver is a special module capable of creating faces from font files.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Renderer">FT_Renderer</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_RendererRec_* <b>FT_Renderer</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A handle to a given FreeType renderer. A renderer is a special module in charge of converting a glyph image to a bitmap, when necessary. Each renderer supports a given glyph image format, and one or more target surface depths.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_ENC_TAG">FT_ENC_TAG</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#ifndef <b>FT_ENC_TAG</b>
+#define <b>FT_ENC_TAG</b>( value, a, b, c, d ) \
+ value = ( ( (<a href="ft2-basic_types.html#FT_UInt32">FT_UInt32</a>)(a) &lt;&lt; 24 ) | \
+ ( (<a href="ft2-basic_types.html#FT_UInt32">FT_UInt32</a>)(b) &lt;&lt; 16 ) | \
+ ( (<a href="ft2-basic_types.html#FT_UInt32">FT_UInt32</a>)(c) &lt;&lt; 8 ) | \
+ (<a href="ft2-basic_types.html#FT_UInt32">FT_UInt32</a>)(d) )
+
+#endif /* <b>FT_ENC_TAG</b> */
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>This macro converts four-letter tags into an unsigned long. It is used to define &lsquo;encoding&rsquo; identifiers (see <a href="ft2-base_interface.html#FT_Encoding">FT_Encoding</a>).</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>Since many 16bit compilers don't like 32bit enumerations, you should redefine this macro in case of problems to something like this:</p>
+<pre class="colored">
+ #define FT_ENC_TAG( value, a, b, c, d ) value
+</pre>
+<p>to get a simple enumeration without assigning special numbers.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="ft_encoding_xxx">ft_encoding_xxx</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define ft_encoding_none <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_NONE</a>
+#define ft_encoding_unicode <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_UNICODE</a>
+#define ft_encoding_symbol <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_SYMBOL</a>
+#define ft_encoding_latin_1 <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_ADOBE_LATIN_1</a>
+#define ft_encoding_latin_2 <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_OLD_LATIN_2</a>
+#define ft_encoding_sjis <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_SJIS</a>
+#define ft_encoding_gb2312 <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_GB2312</a>
+#define ft_encoding_big5 <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_BIG5</a>
+#define ft_encoding_wansung <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_WANSUNG</a>
+#define ft_encoding_johab <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_JOHAB</a>
+
+#define ft_encoding_adobe_standard <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_ADOBE_STANDARD</a>
+#define ft_encoding_adobe_expert <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_ADOBE_EXPERT</a>
+#define ft_encoding_adobe_custom <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_ADOBE_CUSTOM</a>
+#define ft_encoding_apple_roman <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_APPLE_ROMAN</a>
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>These constants are deprecated; use the corresponding <a href="ft2-base_interface.html#FT_Encoding">FT_Encoding</a> values instead.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_CharMapRec">FT_CharMapRec</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_CharMapRec_
+ {
+ <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face;
+ <a href="ft2-base_interface.html#FT_Encoding">FT_Encoding</a> encoding;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> platform_id;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> encoding_id;
+
+ } <b>FT_CharMapRec</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>The base charmap structure.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to the parent face object.</p>
+</td></tr>
+<tr valign=top><td><b>encoding</b></td><td>
+<p>An <a href="ft2-base_interface.html#FT_Encoding">FT_Encoding</a> tag identifying the charmap. Use this with <a href="ft2-base_interface.html#FT_Select_Charmap">FT_Select_Charmap</a>.</p>
+</td></tr>
+<tr valign=top><td><b>platform_id</b></td><td>
+<p>An ID number describing the platform for the following encoding ID. This comes directly from the TrueType specification and should be emulated for other formats.</p>
+</td></tr>
+<tr valign=top><td><b>encoding_id</b></td><td>
+<p>A platform specific encoding number. This also comes from the TrueType specification and should be emulated similarly.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Face_Internal">FT_Face_Internal</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Face_InternalRec_* <b>FT_Face_Internal</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>An opaque handle to an &lsquo;FT_Face_InternalRec&rsquo; structure, used to model private data of a given <a href="ft2-base_interface.html#FT_Face">FT_Face</a> object.</p>
+<p>This structure might change between releases of FreeType 2 and is not generally available to client applications.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_FaceRec">FT_FaceRec</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_FaceRec_
+ {
+ <a href="ft2-basic_types.html#FT_Long">FT_Long</a> num_faces;
+ <a href="ft2-basic_types.html#FT_Long">FT_Long</a> face_index;
+
+ <a href="ft2-basic_types.html#FT_Long">FT_Long</a> face_flags;
+ <a href="ft2-basic_types.html#FT_Long">FT_Long</a> style_flags;
+
+ <a href="ft2-basic_types.html#FT_Long">FT_Long</a> num_glyphs;
+
+ <a href="ft2-basic_types.html#FT_String">FT_String</a>* family_name;
+ <a href="ft2-basic_types.html#FT_String">FT_String</a>* style_name;
+
+ <a href="ft2-basic_types.html#FT_Int">FT_Int</a> num_fixed_sizes;
+ <a href="ft2-base_interface.html#FT_Bitmap_Size">FT_Bitmap_Size</a>* available_sizes;
+
+ <a href="ft2-basic_types.html#FT_Int">FT_Int</a> num_charmaps;
+ <a href="ft2-base_interface.html#FT_CharMap">FT_CharMap</a>* charmaps;
+
+ <a href="ft2-basic_types.html#FT_Generic">FT_Generic</a> generic;
+
+ /*# The following member variables (down to `underline_thickness') */
+ /*# are only relevant to scalable outlines; cf. @<a href="ft2-base_interface.html#FT_Bitmap_Size">FT_Bitmap_Size</a> */
+ /*# for bitmap fonts. */
+ <a href="ft2-basic_types.html#FT_BBox">FT_BBox</a> bbox;
+
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> units_per_EM;
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> ascender;
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> descender;
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> height;
+
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> max_advance_width;
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> max_advance_height;
+
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> underline_position;
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> underline_thickness;
+
+ <a href="ft2-base_interface.html#FT_GlyphSlot">FT_GlyphSlot</a> glyph;
+ <a href="ft2-base_interface.html#FT_Size">FT_Size</a> size;
+ <a href="ft2-base_interface.html#FT_CharMap">FT_CharMap</a> charmap;
+
+ /*@private begin */
+
+ <a href="ft2-base_interface.html#FT_Driver">FT_Driver</a> driver;
+ <a href="ft2-system_interface.html#FT_Memory">FT_Memory</a> memory;
+ <a href="ft2-system_interface.html#FT_Stream">FT_Stream</a> stream;
+
+ <a href="ft2-list_processing.html#FT_ListRec">FT_ListRec</a> sizes_list;
+
+ <a href="ft2-basic_types.html#FT_Generic">FT_Generic</a> autohint;
+ <span class="keyword">void</span>* extensions;
+
+ <a href="ft2-base_interface.html#FT_Face_Internal">FT_Face_Internal</a> internal;
+
+ /*@private end */
+
+ } <b>FT_FaceRec</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>FreeType root face class structure. A face object models a typeface in a font file.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>num_faces</b></td><td>
+<p>The number of faces in the font file. Some font formats can have multiple faces in a font file.</p>
+</td></tr>
+<tr valign=top><td><b>face_index</b></td><td>
+<p>The index of the face in the font file. It is set to 0 if there is only one face in the font file.</p>
+</td></tr>
+<tr valign=top><td><b>face_flags</b></td><td>
+<p>A set of bit flags that give important information about the face; see <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_XXX</a> for the details.</p>
+</td></tr>
+<tr valign=top><td><b>style_flags</b></td><td>
+<p>A set of bit flags indicating the style of the face; see <a href="ft2-base_interface.html#FT_STYLE_FLAG_XXX">FT_STYLE_FLAG_XXX</a> for the details.</p>
+</td></tr>
+<tr valign=top><td><b>num_glyphs</b></td><td>
+<p>The number of glyphs in the face. If the face is scalable and has sbits (see &lsquo;num_fixed_sizes&rsquo;), it is set to the number of outline glyphs.</p>
+</td></tr>
+<tr valign=top><td><b>family_name</b></td><td>
+<p>The face's family name. This is an ASCII string, usually in English, which describes the typeface's family (like &lsquo;Times New Roman&rsquo;, &lsquo;Bodoni&rsquo;, &lsquo;Garamond&rsquo;, etc). This is a least common denominator used to list fonts. Some formats (TrueType &amp; OpenType) provide localized and Unicode versions of this string. Applications should use the format specific interface to access them. Can be NULL (e.g., in fonts embedded in a PDF file).</p>
+</td></tr>
+<tr valign=top><td><b>style_name</b></td><td>
+<p>The face's style name. This is an ASCII string, usually in English, which describes the typeface's style (like &lsquo;Italic&rsquo;, &lsquo;Bold&rsquo;, &lsquo;Condensed&rsquo;, etc). Not all font formats provide a style name, so this field is optional, and can be set to NULL. As for &lsquo;family_name&rsquo;, some formats provide localized and Unicode versions of this string. Applications should use the format specific interface to access them.</p>
+</td></tr>
+<tr valign=top><td><b>num_fixed_sizes</b></td><td>
+<p>The number of bitmap strikes in the face. Even if the face is scalable, there might still be bitmap strikes, which are called &lsquo;sbits&rsquo; in that case.</p>
+</td></tr>
+<tr valign=top><td><b>available_sizes</b></td><td>
+<p>An array of <a href="ft2-base_interface.html#FT_Bitmap_Size">FT_Bitmap_Size</a> for all bitmap strikes in the face. It is set to NULL if there is no bitmap strike.</p>
+</td></tr>
+<tr valign=top><td><b>num_charmaps</b></td><td>
+<p>The number of charmaps in the face.</p>
+</td></tr>
+<tr valign=top><td><b>charmaps</b></td><td>
+<p>An array of the charmaps of the face.</p>
+</td></tr>
+<tr valign=top><td><b>generic</b></td><td>
+<p>A field reserved for client uses. See the <a href="ft2-basic_types.html#FT_Generic">FT_Generic</a> type description.</p>
+</td></tr>
+<tr valign=top><td><b>bbox</b></td><td>
+<p>The font bounding box. Coordinates are expressed in font units (see &lsquo;units_per_EM&rsquo;). The box is large enough to contain any glyph from the font. Thus, &lsquo;bbox.yMax&rsquo; can be seen as the &lsquo;maximal ascender&rsquo;, and &lsquo;bbox.yMin&rsquo; as the &lsquo;minimal descender&rsquo;. Only relevant for scalable formats.</p>
+</td></tr>
+<tr valign=top><td><b>units_per_EM</b></td><td>
+<p>The number of font units per EM square for this face. This is typically 2048 for TrueType fonts, and 1000 for Type 1 fonts. Only relevant for scalable formats.</p>
+</td></tr>
+<tr valign=top><td><b>ascender</b></td><td>
+<p>The typographic ascender of the face, expressed in font units. For font formats not having this information, it is set to &lsquo;bbox.yMax&rsquo;. Only relevant for scalable formats.</p>
+</td></tr>
+<tr valign=top><td><b>descender</b></td><td>
+<p>The typographic descender of the face, expressed in font units. For font formats not having this information, it is set to &lsquo;bbox.yMin&rsquo;. Note that this field is usually negative. Only relevant for scalable formats.</p>
+</td></tr>
+<tr valign=top><td><b>height</b></td><td>
+<p>The height is the vertical distance between two consecutive baselines, expressed in font units. It is always positive. Only relevant for scalable formats.</p>
+</td></tr>
+<tr valign=top><td><b>max_advance_width</b></td><td>
+<p>The maximal advance width, in font units, for all glyphs in this face. This can be used to make word wrapping computations faster. Only relevant for scalable formats.</p>
+</td></tr>
+<tr valign=top><td><b>max_advance_height</b></td><td>
+<p>The maximal advance height, in font units, for all glyphs in this face. This is only relevant for vertical layouts, and is set to &lsquo;height&rsquo; for fonts that do not provide vertical metrics. Only relevant for scalable formats.</p>
+</td></tr>
+<tr valign=top><td><b>underline_position</b></td><td>
+<p>The position, in font units, of the underline line for this face. It's the center of the underlining stem. Only relevant for scalable formats.</p>
+</td></tr>
+<tr valign=top><td><b>underline_thickness</b></td><td>
+<p>The thickness, in font units, of the underline for this face. Only relevant for scalable formats.</p>
+</td></tr>
+<tr valign=top><td><b>glyph</b></td><td>
+<p>The face's associated glyph slot(s).</p>
+</td></tr>
+<tr valign=top><td><b>size</b></td><td>
+<p>The current active size for this face.</p>
+</td></tr>
+<tr valign=top><td><b>charmap</b></td><td>
+<p>The current active charmap for this face.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>Fields may be changed after a call to <a href="ft2-base_interface.html#FT_Attach_File">FT_Attach_File</a> or <a href="ft2-base_interface.html#FT_Attach_Stream">FT_Attach_Stream</a>.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_FACE_FLAG_XXX">FT_FACE_FLAG_XXX</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_SCALABLE</a> ( 1L &lt;&lt; 0 )
+#define <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_FIXED_SIZES</a> ( 1L &lt;&lt; 1 )
+#define <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_FIXED_WIDTH</a> ( 1L &lt;&lt; 2 )
+#define <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_SFNT</a> ( 1L &lt;&lt; 3 )
+#define <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_HORIZONTAL</a> ( 1L &lt;&lt; 4 )
+#define <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_VERTICAL</a> ( 1L &lt;&lt; 5 )
+#define <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_KERNING</a> ( 1L &lt;&lt; 6 )
+#define <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_FAST_GLYPHS</a> ( 1L &lt;&lt; 7 )
+#define <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_MULTIPLE_MASTERS</a> ( 1L &lt;&lt; 8 )
+#define <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_GLYPH_NAMES</a> ( 1L &lt;&lt; 9 )
+#define <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_EXTERNAL_STREAM</a> ( 1L &lt;&lt; 10 )
+#define <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_HINTER</a> ( 1L &lt;&lt; 11 )
+#define <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_CID_KEYED</a> ( 1L &lt;&lt; 12 )
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A list of bit flags used in the &lsquo;face_flags&rsquo; field of the <a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a> structure. They inform client applications of properties of the corresponding face.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>FT_FACE_FLAG_SCALABLE</b></td><td>
+<p>Indicates that the face contains outline glyphs. This doesn't prevent bitmap strikes, i.e., a face can have both this and and <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_FIXED_SIZES</a> set.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_FACE_FLAG_FIXED_SIZES</b></td></tr>
+<tr valign=top><td></td><td>
+<p>Indicates that the face contains bitmap strikes. See also the &lsquo;num_fixed_sizes&rsquo; and &lsquo;available_sizes&rsquo; fields of <a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a>.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_FACE_FLAG_FIXED_WIDTH</b></td></tr>
+<tr valign=top><td></td><td>
+<p>Indicates that the face contains fixed-width characters (like Courier, Lucido, MonoType, etc.).</p>
+</td></tr>
+<tr valign=top><td><b>FT_FACE_FLAG_SFNT</b></td><td>
+<p>Indicates that the face uses the &lsquo;sfnt&rsquo; storage scheme. For now, this means TrueType and OpenType.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_FACE_FLAG_HORIZONTAL</b></td></tr>
+<tr valign=top><td></td><td>
+<p>Indicates that the face contains horizontal glyph metrics. This should be set for all common formats.</p>
+</td></tr>
+<tr valign=top><td><b>FT_FACE_FLAG_VERTICAL</b></td><td>
+<p>Indicates that the face contains vertical glyph metrics. This is only available in some formats, not all of them.</p>
+</td></tr>
+<tr valign=top><td><b>FT_FACE_FLAG_KERNING</b></td><td>
+<p>Indicates that the face contains kerning information. If set, the kerning distance can be retrieved through the function <a href="ft2-base_interface.html#FT_Get_Kerning">FT_Get_Kerning</a>. Otherwise the function always return the vector (0,0). Note that FreeType doesn't handle kerning data from the &lsquo;GPOS&rsquo; table (as present in some OpenType fonts).</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_FACE_FLAG_FAST_GLYPHS</b></td></tr>
+<tr valign=top><td></td><td>
+<p>THIS FLAG IS DEPRECATED. DO NOT USE OR TEST IT.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_FACE_FLAG_MULTIPLE_MASTERS</b></td></tr>
+<tr valign=top><td></td><td>
+<p>Indicates that the font contains multiple masters and is capable of interpolating between them. See the multiple-masters specific API for details.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_FACE_FLAG_GLYPH_NAMES</b></td></tr>
+<tr valign=top><td></td><td>
+<p>Indicates that the font contains glyph names that can be retrieved through <a href="ft2-base_interface.html#FT_Get_Glyph_Name">FT_Get_Glyph_Name</a>. Note that some TrueType fonts contain broken glyph name tables. Use the function <a href="ft2-type1_tables.html#FT_Has_PS_Glyph_Names">FT_Has_PS_Glyph_Names</a> when needed.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_FACE_FLAG_EXTERNAL_STREAM</b></td></tr>
+<tr valign=top><td></td><td>
+<p>Used internally by FreeType to indicate that a face's stream was provided by the client application and should not be destroyed when <a href="ft2-base_interface.html#FT_Done_Face">FT_Done_Face</a> is called. Don't read or test this flag.</p>
+</td></tr>
+<tr valign=top><td><b>FT_FACE_FLAG_HINTER</b></td><td>
+<p>Set if the font driver has a hinting machine of its own. For example, with TrueType fonts, it makes sense to use data from the SFNT &lsquo;gasp&rsquo; table only if the native TrueType hinting engine (with the bytecode interpreter) is available and active.</p>
+</td></tr>
+<tr valign=top><td><b>FT_FACE_FLAG_CID_KEYED</b></td><td>
+<p>Set if the font is CID-keyed. In that case, the font is not accessed by glyph indices but by CID values. For subsetted CID-keyed fonts this has the consequence that not all index values are a valid argument to FT_Load_Glyph. Only the CID values for which corresponding glyphs in the subsetted font exist make FT_Load_Glyph return successfully; in all other cases you get an &lsquo;FT_Err_Invalid_Argument&rsquo; error.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_HAS_HORIZONTAL">FT_HAS_HORIZONTAL</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_HAS_HORIZONTAL</b>( face ) \
+ ( face-&gt;face_flags &amp; <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_HORIZONTAL</a> )
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro that returns true whenever a face object contains horizontal metrics (this is true for all font formats though).</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>also</b></em></td></tr><tr><td>
+<p><a href="ft2-base_interface.html#FT_HAS_VERTICAL">FT_HAS_VERTICAL</a> can be used to check for vertical metrics.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_HAS_VERTICAL">FT_HAS_VERTICAL</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_HAS_VERTICAL</b>( face ) \
+ ( face-&gt;face_flags &amp; <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_VERTICAL</a> )
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro that returns true whenever a face object contains vertical metrics.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_HAS_KERNING">FT_HAS_KERNING</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_HAS_KERNING</b>( face ) \
+ ( face-&gt;face_flags &amp; <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_KERNING</a> )
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro that returns true whenever a face object contains kerning data that can be accessed with <a href="ft2-base_interface.html#FT_Get_Kerning">FT_Get_Kerning</a>.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_IS_SCALABLE">FT_IS_SCALABLE</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_IS_SCALABLE</b>( face ) \
+ ( face-&gt;face_flags &amp; <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_SCALABLE</a> )
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro that returns true whenever a face object contains a scalable font face (true for TrueType, Type 1, Type 42, CID, OpenType/CFF, and PFR font formats.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_IS_SFNT">FT_IS_SFNT</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_IS_SFNT</b>( face ) \
+ ( face-&gt;face_flags &amp; <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_SFNT</a> )
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro that returns true whenever a face object contains a font whose format is based on the SFNT storage scheme. This usually means: TrueType fonts, OpenType fonts, as well as SFNT-based embedded bitmap fonts.</p>
+<p>If this macro is true, all functions defined in <a href="ft2-header_file_macros.html#FT_SFNT_NAMES_H">FT_SFNT_NAMES_H</a> and <a href="ft2-header_file_macros.html#FT_TRUETYPE_TABLES_H">FT_TRUETYPE_TABLES_H</a> are available.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_IS_FIXED_WIDTH">FT_IS_FIXED_WIDTH</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_IS_FIXED_WIDTH</b>( face ) \
+ ( face-&gt;face_flags &amp; <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_FIXED_WIDTH</a> )
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro that returns true whenever a face object contains a font face that contains fixed-width (or &lsquo;monospace&rsquo;, &lsquo;fixed-pitch&rsquo;, etc.) glyphs.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_HAS_FIXED_SIZES">FT_HAS_FIXED_SIZES</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_HAS_FIXED_SIZES</b>( face ) \
+ ( face-&gt;face_flags &amp; <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_FIXED_SIZES</a> )
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro that returns true whenever a face object contains some embedded bitmaps. See the &lsquo;available_sizes&rsquo; field of the <a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a> structure.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_HAS_FAST_GLYPHS">FT_HAS_FAST_GLYPHS</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_HAS_FAST_GLYPHS</b>( face ) 0
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Deprecated.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_HAS_GLYPH_NAMES">FT_HAS_GLYPH_NAMES</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_HAS_GLYPH_NAMES</b>( face ) \
+ ( face-&gt;face_flags &amp; <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_GLYPH_NAMES</a> )
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro that returns true whenever a face object contains some glyph names that can be accessed through <a href="ft2-base_interface.html#FT_Get_Glyph_Name">FT_Get_Glyph_Name</a>.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_HAS_MULTIPLE_MASTERS">FT_HAS_MULTIPLE_MASTERS</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_HAS_MULTIPLE_MASTERS</b>( face ) \
+ ( face-&gt;face_flags &amp; <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_MULTIPLE_MASTERS</a> )
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro that returns true whenever a face object contains some multiple masters. The functions provided by <a href="ft2-header_file_macros.html#FT_MULTIPLE_MASTERS_H">FT_MULTIPLE_MASTERS_H</a> are then available to choose the exact design you want.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_IS_CID_KEYED">FT_IS_CID_KEYED</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_IS_CID_KEYED</b>( face ) \
+ ( face-&gt;face_flags &amp; <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_CID_KEYED</a> )
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro that returns true whenever a face object contains a CID-keyed font. See the discussion of <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_CID_KEYED</a> for more details.</p>
+<p>If this macro is true, all functions defined in <a href="ft2-header_file_macros.html#FT_CID_H">FT_CID_H</a> are available.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_STYLE_FLAG_XXX">FT_STYLE_FLAG_XXX</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <a href="ft2-base_interface.html#FT_STYLE_FLAG_XXX">FT_STYLE_FLAG_ITALIC</a> ( 1 &lt;&lt; 0 )
+#define <a href="ft2-base_interface.html#FT_STYLE_FLAG_XXX">FT_STYLE_FLAG_BOLD</a> ( 1 &lt;&lt; 1 )
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A list of bit-flags used to indicate the style of a given face. These are used in the &lsquo;style_flags&rsquo; field of <a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a>.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>FT_STYLE_FLAG_ITALIC</b></td><td>
+<p>Indicates that a given face style is italic or oblique.</p>
+</td></tr>
+<tr valign=top><td><b>FT_STYLE_FLAG_BOLD</b></td><td>
+<p>Indicates that a given face is bold.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The style information as provided by FreeType is very basic. More details are beyond the scope and should be done on a higher level (for example, by analyzing various fields of the &lsquo;OS/2&rsquo; table in SFNT based fonts).</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Size_Internal">FT_Size_Internal</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Size_InternalRec_* <b>FT_Size_Internal</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>An opaque handle to an &lsquo;FT_Size_InternalRec&rsquo; structure, used to model private data of a given <a href="ft2-base_interface.html#FT_Size">FT_Size</a> object.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Size_Metrics">FT_Size_Metrics</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Size_Metrics_
+ {
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> x_ppem; /* horizontal pixels per EM */
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> y_ppem; /* vertical pixels per EM */
+
+ <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> x_scale; /* scaling values used to convert font */
+ <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> y_scale; /* units to 26.6 fractional pixels */
+
+ <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> ascender; /* ascender in 26.6 frac. pixels */
+ <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> descender; /* descender in 26.6 frac. pixels */
+ <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> height; /* text height in 26.6 frac. pixels */
+ <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> max_advance; /* max horizontal advance, in 26.6 pixels */
+
+ } <b>FT_Size_Metrics</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>The size metrics structure gives the metrics of a size object.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>x_ppem</b></td><td>
+<p>The width of the scaled EM square in pixels, hence the term &lsquo;ppem&rsquo; (pixels per EM). It is also referred to as &lsquo;nominal width&rsquo;.</p>
+</td></tr>
+<tr valign=top><td><b>y_ppem</b></td><td>
+<p>The height of the scaled EM square in pixels, hence the term &lsquo;ppem&rsquo; (pixels per EM). It is also referred to as &lsquo;nominal height&rsquo;.</p>
+</td></tr>
+<tr valign=top><td><b>x_scale</b></td><td>
+<p>A 16.16 fractional scaling value used to convert horizontal metrics from font units to 26.6 fractional pixels. Only relevant for scalable font formats.</p>
+</td></tr>
+<tr valign=top><td><b>y_scale</b></td><td>
+<p>A 16.16 fractional scaling value used to convert vertical metrics from font units to 26.6 fractional pixels. Only relevant for scalable font formats.</p>
+</td></tr>
+<tr valign=top><td><b>ascender</b></td><td>
+<p>The ascender in 26.6 fractional pixels. See <a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a> for the details.</p>
+</td></tr>
+<tr valign=top><td><b>descender</b></td><td>
+<p>The descender in 26.6 fractional pixels. See <a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a> for the details.</p>
+</td></tr>
+<tr valign=top><td><b>height</b></td><td>
+<p>The height in 26.6 fractional pixels. See <a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a> for the details.</p>
+</td></tr>
+<tr valign=top><td><b>max_advance</b></td><td>
+<p>The maximal advance width in 26.6 fractional pixels. See <a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a> for the details.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The scaling values, if relevant, are determined first during a size changing operation. The remaining fields are then set by the driver. For scalable formats, they are usually set to scaled values of the corresponding fields in <a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a>.</p>
+<p>Note that due to glyph hinting, these values might not be exact for certain fonts. Thus they must be treated as unreliable with an error margin of at least one pixel!</p>
+<p>Indeed, the only way to get the exact metrics is to render <i>all</i> glyphs. As this would be a definite performance hit, it is up to client applications to perform such computations.</p>
+<p>The FT_Size_Metrics structure is valid for bitmap fonts also.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_SizeRec">FT_SizeRec</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_SizeRec_
+ {
+ <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face; /* parent face object */
+ <a href="ft2-basic_types.html#FT_Generic">FT_Generic</a> generic; /* generic pointer for client uses */
+ <a href="ft2-base_interface.html#FT_Size_Metrics">FT_Size_Metrics</a> metrics; /* size metrics */
+ <a href="ft2-base_interface.html#FT_Size_Internal">FT_Size_Internal</a> internal;
+
+ } <b>FT_SizeRec</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>FreeType root size class structure. A size object models a face object at a given size.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>Handle to the parent face object.</p>
+</td></tr>
+<tr valign=top><td><b>generic</b></td><td>
+<p>A typeless pointer, which is unused by the FreeType library or any of its drivers. It can be used by client applications to link their own data to each size object.</p>
+</td></tr>
+<tr valign=top><td><b>metrics</b></td><td>
+<p>Metrics for this size object. This field is read-only.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_SubGlyph">FT_SubGlyph</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_SubGlyphRec_* <b>FT_SubGlyph</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>The subglyph structure is an internal object used to describe subglyphs (for example, in the case of composites).</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The subglyph implementation is not part of the high-level API, hence the forward structure declaration.</p>
+<p>You can however retrieve subglyph information with <a href="ft2-base_interface.html#FT_Get_SubGlyph_Info">FT_Get_SubGlyph_Info</a>.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Slot_Internal">FT_Slot_Internal</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Slot_InternalRec_* <b>FT_Slot_Internal</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>An opaque handle to an &lsquo;FT_Slot_InternalRec&rsquo; structure, used to model private data of a given <a href="ft2-base_interface.html#FT_GlyphSlot">FT_GlyphSlot</a> object.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_GlyphSlotRec">FT_GlyphSlotRec</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_GlyphSlotRec_
+ {
+ <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library;
+ <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face;
+ <a href="ft2-base_interface.html#FT_GlyphSlot">FT_GlyphSlot</a> next;
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> reserved; /* retained for binary compatibility */
+ <a href="ft2-basic_types.html#FT_Generic">FT_Generic</a> generic;
+
+ <a href="ft2-base_interface.html#FT_Glyph_Metrics">FT_Glyph_Metrics</a> metrics;
+ <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> linearHoriAdvance;
+ <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> linearVertAdvance;
+ <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a> advance;
+
+ <a href="ft2-basic_types.html#FT_Glyph_Format">FT_Glyph_Format</a> format;
+
+ <a href="ft2-basic_types.html#FT_Bitmap">FT_Bitmap</a> bitmap;
+ <a href="ft2-basic_types.html#FT_Int">FT_Int</a> bitmap_left;
+ <a href="ft2-basic_types.html#FT_Int">FT_Int</a> bitmap_top;
+
+ <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a> outline;
+
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> num_subglyphs;
+ <a href="ft2-base_interface.html#FT_SubGlyph">FT_SubGlyph</a> subglyphs;
+
+ <span class="keyword">void</span>* control_data;
+ <span class="keyword">long</span> control_len;
+
+ <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> lsb_delta;
+ <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> rsb_delta;
+
+ <span class="keyword">void</span>* other;
+
+ <a href="ft2-base_interface.html#FT_Slot_Internal">FT_Slot_Internal</a> internal;
+
+ } <b>FT_GlyphSlotRec</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>FreeType root glyph slot class structure. A glyph slot is a container where individual glyphs can be loaded, be they in outline or bitmap format.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>library</b></td><td>
+<p>A handle to the FreeType library instance this slot belongs to.</p>
+</td></tr>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to the parent face object.</p>
+</td></tr>
+<tr valign=top><td><b>next</b></td><td>
+<p>In some cases (like some font tools), several glyph slots per face object can be a good thing. As this is rare, the glyph slots are listed through a direct, single-linked list using its &lsquo;next&rsquo; field.</p>
+</td></tr>
+<tr valign=top><td><b>generic</b></td><td>
+<p>A typeless pointer which is unused by the FreeType library or any of its drivers. It can be used by client applications to link their own data to each glyph slot object.</p>
+</td></tr>
+<tr valign=top><td><b>metrics</b></td><td>
+<p>The metrics of the last loaded glyph in the slot. The returned values depend on the last load flags (see the <a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a> API function) and can be expressed either in 26.6 fractional pixels or font units.</p>
+<p>Note that even when the glyph image is transformed, the metrics are not.</p>
+</td></tr>
+<tr valign=top><td><b>linearHoriAdvance</b></td><td>
+<p>The advance width of the unhinted glyph. Its value is expressed in 16.16 fractional pixels, unless <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_LINEAR_DESIGN</a> is set when loading the glyph. This field can be important to perform correct WYSIWYG layout. Only relevant for outline glyphs.</p>
+</td></tr>
+<tr valign=top><td><b>linearVertAdvance</b></td><td>
+<p>The advance height of the unhinted glyph. Its value is expressed in 16.16 fractional pixels, unless <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_LINEAR_DESIGN</a> is set when loading the glyph. This field can be important to perform correct WYSIWYG layout. Only relevant for outline glyphs.</p>
+</td></tr>
+<tr valign=top><td><b>advance</b></td><td>
+<p>This is the transformed advance width for the glyph.</p>
+</td></tr>
+<tr valign=top><td><b>format</b></td><td>
+<p>This field indicates the format of the image contained in the glyph slot. Typically <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_BITMAP</a>, <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_OUTLINE</a>, or <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_COMPOSITE</a>, but others are possible.</p>
+</td></tr>
+<tr valign=top><td><b>bitmap</b></td><td>
+<p>This field is used as a bitmap descriptor when the slot format is <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_BITMAP</a>. Note that the address and content of the bitmap buffer can change between calls of <a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a> and a few other functions.</p>
+</td></tr>
+<tr valign=top><td><b>bitmap_left</b></td><td>
+<p>This is the bitmap's left bearing expressed in integer pixels. Of course, this is only valid if the format is <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_BITMAP</a>.</p>
+</td></tr>
+<tr valign=top><td><b>bitmap_top</b></td><td>
+<p>This is the bitmap's top bearing expressed in integer pixels. Remember that this is the distance from the baseline to the top-most glyph scanline, upwards y-coordinates being <b>positive</b>.</p>
+</td></tr>
+<tr valign=top><td><b>outline</b></td><td>
+<p>The outline descriptor for the current glyph image if its format is <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_OUTLINE</a>. Once a glyph is loaded, &lsquo;outline&rsquo; can be transformed, distorted, embolded, etc. However, it must not be freed.</p>
+</td></tr>
+<tr valign=top><td><b>num_subglyphs</b></td><td>
+<p>The number of subglyphs in a composite glyph. This field is only valid for the composite glyph format that should normally only be loaded with the <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_RECURSE</a> flag. For now this is internal to FreeType.</p>
+</td></tr>
+<tr valign=top><td><b>subglyphs</b></td><td>
+<p>An array of subglyph descriptors for composite glyphs. There are &lsquo;num_subglyphs&rsquo; elements in there. Currently internal to FreeType.</p>
+</td></tr>
+<tr valign=top><td><b>control_data</b></td><td>
+<p>Certain font drivers can also return the control data for a given glyph image (e.g. TrueType bytecode, Type 1 charstrings, etc.). This field is a pointer to such data.</p>
+</td></tr>
+<tr valign=top><td><b>control_len</b></td><td>
+<p>This is the length in bytes of the control data.</p>
+</td></tr>
+<tr valign=top><td><b>other</b></td><td>
+<p>Really wicked formats can use this pointer to present their own glyph image to client applications. Note that the application needs to know about the image format.</p>
+</td></tr>
+<tr valign=top><td><b>lsb_delta</b></td><td>
+<p>The difference between hinted and unhinted left side bearing while autohinting is active. Zero otherwise.</p>
+</td></tr>
+<tr valign=top><td><b>rsb_delta</b></td><td>
+<p>The difference between hinted and unhinted right side bearing while autohinting is active. Zero otherwise.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>If <a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a> is called with default flags (see <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_DEFAULT</a>) the glyph image is loaded in the glyph slot in its native format (e.g., an outline glyph for TrueType and Type 1 formats).</p>
+<p>This image can later be converted into a bitmap by calling <a href="ft2-base_interface.html#FT_Render_Glyph">FT_Render_Glyph</a>. This function finds the current renderer for the native image's format then invokes it.</p>
+<p>The renderer is in charge of transforming the native image through the slot's face transformation fields, then convert it into a bitmap that is returned in &lsquo;slot-&gt;bitmap&rsquo;.</p>
+<p>Note that &lsquo;slot-&gt;bitmap_left&rsquo; and &lsquo;slot-&gt;bitmap_top&rsquo; are also used to specify the position of the bitmap relative to the current pen position (e.g., coordinates (0,0) on the baseline). Of course, &lsquo;slot-&gt;format&rsquo; is also changed to <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_BITMAP</a>.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>Here a small pseudo code fragment which shows how to use &lsquo;lsb_delta&rsquo; and &lsquo;rsb_delta&rsquo;:</p>
+<pre class="colored">
+ FT_Pos origin_x = 0;
+ FT_Pos prev_rsb_delta = 0;
+
+
+ for all glyphs do
+ &lt;compute kern between current and previous glyph and add it to
+ `origin_x'&gt;
+
+ &lt;load glyph with `FT_Load_Glyph'&gt;
+
+ if ( prev_rsb_delta - face-&gt;glyph-&gt;lsb_delta &gt;= 32 )
+ origin_x -= 64;
+ else if ( prev_rsb_delta - face-&gt;glyph-&gt;lsb_delta &lt; -32 )
+ origin_x += 64;
+
+ prev_rsb_delta = face-&gt;glyph-&gt;rsb_delta;
+
+ &lt;save glyph image, or render glyph, or ...&gt;
+
+ origin_x += face-&gt;glyph-&gt;advance.x;
+ endfor
+</pre>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Init_FreeType">FT_Init_FreeType</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Init_FreeType</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> *alibrary );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Initialize a new FreeType library object. The set of modules that are registered by this function is determined at build time.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>alibrary</b></td><td>
+<p>A handle to a new library object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Done_FreeType">FT_Done_FreeType</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Done_FreeType</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Destroy a given FreeType library object and all of its children, including resources, drivers, faces, sizes, etc.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>library</b></td><td>
+<p>A handle to the target library object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_OPEN_XXX">FT_OPEN_XXX</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_MEMORY</a> 0x1
+#define <a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_STREAM</a> 0x2
+#define <a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_PATHNAME</a> 0x4
+#define <a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_DRIVER</a> 0x8
+#define <a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_PARAMS</a> 0x10
+
+#define <a href="ft2-base_interface.html#FT_OPEN_XXX">ft_open_memory</a> <a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_MEMORY</a> /* deprecated */
+#define <a href="ft2-base_interface.html#FT_OPEN_XXX">ft_open_stream</a> <a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_STREAM</a> /* deprecated */
+#define <a href="ft2-base_interface.html#FT_OPEN_XXX">ft_open_pathname</a> <a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_PATHNAME</a> /* deprecated */
+#define <a href="ft2-base_interface.html#FT_OPEN_XXX">ft_open_driver</a> <a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_DRIVER</a> /* deprecated */
+#define <a href="ft2-base_interface.html#FT_OPEN_XXX">ft_open_params</a> <a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_PARAMS</a> /* deprecated */
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A list of bit-field constants used within the &lsquo;flags&rsquo; field of the <a href="ft2-base_interface.html#FT_Open_Args">FT_Open_Args</a> structure.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>FT_OPEN_MEMORY</b></td><td>
+<p>This is a memory-based stream.</p>
+</td></tr>
+<tr valign=top><td><b>FT_OPEN_STREAM</b></td><td>
+<p>Copy the stream from the &lsquo;stream&rsquo; field.</p>
+</td></tr>
+<tr valign=top><td><b>FT_OPEN_PATHNAME</b></td><td>
+<p>Create a new input stream from a C path name.</p>
+</td></tr>
+<tr valign=top><td><b>FT_OPEN_DRIVER</b></td><td>
+<p>Use the &lsquo;driver&rsquo; field.</p>
+</td></tr>
+<tr valign=top><td><b>FT_OPEN_PARAMS</b></td><td>
+<p>Use the &lsquo;num_params&rsquo; and &lsquo;params&rsquo; fields.</p>
+</td></tr>
+<tr valign=top><td><b>ft_open_memory</b></td><td>
+<p>Deprecated; use <a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_MEMORY</a> instead.</p>
+</td></tr>
+<tr valign=top><td><b>ft_open_stream</b></td><td>
+<p>Deprecated; use <a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_STREAM</a> instead.</p>
+</td></tr>
+<tr valign=top><td><b>ft_open_pathname</b></td><td>
+<p>Deprecated; use <a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_PATHNAME</a> instead.</p>
+</td></tr>
+<tr valign=top><td><b>ft_open_driver</b></td><td>
+<p>Deprecated; use <a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_DRIVER</a> instead.</p>
+</td></tr>
+<tr valign=top><td><b>ft_open_params</b></td><td>
+<p>Deprecated; use <a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_PARAMS</a> instead.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The &lsquo;FT_OPEN_MEMORY&rsquo;, &lsquo;FT_OPEN_STREAM&rsquo;, and &lsquo;FT_OPEN_PATHNAME&rsquo; flags are mutually exclusive.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Parameter">FT_Parameter</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Parameter_
+ {
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> tag;
+ <a href="ft2-basic_types.html#FT_Pointer">FT_Pointer</a> data;
+
+ } <b>FT_Parameter</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A simple structure used to pass more or less generic parameters to <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a>.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>tag</b></td><td>
+<p>A four-byte identification tag.</p>
+</td></tr>
+<tr valign=top><td><b>data</b></td><td>
+<p>A pointer to the parameter data.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The ID and function of parameters are driver-specific.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Open_Args">FT_Open_Args</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Open_Args_
+ {
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> flags;
+ <span class="keyword">const</span> <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a>* memory_base;
+ <a href="ft2-basic_types.html#FT_Long">FT_Long</a> memory_size;
+ <a href="ft2-basic_types.html#FT_String">FT_String</a>* pathname;
+ <a href="ft2-system_interface.html#FT_Stream">FT_Stream</a> stream;
+ <a href="ft2-base_interface.html#FT_Module">FT_Module</a> driver;
+ <a href="ft2-basic_types.html#FT_Int">FT_Int</a> num_params;
+ <a href="ft2-base_interface.html#FT_Parameter">FT_Parameter</a>* params;
+
+ } <b>FT_Open_Args</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A structure used to indicate how to open a new font file or stream. A pointer to such a structure can be used as a parameter for the functions <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a> and <a href="ft2-base_interface.html#FT_Attach_Stream">FT_Attach_Stream</a>.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>flags</b></td><td>
+<p>A set of bit flags indicating how to use the structure.</p>
+</td></tr>
+<tr valign=top><td><b>memory_base</b></td><td>
+<p>The first byte of the file in memory.</p>
+</td></tr>
+<tr valign=top><td><b>memory_size</b></td><td>
+<p>The size in bytes of the file in memory.</p>
+</td></tr>
+<tr valign=top><td><b>pathname</b></td><td>
+<p>A pointer to an 8-bit file pathname.</p>
+</td></tr>
+<tr valign=top><td><b>stream</b></td><td>
+<p>A handle to a source stream object.</p>
+</td></tr>
+<tr valign=top><td><b>driver</b></td><td>
+<p>This field is exclusively used by <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a>; it simply specifies the font driver to use to open the face. If set to 0, FreeType tries to load the face with each one of the drivers in its list.</p>
+</td></tr>
+<tr valign=top><td><b>num_params</b></td><td>
+<p>The number of extra parameters.</p>
+</td></tr>
+<tr valign=top><td><b>params</b></td><td>
+<p>Extra parameters passed to the font driver when opening a new face.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The stream type is determined by the contents of &lsquo;flags&rsquo; which are tested in the following order by <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a>:</p>
+<p>If the &lsquo;FT_OPEN_MEMORY&rsquo; bit is set, assume that this is a memory file of &lsquo;memory_size&rsquo; bytes, located at &lsquo;memory_address&rsquo;. The data are are not copied, and the client is responsible for releasing and destroying them <i>after</i> the corresponding call to <a href="ft2-base_interface.html#FT_Done_Face">FT_Done_Face</a>.</p>
+<p>Otherwise, if the &lsquo;FT_OPEN_STREAM&rsquo; bit is set, assume that a custom input stream &lsquo;stream&rsquo; is used.</p>
+<p>Otherwise, if the &lsquo;FT_OPEN_PATHNAME&rsquo; bit is set, assume that this is a normal file and use &lsquo;pathname&rsquo; to open it.</p>
+<p>If the &lsquo;FT_OPEN_DRIVER&rsquo; bit is set, <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a> only tries to open the file with the driver whose handler is in &lsquo;driver&rsquo;.</p>
+<p>If the &lsquo;FT_OPEN_PARAMS&rsquo; bit is set, the parameters given by &lsquo;num_params&rsquo; and &lsquo;params&rsquo; is used. They are ignored otherwise.</p>
+<p>Ideally, both the &lsquo;pathname&rsquo; and &lsquo;params&rsquo; fields should be tagged as &lsquo;const&rsquo;; this is missing for API backwards compatibility. With other words, applications should treat them as read-only.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_New_Face">FT_New_Face</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_New_Face</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
+ <span class="keyword">const</span> <span class="keyword">char</span>* filepathname,
+ <a href="ft2-basic_types.html#FT_Long">FT_Long</a> face_index,
+ <a href="ft2-base_interface.html#FT_Face">FT_Face</a> *aface );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>This function calls <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a> to open a font by its pathname.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>library</b></td><td>
+<p>A handle to the library resource.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>pathname</b></td><td>
+<p>A path to the font file.</p>
+</td></tr>
+<tr valign=top><td><b>face_index</b></td><td>
+<p>The index of the face within the font. The first face has index 0.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>aface</b></td><td>
+<p>A handle to a new face object. If &lsquo;face_index&rsquo; is greater than or equal to zero, it must be non-NULL. See <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a> for more details.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_New_Memory_Face">FT_New_Memory_Face</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_New_Memory_Face</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
+ <span class="keyword">const</span> <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a>* file_base,
+ <a href="ft2-basic_types.html#FT_Long">FT_Long</a> file_size,
+ <a href="ft2-basic_types.html#FT_Long">FT_Long</a> face_index,
+ <a href="ft2-base_interface.html#FT_Face">FT_Face</a> *aface );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>This function calls <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a> to open a font which has been loaded into memory.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>library</b></td><td>
+<p>A handle to the library resource.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>file_base</b></td><td>
+<p>A pointer to the beginning of the font data.</p>
+</td></tr>
+<tr valign=top><td><b>file_size</b></td><td>
+<p>The size of the memory chunk used by the font data.</p>
+</td></tr>
+<tr valign=top><td><b>face_index</b></td><td>
+<p>The index of the face within the font. The first face has index 0.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>aface</b></td><td>
+<p>A handle to a new face object. If &lsquo;face_index&rsquo; is greater than or equal to zero, it must be non-NULL. See <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a> for more details.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>You must not deallocate the memory before calling <a href="ft2-base_interface.html#FT_Done_Face">FT_Done_Face</a>.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Open_Face">FT_Open_Face</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Open_Face</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
+ <span class="keyword">const</span> <a href="ft2-base_interface.html#FT_Open_Args">FT_Open_Args</a>* args,
+ <a href="ft2-basic_types.html#FT_Long">FT_Long</a> face_index,
+ <a href="ft2-base_interface.html#FT_Face">FT_Face</a> *aface );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Create a face object from a given resource described by <a href="ft2-base_interface.html#FT_Open_Args">FT_Open_Args</a>.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>library</b></td><td>
+<p>A handle to the library resource.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>args</b></td><td>
+<p>A pointer to an &lsquo;FT_Open_Args&rsquo; structure which must be filled by the caller.</p>
+</td></tr>
+<tr valign=top><td><b>face_index</b></td><td>
+<p>The index of the face within the font. The first face has index 0.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>aface</b></td><td>
+<p>A handle to a new face object. If &lsquo;face_index&rsquo; is greater than or equal to zero, it must be non-NULL. See note below.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>Unlike FreeType 1.x, this function automatically creates a glyph slot for the face object which can be accessed directly through &lsquo;face-&gt;glyph&rsquo;.</p>
+<p>FT_Open_Face can be used to quickly check whether the font format of a given font resource is supported by FreeType. If the &lsquo;face_index&rsquo; field is negative, the function's return value is 0 if the font format is recognized, or non-zero otherwise; the function returns a more or less empty face handle in &lsquo;*aface&rsquo; (if &lsquo;aface&rsquo; isn't NULL). The only useful field in this special case is &lsquo;face-&gt;num_faces&rsquo; which gives the number of faces within the font file. After examination, the returned <a href="ft2-base_interface.html#FT_Face">FT_Face</a> structure should be deallocated with a call to <a href="ft2-base_interface.html#FT_Done_Face">FT_Done_Face</a>.</p>
+<p>Each new face object created with this function also owns a default <a href="ft2-base_interface.html#FT_Size">FT_Size</a> object, accessible as &lsquo;face-&gt;size&rsquo;.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Attach_File">FT_Attach_File</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Attach_File</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <span class="keyword">const</span> <span class="keyword">char</span>* filepathname );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>This function calls <a href="ft2-base_interface.html#FT_Attach_Stream">FT_Attach_Stream</a> to attach a file.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>The target face object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>filepathname</b></td><td>
+<p>The pathname.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Attach_Stream">FT_Attach_Stream</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Attach_Stream</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-base_interface.html#FT_Open_Args">FT_Open_Args</a>* parameters );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>&lsquo;Attach&rsquo; data to a face object. Normally, this is used to read additional information for the face object. For example, you can attach an AFM file that comes with a Type 1 font to get the kerning values and other metrics.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>The target face object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>parameters</b></td><td>
+<p>A pointer to <a href="ft2-base_interface.html#FT_Open_Args">FT_Open_Args</a> which must be filled by the caller.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The meaning of the &lsquo;attach&rsquo; (i.e., what really happens when the new file is read) is not fixed by FreeType itself. It really depends on the font format (and thus the font driver).</p>
+<p>Client applications are expected to know what they are doing when invoking this function. Most drivers simply do not implement file attachments.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Done_Face">FT_Done_Face</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Done_Face</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Discard a given face object, as well as all of its child slots and sizes.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to a target face object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Select_Size">FT_Select_Size</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Select_Size</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#FT_Int">FT_Int</a> strike_index );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Select a bitmap strike.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to a target face object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>strike_index</b></td><td>
+<p>The index of the bitmap strike in the &lsquo;available_sizes&rsquo; field of <a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a> structure.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Size_Request_Type">FT_Size_Request_Type</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_Size_Request_Type_
+ {
+ <a href="ft2-base_interface.html#FT_Size_Request_Type">FT_SIZE_REQUEST_TYPE_NOMINAL</a>,
+ <a href="ft2-base_interface.html#FT_Size_Request_Type">FT_SIZE_REQUEST_TYPE_REAL_DIM</a>,
+ <a href="ft2-base_interface.html#FT_Size_Request_Type">FT_SIZE_REQUEST_TYPE_BBOX</a>,
+ <a href="ft2-base_interface.html#FT_Size_Request_Type">FT_SIZE_REQUEST_TYPE_CELL</a>,
+ <a href="ft2-base_interface.html#FT_Size_Request_Type">FT_SIZE_REQUEST_TYPE_SCALES</a>,
+
+ FT_SIZE_REQUEST_TYPE_MAX
+
+ } <b>FT_Size_Request_Type</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>An enumeration type that lists the supported size request types.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td colspan=0><b>FT_SIZE_REQUEST_TYPE_NOMINAL</b></td></tr>
+<tr valign=top><td></td><td>
+<p>The nominal size. The &lsquo;units_per_EM&rsquo; field of <a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a> is used to determine both scaling values.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_SIZE_REQUEST_TYPE_REAL_DIM</b></td></tr>
+<tr valign=top><td></td><td>
+<p>The real dimension. The sum of the the &lsquo;Ascender&rsquo; and (minus of) the &lsquo;Descender&rsquo; fields of <a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a> are used to determine both scaling values.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_SIZE_REQUEST_TYPE_BBOX</b></td></tr>
+<tr valign=top><td></td><td>
+<p>The font bounding box. The width and height of the &lsquo;bbox&rsquo; field of <a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a> are used to determine the horizontal and vertical scaling value, respectively.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_SIZE_REQUEST_TYPE_CELL</b></td></tr>
+<tr valign=top><td></td><td>
+<p>The &lsquo;max_advance_width&rsquo; field of <a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a> is used to determine the horizontal scaling value; the vertical scaling value is determined the same way as <a href="ft2-base_interface.html#FT_Size_Request_Type">FT_SIZE_REQUEST_TYPE_REAL_DIM</a> does. Finally, both scaling values are set to the smaller one. This type is useful if you want to specify the font size for, say, a window of a given dimension and 80x24 cells.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_SIZE_REQUEST_TYPE_SCALES</b></td></tr>
+<tr valign=top><td></td><td>
+<p>Specify the scaling values directly.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The above descriptions only apply to scalable formats. For bitmap formats, the behaviour is up to the driver.</p>
+<p>See the note section of <a href="ft2-base_interface.html#FT_Size_Metrics">FT_Size_Metrics</a> if you wonder how size requesting relates to scaling values.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Size_RequestRec">FT_Size_RequestRec</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Size_RequestRec_
+ {
+ <a href="ft2-base_interface.html#FT_Size_Request_Type">FT_Size_Request_Type</a> type;
+ <a href="ft2-basic_types.html#FT_Long">FT_Long</a> width;
+ <a href="ft2-basic_types.html#FT_Long">FT_Long</a> height;
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> horiResolution;
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> vertResolution;
+
+ } <b>FT_Size_RequestRec</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A structure used to model a size request.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>type</b></td><td>
+<p>See <a href="ft2-base_interface.html#FT_Size_Request_Type">FT_Size_Request_Type</a>.</p>
+</td></tr>
+<tr valign=top><td><b>width</b></td><td>
+<p>The desired width.</p>
+</td></tr>
+<tr valign=top><td><b>height</b></td><td>
+<p>The desired height.</p>
+</td></tr>
+<tr valign=top><td><b>horiResolution</b></td><td>
+<p>The horizontal resolution. If set to zero, &lsquo;width&rsquo; is treated as a 26.6 fractional pixel value.</p>
+</td></tr>
+<tr valign=top><td><b>vertResolution</b></td><td>
+<p>The vertical resolution. If set to zero, &lsquo;height&rsquo; is treated as a 26.6 fractional pixel value.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>If &lsquo;width&rsquo; is zero, then the horizontal scaling value is set equal to the vertical scaling value, and vice versa.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Size_Request">FT_Size_Request</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Size_RequestRec_ *<b>FT_Size_Request</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A handle to a size request structure.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Request_Size">FT_Request_Size</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Request_Size</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-base_interface.html#FT_Size_Request">FT_Size_Request</a> req );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Resize the scale of the active <a href="ft2-base_interface.html#FT_Size">FT_Size</a> object in a face.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to a target face object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>req</b></td><td>
+<p>A pointer to a <a href="ft2-base_interface.html#FT_Size_RequestRec">FT_Size_RequestRec</a>.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>Although drivers may select the bitmap strike matching the request, you should not rely on this if you intend to select a particular bitmap strike. Use <a href="ft2-base_interface.html#FT_Select_Size">FT_Select_Size</a> instead in that case.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Set_Char_Size">FT_Set_Char_Size</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Set_Char_Size</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#FT_F26Dot6">FT_F26Dot6</a> char_width,
+ <a href="ft2-basic_types.html#FT_F26Dot6">FT_F26Dot6</a> char_height,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> horz_resolution,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> vert_resolution );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>This function calls <a href="ft2-base_interface.html#FT_Request_Size">FT_Request_Size</a> to request the nominal size (in points).</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to a target face object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>char_width</b></td><td>
+<p>The nominal width, in 26.6 fractional points.</p>
+</td></tr>
+<tr valign=top><td><b>char_height</b></td><td>
+<p>The nominal height, in 26.6 fractional points.</p>
+</td></tr>
+<tr valign=top><td><b>horz_resolution</b></td><td>
+<p>The horizontal resolution in dpi.</p>
+</td></tr>
+<tr valign=top><td><b>vert_resolution</b></td><td>
+<p>The vertical resolution in dpi.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>If either the character width or height is zero, it is set equal to the other value.</p>
+<p>If either the horizontal or vertical resolution is zero, it is set equal to the other value.</p>
+<p>A character width or height smaller than 1pt is set to 1pt; if both resolution values are zero, they are set to 72dpi.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Set_Pixel_Sizes">FT_Set_Pixel_Sizes</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Set_Pixel_Sizes</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> pixel_width,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> pixel_height );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>This function calls <a href="ft2-base_interface.html#FT_Request_Size">FT_Request_Size</a> to request the nominal size (in pixels).</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to the target face object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>pixel_width</b></td><td>
+<p>The nominal width, in pixels.</p>
+</td></tr>
+<tr valign=top><td><b>pixel_height</b></td><td>
+<p>The nominal height, in pixels.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Load_Glyph">FT_Load_Glyph</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Load_Glyph</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> glyph_index,
+ <a href="ft2-basic_types.html#FT_Int32">FT_Int32</a> load_flags );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A function used to load a single glyph into the glyph slot of a face object.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to the target face object where the glyph is loaded.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>glyph_index</b></td><td>
+<p>The index of the glyph in the font file. For CID-keyed fonts (either in PS or in CFF format) this argument specifies the CID value.</p>
+</td></tr>
+<tr valign=top><td><b>load_flags</b></td><td>
+<p>A flag indicating what to load for this glyph. The <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_XXX</a> constants can be used to control the glyph loading process (e.g., whether the outline should be scaled, whether to load bitmaps or not, whether to hint the outline, etc).</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The loaded glyph may be transformed. See <a href="ft2-base_interface.html#FT_Set_Transform">FT_Set_Transform</a> for the details.</p>
+<p>For subsetted CID-keyed fonts, &lsquo;FT_Err_Invalid_Argument&rsquo; is returned for invalid CID values (this is, for CID values which don't have a corresponding glyph in the font). See the discussion of the <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_CID_KEYED</a> flag for more details.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Load_Char">FT_Load_Char</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Load_Char</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> char_code,
+ <a href="ft2-basic_types.html#FT_Int32">FT_Int32</a> load_flags );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A function used to load a single glyph into the glyph slot of a face object, according to its character code.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to a target face object where the glyph is loaded.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>char_code</b></td><td>
+<p>The glyph's character code, according to the current charmap used in the face.</p>
+</td></tr>
+<tr valign=top><td><b>load_flags</b></td><td>
+<p>A flag indicating what to load for this glyph. The <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_XXX</a> constants can be used to control the glyph loading process (e.g., whether the outline should be scaled, whether to load bitmaps or not, whether to hint the outline, etc).</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>This function simply calls <a href="ft2-base_interface.html#FT_Get_Char_Index">FT_Get_Char_Index</a> and <a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a>.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_LOAD_XXX">FT_LOAD_XXX</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_DEFAULT</a> 0x0
+#define <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_SCALE</a> 0x1
+#define <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_HINTING</a> 0x2
+#define <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_RENDER</a> 0x4
+#define <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_BITMAP</a> 0x8
+#define <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_VERTICAL_LAYOUT</a> 0x10
+#define <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_FORCE_AUTOHINT</a> 0x20
+#define <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_CROP_BITMAP</a> 0x40
+#define <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_PEDANTIC</a> 0x80
+#define <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH</a> 0x200
+#define <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_RECURSE</a> 0x400
+#define <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_IGNORE_TRANSFORM</a> 0x800
+#define <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_MONOCHROME</a> 0x1000
+#define <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_LINEAR_DESIGN</a> 0x2000
+#define FT_LOAD_SBITS_ONLY 0x4000 /* temporary hack! */
+#define <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_AUTOHINT</a> 0x8000U
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A list of bit-field constants used with <a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a> to indicate what kind of operations to perform during glyph loading.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>FT_LOAD_DEFAULT</b></td><td>
+<p>Corresponding to 0, this value is used as the default glyph load operation. In this case, the following happens:</p>
+<p>1. FreeType looks for a bitmap for the glyph corresponding to the face's current size. If one is found, the function returns. The bitmap data can be accessed from the glyph slot (see note below).</p>
+<p>2. If no embedded bitmap is searched or found, FreeType looks for a scalable outline. If one is found, it is loaded from the font file, scaled to device pixels, then &lsquo;hinted&rsquo; to the pixel grid in order to optimize it. The outline data can be accessed from the glyph slot (see note below).</p>
+<p>Note that by default, the glyph loader doesn't render outlines into bitmaps. The following flags are used to modify this default behaviour to more specific and useful cases.</p>
+</td></tr>
+<tr valign=top><td><b>FT_LOAD_NO_SCALE</b></td><td>
+<p>Don't scale the outline glyph loaded, but keep it in font units.</p>
+<p>This flag implies <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_HINTING</a> and <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_BITMAP</a>, and unsets <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_RENDER</a>.</p>
+</td></tr>
+<tr valign=top><td><b>FT_LOAD_NO_HINTING</b></td><td>
+<p>Disable hinting. This generally generates &lsquo;blurrier&rsquo; bitmap glyph when the glyph is rendered in any of the anti-aliased modes. See also the note below.</p>
+<p>This flag is implied by <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_SCALE</a>.</p>
+</td></tr>
+<tr valign=top><td><b>FT_LOAD_RENDER</b></td><td>
+<p>Call <a href="ft2-base_interface.html#FT_Render_Glyph">FT_Render_Glyph</a> after the glyph is loaded. By default, the glyph is rendered in <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_NORMAL</a> mode. This can be overridden by <a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_XXX</a> or <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_MONOCHROME</a>.</p>
+<p>This flag is unset by <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_SCALE</a>.</p>
+</td></tr>
+<tr valign=top><td><b>FT_LOAD_NO_BITMAP</b></td><td>
+<p>Ignore bitmap strikes when loading. Bitmap-only fonts ignore this flag.</p>
+<p><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_SCALE</a> always sets this flag.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_LOAD_VERTICAL_LAYOUT</b></td></tr>
+<tr valign=top><td></td><td>
+<p>Load the glyph for vertical text layout. <i>Don't</i> use it as it is problematic currently.</p>
+</td></tr>
+<tr valign=top><td><b>FT_LOAD_FORCE_AUTOHINT</b></td><td>
+<p>Indicates that the auto-hinter is preferred over the font's native hinter. See also the note below.</p>
+</td></tr>
+<tr valign=top><td><b>FT_LOAD_CROP_BITMAP</b></td><td>
+<p>Indicates that the font driver should crop the loaded bitmap glyph (i.e., remove all space around its black bits). Not all drivers implement this.</p>
+</td></tr>
+<tr valign=top><td><b>FT_LOAD_PEDANTIC</b></td><td>
+<p>Indicates that the font driver should perform pedantic verifications during glyph loading. This is mostly used to detect broken glyphs in fonts. By default, FreeType tries to handle broken fonts also.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH</b></td></tr>
+<tr valign=top><td></td><td>
+<p>Indicates that the font driver should ignore the global advance width defined in the font. By default, that value is used as the advance width for all glyphs when the face has <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_FIXED_WIDTH</a> set.</p>
+<p>This flag exists for historical reasons (to support buggy CJK fonts).</p>
+</td></tr>
+<tr valign=top><td><b>FT_LOAD_NO_RECURSE</b></td><td>
+<p>This flag is only used internally. It merely indicates that the font driver should not load composite glyphs recursively. Instead, it should set the &lsquo;num_subglyph&rsquo; and &lsquo;subglyphs&rsquo; values of the glyph slot accordingly, and set &lsquo;glyph-&gt;format&rsquo; to <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_COMPOSITE</a>.</p>
+<p>The description of sub-glyphs is not available to client applications for now.</p>
+<p>This flag implies <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_SCALE</a> and <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_IGNORE_TRANSFORM</a>.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_LOAD_IGNORE_TRANSFORM</b></td></tr>
+<tr valign=top><td></td><td>
+<p>Indicates that the transform matrix set by <a href="ft2-base_interface.html#FT_Set_Transform">FT_Set_Transform</a> should be ignored.</p>
+</td></tr>
+<tr valign=top><td><b>FT_LOAD_MONOCHROME</b></td><td>
+<p>This flag is used with <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_RENDER</a> to indicate that you want to render an outline glyph to a 1-bit monochrome bitmap glyph, with 8 pixels packed into each byte of the bitmap data.</p>
+<p>Note that this has no effect on the hinting algorithm used. You should use <a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_MONO</a> instead so that the monochrome-optimized hinting algorithm is used.</p>
+</td></tr>
+<tr valign=top><td><b>FT_LOAD_LINEAR_DESIGN</b></td><td>
+<p>Indicates that the &lsquo;linearHoriAdvance&rsquo; and &lsquo;linearVertAdvance&rsquo; fields of <a href="ft2-base_interface.html#FT_GlyphSlotRec">FT_GlyphSlotRec</a> should be kept in font units. See <a href="ft2-base_interface.html#FT_GlyphSlotRec">FT_GlyphSlotRec</a> for details.</p>
+</td></tr>
+<tr valign=top><td><b>FT_LOAD_NO_AUTOHINT</b></td><td>
+<p>Disable auto-hinter. See also the note below.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>By default, hinting is enabled and the font's native hinter (see <a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_HINTER</a>) is preferred over the auto-hinter. You can disable hinting by setting <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_HINTING</a> or change the precedence by setting <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_FORCE_AUTOHINT</a>. You can also set <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_AUTOHINT</a> in case you don't want the auto-hinter to be used at all.</p>
+<p>Besides deciding which hinter to use, you can also decide which hinting algorithm to use. See <a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_XXX</a> for details.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_XXX</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define FT_LOAD_TARGET_( x ) ( (<a href="ft2-basic_types.html#FT_Int32">FT_Int32</a>)( (x) &amp; 15 ) &lt;&lt; 16 )
+
+#define <a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_NORMAL</a> FT_LOAD_TARGET_( <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_NORMAL</a> )
+#define <a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_LIGHT</a> FT_LOAD_TARGET_( <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_LIGHT</a> )
+#define <a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_MONO</a> FT_LOAD_TARGET_( <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_MONO</a> )
+#define <a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_LCD</a> FT_LOAD_TARGET_( <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_LCD</a> )
+#define <a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_LCD_V</a> FT_LOAD_TARGET_( <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_LCD_V</a> )
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A list of values that are used to select a specific hinting algorithm to use by the hinter. You should OR one of these values to your &lsquo;load_flags&rsquo; when calling <a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a>.</p>
+<p>Note that font's native hinters may ignore the hinting algorithm you have specified (e.g., the TrueType bytecode interpreter). You can set <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_FORCE_AUTOHINT</a> to ensure that the auto-hinter is used.</p>
+<p>Also note that <a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_LIGHT</a> is an exception, in that it always implies <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_FORCE_AUTOHINT</a>.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>FT_LOAD_TARGET_NORMAL</b></td><td>
+<p>This corresponds to the default hinting algorithm, optimized for standard gray-level rendering. For monochrome output, use <a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_MONO</a> instead.</p>
+</td></tr>
+<tr valign=top><td><b>FT_LOAD_TARGET_LIGHT</b></td><td>
+<p>A lighter hinting algorithm for non-monochrome modes. Many generated glyphs are more fuzzy but better resemble its original shape. A bit like rendering on Mac OS X.</p>
+<p>As a special exception, this target implies <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_FORCE_AUTOHINT</a>.</p>
+</td></tr>
+<tr valign=top><td><b>FT_LOAD_TARGET_MONO</b></td><td>
+<p>Strong hinting algorithm that should only be used for monochrome output. The result is probably unpleasant if the glyph is rendered in non-monochrome modes.</p>
+</td></tr>
+<tr valign=top><td><b>FT_LOAD_TARGET_LCD</b></td><td>
+<p>A variant of <a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_NORMAL</a> optimized for horizontally decimated LCD displays.</p>
+</td></tr>
+<tr valign=top><td><b>FT_LOAD_TARGET_LCD_V</b></td><td>
+<p>A variant of <a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_NORMAL</a> optimized for vertically decimated LCD displays.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>You should use only <i>one</i> of the FT_LOAD_TARGET_XXX values in your &lsquo;load_flags&rsquo;. They can't be ORed.</p>
+<p>If <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_RENDER</a> is also set, the glyph is rendered in the corresponding mode (i.e., the mode which matches the used algorithm best) unless <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_MONOCHROME</a> is set.</p>
+<p>You can use a hinting algorithm that doesn't correspond to the same rendering mode. As an example, it is possible to use the &lsquo;light&rsquo; hinting algorithm and have the results rendered in horizontal LCD pixel mode, with code like</p>
+<pre class="colored">
+ FT_Load_Glyph( face, glyph_index,
+ load_flags | FT_LOAD_TARGET_LIGHT );
+
+ FT_Render_Glyph( face-&gt;glyph, FT_RENDER_MODE_LCD );
+</pre>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_LOAD_TARGET_MODE">FT_LOAD_TARGET_MODE</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_LOAD_TARGET_MODE</b>( x ) ( (<a href="ft2-base_interface.html#FT_Render_Mode">FT_Render_Mode</a>)( ( (x) &gt;&gt; 16 ) &amp; 15 ) )
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Return the <a href="ft2-base_interface.html#FT_Render_Mode">FT_Render_Mode</a> corresponding to a given <a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_XXX</a> value.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Set_Transform">FT_Set_Transform</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <span class="keyword">void</span> )
+ <b>FT_Set_Transform</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#FT_Matrix">FT_Matrix</a>* matrix,
+ <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* delta );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A function used to set the transformation that is applied to glyph images when they are loaded into a glyph slot through <a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a>.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to the source face object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>matrix</b></td><td>
+<p>A pointer to the transformation's 2x2 matrix. Use 0 for the identity matrix.</p>
+</td></tr>
+<tr valign=top><td><b>delta</b></td><td>
+<p>A pointer to the translation vector. Use 0 for the null vector.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The transformation is only applied to scalable image formats after the glyph has been loaded. It means that hinting is unaltered by the transformation and is performed on the character size given in the last call to <a href="ft2-base_interface.html#FT_Set_Char_Size">FT_Set_Char_Size</a> or <a href="ft2-base_interface.html#FT_Set_Pixel_Sizes">FT_Set_Pixel_Sizes</a>.</p>
+<p>Note that this also transforms the &lsquo;face.glyph.advance&rsquo; field, but <b>not</b> the values in &lsquo;face.glyph.metrics&rsquo;.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Render_Mode">FT_Render_Mode</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_Render_Mode_
+ {
+ <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_NORMAL</a> = 0,
+ <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_LIGHT</a>,
+ <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_MONO</a>,
+ <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_LCD</a>,
+ <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_LCD_V</a>,
+
+ FT_RENDER_MODE_MAX
+
+ } <b>FT_Render_Mode</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>An enumeration type that lists the render modes supported by FreeType 2. Each mode corresponds to a specific type of scanline conversion performed on the outline.</p>
+<p>For bitmap fonts the &lsquo;bitmap-&gt;pixel_mode&rsquo; field in the <a href="ft2-base_interface.html#FT_GlyphSlotRec">FT_GlyphSlotRec</a> structure gives the format of the returned bitmap.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>FT_RENDER_MODE_NORMAL</b></td><td>
+<p>This is the default render mode; it corresponds to 8-bit anti-aliased bitmaps, using 256 levels of opacity.</p>
+</td></tr>
+<tr valign=top><td><b>FT_RENDER_MODE_LIGHT</b></td><td>
+<p>This is equivalent to <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_NORMAL</a>. It is only defined as a separate value because render modes are also used indirectly to define hinting algorithm selectors. See <a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_XXX</a> for details.</p>
+</td></tr>
+<tr valign=top><td><b>FT_RENDER_MODE_MONO</b></td><td>
+<p>This mode corresponds to 1-bit bitmaps.</p>
+</td></tr>
+<tr valign=top><td><b>FT_RENDER_MODE_LCD</b></td><td>
+<p>This mode corresponds to horizontal RGB and BGR sub-pixel displays, like LCD-screens. It produces 8-bit bitmaps that are 3 times the width of the original glyph outline in pixels, and which use the <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_LCD</a> mode.</p>
+</td></tr>
+<tr valign=top><td><b>FT_RENDER_MODE_LCD_V</b></td><td>
+<p>This mode corresponds to vertical RGB and BGR sub-pixel displays (like PDA screens, rotated LCD displays, etc.). It produces 8-bit bitmaps that are 3 times the height of the original glyph outline in pixels and use the <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_LCD_V</a> mode.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The LCD-optimized glyph bitmaps produced by FT_Render_Glyph can be filtered to reduce color-fringes by using <a href="ft2-lcd_filtering.html#FT_Library_SetLcdFilter">FT_Library_SetLcdFilter</a> (not active in the default builds). It is up to the caller to either call <a href="ft2-lcd_filtering.html#FT_Library_SetLcdFilter">FT_Library_SetLcdFilter</a> (if available) or do the filtering itself.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="ft_render_mode_xxx">ft_render_mode_xxx</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <a href="ft2-base_interface.html#ft_render_mode_xxx">ft_render_mode_normal</a> <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_NORMAL</a>
+#define <a href="ft2-base_interface.html#ft_render_mode_xxx">ft_render_mode_mono</a> <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_MONO</a>
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>These constants are deprecated. Use the corresponding <a href="ft2-base_interface.html#FT_Render_Mode">FT_Render_Mode</a> values instead.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>ft_render_mode_normal</b></td><td>
+<p>see <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_NORMAL</a></p>
+</td></tr>
+<tr valign=top><td><b>ft_render_mode_mono</b></td><td>
+<p>see <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_MONO</a></p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Render_Glyph">FT_Render_Glyph</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Render_Glyph</b>( <a href="ft2-base_interface.html#FT_GlyphSlot">FT_GlyphSlot</a> slot,
+ <a href="ft2-base_interface.html#FT_Render_Mode">FT_Render_Mode</a> render_mode );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Convert a given glyph image to a bitmap. It does so by inspecting the glyph image format, finding the relevant renderer, and invoking it.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>slot</b></td><td>
+<p>A handle to the glyph slot containing the image to convert.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>render_mode</b></td><td>
+<p>This is the render mode used to render the glyph image into a bitmap. See <a href="ft2-base_interface.html#FT_Render_Mode">FT_Render_Mode</a> for a list of possible values.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Kerning_Mode">FT_Kerning_Mode</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_Kerning_Mode_
+ {
+ <a href="ft2-base_interface.html#FT_Kerning_Mode">FT_KERNING_DEFAULT</a> = 0,
+ <a href="ft2-base_interface.html#FT_Kerning_Mode">FT_KERNING_UNFITTED</a>,
+ <a href="ft2-base_interface.html#FT_Kerning_Mode">FT_KERNING_UNSCALED</a>
+
+ } <b>FT_Kerning_Mode</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>An enumeration used to specify which kerning values to return in <a href="ft2-base_interface.html#FT_Get_Kerning">FT_Get_Kerning</a>.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>FT_KERNING_DEFAULT</b></td><td>
+<p>Return scaled and grid-fitted kerning distances (value is 0).</p>
+</td></tr>
+<tr valign=top><td><b>FT_KERNING_UNFITTED</b></td><td>
+<p>Return scaled but un-grid-fitted kerning distances.</p>
+</td></tr>
+<tr valign=top><td><b>FT_KERNING_UNSCALED</b></td><td>
+<p>Return the kerning vector in original font units.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="ft_kerning_default">ft_kerning_default</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>ft_kerning_default</b> <a href="ft2-base_interface.html#FT_Kerning_Mode">FT_KERNING_DEFAULT</a>
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>This constant is deprecated. Please use <a href="ft2-base_interface.html#FT_Kerning_Mode">FT_KERNING_DEFAULT</a> instead.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="ft_kerning_unfitted">ft_kerning_unfitted</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>ft_kerning_unfitted</b> <a href="ft2-base_interface.html#FT_Kerning_Mode">FT_KERNING_UNFITTED</a>
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>This constant is deprecated. Please use <a href="ft2-base_interface.html#FT_Kerning_Mode">FT_KERNING_UNFITTED</a> instead.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="ft_kerning_unscaled">ft_kerning_unscaled</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>ft_kerning_unscaled</b> <a href="ft2-base_interface.html#FT_Kerning_Mode">FT_KERNING_UNSCALED</a>
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>This constant is deprecated. Please use <a href="ft2-base_interface.html#FT_Kerning_Mode">FT_KERNING_UNSCALED</a> instead.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Get_Kerning">FT_Get_Kerning</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Get_Kerning</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> left_glyph,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> right_glyph,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> kern_mode,
+ <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a> *akerning );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Return the kerning vector between two glyphs of a same face.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to a source face object.</p>
+</td></tr>
+<tr valign=top><td><b>left_glyph</b></td><td>
+<p>The index of the left glyph in the kern pair.</p>
+</td></tr>
+<tr valign=top><td><b>right_glyph</b></td><td>
+<p>The index of the right glyph in the kern pair.</p>
+</td></tr>
+<tr valign=top><td><b>kern_mode</b></td><td>
+<p>See <a href="ft2-base_interface.html#FT_Kerning_Mode">FT_Kerning_Mode</a> for more information. Determines the scale and dimension of the returned kerning vector.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>akerning</b></td><td>
+<p>The kerning vector. This is either in font units or in pixels (26.6 format) for scalable formats, and in pixels for fixed-sizes formats.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>Only horizontal layouts (left-to-right &amp; right-to-left) are supported by this method. Other layouts, or more sophisticated kernings, are out of the scope of this API function -- they can be implemented through format-specific interfaces.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Get_Track_Kerning">FT_Get_Track_Kerning</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Get_Track_Kerning</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> point_size,
+ <a href="ft2-basic_types.html#FT_Int">FT_Int</a> degree,
+ <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a>* akerning );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Return the track kerning for a given face object at a given size.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to a source face object.</p>
+</td></tr>
+<tr valign=top><td><b>point_size</b></td><td>
+<p>The point size in 16.16 fractional points.</p>
+</td></tr>
+<tr valign=top><td><b>degree</b></td><td>
+<p>The degree of tightness.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>akerning</b></td><td>
+<p>The kerning in 16.16 fractional points.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Get_Glyph_Name">FT_Get_Glyph_Name</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Get_Glyph_Name</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> glyph_index,
+ <a href="ft2-basic_types.html#FT_Pointer">FT_Pointer</a> buffer,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> buffer_max );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Retrieve the ASCII name of a given glyph in a face. This only works for those faces where <a href="ft2-base_interface.html#FT_HAS_GLYPH_NAMES">FT_HAS_GLYPH_NAMES</a>(face) returns 1.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to a source face object.</p>
+</td></tr>
+<tr valign=top><td><b>glyph_index</b></td><td>
+<p>The glyph index.</p>
+</td></tr>
+<tr valign=top><td><b>buffer_max</b></td><td>
+<p>The maximal number of bytes available in the buffer.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>buffer</b></td><td>
+<p>A pointer to a target buffer where the name is copied to.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>An error is returned if the face doesn't provide glyph names or if the glyph index is invalid. In all cases of failure, the first byte of &lsquo;buffer&rsquo; is set to 0 to indicate an empty name.</p>
+<p>The glyph name is truncated to fit within the buffer if it is too long. The returned string is always zero-terminated.</p>
+<p>This function is not compiled within the library if the config macro &lsquo;FT_CONFIG_OPTION_NO_GLYPH_NAMES&rsquo; is defined in &lsquo;include/freetype/config/ftoptions.h&rsquo;.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Get_Postscript_Name">FT_Get_Postscript_Name</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <span class="keyword">const</span> <span class="keyword">char</span>* )
+ <b>FT_Get_Postscript_Name</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Retrieve the ASCII Postscript name of a given face, if available. This only works with Postscript and TrueType fonts.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to the source face object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>A pointer to the face's Postscript name. NULL if unavailable.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The returned pointer is owned by the face and is destroyed with it.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Select_Charmap">FT_Select_Charmap</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Select_Charmap</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-base_interface.html#FT_Encoding">FT_Encoding</a> encoding );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Select a given charmap by its encoding tag (as listed in &lsquo;freetype.h&rsquo;).</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to the source face object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>encoding</b></td><td>
+<p>A handle to the selected encoding.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>This function returns an error if no charmap in the face corresponds to the encoding queried here.</p>
+<p>Because many fonts contain more than a single cmap for Unicode encoding, this function has some special code to select the one which covers Unicode best (&lsquo;best&rsquo; in the sense that a UCS-4 cmap is preferred to a UCS-2 cmap). It is thus preferable to <a href="ft2-base_interface.html#FT_Set_Charmap">FT_Set_Charmap</a> in this case.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Set_Charmap">FT_Set_Charmap</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Set_Charmap</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-base_interface.html#FT_CharMap">FT_CharMap</a> charmap );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Select a given charmap for character code to glyph index mapping.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to the source face object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>charmap</b></td><td>
+<p>A handle to the selected charmap.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>This function returns an error if the charmap is not part of the face (i.e., if it is not listed in the &lsquo;face-&gt;charmaps&rsquo; table).</p>
+<p>It also fails if a type 14 charmap is selected.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Get_Charmap_Index">FT_Get_Charmap_Index</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Int">FT_Int</a> )
+ <b>FT_Get_Charmap_Index</b>( <a href="ft2-base_interface.html#FT_CharMap">FT_CharMap</a> charmap );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Retrieve index of a given charmap.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>charmap</b></td><td>
+<p>A handle to a charmap.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>The index into the array of character maps within the face to which &lsquo;charmap&rsquo; belongs.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Get_Char_Index">FT_Get_Char_Index</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> )
+ <b>FT_Get_Char_Index</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> charcode );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Return the glyph index of a given character code. This function uses a charmap object to do the mapping.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to the source face object.</p>
+</td></tr>
+<tr valign=top><td><b>charcode</b></td><td>
+<p>The character code.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>The glyph index. 0 means &lsquo;undefined character code&rsquo;.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>If you use FreeType to manipulate the contents of font files directly, be aware that the glyph index returned by this function doesn't always correspond to the internal indices used within the file. This is done to ensure that value 0 always corresponds to the &lsquo;missing glyph&rsquo;.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Get_First_Char">FT_Get_First_Char</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> )
+ <b>FT_Get_First_Char</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> *agindex );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>This function is used to return the first character code in the current charmap of a given face. It also returns the corresponding glyph index.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to the source face object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>agindex</b></td><td>
+<p>Glyph index of first character code. 0 if charmap is empty.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>The charmap's first character code.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>You should use this function with <a href="ft2-base_interface.html#FT_Get_Next_Char">FT_Get_Next_Char</a> to be able to parse all character codes available in a given charmap. The code should look like this:</p>
+<pre class="colored">
+ FT_ULong charcode;
+ FT_UInt gindex;
+
+
+ charcode = FT_Get_First_Char( face, &amp;gindex );
+ while ( gindex != 0 )
+ {
+ ... do something with (charcode,gindex) pair ...
+
+ charcode = FT_Get_Next_Char( face, charcode, &amp;gindex );
+ }
+</pre>
+<p>Note that &lsquo;*agindex&rsquo; is set to 0 if the charmap is empty. The result itself can be 0 in two cases: if the charmap is empty or when the value 0 is the first valid character code.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Get_Next_Char">FT_Get_Next_Char</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> )
+ <b>FT_Get_Next_Char</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> char_code,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> *agindex );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>This function is used to return the next character code in the current charmap of a given face following the value &lsquo;char_code&rsquo;, as well as the corresponding glyph index.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to the source face object.</p>
+</td></tr>
+<tr valign=top><td><b>char_code</b></td><td>
+<p>The starting character code.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>agindex</b></td><td>
+<p>Glyph index of first character code. 0 if charmap is empty.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>The charmap's next character code.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>You should use this function with <a href="ft2-base_interface.html#FT_Get_First_Char">FT_Get_First_Char</a> to walk over all character codes available in a given charmap. See the note for this function for a simple code example.</p>
+<p>Note that &lsquo;*agindex&rsquo; is set to 0 when there are no more codes in the charmap.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Get_Name_Index">FT_Get_Name_Index</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> )
+ <b>FT_Get_Name_Index</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#FT_String">FT_String</a>* glyph_name );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Return the glyph index of a given glyph name. This function uses driver specific objects to do the translation.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to the source face object.</p>
+</td></tr>
+<tr valign=top><td><b>glyph_name</b></td><td>
+<p>The glyph name.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>The glyph index. 0 means &lsquo;undefined character code&rsquo;.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_XXX</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS</a> 1
+#define <a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES</a> 2
+#define <a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID</a> 4
+#define <a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_SCALE</a> 8
+#define <a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_XY_SCALE</a> 0x40
+#define <a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_2X2</a> 0x80
+#define <a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_USE_MY_METRICS</a> 0x200
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A list of constants used to describe subglyphs. Please refer to the TrueType specification for the meaning of the various flags.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td colspan=0><b>FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS</b></td></tr>
+<tr valign=top><td></td><td>
+<p></p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES</b></td></tr>
+<tr valign=top><td></td><td>
+<p></p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID</b></td></tr>
+<tr valign=top><td></td><td>
+<p></p>
+</td></tr>
+<tr valign=top><td><b>FT_SUBGLYPH_FLAG_SCALE</b></td><td>
+<p></p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_SUBGLYPH_FLAG_XY_SCALE</b></td></tr>
+<tr valign=top><td></td><td>
+<p></p>
+</td></tr>
+<tr valign=top><td><b>FT_SUBGLYPH_FLAG_2X2</b></td><td>
+<p></p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_SUBGLYPH_FLAG_USE_MY_METRICS</b></td></tr>
+<tr valign=top><td></td><td>
+<p></p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Get_SubGlyph_Info">FT_Get_SubGlyph_Info</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Get_SubGlyph_Info</b>( <a href="ft2-base_interface.html#FT_GlyphSlot">FT_GlyphSlot</a> glyph,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> sub_index,
+ <a href="ft2-basic_types.html#FT_Int">FT_Int</a> *p_index,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> *p_flags,
+ <a href="ft2-basic_types.html#FT_Int">FT_Int</a> *p_arg1,
+ <a href="ft2-basic_types.html#FT_Int">FT_Int</a> *p_arg2,
+ <a href="ft2-basic_types.html#FT_Matrix">FT_Matrix</a> *p_transform );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Retrieve a description of a given subglyph. Only use it if &lsquo;glyph-&gt;format&rsquo; is <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_COMPOSITE</a>, or an error is returned.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>glyph</b></td><td>
+<p>The source glyph slot.</p>
+</td></tr>
+<tr valign=top><td><b>sub_index</b></td><td>
+<p>The index of subglyph. Must be less than &lsquo;glyph-&gt;num_subglyphs&rsquo;.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>p_index</b></td><td>
+<p>The glyph index of the subglyph.</p>
+</td></tr>
+<tr valign=top><td><b>p_flags</b></td><td>
+<p>The subglyph flags, see <a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_XXX</a>.</p>
+</td></tr>
+<tr valign=top><td><b>p_arg1</b></td><td>
+<p>The subglyph's first argument (if any).</p>
+</td></tr>
+<tr valign=top><td><b>p_arg2</b></td><td>
+<p>The subglyph's second argument (if any).</p>
+</td></tr>
+<tr valign=top><td><b>p_transform</b></td><td>
+<p>The subglyph transformation (if any).</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The values of &lsquo;*p_arg1&rsquo;, &lsquo;*p_arg2&rsquo;, and &lsquo;*p_transform&rsquo; must be interpreted depending on the flags returned in &lsquo;*p_flags&rsquo;. See the TrueType specification for details.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+</body>
+</html>
diff --git a/src/3rdparty/freetype/docs/reference/ft2-basic_types.html b/src/3rdparty/freetype/docs/reference/ft2-basic_types.html
new file mode 100644
index 0000000..16ab90f
--- /dev/null
+++ b/src/3rdparty/freetype/docs/reference/ft2-basic_types.html
@@ -0,0 +1,1160 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>FreeType-2.3.6 API Reference</title>
+<style type="text/css">
+ body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
+ color: #000000;
+ background: #FFFFFF; }
+
+ p { text-align: justify; }
+ h1 { text-align: center; }
+ li { text-align: justify; }
+ td { padding: 0 0.5em 0 0.5em; }
+ td.left { padding: 0 0.5em 0 0.5em;
+ text-align: left; }
+
+ a:link { color: #0000EF; }
+ a:visited { color: #51188E; }
+ a:hover { color: #FF0000; }
+
+ span.keyword { font-family: monospace;
+ text-align: left;
+ white-space: pre;
+ color: darkblue; }
+
+ pre.colored { color: blue; }
+
+ ul.empty { list-style-type: none; }
+</style>
+</head>
+<body>
+<center><h1>FreeType-2.3.6 API Reference</h1></center>
+
+<center><h1>
+Basic Data Types
+</h1></center>
+<h2>Synopsis</h2>
+<table align=center cellspacing=5 cellpadding=0 border=0>
+<tr><td></td><td><a href="#FT_Byte">FT_Byte</a></td><td></td><td><a href="#FT_Offset">FT_Offset</a></td><td></td><td><a href="#FT_UnitVector">FT_UnitVector</a></td></tr>
+<tr><td></td><td><a href="#FT_Bytes">FT_Bytes</a></td><td></td><td><a href="#FT_PtrDist">FT_PtrDist</a></td><td></td><td><a href="#FT_F26Dot6">FT_F26Dot6</a></td></tr>
+<tr><td></td><td><a href="#FT_Char">FT_Char</a></td><td></td><td><a href="#FT_String">FT_String</a></td><td></td><td><a href="#FT_Pixel_Mode">FT_Pixel_Mode</a></td></tr>
+<tr><td></td><td><a href="#FT_Int">FT_Int</a></td><td></td><td><a href="#FT_Tag">FT_Tag</a></td><td></td><td><a href="#ft_pixel_mode_xxx">ft_pixel_mode_xxx</a></td></tr>
+<tr><td></td><td><a href="#FT_UInt">FT_UInt</a></td><td></td><td><a href="#FT_Error">FT_Error</a></td><td></td><td><a href="#FT_Palette_Mode">FT_Palette_Mode</a></td></tr>
+<tr><td></td><td><a href="#FT_Int16">FT_Int16</a></td><td></td><td><a href="#FT_Fixed">FT_Fixed</a></td><td></td><td><a href="#FT_Bitmap">FT_Bitmap</a></td></tr>
+<tr><td></td><td><a href="#FT_UInt16">FT_UInt16</a></td><td></td><td><a href="#FT_Pointer">FT_Pointer</a></td><td></td><td><a href="#FT_IMAGE_TAG">FT_IMAGE_TAG</a></td></tr>
+<tr><td></td><td><a href="#FT_Int32">FT_Int32</a></td><td></td><td><a href="#FT_Pos">FT_Pos</a></td><td></td><td><a href="#FT_Glyph_Format">FT_Glyph_Format</a></td></tr>
+<tr><td></td><td><a href="#FT_UInt32">FT_UInt32</a></td><td></td><td><a href="#FT_Vector">FT_Vector</a></td><td></td><td><a href="#ft_glyph_format_xxx">ft_glyph_format_xxx</a></td></tr>
+<tr><td></td><td><a href="#FT_Short">FT_Short</a></td><td></td><td><a href="#FT_BBox">FT_BBox</a></td><td></td><td><a href="#FT_Data">FT_Data</a></td></tr>
+<tr><td></td><td><a href="#FT_UShort">FT_UShort</a></td><td></td><td><a href="#FT_Matrix">FT_Matrix</a></td><td></td><td><a href="#FT_Generic_Finalizer">FT_Generic_Finalizer</a></td></tr>
+<tr><td></td><td><a href="#FT_Long">FT_Long</a></td><td></td><td><a href="#FT_FWord">FT_FWord</a></td><td></td><td><a href="#FT_Generic">FT_Generic</a></td></tr>
+<tr><td></td><td><a href="#FT_ULong">FT_ULong</a></td><td></td><td><a href="#FT_UFWord">FT_UFWord</a></td><td></td><td><a href="#FT_MAKE_TAG">FT_MAKE_TAG</a></td></tr>
+<tr><td></td><td><a href="#FT_Bool">FT_Bool</a></td><td></td><td><a href="#FT_F2Dot14">FT_F2Dot14</a></td><td></td><td></td></tr>
+</table><br><br>
+
+<table align=center width="87%"><tr><td>
+<p>This section contains the basic data types defined by FreeType 2, ranging from simple scalar types to bitmap descriptors. More font-specific structures are defined in a different section.</p>
+</td></tr></table><br>
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Byte">FT_Byte</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPES_H (freetype/fttypes.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">unsigned</span> <span class="keyword">char</span> <b>FT_Byte</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A simple typedef for the <i>unsigned</i> char type.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Bytes">FT_Bytes</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPES_H (freetype/fttypes.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">const</span> <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a>* <b>FT_Bytes</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A typedef for constant memory areas.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Char">FT_Char</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPES_H (freetype/fttypes.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">signed</span> <span class="keyword">char</span> <b>FT_Char</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A simple typedef for the <i>signed</i> char type.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Int">FT_Int</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPES_H (freetype/fttypes.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">signed</span> <span class="keyword">int</span> <b>FT_Int</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A typedef for the int type.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_UInt">FT_UInt</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPES_H (freetype/fttypes.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">unsigned</span> <span class="keyword">int</span> <b>FT_UInt</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A typedef for the unsigned int type.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Int16">FT_Int16</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_CONFIG_CONFIG_H (freetype/config/ftconfig.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">signed</span> <span class="keyword">short</span> <b>FT_Int16</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A typedef for a 16bit signed integer type.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_UInt16">FT_UInt16</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_CONFIG_CONFIG_H (freetype/config/ftconfig.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">unsigned</span> <span class="keyword">short</span> <b>FT_UInt16</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A typedef for a 16bit unsigned integer type.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Int32">FT_Int32</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_CONFIG_CONFIG_H (freetype/config/ftconfig.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">signed</span> XXX <b>FT_Int32</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A typedef for a 32bit signed integer type. The size depends on the configuration.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_UInt32">FT_UInt32</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_CONFIG_CONFIG_H (freetype/config/ftconfig.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">unsigned</span> XXX <b>FT_UInt32</b>;
+
+</pre></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Short">FT_Short</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPES_H (freetype/fttypes.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">signed</span> <span class="keyword">short</span> <b>FT_Short</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A typedef for signed short.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_UShort">FT_UShort</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPES_H (freetype/fttypes.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">unsigned</span> <span class="keyword">short</span> <b>FT_UShort</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A typedef for unsigned short.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Long">FT_Long</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPES_H (freetype/fttypes.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">signed</span> <span class="keyword">long</span> <b>FT_Long</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A typedef for signed long.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_ULong">FT_ULong</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPES_H (freetype/fttypes.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">unsigned</span> <span class="keyword">long</span> <b>FT_ULong</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A typedef for unsigned long.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Bool">FT_Bool</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPES_H (freetype/fttypes.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">unsigned</span> <span class="keyword">char</span> <b>FT_Bool</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A typedef of unsigned char, used for simple booleans. As usual, values 1 and 0 represent true and false, respectively.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Offset">FT_Offset</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPES_H (freetype/fttypes.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> size_t <b>FT_Offset</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>This is equivalent to the ANSI C &lsquo;size_t&rsquo; type, i.e., the largest <i>unsigned</i> integer type used to express a file size or position, or a memory block size.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_PtrDist">FT_PtrDist</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPES_H (freetype/fttypes.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> ft_ptrdiff_t <b>FT_PtrDist</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>This is equivalent to the ANSI C &lsquo;ptrdiff_t&rsquo; type, i.e., the largest <i>signed</i> integer type used to express the distance between two pointers.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_String">FT_String</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPES_H (freetype/fttypes.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">char</span> <b>FT_String</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A simple typedef for the char type, usually used for strings.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Tag">FT_Tag</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPES_H (freetype/fttypes.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <a href="ft2-basic_types.html#FT_UInt32">FT_UInt32</a> <b>FT_Tag</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A typedef for 32bit tags (as used in the SFNT format).</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Error">FT_Error</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPES_H (freetype/fttypes.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">int</span> <b>FT_Error</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>The FreeType error code type. A value of 0 is always interpreted as a successful operation.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Fixed">FT_Fixed</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPES_H (freetype/fttypes.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">signed</span> <span class="keyword">long</span> <b>FT_Fixed</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>This type is used to store 16.16 fixed float values, like scaling values or matrix coefficients.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Pointer">FT_Pointer</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPES_H (freetype/fttypes.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">void</span>* <b>FT_Pointer</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A simple typedef for a typeless pointer.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Pos">FT_Pos</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_IMAGE_H (freetype/ftimage.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">signed</span> <span class="keyword">long</span> <b>FT_Pos</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>The type FT_Pos is a 32-bit integer used to store vectorial coordinates. Depending on the context, these can represent distances in integer font units, or 16,16, or 26.6 fixed float pixel coordinates.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Vector">FT_Vector</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_IMAGE_H (freetype/ftimage.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Vector_
+ {
+ <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> x;
+ <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> y;
+
+ } <b>FT_Vector</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A simple structure used to store a 2D vector; coordinates are of the FT_Pos type.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>x</b></td><td>
+<p>The horizontal coordinate.</p>
+</td></tr>
+<tr valign=top><td><b>y</b></td><td>
+<p>The vertical coordinate.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_BBox">FT_BBox</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_IMAGE_H (freetype/ftimage.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_BBox_
+ {
+ <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> xMin, yMin;
+ <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> xMax, yMax;
+
+ } <b>FT_BBox</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A structure used to hold an outline's bounding box, i.e., the coordinates of its extrema in the horizontal and vertical directions.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>xMin</b></td><td>
+<p>The horizontal minimum (left-most).</p>
+</td></tr>
+<tr valign=top><td><b>yMin</b></td><td>
+<p>The vertical minimum (bottom-most).</p>
+</td></tr>
+<tr valign=top><td><b>xMax</b></td><td>
+<p>The horizontal maximum (right-most).</p>
+</td></tr>
+<tr valign=top><td><b>yMax</b></td><td>
+<p>The vertical maximum (top-most).</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Matrix">FT_Matrix</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPES_H (freetype/fttypes.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Matrix_
+ {
+ <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> xx, xy;
+ <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> yx, yy;
+
+ } <b>FT_Matrix</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A simple structure used to store a 2x2 matrix. Coefficients are in 16.16 fixed float format. The computation performed is:</p>
+<pre class="colored">
+ x' = x*xx + y*xy
+ y' = x*yx + y*yy
+</pre>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>xx</b></td><td>
+<p>Matrix coefficient.</p>
+</td></tr>
+<tr valign=top><td><b>xy</b></td><td>
+<p>Matrix coefficient.</p>
+</td></tr>
+<tr valign=top><td><b>yx</b></td><td>
+<p>Matrix coefficient.</p>
+</td></tr>
+<tr valign=top><td><b>yy</b></td><td>
+<p>Matrix coefficient.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_FWord">FT_FWord</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPES_H (freetype/fttypes.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">signed</span> <span class="keyword">short</span> <b>FT_FWord</b>; /* distance in FUnits */
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A signed 16-bit integer used to store a distance in original font units.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_UFWord">FT_UFWord</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPES_H (freetype/fttypes.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">unsigned</span> <span class="keyword">short</span> <b>FT_UFWord</b>; /* <span class="keyword">unsigned</span> distance */
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>An unsigned 16-bit integer used to store a distance in original font units.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_F2Dot14">FT_F2Dot14</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPES_H (freetype/fttypes.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">signed</span> <span class="keyword">short</span> <b>FT_F2Dot14</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A signed 2.14 fixed float type used for unit vectors.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_UnitVector">FT_UnitVector</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPES_H (freetype/fttypes.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_UnitVector_
+ {
+ <a href="ft2-basic_types.html#FT_F2Dot14">FT_F2Dot14</a> x;
+ <a href="ft2-basic_types.html#FT_F2Dot14">FT_F2Dot14</a> y;
+
+ } <b>FT_UnitVector</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A simple structure used to store a 2D vector unit vector. Uses FT_F2Dot14 types.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>x</b></td><td>
+<p>Horizontal coordinate.</p>
+</td></tr>
+<tr valign=top><td><b>y</b></td><td>
+<p>Vertical coordinate.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_F26Dot6">FT_F26Dot6</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPES_H (freetype/fttypes.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">signed</span> <span class="keyword">long</span> <b>FT_F26Dot6</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A signed 26.6 fixed float type used for vectorial pixel coordinates.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Pixel_Mode">FT_Pixel_Mode</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_IMAGE_H (freetype/ftimage.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_Pixel_Mode_
+ {
+ <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_NONE</a> = 0,
+ <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_MONO</a>,
+ <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_GRAY</a>,
+ <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_GRAY2</a>,
+ <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_GRAY4</a>,
+ <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_LCD</a>,
+ <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_LCD_V</a>,
+
+ FT_PIXEL_MODE_MAX /* do not remove */
+
+ } <b>FT_Pixel_Mode</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>An enumeration type used to describe the format of pixels in a given bitmap. Note that additional formats may be added in the future.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>FT_PIXEL_MODE_NONE</b></td><td>
+<p>Value 0 is reserved.</p>
+</td></tr>
+<tr valign=top><td><b>FT_PIXEL_MODE_MONO</b></td><td>
+<p>A monochrome bitmap, using 1 bit per pixel. Note that pixels are stored in most-significant order (MSB), which means that the left-most pixel in a byte has value 128.</p>
+</td></tr>
+<tr valign=top><td><b>FT_PIXEL_MODE_GRAY</b></td><td>
+<p>An 8-bit bitmap, generally used to represent anti-aliased glyph images. Each pixel is stored in one byte. Note that the number of value &lsquo;gray&rsquo; levels is stored in the &lsquo;num_bytes&rsquo; field of the <a href="ft2-basic_types.html#FT_Bitmap">FT_Bitmap</a> structure (it generally is 256).</p>
+</td></tr>
+<tr valign=top><td><b>FT_PIXEL_MODE_GRAY2</b></td><td>
+<p>A 2-bit/pixel bitmap, used to represent embedded anti-aliased bitmaps in font files according to the OpenType specification. We haven't found a single font using this format, however.</p>
+</td></tr>
+<tr valign=top><td><b>FT_PIXEL_MODE_GRAY4</b></td><td>
+<p>A 4-bit/pixel bitmap, used to represent embedded anti-aliased bitmaps in font files according to the OpenType specification. We haven't found a single font using this format, however.</p>
+</td></tr>
+<tr valign=top><td><b>FT_PIXEL_MODE_LCD</b></td><td>
+<p>An 8-bit bitmap, used to represent RGB or BGR decimated glyph images used for display on LCD displays; the bitmap is three times wider than the original glyph image. See also <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_LCD</a>.</p>
+</td></tr>
+<tr valign=top><td><b>FT_PIXEL_MODE_LCD_V</b></td><td>
+<p>An 8-bit bitmap, used to represent RGB or BGR decimated glyph images used for display on rotated LCD displays; the bitmap is three times taller than the original glyph image. See also <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_LCD_V</a>.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="ft_pixel_mode_xxx">ft_pixel_mode_xxx</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_IMAGE_H (freetype/ftimage.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <a href="ft2-basic_types.html#ft_pixel_mode_xxx">ft_pixel_mode_none</a> <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_NONE</a>
+#define <a href="ft2-basic_types.html#ft_pixel_mode_xxx">ft_pixel_mode_mono</a> <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_MONO</a>
+#define <a href="ft2-basic_types.html#ft_pixel_mode_xxx">ft_pixel_mode_grays</a> <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_GRAY</a>
+#define <a href="ft2-basic_types.html#ft_pixel_mode_xxx">ft_pixel_mode_pal2</a> <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_GRAY2</a>
+#define <a href="ft2-basic_types.html#ft_pixel_mode_xxx">ft_pixel_mode_pal4</a> <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_GRAY4</a>
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A list of deprecated constants. Use the corresponding <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_Pixel_Mode</a> values instead.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>ft_pixel_mode_none</b></td><td>
+<p>See <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_NONE</a>.</p>
+</td></tr>
+<tr valign=top><td><b>ft_pixel_mode_mono</b></td><td>
+<p>See <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_MONO</a>.</p>
+</td></tr>
+<tr valign=top><td><b>ft_pixel_mode_grays</b></td><td>
+<p>See <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_GRAY</a>.</p>
+</td></tr>
+<tr valign=top><td><b>ft_pixel_mode_pal2</b></td><td>
+<p>See <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_GRAY2</a>.</p>
+</td></tr>
+<tr valign=top><td><b>ft_pixel_mode_pal4</b></td><td>
+<p>See <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_GRAY4</a>.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Palette_Mode">FT_Palette_Mode</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_IMAGE_H (freetype/ftimage.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_Palette_Mode_
+ {
+ <a href="ft2-basic_types.html#FT_Palette_Mode">ft_palette_mode_rgb</a> = 0,
+ <a href="ft2-basic_types.html#FT_Palette_Mode">ft_palette_mode_rgba</a>,
+
+ ft_palette_mode_max /* do not remove */
+
+ } <b>FT_Palette_Mode</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>THIS TYPE IS DEPRECATED. DO NOT USE IT!</p>
+<p>An enumeration type to describe the format of a bitmap palette, used with ft_pixel_mode_pal4 and ft_pixel_mode_pal8.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>ft_palette_mode_rgb</b></td><td>
+<p>The palette is an array of 3-bytes RGB records.</p>
+</td></tr>
+<tr valign=top><td><b>ft_palette_mode_rgba</b></td><td>
+<p>The palette is an array of 4-bytes RGBA records.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>As ft_pixel_mode_pal2, pal4 and pal8 are currently unused by FreeType, these types are not handled by the library itself.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Bitmap">FT_Bitmap</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_IMAGE_H (freetype/ftimage.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Bitmap_
+ {
+ <span class="keyword">int</span> rows;
+ <span class="keyword">int</span> width;
+ <span class="keyword">int</span> pitch;
+ <span class="keyword">unsigned</span> <span class="keyword">char</span>* buffer;
+ <span class="keyword">short</span> num_grays;
+ <span class="keyword">char</span> pixel_mode;
+ <span class="keyword">char</span> palette_mode;
+ <span class="keyword">void</span>* palette;
+
+ } <b>FT_Bitmap</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A structure used to describe a bitmap or pixmap to the raster. Note that we now manage pixmaps of various depths through the &lsquo;pixel_mode&rsquo; field.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>rows</b></td><td>
+<p>The number of bitmap rows.</p>
+</td></tr>
+<tr valign=top><td><b>width</b></td><td>
+<p>The number of pixels in bitmap row.</p>
+</td></tr>
+<tr valign=top><td><b>pitch</b></td><td>
+<p>The pitch's absolute value is the number of bytes taken by one bitmap row, including padding. However, the pitch is positive when the bitmap has a &lsquo;down&rsquo; flow, and negative when it has an &lsquo;up&rsquo; flow. In all cases, the pitch is an offset to add to a bitmap pointer in order to go down one row.</p>
+</td></tr>
+<tr valign=top><td><b>buffer</b></td><td>
+<p>A typeless pointer to the bitmap buffer. This value should be aligned on 32-bit boundaries in most cases.</p>
+</td></tr>
+<tr valign=top><td><b>num_grays</b></td><td>
+<p>This field is only used with <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_GRAY</a>; it gives the number of gray levels used in the bitmap.</p>
+</td></tr>
+<tr valign=top><td><b>pixel_mode</b></td><td>
+<p>The pixel mode, i.e., how pixel bits are stored. See <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_Pixel_Mode</a> for possible values.</p>
+</td></tr>
+<tr valign=top><td><b>palette_mode</b></td><td>
+<p>This field is intended for paletted pixel modes; it indicates how the palette is stored. Not used currently.</p>
+</td></tr>
+<tr valign=top><td><b>palette</b></td><td>
+<p>A typeless pointer to the bitmap palette; this field is intended for paletted pixel modes. Not used currently.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>For now, the only pixel modes supported by FreeType are mono and grays. However, drivers might be added in the future to support more &lsquo;colorful&rsquo; options.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_IMAGE_TAG">FT_IMAGE_TAG</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_IMAGE_H (freetype/ftimage.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#ifndef <b>FT_IMAGE_TAG</b>
+#define <b>FT_IMAGE_TAG</b>( value, _x1, _x2, _x3, _x4 ) \
+ value = ( ( (<span class="keyword">unsigned</span> <span class="keyword">long</span>)_x1 &lt;&lt; 24 ) | \
+ ( (<span class="keyword">unsigned</span> <span class="keyword">long</span>)_x2 &lt;&lt; 16 ) | \
+ ( (<span class="keyword">unsigned</span> <span class="keyword">long</span>)_x3 &lt;&lt; 8 ) | \
+ (<span class="keyword">unsigned</span> <span class="keyword">long</span>)_x4 )
+#endif /* <b>FT_IMAGE_TAG</b> */
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>This macro converts four-letter tags to an unsigned long type.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>Since many 16bit compilers don't like 32bit enumerations, you should redefine this macro in case of problems to something like this:</p>
+<pre class="colored">
+ #define FT_IMAGE_TAG( value, _x1, _x2, _x3, _x4 ) value
+</pre>
+<p>to get a simple enumeration without assigning special numbers.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Glyph_Format">FT_Glyph_Format</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_IMAGE_H (freetype/ftimage.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_Glyph_Format_
+ {
+ <a href="ft2-basic_types.html#FT_IMAGE_TAG">FT_IMAGE_TAG</a>( <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_NONE</a>, 0, 0, 0, 0 ),
+
+ <a href="ft2-basic_types.html#FT_IMAGE_TAG">FT_IMAGE_TAG</a>( <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_COMPOSITE</a>, 'c', 'o', 'm', 'p' ),
+ <a href="ft2-basic_types.html#FT_IMAGE_TAG">FT_IMAGE_TAG</a>( <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_BITMAP</a>, 'b', 'i', 't', 's' ),
+ <a href="ft2-basic_types.html#FT_IMAGE_TAG">FT_IMAGE_TAG</a>( <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_OUTLINE</a>, 'o', 'u', 't', 'l' ),
+ <a href="ft2-basic_types.html#FT_IMAGE_TAG">FT_IMAGE_TAG</a>( <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_PLOTTER</a>, 'p', 'l', 'o', 't' )
+
+ } <b>FT_Glyph_Format</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>An enumeration type used to describe the format of a given glyph image. Note that this version of FreeType only supports two image formats, even though future font drivers will be able to register their own format.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>FT_GLYPH_FORMAT_NONE</b></td><td>
+<p>The value 0 is reserved.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_GLYPH_FORMAT_COMPOSITE</b></td></tr>
+<tr valign=top><td></td><td>
+<p>The glyph image is a composite of several other images. This format is <i>only</i> used with <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_RECURSE</a>, and is used to report compound glyphs (like accented characters).</p>
+</td></tr>
+<tr valign=top><td><b>FT_GLYPH_FORMAT_BITMAP</b></td><td>
+<p>The glyph image is a bitmap, and can be described as an <a href="ft2-basic_types.html#FT_Bitmap">FT_Bitmap</a>. You generally need to access the &lsquo;bitmap&rsquo; field of the <a href="ft2-base_interface.html#FT_GlyphSlotRec">FT_GlyphSlotRec</a> structure to read it.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_GLYPH_FORMAT_OUTLINE</b></td></tr>
+<tr valign=top><td></td><td>
+<p>The glyph image is a vectorial outline made of line segments and Bézier arcs; it can be described as an <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>; you generally want to access the &lsquo;outline&rsquo; field of the <a href="ft2-base_interface.html#FT_GlyphSlotRec">FT_GlyphSlotRec</a> structure to read it.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_GLYPH_FORMAT_PLOTTER</b></td></tr>
+<tr valign=top><td></td><td>
+<p>The glyph image is a vectorial path with no inside and outside contours. Some Type 1 fonts, like those in the Hershey family, contain glyphs in this format. These are described as <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>, but FreeType isn't currently capable of rendering them correctly.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="ft_glyph_format_xxx">ft_glyph_format_xxx</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_IMAGE_H (freetype/ftimage.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <a href="ft2-basic_types.html#ft_glyph_format_xxx">ft_glyph_format_none</a> <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_NONE</a>
+#define <a href="ft2-basic_types.html#ft_glyph_format_xxx">ft_glyph_format_composite</a> <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_COMPOSITE</a>
+#define <a href="ft2-basic_types.html#ft_glyph_format_xxx">ft_glyph_format_bitmap</a> <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_BITMAP</a>
+#define <a href="ft2-basic_types.html#ft_glyph_format_xxx">ft_glyph_format_outline</a> <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_OUTLINE</a>
+#define <a href="ft2-basic_types.html#ft_glyph_format_xxx">ft_glyph_format_plotter</a> <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_PLOTTER</a>
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A list of deprecated constants. Use the corresponding <a href="ft2-basic_types.html#FT_Glyph_Format">FT_Glyph_Format</a> values instead.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>ft_glyph_format_none</b></td><td>
+<p>See <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_NONE</a>.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>ft_glyph_format_composite</b></td></tr>
+<tr valign=top><td></td><td>
+<p>See <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_COMPOSITE</a>.</p>
+</td></tr>
+<tr valign=top><td><b>ft_glyph_format_bitmap</b></td><td>
+<p>See <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_BITMAP</a>.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>ft_glyph_format_outline</b></td></tr>
+<tr valign=top><td></td><td>
+<p>See <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_OUTLINE</a>.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>ft_glyph_format_plotter</b></td></tr>
+<tr valign=top><td></td><td>
+<p>See <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_PLOTTER</a>.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Data">FT_Data</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPES_H (freetype/fttypes.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Data_
+ {
+ <span class="keyword">const</span> <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a>* pointer;
+ <a href="ft2-basic_types.html#FT_Int">FT_Int</a> length;
+
+ } <b>FT_Data</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Read-only binary data represented as a pointer and a length.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>pointer</b></td><td>
+<p>The data.</p>
+</td></tr>
+<tr valign=top><td><b>length</b></td><td>
+<p>The length of the data in bytes.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Generic_Finalizer">FT_Generic_Finalizer</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPES_H (freetype/fttypes.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">void</span> (*<b>FT_Generic_Finalizer</b>)(<span class="keyword">void</span>* object);
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Describes a function used to destroy the &lsquo;client&rsquo; data of any FreeType object. See the description of the <a href="ft2-basic_types.html#FT_Generic">FT_Generic</a> type for details of usage.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p>The address of the FreeType object which is under finalization. Its client data is accessed through its &lsquo;generic&rsquo; field.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Generic">FT_Generic</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPES_H (freetype/fttypes.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Generic_
+ {
+ <span class="keyword">void</span>* data;
+ <a href="ft2-basic_types.html#FT_Generic_Finalizer">FT_Generic_Finalizer</a> finalizer;
+
+ } <b>FT_Generic</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Client applications often need to associate their own data to a variety of FreeType core objects. For example, a text layout API might want to associate a glyph cache to a given size object.</p>
+<p>Most FreeType object contains a &lsquo;generic&rsquo; field, of type FT_Generic, which usage is left to client applications and font servers.</p>
+<p>It can be used to store a pointer to client-specific data, as well as the address of a &lsquo;finalizer&rsquo; function, which will be called by FreeType when the object is destroyed (for example, the previous client example would put the address of the glyph cache destructor in the &lsquo;finalizer&rsquo; field).</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>data</b></td><td>
+<p>A typeless pointer to any client-specified data. This field is completely ignored by the FreeType library.</p>
+</td></tr>
+<tr valign=top><td><b>finalizer</b></td><td>
+<p>A pointer to a &lsquo;generic finalizer&rsquo; function, which will be called when the object is destroyed. If this field is set to NULL, no code will be called.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_MAKE_TAG">FT_MAKE_TAG</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPES_H (freetype/fttypes.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_MAKE_TAG</b>( _x1, _x2, _x3, _x4 ) \
+ ( ( (<a href="ft2-basic_types.html#FT_ULong">FT_ULong</a>)_x1 &lt;&lt; 24 ) | \
+ ( (<a href="ft2-basic_types.html#FT_ULong">FT_ULong</a>)_x2 &lt;&lt; 16 ) | \
+ ( (<a href="ft2-basic_types.html#FT_ULong">FT_ULong</a>)_x3 &lt;&lt; 8 ) | \
+ (<a href="ft2-basic_types.html#FT_ULong">FT_ULong</a>)_x4 )
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>This macro converts four-letter tags which are used to label TrueType tables into an unsigned long to be used within FreeType.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The produced values <b>must</b> be 32bit integers. Don't redefine this macro.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+</body>
+</html>
diff --git a/src/3rdparty/freetype/docs/reference/ft2-bdf_fonts.html b/src/3rdparty/freetype/docs/reference/ft2-bdf_fonts.html
new file mode 100644
index 0000000..13bab8f
--- /dev/null
+++ b/src/3rdparty/freetype/docs/reference/ft2-bdf_fonts.html
@@ -0,0 +1,254 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>FreeType-2.3.6 API Reference</title>
+<style type="text/css">
+ body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
+ color: #000000;
+ background: #FFFFFF; }
+
+ p { text-align: justify; }
+ h1 { text-align: center; }
+ li { text-align: justify; }
+ td { padding: 0 0.5em 0 0.5em; }
+ td.left { padding: 0 0.5em 0 0.5em;
+ text-align: left; }
+
+ a:link { color: #0000EF; }
+ a:visited { color: #51188E; }
+ a:hover { color: #FF0000; }
+
+ span.keyword { font-family: monospace;
+ text-align: left;
+ white-space: pre;
+ color: darkblue; }
+
+ pre.colored { color: blue; }
+
+ ul.empty { list-style-type: none; }
+</style>
+</head>
+<body>
+<center><h1>FreeType-2.3.6 API Reference</h1></center>
+
+<center><h1>
+BDF Files
+</h1></center>
+<h2>Synopsis</h2>
+<table align=center cellspacing=5 cellpadding=0 border=0>
+<tr><td></td><td><a href="#FT_PropertyType">FT_PropertyType</a></td><td></td><td><a href="#BDF_PropertyRec">BDF_PropertyRec</a></td><td></td><td><a href="#FT_Get_BDF_Property">FT_Get_BDF_Property</a></td></tr>
+<tr><td></td><td><a href="#BDF_Property">BDF_Property</a></td><td></td><td><a href="#FT_Get_BDF_Charset_ID">FT_Get_BDF_Charset_ID</a></td><td></td><td></td></tr>
+</table><br><br>
+
+<table align=center width="87%"><tr><td>
+<p>This section contains the declaration of BDF specific functions.</p>
+</td></tr></table><br>
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_PropertyType">FT_PropertyType</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_BDF_H (freetype/ftbdf.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">enum</span> BDF_PropertyType_
+ {
+ <a href="ft2-bdf_fonts.html#FT_PropertyType">BDF_PROPERTY_TYPE_NONE</a> = 0,
+ <a href="ft2-bdf_fonts.html#FT_PropertyType">BDF_PROPERTY_TYPE_ATOM</a> = 1,
+ <a href="ft2-bdf_fonts.html#FT_PropertyType">BDF_PROPERTY_TYPE_INTEGER</a> = 2,
+ <a href="ft2-bdf_fonts.html#FT_PropertyType">BDF_PROPERTY_TYPE_CARDINAL</a> = 3
+
+ } BDF_PropertyType;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A list of BDF property types.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>BDF_PROPERTY_TYPE_NONE</b></td><td>
+<p>Value 0 is used to indicate a missing property.</p>
+</td></tr>
+<tr valign=top><td><b>BDF_PROPERTY_TYPE_ATOM</b></td><td>
+<p>Property is a string atom.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>BDF_PROPERTY_TYPE_INTEGER</b></td></tr>
+<tr valign=top><td></td><td>
+<p>Property is a 32-bit signed integer.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>BDF_PROPERTY_TYPE_CARDINAL</b></td></tr>
+<tr valign=top><td></td><td>
+<p>Property is a 32-bit unsigned integer.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="BDF_Property">BDF_Property</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_BDF_H (freetype/ftbdf.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> BDF_PropertyRec_* <b>BDF_Property</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A handle to a <a href="ft2-bdf_fonts.html#BDF_PropertyRec">BDF_PropertyRec</a> structure to model a given BDF/PCF property.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="BDF_PropertyRec">BDF_PropertyRec</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_BDF_H (freetype/ftbdf.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> BDF_PropertyRec_
+ {
+ BDF_PropertyType type;
+ <span class="keyword">union</span> {
+ <span class="keyword">const</span> <span class="keyword">char</span>* atom;
+ <a href="ft2-basic_types.html#FT_Int32">FT_Int32</a> integer;
+ <a href="ft2-basic_types.html#FT_UInt32">FT_UInt32</a> cardinal;
+
+ } u;
+
+ } <b>BDF_PropertyRec</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>This structure models a given BDF/PCF property.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>type</b></td><td>
+<p>The property type.</p>
+</td></tr>
+<tr valign=top><td><b>u.atom</b></td><td>
+<p>The atom string, if type is <a href="ft2-bdf_fonts.html#FT_PropertyType">BDF_PROPERTY_TYPE_ATOM</a>.</p>
+</td></tr>
+<tr valign=top><td><b>u.integer</b></td><td>
+<p>A signed integer, if type is <a href="ft2-bdf_fonts.html#FT_PropertyType">BDF_PROPERTY_TYPE_INTEGER</a>.</p>
+</td></tr>
+<tr valign=top><td><b>u.cardinal</b></td><td>
+<p>An unsigned integer, if type is <a href="ft2-bdf_fonts.html#FT_PropertyType">BDF_PROPERTY_TYPE_CARDINAL</a>.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Get_BDF_Charset_ID">FT_Get_BDF_Charset_ID</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_BDF_H (freetype/ftbdf.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Get_BDF_Charset_ID</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <span class="keyword">const</span> <span class="keyword">char</span>* *acharset_encoding,
+ <span class="keyword">const</span> <span class="keyword">char</span>* *acharset_registry );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Retrieves a BDF font character set identity, according to the BDF specification.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to the input face.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>acharset_encoding</b></td><td>
+<p>Charset encoding, as a C string, owned by the face.</p>
+</td></tr>
+<tr valign=top><td><b>acharset_registry</b></td><td>
+<p>Charset registry, as a C string, owned by the face.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>This function only works with BDF faces, returning an error otherwise.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Get_BDF_Property">FT_Get_BDF_Property</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_BDF_H (freetype/ftbdf.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Get_BDF_Property</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <span class="keyword">const</span> <span class="keyword">char</span>* prop_name,
+ <a href="ft2-bdf_fonts.html#BDF_PropertyRec">BDF_PropertyRec</a> *aproperty );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Retrieves a BDF property from a BDF or PCF font file.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to the input face.</p>
+</td></tr>
+<tr valign=top><td><b>name</b></td><td>
+<p>The property name.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>aproperty</b></td><td>
+<p>The property.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>This function works with BDF <i>and</i> PCF fonts. It returns an error otherwise. It also returns an error if the property is not in the font.</p>
+<p>In case of error, &lsquo;aproperty-&gt;type&rsquo; is always set to <a href="ft2-bdf_fonts.html#FT_PropertyType">BDF_PROPERTY_TYPE_NONE</a>.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+</body>
+</html>
diff --git a/src/3rdparty/freetype/docs/reference/ft2-bitmap_handling.html b/src/3rdparty/freetype/docs/reference/ft2-bitmap_handling.html
new file mode 100644
index 0000000..c22c059
--- /dev/null
+++ b/src/3rdparty/freetype/docs/reference/ft2-bitmap_handling.html
@@ -0,0 +1,264 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>FreeType-2.3.6 API Reference</title>
+<style type="text/css">
+ body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
+ color: #000000;
+ background: #FFFFFF; }
+
+ p { text-align: justify; }
+ h1 { text-align: center; }
+ li { text-align: justify; }
+ td { padding: 0 0.5em 0 0.5em; }
+ td.left { padding: 0 0.5em 0 0.5em;
+ text-align: left; }
+
+ a:link { color: #0000EF; }
+ a:visited { color: #51188E; }
+ a:hover { color: #FF0000; }
+
+ span.keyword { font-family: monospace;
+ text-align: left;
+ white-space: pre;
+ color: darkblue; }
+
+ pre.colored { color: blue; }
+
+ ul.empty { list-style-type: none; }
+</style>
+</head>
+<body>
+<center><h1>FreeType-2.3.6 API Reference</h1></center>
+
+<center><h1>
+Bitmap Handling
+</h1></center>
+<h2>Synopsis</h2>
+<table align=center cellspacing=5 cellpadding=0 border=0>
+<tr><td></td><td><a href="#FT_Bitmap_New">FT_Bitmap_New</a></td><td></td><td><a href="#FT_Bitmap_Embolden">FT_Bitmap_Embolden</a></td><td></td><td><a href="#FT_Bitmap_Done">FT_Bitmap_Done</a></td></tr>
+<tr><td></td><td><a href="#FT_Bitmap_Copy">FT_Bitmap_Copy</a></td><td></td><td><a href="#FT_Bitmap_Convert">FT_Bitmap_Convert</a></td><td></td><td></td></tr>
+</table><br><br>
+
+<table align=center width="87%"><tr><td>
+<p>This section contains functions for converting FT_Bitmap objects.</p>
+</td></tr></table><br>
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Bitmap_New">FT_Bitmap_New</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_BITMAP_H (freetype/ftbitmap.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <span class="keyword">void</span> )
+ <b>FT_Bitmap_New</b>( <a href="ft2-basic_types.html#FT_Bitmap">FT_Bitmap</a> *abitmap );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Initialize a pointer to an <a href="ft2-basic_types.html#FT_Bitmap">FT_Bitmap</a> structure.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>abitmap</b></td><td>
+<p>A pointer to the bitmap structure.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Bitmap_Copy">FT_Bitmap_Copy</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_BITMAP_H (freetype/ftbitmap.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Bitmap_Copy</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
+ <span class="keyword">const</span> <a href="ft2-basic_types.html#FT_Bitmap">FT_Bitmap</a> *source,
+ <a href="ft2-basic_types.html#FT_Bitmap">FT_Bitmap</a> *target);
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Copies an bitmap into another one.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>library</b></td><td>
+<p>A handle to a library object.</p>
+</td></tr>
+<tr valign=top><td><b>source</b></td><td>
+<p>A handle to the source bitmap.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>target</b></td><td>
+<p>A handle to the target bitmap.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Bitmap_Embolden">FT_Bitmap_Embolden</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_BITMAP_H (freetype/ftbitmap.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Bitmap_Embolden</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
+ <a href="ft2-basic_types.html#FT_Bitmap">FT_Bitmap</a>* bitmap,
+ <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> xStrength,
+ <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> yStrength );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Embolden a bitmap. The new bitmap will be about &lsquo;xStrength&rsquo; pixels wider and &lsquo;yStrength&rsquo; pixels higher. The left and bottom borders are kept unchanged.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>library</b></td><td>
+<p>A handle to a library object.</p>
+</td></tr>
+<tr valign=top><td><b>xStrength</b></td><td>
+<p>How strong the glyph is emboldened horizontally. Expressed in 26.6 pixel format.</p>
+</td></tr>
+<tr valign=top><td><b>yStrength</b></td><td>
+<p>How strong the glyph is emboldened vertically. Expressed in 26.6 pixel format.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>bitmap</b></td><td>
+<p>A handle to the target bitmap.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The current implementation restricts &lsquo;xStrength&rsquo; to be less than or equal to 8 if bitmap is of pixel_mode <a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_MONO</a>.</p>
+<p>If you want to embolden the bitmap owned by a <a href="ft2-base_interface.html#FT_GlyphSlotRec">FT_GlyphSlotRec</a>, you should call &lsquo;FT_GlyphSlot_Own_Bitmap&rsquo; on the slot first.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Bitmap_Convert">FT_Bitmap_Convert</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_BITMAP_H (freetype/ftbitmap.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Bitmap_Convert</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
+ <span class="keyword">const</span> <a href="ft2-basic_types.html#FT_Bitmap">FT_Bitmap</a> *source,
+ <a href="ft2-basic_types.html#FT_Bitmap">FT_Bitmap</a> *target,
+ <a href="ft2-basic_types.html#FT_Int">FT_Int</a> alignment );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Convert a bitmap object with depth 1bpp, 2bpp, 4bpp, or 8bpp to a bitmap object with depth 8bpp, making the number of used bytes per line (a.k.a. the &lsquo;pitch&rsquo;) a multiple of &lsquo;alignment&rsquo;.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>library</b></td><td>
+<p>A handle to a library object.</p>
+</td></tr>
+<tr valign=top><td><b>source</b></td><td>
+<p>The source bitmap.</p>
+</td></tr>
+<tr valign=top><td><b>alignment</b></td><td>
+<p>The pitch of the bitmap is a multiple of this parameter. Common values are 1, 2, or 4.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>target</b></td><td>
+<p>The target bitmap.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>It is possible to call <a href="ft2-bitmap_handling.html#FT_Bitmap_Convert">FT_Bitmap_Convert</a> multiple times without calling <a href="ft2-bitmap_handling.html#FT_Bitmap_Done">FT_Bitmap_Done</a> (the memory is simply reallocated).</p>
+<p>Use <a href="ft2-bitmap_handling.html#FT_Bitmap_Done">FT_Bitmap_Done</a> to finally remove the bitmap object.</p>
+<p>The &lsquo;library&rsquo; argument is taken to have access to FreeType's memory handling functions.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Bitmap_Done">FT_Bitmap_Done</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_BITMAP_H (freetype/ftbitmap.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Bitmap_Done</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
+ <a href="ft2-basic_types.html#FT_Bitmap">FT_Bitmap</a> *bitmap );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Destroy a bitmap object created with <a href="ft2-bitmap_handling.html#FT_Bitmap_New">FT_Bitmap_New</a>.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>library</b></td><td>
+<p>A handle to a library object.</p>
+</td></tr>
+<tr valign=top><td><b>bitmap</b></td><td>
+<p>The bitmap object to be freed.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The &lsquo;library&rsquo; argument is taken to have access to FreeType's memory handling functions.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+</body>
+</html>
diff --git a/src/3rdparty/freetype/docs/reference/ft2-cache_subsystem.html b/src/3rdparty/freetype/docs/reference/ft2-cache_subsystem.html
new file mode 100644
index 0000000..0bce860
--- /dev/null
+++ b/src/3rdparty/freetype/docs/reference/ft2-cache_subsystem.html
@@ -0,0 +1,1165 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>FreeType-2.3.6 API Reference</title>
+<style type="text/css">
+ body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
+ color: #000000;
+ background: #FFFFFF; }
+
+ p { text-align: justify; }
+ h1 { text-align: center; }
+ li { text-align: justify; }
+ td { padding: 0 0.5em 0 0.5em; }
+ td.left { padding: 0 0.5em 0 0.5em;
+ text-align: left; }
+
+ a:link { color: #0000EF; }
+ a:visited { color: #51188E; }
+ a:hover { color: #FF0000; }
+
+ span.keyword { font-family: monospace;
+ text-align: left;
+ white-space: pre;
+ color: darkblue; }
+
+ pre.colored { color: blue; }
+
+ ul.empty { list-style-type: none; }
+</style>
+</head>
+<body>
+<center><h1>FreeType-2.3.6 API Reference</h1></center>
+
+<center><h1>
+Cache Sub-System
+</h1></center>
+<h2>Synopsis</h2>
+<table align=center cellspacing=5 cellpadding=0 border=0>
+<tr><td></td><td><a href="#FTC_Manager">FTC_Manager</a></td><td></td><td><a href="#FTC_CMapCache_New">FTC_CMapCache_New</a></td></tr>
+<tr><td></td><td><a href="#FTC_FaceID">FTC_FaceID</a></td><td></td><td><a href="#FTC_CMapCache_Lookup">FTC_CMapCache_Lookup</a></td></tr>
+<tr><td></td><td><a href="#FTC_Face_Requester">FTC_Face_Requester</a></td><td></td><td><a href="#FTC_ImageTypeRec">FTC_ImageTypeRec</a></td></tr>
+<tr><td></td><td><a href="#FTC_Node">FTC_Node</a></td><td></td><td><a href="#FTC_ImageType">FTC_ImageType</a></td></tr>
+<tr><td></td><td><a href="#FTC_Manager_New">FTC_Manager_New</a></td><td></td><td><a href="#FTC_ImageCache">FTC_ImageCache</a></td></tr>
+<tr><td></td><td><a href="#FTC_Manager_Reset">FTC_Manager_Reset</a></td><td></td><td><a href="#FTC_ImageCache_New">FTC_ImageCache_New</a></td></tr>
+<tr><td></td><td><a href="#FTC_Manager_Done">FTC_Manager_Done</a></td><td></td><td><a href="#FTC_ImageCache_Lookup">FTC_ImageCache_Lookup</a></td></tr>
+<tr><td></td><td><a href="#FTC_Manager_LookupFace">FTC_Manager_LookupFace</a></td><td></td><td><a href="#FTC_ImageCache_LookupScaler">FTC_ImageCache_LookupScaler</a></td></tr>
+<tr><td></td><td><a href="#FTC_ScalerRec">FTC_ScalerRec</a></td><td></td><td><a href="#FTC_SBit">FTC_SBit</a></td></tr>
+<tr><td></td><td><a href="#FTC_Scaler">FTC_Scaler</a></td><td></td><td><a href="#FTC_SBitRec">FTC_SBitRec</a></td></tr>
+<tr><td></td><td><a href="#FTC_Manager_LookupSize">FTC_Manager_LookupSize</a></td><td></td><td><a href="#FTC_SBitCache">FTC_SBitCache</a></td></tr>
+<tr><td></td><td><a href="#FTC_Node_Unref">FTC_Node_Unref</a></td><td></td><td><a href="#FTC_SBitCache_New">FTC_SBitCache_New</a></td></tr>
+<tr><td></td><td><a href="#FTC_Manager_RemoveFaceID">FTC_Manager_RemoveFaceID</a></td><td></td><td><a href="#FTC_SBitCache_Lookup">FTC_SBitCache_Lookup</a></td></tr>
+<tr><td></td><td><a href="#FTC_CMapCache">FTC_CMapCache</a></td><td></td><td><a href="#FTC_SBitCache_LookupScaler">FTC_SBitCache_LookupScaler</a></td></tr>
+</table><br><br>
+
+<table align=center width="87%"><tr><td>
+<p>This section describes the FreeType 2 cache sub-system, which is used to limit the number of concurrently opened <a href="ft2-base_interface.html#FT_Face">FT_Face</a> and <a href="ft2-base_interface.html#FT_Size">FT_Size</a> objects, as well as caching information like character maps and glyph images while limiting their maximum memory usage.</p>
+<p>Note that all types and functions begin with the &lsquo;FTC_&rsquo; prefix.</p>
+<p>The cache is highly portable and thus doesn't know anything about the fonts installed on your system, or how to access them. This implies the following scheme:</p>
+<p>First, available or installed font faces are uniquely identified by <a href="ft2-cache_subsystem.html#FTC_FaceID">FTC_FaceID</a> values, provided to the cache by the client. Note that the cache only stores and compares these values, and doesn't try to interpret them in any way.</p>
+<p>Second, the cache calls, only when needed, a client-provided function to convert a <a href="ft2-cache_subsystem.html#FTC_FaceID">FTC_FaceID</a> into a new <a href="ft2-base_interface.html#FT_Face">FT_Face</a> object. The latter is then completely managed by the cache, including its termination through <a href="ft2-base_interface.html#FT_Done_Face">FT_Done_Face</a>.</p>
+<p>Clients are free to map face IDs to anything else. The most simple usage is to associate them to a (pathname,face_index) pair that is used to call <a href="ft2-base_interface.html#FT_New_Face">FT_New_Face</a>. However, more complex schemes are also possible.</p>
+<p>Note that for the cache to work correctly, the face ID values must be <b>persistent</b>, which means that the contents they point to should not change at runtime, or that their value should not become invalid.</p>
+<p>If this is unavoidable (e.g., when a font is uninstalled at runtime), you should call <a href="ft2-cache_subsystem.html#FTC_Manager_RemoveFaceID">FTC_Manager_RemoveFaceID</a> as soon as possible, to let the cache get rid of any references to the old <a href="ft2-cache_subsystem.html#FTC_FaceID">FTC_FaceID</a> it may keep internally. Failure to do so will lead to incorrect behaviour or even crashes.</p>
+<p>To use the cache, start with calling <a href="ft2-cache_subsystem.html#FTC_Manager_New">FTC_Manager_New</a> to create a new <a href="ft2-cache_subsystem.html#FTC_Manager">FTC_Manager</a> object, which models a single cache instance. You can then look up <a href="ft2-base_interface.html#FT_Face">FT_Face</a> and <a href="ft2-base_interface.html#FT_Size">FT_Size</a> objects with <a href="ft2-cache_subsystem.html#FTC_Manager_LookupFace">FTC_Manager_LookupFace</a> and <a href="ft2-cache_subsystem.html#FTC_Manager_LookupSize">FTC_Manager_LookupSize</a>, respectively.</p>
+<p>If you want to use the charmap caching, call <a href="ft2-cache_subsystem.html#FTC_CMapCache_New">FTC_CMapCache_New</a>, then later use <a href="ft2-cache_subsystem.html#FTC_CMapCache_Lookup">FTC_CMapCache_Lookup</a> to perform the equivalent of <a href="ft2-base_interface.html#FT_Get_Char_Index">FT_Get_Char_Index</a>, only much faster.</p>
+<p>If you want to use the <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> caching, call <a href="ft2-cache_subsystem.html#FTC_ImageCache">FTC_ImageCache</a>, then later use <a href="ft2-cache_subsystem.html#FTC_ImageCache_Lookup">FTC_ImageCache_Lookup</a> to retrieve the corresponding <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> objects from the cache.</p>
+<p>If you need lots of small bitmaps, it is much more memory efficient to call <a href="ft2-cache_subsystem.html#FTC_SBitCache_New">FTC_SBitCache_New</a> followed by <a href="ft2-cache_subsystem.html#FTC_SBitCache_Lookup">FTC_SBitCache_Lookup</a>. This returns <a href="ft2-cache_subsystem.html#FTC_SBitRec">FTC_SBitRec</a> structures, which are used to store small bitmaps directly. (A small bitmap is one whose metrics and dimensions all fit into 8-bit integers).</p>
+<p>We hope to also provide a kerning cache in the near future.</p>
+</td></tr></table><br>
+<table align=center width="75%"><tr><td>
+<h4><a name="FTC_Manager">FTC_Manager</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_CACHE_H (freetype/ftcache.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FTC_ManagerRec_* <b>FTC_Manager</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>This object corresponds to one instance of the cache-subsystem. It is used to cache one or more <a href="ft2-base_interface.html#FT_Face">FT_Face</a> objects, along with corresponding <a href="ft2-base_interface.html#FT_Size">FT_Size</a> objects.</p>
+<p>The manager intentionally limits the total number of opened <a href="ft2-base_interface.html#FT_Face">FT_Face</a> and <a href="ft2-base_interface.html#FT_Size">FT_Size</a> objects to control memory usage. See the &lsquo;max_faces&rsquo; and &lsquo;max_sizes&rsquo; parameters of <a href="ft2-cache_subsystem.html#FTC_Manager_New">FTC_Manager_New</a>.</p>
+<p>The manager is also used to cache &lsquo;nodes&rsquo; of various types while limiting their total memory usage.</p>
+<p>All limitations are enforced by keeping lists of managed objects in most-recently-used order, and flushing old nodes to make room for new ones.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FTC_FaceID">FTC_FaceID</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_CACHE_H (freetype/ftcache.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <a href="ft2-basic_types.html#FT_Pointer">FT_Pointer</a> <b>FTC_FaceID</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>An opaque pointer type that is used to identity face objects. The contents of such objects is application-dependent.</p>
+<p>These pointers are typically used to point to a user-defined structure containing a font file path, and face index.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>Never use NULL as a valid <a href="ft2-cache_subsystem.html#FTC_FaceID">FTC_FaceID</a>.</p>
+<p>Face IDs are passed by the client to the cache manager, which calls, when needed, the <a href="ft2-cache_subsystem.html#FTC_Face_Requester">FTC_Face_Requester</a> to translate them into new <a href="ft2-base_interface.html#FT_Face">FT_Face</a> objects.</p>
+<p>If the content of a given face ID changes at runtime, or if the value becomes invalid (e.g., when uninstalling a font), you should immediately call <a href="ft2-cache_subsystem.html#FTC_Manager_RemoveFaceID">FTC_Manager_RemoveFaceID</a> before any other cache function.</p>
+<p>Failure to do so will result in incorrect behaviour or even memory leaks and crashes.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FTC_Face_Requester">FTC_Face_Requester</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_CACHE_H (freetype/ftcache.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <a href="ft2-basic_types.html#FT_Error">FT_Error</a>
+ (*<b>FTC_Face_Requester</b>)( <a href="ft2-cache_subsystem.html#FTC_FaceID">FTC_FaceID</a> face_id,
+ <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
+ <a href="ft2-basic_types.html#FT_Pointer">FT_Pointer</a> request_data,
+ <a href="ft2-base_interface.html#FT_Face">FT_Face</a>* aface );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A callback function provided by client applications. It is used by the cache manager to translate a given <a href="ft2-cache_subsystem.html#FTC_FaceID">FTC_FaceID</a> into a new valid <a href="ft2-base_interface.html#FT_Face">FT_Face</a> object, on demand.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face_id</b></td><td>
+<p>The face ID to resolve.</p>
+</td></tr>
+<tr valign=top><td><b>library</b></td><td>
+<p>A handle to a FreeType library object.</p>
+</td></tr>
+<tr valign=top><td><b>req_data</b></td><td>
+<p>Application-provided request data (see note below).</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>aface</b></td><td>
+<p>A new <a href="ft2-base_interface.html#FT_Face">FT_Face</a> handle.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The third parameter &lsquo;req_data&rsquo; is the same as the one passed by the client when <a href="ft2-cache_subsystem.html#FTC_Manager_New">FTC_Manager_New</a> is called.</p>
+<p>The face requester should not perform funny things on the returned face object, like creating a new <a href="ft2-base_interface.html#FT_Size">FT_Size</a> for it, or setting a transformation through <a href="ft2-base_interface.html#FT_Set_Transform">FT_Set_Transform</a>!</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FTC_Node">FTC_Node</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_CACHE_H (freetype/ftcache.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FTC_NodeRec_* <b>FTC_Node</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>An opaque handle to a cache node object. Each cache node is reference-counted. A node with a count of 0 might be flushed out of a full cache whenever a lookup request is performed.</p>
+<p>If you lookup nodes, you have the ability to &lsquo;acquire&rsquo; them, i.e., to increment their reference count. This will prevent the node from being flushed out of the cache until you explicitly &lsquo;release&rsquo; it (see <a href="ft2-cache_subsystem.html#FTC_Node_Unref">FTC_Node_Unref</a>).</p>
+<p>See also <a href="ft2-cache_subsystem.html#FTC_SBitCache_Lookup">FTC_SBitCache_Lookup</a> and <a href="ft2-cache_subsystem.html#FTC_ImageCache_Lookup">FTC_ImageCache_Lookup</a>.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FTC_Manager_New">FTC_Manager_New</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_CACHE_H (freetype/ftcache.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FTC_Manager_New</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> max_faces,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> max_sizes,
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> max_bytes,
+ <a href="ft2-cache_subsystem.html#FTC_Face_Requester">FTC_Face_Requester</a> requester,
+ <a href="ft2-basic_types.html#FT_Pointer">FT_Pointer</a> req_data,
+ <a href="ft2-cache_subsystem.html#FTC_Manager">FTC_Manager</a> *amanager );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Creates a new cache manager.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>library</b></td><td>
+<p>The parent FreeType library handle to use.</p>
+</td></tr>
+<tr valign=top><td><b>max_faces</b></td><td>
+<p>Maximum number of opened <a href="ft2-base_interface.html#FT_Face">FT_Face</a> objects managed by this cache instance. Use 0 for defaults.</p>
+</td></tr>
+<tr valign=top><td><b>max_sizes</b></td><td>
+<p>Maximum number of opened <a href="ft2-base_interface.html#FT_Size">FT_Size</a> objects managed by this cache instance. Use 0 for defaults.</p>
+</td></tr>
+<tr valign=top><td><b>max_bytes</b></td><td>
+<p>Maximum number of bytes to use for cached data nodes. Use 0 for defaults. Note that this value does not account for managed <a href="ft2-base_interface.html#FT_Face">FT_Face</a> and <a href="ft2-base_interface.html#FT_Size">FT_Size</a> objects.</p>
+</td></tr>
+<tr valign=top><td><b>requester</b></td><td>
+<p>An application-provided callback used to translate face IDs into real <a href="ft2-base_interface.html#FT_Face">FT_Face</a> objects.</p>
+</td></tr>
+<tr valign=top><td><b>req_data</b></td><td>
+<p>A generic pointer that is passed to the requester each time it is called (see <a href="ft2-cache_subsystem.html#FTC_Face_Requester">FTC_Face_Requester</a>).</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>amanager</b></td><td>
+<p>A handle to a new manager object. 0 in case of failure.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FTC_Manager_Reset">FTC_Manager_Reset</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_CACHE_H (freetype/ftcache.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <span class="keyword">void</span> )
+ <b>FTC_Manager_Reset</b>( <a href="ft2-cache_subsystem.html#FTC_Manager">FTC_Manager</a> manager );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Empties a given cache manager. This simply gets rid of all the currently cached <a href="ft2-base_interface.html#FT_Face">FT_Face</a> and <a href="ft2-base_interface.html#FT_Size">FT_Size</a> objects within the manager.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>manager</b></td><td>
+<p>A handle to the manager.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FTC_Manager_Done">FTC_Manager_Done</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_CACHE_H (freetype/ftcache.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <span class="keyword">void</span> )
+ <b>FTC_Manager_Done</b>( <a href="ft2-cache_subsystem.html#FTC_Manager">FTC_Manager</a> manager );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Destroys a given manager after emptying it.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>manager</b></td><td>
+<p>A handle to the target cache manager object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FTC_Manager_LookupFace">FTC_Manager_LookupFace</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_CACHE_H (freetype/ftcache.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FTC_Manager_LookupFace</b>( <a href="ft2-cache_subsystem.html#FTC_Manager">FTC_Manager</a> manager,
+ <a href="ft2-cache_subsystem.html#FTC_FaceID">FTC_FaceID</a> face_id,
+ <a href="ft2-base_interface.html#FT_Face">FT_Face</a> *aface );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Retrieves the <a href="ft2-base_interface.html#FT_Face">FT_Face</a> object that corresponds to a given face ID through a cache manager.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>manager</b></td><td>
+<p>A handle to the cache manager.</p>
+</td></tr>
+<tr valign=top><td><b>face_id</b></td><td>
+<p>The ID of the face object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>aface</b></td><td>
+<p>A handle to the face object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The returned <a href="ft2-base_interface.html#FT_Face">FT_Face</a> object is always owned by the manager. You should never try to discard it yourself.</p>
+<p>The <a href="ft2-base_interface.html#FT_Face">FT_Face</a> object doesn't necessarily have a current size object (i.e., face-&gt;size can be 0). If you need a specific &lsquo;font size&rsquo;, use <a href="ft2-cache_subsystem.html#FTC_Manager_LookupSize">FTC_Manager_LookupSize</a> instead.</p>
+<p>Never change the face's transformation matrix (i.e., never call the <a href="ft2-base_interface.html#FT_Set_Transform">FT_Set_Transform</a> function) on a returned face! If you need to transform glyphs, do it yourself after glyph loading.</p>
+<p>When you perform a lookup, out-of-memory errors are detected <i>within</i> the lookup and force incremental flushes of the cache until enough memory is released for the lookup to succeed.</p>
+<p>If a lookup fails with &lsquo;FT_Err_Out_Of_Memory&rsquo; the cache has already been completely flushed, and still no memory was available for the operation.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FTC_ScalerRec">FTC_ScalerRec</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_CACHE_H (freetype/ftcache.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FTC_ScalerRec_
+ {
+ <a href="ft2-cache_subsystem.html#FTC_FaceID">FTC_FaceID</a> face_id;
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> width;
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> height;
+ <a href="ft2-basic_types.html#FT_Int">FT_Int</a> pixel;
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> x_res;
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> y_res;
+
+ } <b>FTC_ScalerRec</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A structure used to describe a given character size in either pixels or points to the cache manager. See <a href="ft2-cache_subsystem.html#FTC_Manager_LookupSize">FTC_Manager_LookupSize</a>.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face_id</b></td><td>
+<p>The source face ID.</p>
+</td></tr>
+<tr valign=top><td><b>width</b></td><td>
+<p>The character width.</p>
+</td></tr>
+<tr valign=top><td><b>height</b></td><td>
+<p>The character height.</p>
+</td></tr>
+<tr valign=top><td><b>pixel</b></td><td>
+<p>A Boolean. If 1, the &lsquo;width&rsquo; and &lsquo;height&rsquo; fields are interpreted as integer pixel character sizes. Otherwise, they are expressed as 1/64th of points.</p>
+</td></tr>
+<tr valign=top><td><b>x_res</b></td><td>
+<p>Only used when &lsquo;pixel&rsquo; is value 0 to indicate the horizontal resolution in dpi.</p>
+</td></tr>
+<tr valign=top><td><b>y_res</b></td><td>
+<p>Only used when &lsquo;pixel&rsquo; is value 0 to indicate the vertical resolution in dpi.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>This type is mainly used to retrieve <a href="ft2-base_interface.html#FT_Size">FT_Size</a> objects through the cache manager.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FTC_Scaler">FTC_Scaler</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_CACHE_H (freetype/ftcache.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FTC_ScalerRec_* <b>FTC_Scaler</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A handle to an <a href="ft2-cache_subsystem.html#FTC_ScalerRec">FTC_ScalerRec</a> structure.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FTC_Manager_LookupSize">FTC_Manager_LookupSize</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_CACHE_H (freetype/ftcache.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FTC_Manager_LookupSize</b>( <a href="ft2-cache_subsystem.html#FTC_Manager">FTC_Manager</a> manager,
+ <a href="ft2-cache_subsystem.html#FTC_Scaler">FTC_Scaler</a> scaler,
+ <a href="ft2-base_interface.html#FT_Size">FT_Size</a> *asize );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Retrieve the <a href="ft2-base_interface.html#FT_Size">FT_Size</a> object that corresponds to a given <a href="ft2-cache_subsystem.html#FTC_ScalerRec">FTC_ScalerRec</a> pointer through a cache manager.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>manager</b></td><td>
+<p>A handle to the cache manager.</p>
+</td></tr>
+<tr valign=top><td><b>scaler</b></td><td>
+<p>A scaler handle.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>asize</b></td><td>
+<p>A handle to the size object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The returned <a href="ft2-base_interface.html#FT_Size">FT_Size</a> object is always owned by the manager. You should never try to discard it by yourself.</p>
+<p>You can access the parent <a href="ft2-base_interface.html#FT_Face">FT_Face</a> object simply as &lsquo;size-&gt;face&rsquo; if you need it. Note that this object is also owned by the manager.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>When you perform a lookup, out-of-memory errors are detected <i>within</i> the lookup and force incremental flushes of the cache until enough memory is released for the lookup to succeed.</p>
+<p>If a lookup fails with &lsquo;FT_Err_Out_Of_Memory&rsquo; the cache has already been completely flushed, and still no memory is available for the operation.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FTC_Node_Unref">FTC_Node_Unref</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_CACHE_H (freetype/ftcache.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <span class="keyword">void</span> )
+ <b>FTC_Node_Unref</b>( <a href="ft2-cache_subsystem.html#FTC_Node">FTC_Node</a> node,
+ <a href="ft2-cache_subsystem.html#FTC_Manager">FTC_Manager</a> manager );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Decrement a cache node's internal reference count. When the count reaches 0, it is not destroyed but becomes eligible for subsequent cache flushes.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>node</b></td><td>
+<p>The cache node handle.</p>
+</td></tr>
+<tr valign=top><td><b>manager</b></td><td>
+<p>The cache manager handle.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FTC_Manager_RemoveFaceID">FTC_Manager_RemoveFaceID</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_CACHE_H (freetype/ftcache.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <span class="keyword">void</span> )
+ <b>FTC_Manager_RemoveFaceID</b>( <a href="ft2-cache_subsystem.html#FTC_Manager">FTC_Manager</a> manager,
+ <a href="ft2-cache_subsystem.html#FTC_FaceID">FTC_FaceID</a> face_id );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A special function used to indicate to the cache manager that a given <a href="ft2-cache_subsystem.html#FTC_FaceID">FTC_FaceID</a> is no longer valid, either because its content changed, or because it was deallocated or uninstalled.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>manager</b></td><td>
+<p>The cache manager handle.</p>
+</td></tr>
+<tr valign=top><td><b>face_id</b></td><td>
+<p>The <a href="ft2-cache_subsystem.html#FTC_FaceID">FTC_FaceID</a> to be removed.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>This function flushes all nodes from the cache corresponding to this &lsquo;face_id&rsquo;, with the exception of nodes with a non-null reference count.</p>
+<p>Such nodes are however modified internally so as to never appear in later lookups with the same &lsquo;face_id&rsquo; value, and to be immediately destroyed when released by all their users.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FTC_CMapCache">FTC_CMapCache</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_CACHE_H (freetype/ftcache.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FTC_CMapCacheRec_* <b>FTC_CMapCache</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>An opaque handle used to model a charmap cache. This cache is to hold character codes -&gt; glyph indices mappings.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FTC_CMapCache_New">FTC_CMapCache_New</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_CACHE_H (freetype/ftcache.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FTC_CMapCache_New</b>( <a href="ft2-cache_subsystem.html#FTC_Manager">FTC_Manager</a> manager,
+ <a href="ft2-cache_subsystem.html#FTC_CMapCache">FTC_CMapCache</a> *acache );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Create a new charmap cache.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>manager</b></td><td>
+<p>A handle to the cache manager.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>acache</b></td><td>
+<p>A new cache handle. NULL in case of error.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>Like all other caches, this one will be destroyed with the cache manager.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FTC_CMapCache_Lookup">FTC_CMapCache_Lookup</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_CACHE_H (freetype/ftcache.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> )
+ <b>FTC_CMapCache_Lookup</b>( <a href="ft2-cache_subsystem.html#FTC_CMapCache">FTC_CMapCache</a> cache,
+ <a href="ft2-cache_subsystem.html#FTC_FaceID">FTC_FaceID</a> face_id,
+ <a href="ft2-basic_types.html#FT_Int">FT_Int</a> cmap_index,
+ <a href="ft2-basic_types.html#FT_UInt32">FT_UInt32</a> char_code );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Translate a character code into a glyph index, using the charmap cache.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>cache</b></td><td>
+<p>A charmap cache handle.</p>
+</td></tr>
+<tr valign=top><td><b>face_id</b></td><td>
+<p>The source face ID.</p>
+</td></tr>
+<tr valign=top><td><b>cmap_index</b></td><td>
+<p>The index of the charmap in the source face.</p>
+</td></tr>
+<tr valign=top><td><b>char_code</b></td><td>
+<p>The character code (in the corresponding charmap).</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>Glyph index. 0 means &lsquo;no glyph&rsquo;.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FTC_ImageTypeRec">FTC_ImageTypeRec</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_CACHE_H (freetype/ftcache.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FTC_ImageTypeRec_
+ {
+ <a href="ft2-cache_subsystem.html#FTC_FaceID">FTC_FaceID</a> face_id;
+ <a href="ft2-basic_types.html#FT_Int">FT_Int</a> width;
+ <a href="ft2-basic_types.html#FT_Int">FT_Int</a> height;
+ <a href="ft2-basic_types.html#FT_Int32">FT_Int32</a> flags;
+
+ } <b>FTC_ImageTypeRec</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A structure used to model the type of images in a glyph cache.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face_id</b></td><td>
+<p>The face ID.</p>
+</td></tr>
+<tr valign=top><td><b>width</b></td><td>
+<p>The width in pixels.</p>
+</td></tr>
+<tr valign=top><td><b>height</b></td><td>
+<p>The height in pixels.</p>
+</td></tr>
+<tr valign=top><td><b>flags</b></td><td>
+<p>The load flags, as in <a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a>.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FTC_ImageType">FTC_ImageType</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_CACHE_H (freetype/ftcache.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FTC_ImageTypeRec_* <b>FTC_ImageType</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A handle to an <a href="ft2-cache_subsystem.html#FTC_ImageTypeRec">FTC_ImageTypeRec</a> structure.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FTC_ImageCache">FTC_ImageCache</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_CACHE_H (freetype/ftcache.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FTC_ImageCacheRec_* <b>FTC_ImageCache</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A handle to an glyph image cache object. They are designed to hold many distinct glyph images while not exceeding a certain memory threshold.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FTC_ImageCache_New">FTC_ImageCache_New</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_CACHE_H (freetype/ftcache.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FTC_ImageCache_New</b>( <a href="ft2-cache_subsystem.html#FTC_Manager">FTC_Manager</a> manager,
+ <a href="ft2-cache_subsystem.html#FTC_ImageCache">FTC_ImageCache</a> *acache );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Creates a new glyph image cache.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>manager</b></td><td>
+<p>The parent manager for the image cache.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>acache</b></td><td>
+<p>A handle to the new glyph image cache object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FTC_ImageCache_Lookup">FTC_ImageCache_Lookup</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_CACHE_H (freetype/ftcache.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FTC_ImageCache_Lookup</b>( <a href="ft2-cache_subsystem.html#FTC_ImageCache">FTC_ImageCache</a> cache,
+ <a href="ft2-cache_subsystem.html#FTC_ImageType">FTC_ImageType</a> type,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> gindex,
+ <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> *aglyph,
+ <a href="ft2-cache_subsystem.html#FTC_Node">FTC_Node</a> *anode );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Retrieves a given glyph image from a glyph image cache.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>cache</b></td><td>
+<p>A handle to the source glyph image cache.</p>
+</td></tr>
+<tr valign=top><td><b>type</b></td><td>
+<p>A pointer to a glyph image type descriptor.</p>
+</td></tr>
+<tr valign=top><td><b>gindex</b></td><td>
+<p>The glyph index to retrieve.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>aglyph</b></td><td>
+<p>The corresponding <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> object. 0 in case of failure.</p>
+</td></tr>
+<tr valign=top><td><b>anode</b></td><td>
+<p>Used to return the address of of the corresponding cache node after incrementing its reference count (see note below).</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The returned glyph is owned and managed by the glyph image cache. Never try to transform or discard it manually! You can however create a copy with <a href="ft2-glyph_management.html#FT_Glyph_Copy">FT_Glyph_Copy</a> and modify the new one.</p>
+<p>If &lsquo;anode&rsquo; is <i>not</i> NULL, it receives the address of the cache node containing the glyph image, after increasing its reference count. This ensures that the node (as well as the <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a>) will always be kept in the cache until you call <a href="ft2-cache_subsystem.html#FTC_Node_Unref">FTC_Node_Unref</a> to &lsquo;release&rsquo; it.</p>
+<p>If &lsquo;anode&rsquo; is NULL, the cache node is left unchanged, which means that the <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> could be flushed out of the cache on the next call to one of the caching sub-system APIs. Don't assume that it is persistent!</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FTC_ImageCache_LookupScaler">FTC_ImageCache_LookupScaler</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_CACHE_H (freetype/ftcache.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FTC_ImageCache_LookupScaler</b>( <a href="ft2-cache_subsystem.html#FTC_ImageCache">FTC_ImageCache</a> cache,
+ <a href="ft2-cache_subsystem.html#FTC_Scaler">FTC_Scaler</a> scaler,
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> load_flags,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> gindex,
+ <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> *aglyph,
+ <a href="ft2-cache_subsystem.html#FTC_Node">FTC_Node</a> *anode );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A variant of <a href="ft2-cache_subsystem.html#FTC_ImageCache_Lookup">FTC_ImageCache_Lookup</a> that uses an <a href="ft2-cache_subsystem.html#FTC_ScalerRec">FTC_ScalerRec</a> to specify the face ID and its size.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>cache</b></td><td>
+<p>A handle to the source glyph image cache.</p>
+</td></tr>
+<tr valign=top><td><b>scaler</b></td><td>
+<p>A pointer to a scaler descriptor.</p>
+</td></tr>
+<tr valign=top><td><b>load_flags</b></td><td>
+<p>The corresponding load flags.</p>
+</td></tr>
+<tr valign=top><td><b>gindex</b></td><td>
+<p>The glyph index to retrieve.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>aglyph</b></td><td>
+<p>The corresponding <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> object. 0 in case of failure.</p>
+</td></tr>
+<tr valign=top><td><b>anode</b></td><td>
+<p>Used to return the address of of the corresponding cache node after incrementing its reference count (see note below).</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The returned glyph is owned and managed by the glyph image cache. Never try to transform or discard it manually! You can however create a copy with <a href="ft2-glyph_management.html#FT_Glyph_Copy">FT_Glyph_Copy</a> and modify the new one.</p>
+<p>If &lsquo;anode&rsquo; is <i>not</i> NULL, it receives the address of the cache node containing the glyph image, after increasing its reference count. This ensures that the node (as well as the <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a>) will always be kept in the cache until you call <a href="ft2-cache_subsystem.html#FTC_Node_Unref">FTC_Node_Unref</a> to &lsquo;release&rsquo; it.</p>
+<p>If &lsquo;anode&rsquo; is NULL, the cache node is left unchanged, which means that the <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> could be flushed out of the cache on the next call to one of the caching sub-system APIs. Don't assume that it is persistent!</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FTC_SBit">FTC_SBit</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_CACHE_H (freetype/ftcache.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FTC_SBitRec_* <b>FTC_SBit</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A handle to a small bitmap descriptor. See the <a href="ft2-cache_subsystem.html#FTC_SBitRec">FTC_SBitRec</a> structure for details.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FTC_SBitRec">FTC_SBitRec</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_CACHE_H (freetype/ftcache.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FTC_SBitRec_
+ {
+ <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> width;
+ <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> height;
+ <a href="ft2-basic_types.html#FT_Char">FT_Char</a> left;
+ <a href="ft2-basic_types.html#FT_Char">FT_Char</a> top;
+
+ <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> format;
+ <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> max_grays;
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> pitch;
+ <a href="ft2-basic_types.html#FT_Char">FT_Char</a> xadvance;
+ <a href="ft2-basic_types.html#FT_Char">FT_Char</a> yadvance;
+
+ <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a>* buffer;
+
+ } <b>FTC_SBitRec</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A very compact structure used to describe a small glyph bitmap.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>width</b></td><td>
+<p>The bitmap width in pixels.</p>
+</td></tr>
+<tr valign=top><td><b>height</b></td><td>
+<p>The bitmap height in pixels.</p>
+</td></tr>
+<tr valign=top><td><b>left</b></td><td>
+<p>The horizontal distance from the pen position to the left bitmap border (a.k.a. &lsquo;left side bearing&rsquo;, or &lsquo;lsb&rsquo;).</p>
+</td></tr>
+<tr valign=top><td><b>top</b></td><td>
+<p>The vertical distance from the pen position (on the baseline) to the upper bitmap border (a.k.a. &lsquo;top side bearing&rsquo;). The distance is positive for upwards Y coordinates.</p>
+</td></tr>
+<tr valign=top><td><b>format</b></td><td>
+<p>The format of the glyph bitmap (monochrome or gray).</p>
+</td></tr>
+<tr valign=top><td><b>max_grays</b></td><td>
+<p>Maximum gray level value (in the range 1 to 255).</p>
+</td></tr>
+<tr valign=top><td><b>pitch</b></td><td>
+<p>The number of bytes per bitmap line. May be positive or negative.</p>
+</td></tr>
+<tr valign=top><td><b>xadvance</b></td><td>
+<p>The horizontal advance width in pixels.</p>
+</td></tr>
+<tr valign=top><td><b>yadvance</b></td><td>
+<p>The vertical advance height in pixels.</p>
+</td></tr>
+<tr valign=top><td><b>buffer</b></td><td>
+<p>A pointer to the bitmap pixels.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FTC_SBitCache">FTC_SBitCache</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_CACHE_H (freetype/ftcache.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FTC_SBitCacheRec_* <b>FTC_SBitCache</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A handle to a small bitmap cache. These are special cache objects used to store small glyph bitmaps (and anti-aliased pixmaps) in a much more efficient way than the traditional glyph image cache implemented by <a href="ft2-cache_subsystem.html#FTC_ImageCache">FTC_ImageCache</a>.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FTC_SBitCache_New">FTC_SBitCache_New</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_CACHE_H (freetype/ftcache.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FTC_SBitCache_New</b>( <a href="ft2-cache_subsystem.html#FTC_Manager">FTC_Manager</a> manager,
+ <a href="ft2-cache_subsystem.html#FTC_SBitCache">FTC_SBitCache</a> *acache );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Creates a new cache to store small glyph bitmaps.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>manager</b></td><td>
+<p>A handle to the source cache manager.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>acache</b></td><td>
+<p>A handle to the new sbit cache. NULL in case of error.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FTC_SBitCache_Lookup">FTC_SBitCache_Lookup</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_CACHE_H (freetype/ftcache.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FTC_SBitCache_Lookup</b>( <a href="ft2-cache_subsystem.html#FTC_SBitCache">FTC_SBitCache</a> cache,
+ <a href="ft2-cache_subsystem.html#FTC_ImageType">FTC_ImageType</a> type,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> gindex,
+ <a href="ft2-cache_subsystem.html#FTC_SBit">FTC_SBit</a> *sbit,
+ <a href="ft2-cache_subsystem.html#FTC_Node">FTC_Node</a> *anode );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Looks up a given small glyph bitmap in a given sbit cache and &lsquo;lock&rsquo; it to prevent its flushing from the cache until needed.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>cache</b></td><td>
+<p>A handle to the source sbit cache.</p>
+</td></tr>
+<tr valign=top><td><b>type</b></td><td>
+<p>A pointer to the glyph image type descriptor.</p>
+</td></tr>
+<tr valign=top><td><b>gindex</b></td><td>
+<p>The glyph index.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>sbit</b></td><td>
+<p>A handle to a small bitmap descriptor.</p>
+</td></tr>
+<tr valign=top><td><b>anode</b></td><td>
+<p>Used to return the address of of the corresponding cache node after incrementing its reference count (see note below).</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The small bitmap descriptor and its bit buffer are owned by the cache and should never be freed by the application. They might as well disappear from memory on the next cache lookup, so don't treat them as persistent data.</p>
+<p>The descriptor's &lsquo;buffer&rsquo; field is set to 0 to indicate a missing glyph bitmap.</p>
+<p>If &lsquo;anode&rsquo; is <i>not</i> NULL, it receives the address of the cache node containing the bitmap, after increasing its reference count. This ensures that the node (as well as the image) will always be kept in the cache until you call <a href="ft2-cache_subsystem.html#FTC_Node_Unref">FTC_Node_Unref</a> to &lsquo;release&rsquo; it.</p>
+<p>If &lsquo;anode&rsquo; is NULL, the cache node is left unchanged, which means that the bitmap could be flushed out of the cache on the next call to one of the caching sub-system APIs. Don't assume that it is persistent!</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FTC_SBitCache_LookupScaler">FTC_SBitCache_LookupScaler</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_CACHE_H (freetype/ftcache.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FTC_SBitCache_LookupScaler</b>( <a href="ft2-cache_subsystem.html#FTC_SBitCache">FTC_SBitCache</a> cache,
+ <a href="ft2-cache_subsystem.html#FTC_Scaler">FTC_Scaler</a> scaler,
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> load_flags,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> gindex,
+ <a href="ft2-cache_subsystem.html#FTC_SBit">FTC_SBit</a> *sbit,
+ <a href="ft2-cache_subsystem.html#FTC_Node">FTC_Node</a> *anode );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A variant of <a href="ft2-cache_subsystem.html#FTC_SBitCache_Lookup">FTC_SBitCache_Lookup</a> that uses an <a href="ft2-cache_subsystem.html#FTC_ScalerRec">FTC_ScalerRec</a> to specify the face ID and its size.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>cache</b></td><td>
+<p>A handle to the source sbit cache.</p>
+</td></tr>
+<tr valign=top><td><b>scaler</b></td><td>
+<p>A pointer to the scaler descriptor.</p>
+</td></tr>
+<tr valign=top><td><b>load_flags</b></td><td>
+<p>The corresponding load flags.</p>
+</td></tr>
+<tr valign=top><td><b>gindex</b></td><td>
+<p>The glyph index.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>sbit</b></td><td>
+<p>A handle to a small bitmap descriptor.</p>
+</td></tr>
+<tr valign=top><td><b>anode</b></td><td>
+<p>Used to return the address of of the corresponding cache node after incrementing its reference count (see note below).</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The small bitmap descriptor and its bit buffer are owned by the cache and should never be freed by the application. They might as well disappear from memory on the next cache lookup, so don't treat them as persistent data.</p>
+<p>The descriptor's &lsquo;buffer&rsquo; field is set to 0 to indicate a missing glyph bitmap.</p>
+<p>If &lsquo;anode&rsquo; is <i>not</i> NULL, it receives the address of the cache node containing the bitmap, after increasing its reference count. This ensures that the node (as well as the image) will always be kept in the cache until you call <a href="ft2-cache_subsystem.html#FTC_Node_Unref">FTC_Node_Unref</a> to &lsquo;release&rsquo; it.</p>
+<p>If &lsquo;anode&rsquo; is NULL, the cache node is left unchanged, which means that the bitmap could be flushed out of the cache on the next call to one of the caching sub-system APIs. Don't assume that it is persistent!</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+</body>
+</html>
diff --git a/src/3rdparty/freetype/docs/reference/ft2-cid_fonts.html b/src/3rdparty/freetype/docs/reference/ft2-cid_fonts.html
new file mode 100644
index 0000000..e94f2f6
--- /dev/null
+++ b/src/3rdparty/freetype/docs/reference/ft2-cid_fonts.html
@@ -0,0 +1,102 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>FreeType-2.3.6 API Reference</title>
+<style type="text/css">
+ body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
+ color: #000000;
+ background: #FFFFFF; }
+
+ p { text-align: justify; }
+ h1 { text-align: center; }
+ li { text-align: justify; }
+ td { padding: 0 0.5em 0 0.5em; }
+ td.left { padding: 0 0.5em 0 0.5em;
+ text-align: left; }
+
+ a:link { color: #0000EF; }
+ a:visited { color: #51188E; }
+ a:hover { color: #FF0000; }
+
+ span.keyword { font-family: monospace;
+ text-align: left;
+ white-space: pre;
+ color: darkblue; }
+
+ pre.colored { color: blue; }
+
+ ul.empty { list-style-type: none; }
+</style>
+</head>
+<body>
+<center><h1>FreeType-2.3.6 API Reference</h1></center>
+
+<center><h1>
+CID Fonts
+</h1></center>
+<h2>Synopsis</h2>
+<table align=center cellspacing=5 cellpadding=0 border=0>
+<tr><td></td><td><a href="#FT_Get_CID_Registry_Ordering_Supplement">FT_Get_CID_Registry_Ordering_Supplement</a></td></tr>
+</table><br><br>
+
+<table align=center width="87%"><tr><td>
+<p>This section contains the declaration of CID-keyed font specific functions.</p>
+</td></tr></table><br>
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Get_CID_Registry_Ordering_Supplement">FT_Get_CID_Registry_Ordering_Supplement</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_CID_H (freetype/ftcid.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Get_CID_Registry_Ordering_Supplement</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <span class="keyword">const</span> <span class="keyword">char</span>* *registry,
+ <span class="keyword">const</span> <span class="keyword">char</span>* *ordering,
+ <a href="ft2-basic_types.html#FT_Int">FT_Int</a> *supplement);
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Retrieve the Registry/Ordering/Supplement triple (also known as the "R/O/S") from a CID-keyed font.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to the input face.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>registry</b></td><td>
+<p>The registry, as a C string, owned by the face.</p>
+</td></tr>
+<tr valign=top><td><b>ordering</b></td><td>
+<p>The ordering, as a C string, owned by the face.</p>
+</td></tr>
+<tr valign=top><td><b>supplement</b></td><td>
+<p>The supplement.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>This function only works with CID faces, returning an error otherwise.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>since</b></em></td></tr><tr><td>
+<p>2.3.6</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+</body>
+</html>
diff --git a/src/3rdparty/freetype/docs/reference/ft2-computations.html b/src/3rdparty/freetype/docs/reference/ft2-computations.html
new file mode 100644
index 0000000..de05104
--- /dev/null
+++ b/src/3rdparty/freetype/docs/reference/ft2-computations.html
@@ -0,0 +1,828 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>FreeType-2.3.6 API Reference</title>
+<style type="text/css">
+ body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
+ color: #000000;
+ background: #FFFFFF; }
+
+ p { text-align: justify; }
+ h1 { text-align: center; }
+ li { text-align: justify; }
+ td { padding: 0 0.5em 0 0.5em; }
+ td.left { padding: 0 0.5em 0 0.5em;
+ text-align: left; }
+
+ a:link { color: #0000EF; }
+ a:visited { color: #51188E; }
+ a:hover { color: #FF0000; }
+
+ span.keyword { font-family: monospace;
+ text-align: left;
+ white-space: pre;
+ color: darkblue; }
+
+ pre.colored { color: blue; }
+
+ ul.empty { list-style-type: none; }
+</style>
+</head>
+<body>
+<center><h1>FreeType-2.3.6 API Reference</h1></center>
+
+<center><h1>
+Computations
+</h1></center>
+<h2>Synopsis</h2>
+<table align=center cellspacing=5 cellpadding=0 border=0>
+<tr><td></td><td><a href="#FT_MulDiv">FT_MulDiv</a></td><td></td><td><a href="#FT_Matrix_Invert">FT_Matrix_Invert</a></td><td></td><td><a href="#FT_Tan">FT_Tan</a></td></tr>
+<tr><td></td><td><a href="#FT_MulFix">FT_MulFix</a></td><td></td><td><a href="#FT_Angle">FT_Angle</a></td><td></td><td><a href="#FT_Atan2">FT_Atan2</a></td></tr>
+<tr><td></td><td><a href="#FT_DivFix">FT_DivFix</a></td><td></td><td><a href="#FT_ANGLE_PI">FT_ANGLE_PI</a></td><td></td><td><a href="#FT_Angle_Diff">FT_Angle_Diff</a></td></tr>
+<tr><td></td><td><a href="#FT_RoundFix">FT_RoundFix</a></td><td></td><td><a href="#FT_ANGLE_2PI">FT_ANGLE_2PI</a></td><td></td><td><a href="#FT_Vector_Unit">FT_Vector_Unit</a></td></tr>
+<tr><td></td><td><a href="#FT_CeilFix">FT_CeilFix</a></td><td></td><td><a href="#FT_ANGLE_PI2">FT_ANGLE_PI2</a></td><td></td><td><a href="#FT_Vector_Rotate">FT_Vector_Rotate</a></td></tr>
+<tr><td></td><td><a href="#FT_FloorFix">FT_FloorFix</a></td><td></td><td><a href="#FT_ANGLE_PI4">FT_ANGLE_PI4</a></td><td></td><td><a href="#FT_Vector_Length">FT_Vector_Length</a></td></tr>
+<tr><td></td><td><a href="#FT_Vector_Transform">FT_Vector_Transform</a></td><td></td><td><a href="#FT_Sin">FT_Sin</a></td><td></td><td><a href="#FT_Vector_Polarize">FT_Vector_Polarize</a></td></tr>
+<tr><td></td><td><a href="#FT_Matrix_Multiply">FT_Matrix_Multiply</a></td><td></td><td><a href="#FT_Cos">FT_Cos</a></td><td></td><td><a href="#FT_Vector_From_Polar">FT_Vector_From_Polar</a></td></tr>
+</table><br><br>
+
+<table align=center width="87%"><tr><td>
+<p>This section contains various functions used to perform computations on 16.16 fixed-float numbers or 2d vectors.</p>
+</td></tr></table><br>
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_MulDiv">FT_MulDiv</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Long">FT_Long</a> )
+ <b>FT_MulDiv</b>( <a href="ft2-basic_types.html#FT_Long">FT_Long</a> a,
+ <a href="ft2-basic_types.html#FT_Long">FT_Long</a> b,
+ <a href="ft2-basic_types.html#FT_Long">FT_Long</a> c );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A very simple function used to perform the computation &lsquo;(a*b)/c&rsquo; with maximal accuracy (it uses a 64-bit intermediate integer whenever necessary).</p>
+<p>This function isn't necessarily as fast as some processor specific operations, but is at least completely portable.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>a</b></td><td>
+<p>The first multiplier.</p>
+</td></tr>
+<tr valign=top><td><b>b</b></td><td>
+<p>The second multiplier.</p>
+</td></tr>
+<tr valign=top><td><b>c</b></td><td>
+<p>The divisor.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>The result of &lsquo;(a*b)/c&rsquo;. This function never traps when trying to divide by zero; it simply returns &lsquo;MaxInt&rsquo; or &lsquo;MinInt&rsquo; depending on the signs of &lsquo;a&rsquo; and &lsquo;b&rsquo;.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_MulFix">FT_MulFix</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Long">FT_Long</a> )
+ <b>FT_MulFix</b>( <a href="ft2-basic_types.html#FT_Long">FT_Long</a> a,
+ <a href="ft2-basic_types.html#FT_Long">FT_Long</a> b );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A very simple function used to perform the computation &lsquo;(a*b)/0x10000&rsquo; with maximal accuracy. Most of the time this is used to multiply a given value by a 16.16 fixed float factor.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>a</b></td><td>
+<p>The first multiplier.</p>
+</td></tr>
+<tr valign=top><td><b>b</b></td><td>
+<p>The second multiplier. Use a 16.16 factor here whenever possible (see note below).</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>The result of &lsquo;(a*b)/0x10000&rsquo;.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>This function has been optimized for the case where the absolute value of &lsquo;a&rsquo; is less than 2048, and &lsquo;b&rsquo; is a 16.16 scaling factor. As this happens mainly when scaling from notional units to fractional pixels in FreeType, it resulted in noticeable speed improvements between versions 2.x and 1.x.</p>
+<p>As a conclusion, always try to place a 16.16 factor as the <i>second</i> argument of this function; this can make a great difference.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_DivFix">FT_DivFix</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Long">FT_Long</a> )
+ <b>FT_DivFix</b>( <a href="ft2-basic_types.html#FT_Long">FT_Long</a> a,
+ <a href="ft2-basic_types.html#FT_Long">FT_Long</a> b );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A very simple function used to perform the computation &lsquo;(a*0x10000)/b&rsquo; with maximal accuracy. Most of the time, this is used to divide a given value by a 16.16 fixed float factor.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>a</b></td><td>
+<p>The first multiplier.</p>
+</td></tr>
+<tr valign=top><td><b>b</b></td><td>
+<p>The second multiplier. Use a 16.16 factor here whenever possible (see note below).</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>The result of &lsquo;(a*0x10000)/b&rsquo;.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The optimization for FT_DivFix() is simple: If (a &lt;&lt; 16) fits in 32 bits, then the division is computed directly. Otherwise, we use a specialized version of <a href="ft2-computations.html#FT_MulDiv">FT_MulDiv</a>.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_RoundFix">FT_RoundFix</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> )
+ <b>FT_RoundFix</b>( <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> a );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A very simple function used to round a 16.16 fixed number.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>a</b></td><td>
+<p>The number to be rounded.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>The result of &lsquo;(a + 0x8000) &amp; -0x10000&rsquo;.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_CeilFix">FT_CeilFix</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> )
+ <b>FT_CeilFix</b>( <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> a );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A very simple function used to compute the ceiling function of a 16.16 fixed number.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>a</b></td><td>
+<p>The number for which the ceiling function is to be computed.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>The result of &lsquo;(a + 0x10000 - 1) &amp; -0x10000&rsquo;.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_FloorFix">FT_FloorFix</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> )
+ <b>FT_FloorFix</b>( <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> a );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A very simple function used to compute the floor function of a 16.16 fixed number.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>a</b></td><td>
+<p>The number for which the floor function is to be computed.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>The result of &lsquo;a &amp; -0x10000&rsquo;.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Vector_Transform">FT_Vector_Transform</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <span class="keyword">void</span> )
+ <b>FT_Vector_Transform</b>( <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* vec,
+ <span class="keyword">const</span> <a href="ft2-basic_types.html#FT_Matrix">FT_Matrix</a>* matrix );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Transform a single vector through a 2x2 matrix.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>vector</b></td><td>
+<p>The target vector to transform.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>matrix</b></td><td>
+<p>A pointer to the source 2x2 matrix.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The result is undefined if either &lsquo;vector&rsquo; or &lsquo;matrix&rsquo; is invalid.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Matrix_Multiply">FT_Matrix_Multiply</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_GLYPH_H (freetype/ftglyph.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <span class="keyword">void</span> )
+ <b>FT_Matrix_Multiply</b>( <span class="keyword">const</span> <a href="ft2-basic_types.html#FT_Matrix">FT_Matrix</a>* a,
+ <a href="ft2-basic_types.html#FT_Matrix">FT_Matrix</a>* b );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Performs the matrix operation &lsquo;b = a*b&rsquo;.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>a</b></td><td>
+<p>A pointer to matrix &lsquo;a&rsquo;.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>b</b></td><td>
+<p>A pointer to matrix &lsquo;b&rsquo;.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The result is undefined if either &lsquo;a&rsquo; or &lsquo;b&rsquo; is zero.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Matrix_Invert">FT_Matrix_Invert</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_GLYPH_H (freetype/ftglyph.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Matrix_Invert</b>( <a href="ft2-basic_types.html#FT_Matrix">FT_Matrix</a>* matrix );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Inverts a 2x2 matrix. Returns an error if it can't be inverted.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>matrix</b></td><td>
+<p>A pointer to the target matrix. Remains untouched in case of error.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Angle">FT_Angle</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> <b>FT_Angle</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>This type is used to model angle values in FreeType. Note that the angle is a 16.16 fixed float value expressed in degrees.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_ANGLE_PI">FT_ANGLE_PI</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_ANGLE_PI</b> ( 180L &lt;&lt; 16 )
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>The angle pi expressed in <a href="ft2-computations.html#FT_Angle">FT_Angle</a> units.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_ANGLE_2PI">FT_ANGLE_2PI</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_ANGLE_2PI</b> ( <a href="ft2-computations.html#FT_ANGLE_PI">FT_ANGLE_PI</a> * 2 )
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>The angle 2*pi expressed in <a href="ft2-computations.html#FT_Angle">FT_Angle</a> units.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_ANGLE_PI2">FT_ANGLE_PI2</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_ANGLE_PI2</b> ( <a href="ft2-computations.html#FT_ANGLE_PI">FT_ANGLE_PI</a> / 2 )
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>The angle pi/2 expressed in <a href="ft2-computations.html#FT_Angle">FT_Angle</a> units.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_ANGLE_PI4">FT_ANGLE_PI4</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_ANGLE_PI4</b> ( <a href="ft2-computations.html#FT_ANGLE_PI">FT_ANGLE_PI</a> / 4 )
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>The angle pi/4 expressed in <a href="ft2-computations.html#FT_Angle">FT_Angle</a> units.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Sin">FT_Sin</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> )
+ <b>FT_Sin</b>( <a href="ft2-computations.html#FT_Angle">FT_Angle</a> angle );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Return the sinus of a given angle in fixed point format.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>angle</b></td><td>
+<p>The input angle.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>The sinus value.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>If you need both the sinus and cosinus for a given angle, use the function <a href="ft2-computations.html#FT_Vector_Unit">FT_Vector_Unit</a>.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Cos">FT_Cos</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> )
+ <b>FT_Cos</b>( <a href="ft2-computations.html#FT_Angle">FT_Angle</a> angle );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Return the cosinus of a given angle in fixed point format.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>angle</b></td><td>
+<p>The input angle.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>The cosinus value.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>If you need both the sinus and cosinus for a given angle, use the function <a href="ft2-computations.html#FT_Vector_Unit">FT_Vector_Unit</a>.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Tan">FT_Tan</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> )
+ <b>FT_Tan</b>( <a href="ft2-computations.html#FT_Angle">FT_Angle</a> angle );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Return the tangent of a given angle in fixed point format.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>angle</b></td><td>
+<p>The input angle.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>The tangent value.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Atan2">FT_Atan2</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-computations.html#FT_Angle">FT_Angle</a> )
+ <b>FT_Atan2</b>( <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> x,
+ <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> y );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Return the arc-tangent corresponding to a given vector (x,y) in the 2d plane.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>x</b></td><td>
+<p>The horizontal vector coordinate.</p>
+</td></tr>
+<tr valign=top><td><b>y</b></td><td>
+<p>The vertical vector coordinate.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>The arc-tangent value (i.e. angle).</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Angle_Diff">FT_Angle_Diff</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-computations.html#FT_Angle">FT_Angle</a> )
+ <b>FT_Angle_Diff</b>( <a href="ft2-computations.html#FT_Angle">FT_Angle</a> angle1,
+ <a href="ft2-computations.html#FT_Angle">FT_Angle</a> angle2 );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Return the difference between two angles. The result is always constrained to the ]-PI..PI] interval.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>angle1</b></td><td>
+<p>First angle.</p>
+</td></tr>
+<tr valign=top><td><b>angle2</b></td><td>
+<p>Second angle.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>Constrained value of &lsquo;value2-value1&rsquo;.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Vector_Unit">FT_Vector_Unit</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <span class="keyword">void</span> )
+ <b>FT_Vector_Unit</b>( <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* vec,
+ <a href="ft2-computations.html#FT_Angle">FT_Angle</a> angle );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Return the unit vector corresponding to a given angle. After the call, the value of &lsquo;vec.x&rsquo; will be &lsquo;sin(angle)&rsquo;, and the value of &lsquo;vec.y&rsquo; will be &lsquo;cos(angle)&rsquo;.</p>
+<p>This function is useful to retrieve both the sinus and cosinus of a given angle quickly.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>vec</b></td><td>
+<p>The address of target vector.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>angle</b></td><td>
+<p>The address of angle.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Vector_Rotate">FT_Vector_Rotate</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <span class="keyword">void</span> )
+ <b>FT_Vector_Rotate</b>( <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* vec,
+ <a href="ft2-computations.html#FT_Angle">FT_Angle</a> angle );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Rotate a vector by a given angle.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>vec</b></td><td>
+<p>The address of target vector.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>angle</b></td><td>
+<p>The address of angle.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Vector_Length">FT_Vector_Length</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> )
+ <b>FT_Vector_Length</b>( <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* vec );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Return the length of a given vector.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>vec</b></td><td>
+<p>The address of target vector.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>The vector length, expressed in the same units that the original vector coordinates.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Vector_Polarize">FT_Vector_Polarize</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <span class="keyword">void</span> )
+ <b>FT_Vector_Polarize</b>( <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* vec,
+ <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> *length,
+ <a href="ft2-computations.html#FT_Angle">FT_Angle</a> *angle );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Compute both the length and angle of a given vector.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>vec</b></td><td>
+<p>The address of source vector.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>length</b></td><td>
+<p>The vector length.</p>
+</td></tr>
+<tr valign=top><td><b>angle</b></td><td>
+<p>The vector angle.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Vector_From_Polar">FT_Vector_From_Polar</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TRIGONOMETRY_H (freetype/fttrigon.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <span class="keyword">void</span> )
+ <b>FT_Vector_From_Polar</b>( <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* vec,
+ <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> length,
+ <a href="ft2-computations.html#FT_Angle">FT_Angle</a> angle );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Compute vector coordinates from a length and angle.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>vec</b></td><td>
+<p>The address of source vector.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>length</b></td><td>
+<p>The vector length.</p>
+</td></tr>
+<tr valign=top><td><b>angle</b></td><td>
+<p>The vector angle.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+</body>
+</html>
diff --git a/src/3rdparty/freetype/docs/reference/ft2-font_formats.html b/src/3rdparty/freetype/docs/reference/ft2-font_formats.html
new file mode 100644
index 0000000..d1ef02b
--- /dev/null
+++ b/src/3rdparty/freetype/docs/reference/ft2-font_formats.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>FreeType-2.3.6 API Reference</title>
+<style type="text/css">
+ body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
+ color: #000000;
+ background: #FFFFFF; }
+
+ p { text-align: justify; }
+ h1 { text-align: center; }
+ li { text-align: justify; }
+ td { padding: 0 0.5em 0 0.5em; }
+ td.left { padding: 0 0.5em 0 0.5em;
+ text-align: left; }
+
+ a:link { color: #0000EF; }
+ a:visited { color: #51188E; }
+ a:hover { color: #FF0000; }
+
+ span.keyword { font-family: monospace;
+ text-align: left;
+ white-space: pre;
+ color: darkblue; }
+
+ pre.colored { color: blue; }
+
+ ul.empty { list-style-type: none; }
+</style>
+</head>
+<body>
+<center><h1>FreeType-2.3.6 API Reference</h1></center>
+
+<center><h1>
+Font Formats
+</h1></center>
+<h2>Synopsis</h2>
+<table align=center cellspacing=5 cellpadding=0 border=0>
+<tr><td></td><td><a href="#FT_Get_X11_Font_Format">FT_Get_X11_Font_Format</a></td><td></td><td></td><td></td><td></td></tr>
+</table><br><br>
+
+<table align=center width="87%"><tr><td>
+<p>The single function in this section can be used to get the font format. Note that this information is not needed normally; however, there are special cases (like in PDF devices) where it is important to differentiate, in spite of FreeType's uniform API.</p>
+</td></tr></table><br>
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Get_X11_Font_Format">FT_Get_X11_Font_Format</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_XFREE86_H (freetype/ftxf86.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <span class="keyword">const</span> <span class="keyword">char</span>* )
+ <b>FT_Get_X11_Font_Format</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Return a string describing the format of a given face, using values which can be used as an X11 FONT_PROPERTY. Possible values are &lsquo;TrueType&rsquo;, &lsquo;Type 1&rsquo;, &lsquo;BDF&rsquo;, &lsquo;PCF&rsquo;, &lsquo;Type 42&rsquo;, &lsquo;CID Type 1&rsquo;, &lsquo;CFF&rsquo;, &lsquo;PFR&rsquo;, and &lsquo;Windows FNT&rsquo;.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>Input face handle.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>Font format string. NULL in case of error.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+</body>
+</html>
diff --git a/src/3rdparty/freetype/docs/reference/ft2-gasp_table.html b/src/3rdparty/freetype/docs/reference/ft2-gasp_table.html
new file mode 100644
index 0000000..3d54792
--- /dev/null
+++ b/src/3rdparty/freetype/docs/reference/ft2-gasp_table.html
@@ -0,0 +1,137 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>FreeType-2.3.6 API Reference</title>
+<style type="text/css">
+ body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
+ color: #000000;
+ background: #FFFFFF; }
+
+ p { text-align: justify; }
+ h1 { text-align: center; }
+ li { text-align: justify; }
+ td { padding: 0 0.5em 0 0.5em; }
+ td.left { padding: 0 0.5em 0 0.5em;
+ text-align: left; }
+
+ a:link { color: #0000EF; }
+ a:visited { color: #51188E; }
+ a:hover { color: #FF0000; }
+
+ span.keyword { font-family: monospace;
+ text-align: left;
+ white-space: pre;
+ color: darkblue; }
+
+ pre.colored { color: blue; }
+
+ ul.empty { list-style-type: none; }
+</style>
+</head>
+<body>
+<center><h1>FreeType-2.3.6 API Reference</h1></center>
+
+<center><h1>
+Gasp Table
+</h1></center>
+<h2>Synopsis</h2>
+<table align=center cellspacing=5 cellpadding=0 border=0>
+<tr><td></td><td><a href="#FT_GASP_XXX">FT_GASP_XXX</a></td><td></td><td><a href="#FT_Get_Gasp">FT_Get_Gasp</a></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
+</table><br><br>
+
+<table align=center width="87%"><tr><td>
+<p>The function <a href="ft2-gasp_table.html#FT_Get_Gasp">FT_Get_Gasp</a> can be used to query a TrueType or OpenType font for specific entries in their &lsquo;gasp&rsquo; table, if any. This is mainly useful when implementing native TrueType hinting with the bytecode interpreter to duplicate the Windows text rendering results.</p>
+</td></tr></table><br>
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_GASP_XXX">FT_GASP_XXX</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_GASP_H (freetype/ftgasp.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <a href="ft2-gasp_table.html#FT_GASP_XXX">FT_GASP_NO_TABLE</a> -1
+#define <a href="ft2-gasp_table.html#FT_GASP_XXX">FT_GASP_DO_GRIDFIT</a> 0x01
+#define <a href="ft2-gasp_table.html#FT_GASP_XXX">FT_GASP_DO_GRAY</a> 0x02
+#define <a href="ft2-gasp_table.html#FT_GASP_XXX">FT_GASP_SYMMETRIC_SMOOTHING</a> 0x08
+#define <a href="ft2-gasp_table.html#FT_GASP_XXX">FT_GASP_SYMMETRIC_GRIDFIT</a> 0x10
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A list of values and/or bit-flags returned by the <a href="ft2-gasp_table.html#FT_Get_Gasp">FT_Get_Gasp</a> function.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>FT_GASP_NO_TABLE</b></td><td>
+<p>This special value means that there is no GASP table in this face. It is up to the client to decide what to do.</p>
+</td></tr>
+<tr valign=top><td><b>FT_GASP_DO_GRIDFIT</b></td><td>
+<p>Grid-fitting and hinting should be performed at the specified ppem. This <b>really</b> means TrueType bytecode interpretation.</p>
+</td></tr>
+<tr valign=top><td><b>FT_GASP_DO_GRAY</b></td><td>
+<p>Anti-aliased rendering should be performed at the specified ppem.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_GASP_SYMMETRIC_SMOOTHING</b></td></tr>
+<tr valign=top><td></td><td>
+<p>Smoothing along multiple axes must be used with ClearType.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_GASP_SYMMETRIC_GRIDFIT</b></td></tr>
+<tr valign=top><td></td><td>
+<p>Grid-fitting must be used with ClearType's symmetric smoothing.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>&lsquo;ClearType&rsquo; is Microsoft's implementation of LCD rendering, partly protected by patents.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>since</b></em></td></tr><tr><td>
+<p>2.3.0</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Get_Gasp">FT_Get_Gasp</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_GASP_H (freetype/ftgasp.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Int">FT_Int</a> )
+ <b>FT_Get_Gasp</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> ppem );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Read the &lsquo;gasp&rsquo; table from a TrueType or OpenType font file and return the entry corresponding to a given character pixel size.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>The source face handle.</p>
+</td></tr>
+<tr valign=top><td><b>ppem</b></td><td>
+<p>The vertical character pixel size.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>Bit flags (see <a href="ft2-gasp_table.html#FT_GASP_XXX">FT_GASP_XXX</a>), or <a href="ft2-gasp_table.html#FT_GASP_XXX">FT_GASP_NO_TABLE</a> if there is no &lsquo;gasp&rsquo; table in the face.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>since</b></em></td></tr><tr><td>
+<p>2.3.0</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+</body>
+</html>
diff --git a/src/3rdparty/freetype/docs/reference/ft2-glyph_management.html b/src/3rdparty/freetype/docs/reference/ft2-glyph_management.html
new file mode 100644
index 0000000..aff9422
--- /dev/null
+++ b/src/3rdparty/freetype/docs/reference/ft2-glyph_management.html
@@ -0,0 +1,633 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>FreeType-2.3.6 API Reference</title>
+<style type="text/css">
+ body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
+ color: #000000;
+ background: #FFFFFF; }
+
+ p { text-align: justify; }
+ h1 { text-align: center; }
+ li { text-align: justify; }
+ td { padding: 0 0.5em 0 0.5em; }
+ td.left { padding: 0 0.5em 0 0.5em;
+ text-align: left; }
+
+ a:link { color: #0000EF; }
+ a:visited { color: #51188E; }
+ a:hover { color: #FF0000; }
+
+ span.keyword { font-family: monospace;
+ text-align: left;
+ white-space: pre;
+ color: darkblue; }
+
+ pre.colored { color: blue; }
+
+ ul.empty { list-style-type: none; }
+</style>
+</head>
+<body>
+<center><h1>FreeType-2.3.6 API Reference</h1></center>
+
+<center><h1>
+Glyph Management
+</h1></center>
+<h2>Synopsis</h2>
+<table align=center cellspacing=5 cellpadding=0 border=0>
+<tr><td></td><td><a href="#FT_Glyph">FT_Glyph</a></td><td></td><td><a href="#FT_OutlineGlyphRec">FT_OutlineGlyphRec</a></td><td></td><td><a href="#ft_glyph_bbox_xxx">ft_glyph_bbox_xxx</a></td></tr>
+<tr><td></td><td><a href="#FT_GlyphRec">FT_GlyphRec</a></td><td></td><td><a href="#FT_Get_Glyph">FT_Get_Glyph</a></td><td></td><td><a href="#FT_Glyph_Get_CBox">FT_Glyph_Get_CBox</a></td></tr>
+<tr><td></td><td><a href="#FT_BitmapGlyph">FT_BitmapGlyph</a></td><td></td><td><a href="#FT_Glyph_Copy">FT_Glyph_Copy</a></td><td></td><td><a href="#FT_Glyph_To_Bitmap">FT_Glyph_To_Bitmap</a></td></tr>
+<tr><td></td><td><a href="#FT_BitmapGlyphRec">FT_BitmapGlyphRec</a></td><td></td><td><a href="#FT_Glyph_Transform">FT_Glyph_Transform</a></td><td></td><td><a href="#FT_Done_Glyph">FT_Done_Glyph</a></td></tr>
+<tr><td></td><td><a href="#FT_OutlineGlyph">FT_OutlineGlyph</a></td><td></td><td><a href="#FT_Glyph_BBox_Mode">FT_Glyph_BBox_Mode</a></td><td></td><td></td></tr>
+</table><br><br>
+
+<table align=center width="87%"><tr><td>
+<p>This section contains definitions used to manage glyph data through generic FT_Glyph objects. Each of them can contain a bitmap, a vector outline, or even images in other formats.</p>
+</td></tr></table><br>
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Glyph">FT_Glyph</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_GLYPH_H (freetype/ftglyph.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_GlyphRec_* <b>FT_Glyph</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Handle to an object used to model generic glyph images. It is a pointer to the <a href="ft2-glyph_management.html#FT_GlyphRec">FT_GlyphRec</a> structure and can contain a glyph bitmap or pointer.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>Glyph objects are not owned by the library. You must thus release them manually (through <a href="ft2-glyph_management.html#FT_Done_Glyph">FT_Done_Glyph</a>) <i>before</i> calling <a href="ft2-base_interface.html#FT_Done_FreeType">FT_Done_FreeType</a>.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_GlyphRec">FT_GlyphRec</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_GLYPH_H (freetype/ftglyph.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_GlyphRec_
+ {
+ <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library;
+ <span class="keyword">const</span> FT_Glyph_Class* clazz;
+ <a href="ft2-basic_types.html#FT_Glyph_Format">FT_Glyph_Format</a> format;
+ <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a> advance;
+
+ } <b>FT_GlyphRec</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>The root glyph structure contains a given glyph image plus its advance width in 16.16 fixed float format.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>library</b></td><td>
+<p>A handle to the FreeType library object.</p>
+</td></tr>
+<tr valign=top><td><b>clazz</b></td><td>
+<p>A pointer to the glyph's class. Private.</p>
+</td></tr>
+<tr valign=top><td><b>format</b></td><td>
+<p>The format of the glyph's image.</p>
+</td></tr>
+<tr valign=top><td><b>advance</b></td><td>
+<p>A 16.16 vector that gives the glyph's advance width.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_BitmapGlyph">FT_BitmapGlyph</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_GLYPH_H (freetype/ftglyph.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_BitmapGlyphRec_* <b>FT_BitmapGlyph</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A handle to an object used to model a bitmap glyph image. This is a sub-class of <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a>, and a pointer to <a href="ft2-glyph_management.html#FT_BitmapGlyphRec">FT_BitmapGlyphRec</a>.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_BitmapGlyphRec">FT_BitmapGlyphRec</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_GLYPH_H (freetype/ftglyph.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_BitmapGlyphRec_
+ {
+ <a href="ft2-glyph_management.html#FT_GlyphRec">FT_GlyphRec</a> root;
+ <a href="ft2-basic_types.html#FT_Int">FT_Int</a> left;
+ <a href="ft2-basic_types.html#FT_Int">FT_Int</a> top;
+ <a href="ft2-basic_types.html#FT_Bitmap">FT_Bitmap</a> bitmap;
+
+ } <b>FT_BitmapGlyphRec</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A structure used for bitmap glyph images. This really is a &lsquo;sub-class&rsquo; of <a href="ft2-glyph_management.html#FT_GlyphRec">FT_GlyphRec</a>.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>root</b></td><td>
+<p>The root <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> fields.</p>
+</td></tr>
+<tr valign=top><td><b>left</b></td><td>
+<p>The left-side bearing, i.e., the horizontal distance from the current pen position to the left border of the glyph bitmap.</p>
+</td></tr>
+<tr valign=top><td><b>top</b></td><td>
+<p>The top-side bearing, i.e., the vertical distance from the current pen position to the top border of the glyph bitmap. This distance is positive for upwards-y!</p>
+</td></tr>
+<tr valign=top><td><b>bitmap</b></td><td>
+<p>A descriptor for the bitmap.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>You can typecast an <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> to <a href="ft2-glyph_management.html#FT_BitmapGlyph">FT_BitmapGlyph</a> if you have &lsquo;glyph-&gt;format == FT_GLYPH_FORMAT_BITMAP&rsquo;. This lets you access the bitmap's contents easily.</p>
+<p>The corresponding pixel buffer is always owned by <a href="ft2-glyph_management.html#FT_BitmapGlyph">FT_BitmapGlyph</a> and is thus created and destroyed with it.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_OutlineGlyph">FT_OutlineGlyph</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_GLYPH_H (freetype/ftglyph.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_OutlineGlyphRec_* <b>FT_OutlineGlyph</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A handle to an object used to model an outline glyph image. This is a sub-class of <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a>, and a pointer to <a href="ft2-glyph_management.html#FT_OutlineGlyphRec">FT_OutlineGlyphRec</a>.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_OutlineGlyphRec">FT_OutlineGlyphRec</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_GLYPH_H (freetype/ftglyph.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_OutlineGlyphRec_
+ {
+ <a href="ft2-glyph_management.html#FT_GlyphRec">FT_GlyphRec</a> root;
+ <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a> outline;
+
+ } <b>FT_OutlineGlyphRec</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A structure used for outline (vectorial) glyph images. This really is a &lsquo;sub-class&rsquo; of <a href="ft2-glyph_management.html#FT_GlyphRec">FT_GlyphRec</a>.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>root</b></td><td>
+<p>The root <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> fields.</p>
+</td></tr>
+<tr valign=top><td><b>outline</b></td><td>
+<p>A descriptor for the outline.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>You can typecast a <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> to <a href="ft2-glyph_management.html#FT_OutlineGlyph">FT_OutlineGlyph</a> if you have &lsquo;glyph-&gt;format == FT_GLYPH_FORMAT_OUTLINE&rsquo;. This lets you access the outline's content easily.</p>
+<p>As the outline is extracted from a glyph slot, its coordinates are expressed normally in 26.6 pixels, unless the flag <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_SCALE</a> was used in <a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a>() or <a href="ft2-base_interface.html#FT_Load_Char">FT_Load_Char</a>().</p>
+<p>The outline's tables are always owned by the object and are destroyed with it.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Get_Glyph">FT_Get_Glyph</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_GLYPH_H (freetype/ftglyph.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Get_Glyph</b>( <a href="ft2-base_interface.html#FT_GlyphSlot">FT_GlyphSlot</a> slot,
+ <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> *aglyph );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A function used to extract a glyph image from a slot.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>slot</b></td><td>
+<p>A handle to the source glyph slot.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>aglyph</b></td><td>
+<p>A handle to the glyph object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Glyph_Copy">FT_Glyph_Copy</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_GLYPH_H (freetype/ftglyph.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Glyph_Copy</b>( <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> source,
+ <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> *target );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A function used to copy a glyph image. Note that the created <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> object must be released with <a href="ft2-glyph_management.html#FT_Done_Glyph">FT_Done_Glyph</a>.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>source</b></td><td>
+<p>A handle to the source glyph object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>target</b></td><td>
+<p>A handle to the target glyph object. 0 in case of error.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Glyph_Transform">FT_Glyph_Transform</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_GLYPH_H (freetype/ftglyph.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Glyph_Transform</b>( <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> glyph,
+ <a href="ft2-basic_types.html#FT_Matrix">FT_Matrix</a>* matrix,
+ <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* delta );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Transforms a glyph image if its format is scalable.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>glyph</b></td><td>
+<p>A handle to the target glyph object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>matrix</b></td><td>
+<p>A pointer to a 2x2 matrix to apply.</p>
+</td></tr>
+<tr valign=top><td><b>delta</b></td><td>
+<p>A pointer to a 2d vector to apply. Coordinates are expressed in 1/64th of a pixel.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code (if not 0, the glyph format is not scalable).</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The 2x2 transformation matrix is also applied to the glyph's advance vector.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Glyph_BBox_Mode">FT_Glyph_BBox_Mode</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_GLYPH_H (freetype/ftglyph.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_Glyph_BBox_Mode_
+ {
+ <a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_UNSCALED</a> = 0,
+ <a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_SUBPIXELS</a> = 0,
+ <a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_GRIDFIT</a> = 1,
+ <a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_TRUNCATE</a> = 2,
+ <a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_PIXELS</a> = 3
+
+ } <b>FT_Glyph_BBox_Mode</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>The mode how the values of <a href="ft2-glyph_management.html#FT_Glyph_Get_CBox">FT_Glyph_Get_CBox</a> are returned.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>FT_GLYPH_BBOX_UNSCALED</b></td><td>
+<p>Return unscaled font units.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_GLYPH_BBOX_SUBPIXELS</b></td></tr>
+<tr valign=top><td></td><td>
+<p>Return unfitted 26.6 coordinates.</p>
+</td></tr>
+<tr valign=top><td><b>FT_GLYPH_BBOX_GRIDFIT</b></td><td>
+<p>Return grid-fitted 26.6 coordinates.</p>
+</td></tr>
+<tr valign=top><td><b>FT_GLYPH_BBOX_TRUNCATE</b></td><td>
+<p>Return coordinates in integer pixels.</p>
+</td></tr>
+<tr valign=top><td><b>FT_GLYPH_BBOX_PIXELS</b></td><td>
+<p>Return grid-fitted pixel coordinates.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="ft_glyph_bbox_xxx">ft_glyph_bbox_xxx</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_GLYPH_H (freetype/ftglyph.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <a href="ft2-glyph_management.html#ft_glyph_bbox_xxx">ft_glyph_bbox_unscaled</a> <a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_UNSCALED</a>
+#define <a href="ft2-glyph_management.html#ft_glyph_bbox_xxx">ft_glyph_bbox_subpixels</a> <a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_SUBPIXELS</a>
+#define <a href="ft2-glyph_management.html#ft_glyph_bbox_xxx">ft_glyph_bbox_gridfit</a> <a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_GRIDFIT</a>
+#define <a href="ft2-glyph_management.html#ft_glyph_bbox_xxx">ft_glyph_bbox_truncate</a> <a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_TRUNCATE</a>
+#define <a href="ft2-glyph_management.html#ft_glyph_bbox_xxx">ft_glyph_bbox_pixels</a> <a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_PIXELS</a>
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>These constants are deprecated. Use the corresponding <a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_Glyph_BBox_Mode</a> values instead.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>ft_glyph_bbox_unscaled</b></td><td>
+<p>See <a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_UNSCALED</a>.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>ft_glyph_bbox_subpixels</b></td></tr>
+<tr valign=top><td></td><td>
+<p>See <a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_SUBPIXELS</a>.</p>
+</td></tr>
+<tr valign=top><td><b>ft_glyph_bbox_gridfit</b></td><td>
+<p>See <a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_GRIDFIT</a>.</p>
+</td></tr>
+<tr valign=top><td><b>ft_glyph_bbox_truncate</b></td><td>
+<p>See <a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_TRUNCATE</a>.</p>
+</td></tr>
+<tr valign=top><td><b>ft_glyph_bbox_pixels</b></td><td>
+<p>See <a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_PIXELS</a>.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Glyph_Get_CBox">FT_Glyph_Get_CBox</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_GLYPH_H (freetype/ftglyph.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <span class="keyword">void</span> )
+ <b>FT_Glyph_Get_CBox</b>( <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> glyph,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> bbox_mode,
+ <a href="ft2-basic_types.html#FT_BBox">FT_BBox</a> *acbox );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Return a glyph's &lsquo;control box&rsquo;. The control box encloses all the outline's points, including Bézier control points. Though it coincides with the exact bounding box for most glyphs, it can be slightly larger in some situations (like when rotating an outline which contains Bézier outside arcs).</p>
+<p>Computing the control box is very fast, while getting the bounding box can take much more time as it needs to walk over all segments and arcs in the outline. To get the latter, you can use the &lsquo;ftbbox&rsquo; component which is dedicated to this single task.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>glyph</b></td><td>
+<p>A handle to the source glyph object.</p>
+</td></tr>
+<tr valign=top><td><b>mode</b></td><td>
+<p>The mode which indicates how to interpret the returned bounding box values.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>acbox</b></td><td>
+<p>The glyph coordinate bounding box. Coordinates are expressed in 1/64th of pixels if it is grid-fitted.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>Coordinates are relative to the glyph origin, using the Y-upwards convention.</p>
+<p>If the glyph has been loaded with <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_SCALE</a>, &lsquo;bbox_mode&rsquo; must be set to <a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_UNSCALED</a> to get unscaled font units in 26.6 pixel format. The value <a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_SUBPIXELS</a> is another name for this constant.</p>
+<p>Note that the maximum coordinates are exclusive, which means that one can compute the width and height of the glyph image (be it in integer or 26.6 pixels) as:</p>
+<pre class="colored">
+ width = bbox.xMax - bbox.xMin;
+ height = bbox.yMax - bbox.yMin;
+</pre>
+<p>Note also that for 26.6 coordinates, if &lsquo;bbox_mode&rsquo; is set to <a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_GRIDFIT</a>, the coordinates will also be grid-fitted, which corresponds to:</p>
+<pre class="colored">
+ bbox.xMin = FLOOR(bbox.xMin);
+ bbox.yMin = FLOOR(bbox.yMin);
+ bbox.xMax = CEILING(bbox.xMax);
+ bbox.yMax = CEILING(bbox.yMax);
+</pre>
+<p>To get the bbox in pixel coordinates, set &lsquo;bbox_mode&rsquo; to <a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_TRUNCATE</a>.</p>
+<p>To get the bbox in grid-fitted pixel coordinates, set &lsquo;bbox_mode&rsquo; to <a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_PIXELS</a>.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Glyph_To_Bitmap">FT_Glyph_To_Bitmap</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_GLYPH_H (freetype/ftglyph.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Glyph_To_Bitmap</b>( <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a>* the_glyph,
+ <a href="ft2-base_interface.html#FT_Render_Mode">FT_Render_Mode</a> render_mode,
+ <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* origin,
+ <a href="ft2-basic_types.html#FT_Bool">FT_Bool</a> destroy );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Converts a given glyph object to a bitmap glyph object.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>the_glyph</b></td><td>
+<p>A pointer to a handle to the target glyph.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>render_mode</b></td><td>
+<p>An enumeration that describe how the data is rendered.</p>
+</td></tr>
+<tr valign=top><td><b>origin</b></td><td>
+<p>A pointer to a vector used to translate the glyph image before rendering. Can be 0 (if no translation). The origin is expressed in 26.6 pixels.</p>
+</td></tr>
+<tr valign=top><td><b>destroy</b></td><td>
+<p>A boolean that indicates that the original glyph image should be destroyed by this function. It is never destroyed in case of error.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The glyph image is translated with the &lsquo;origin&rsquo; vector before rendering.</p>
+<p>The first parameter is a pointer to an <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> handle, that will be replaced by this function. Typically, you would use (omitting error handling):</p>
+<p></p>
+<pre class="colored">
+ FT_Glyph glyph;
+ FT_BitmapGlyph glyph_bitmap;
+
+
+ // load glyph
+ error = FT_Load_Char( face, glyph_index, FT_LOAD_DEFAUT );
+
+ // extract glyph image
+ error = FT_Get_Glyph( face-&gt;glyph, &amp;glyph );
+
+ // convert to a bitmap (default render mode + destroy old)
+ if ( glyph-&gt;format != FT_GLYPH_FORMAT_BITMAP )
+ {
+ error = FT_Glyph_To_Bitmap( &amp;glyph, FT_RENDER_MODE_DEFAULT,
+ 0, 1 );
+ if ( error ) // glyph unchanged
+ ...
+ }
+
+ // access bitmap content by typecasting
+ glyph_bitmap = (FT_BitmapGlyph)glyph;
+
+ // do funny stuff with it, like blitting/drawing
+ ...
+
+ // discard glyph image (bitmap or not)
+ FT_Done_Glyph( glyph );
+</pre>
+<p></p>
+<p>This function does nothing if the glyph format isn't scalable.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Done_Glyph">FT_Done_Glyph</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_GLYPH_H (freetype/ftglyph.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <span class="keyword">void</span> )
+ <b>FT_Done_Glyph</b>( <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> glyph );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Destroys a given glyph.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>glyph</b></td><td>
+<p>A handle to the target glyph object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+</body>
+</html>
diff --git a/src/3rdparty/freetype/docs/reference/ft2-glyph_stroker.html b/src/3rdparty/freetype/docs/reference/ft2-glyph_stroker.html
new file mode 100644
index 0000000..7e16d60
--- /dev/null
+++ b/src/3rdparty/freetype/docs/reference/ft2-glyph_stroker.html
@@ -0,0 +1,924 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>FreeType-2.3.6 API Reference</title>
+<style type="text/css">
+ body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
+ color: #000000;
+ background: #FFFFFF; }
+
+ p { text-align: justify; }
+ h1 { text-align: center; }
+ li { text-align: justify; }
+ td { padding: 0 0.5em 0 0.5em; }
+ td.left { padding: 0 0.5em 0 0.5em;
+ text-align: left; }
+
+ a:link { color: #0000EF; }
+ a:visited { color: #51188E; }
+ a:hover { color: #FF0000; }
+
+ span.keyword { font-family: monospace;
+ text-align: left;
+ white-space: pre;
+ color: darkblue; }
+
+ pre.colored { color: blue; }
+
+ ul.empty { list-style-type: none; }
+</style>
+</head>
+<body>
+<center><h1>FreeType-2.3.6 API Reference</h1></center>
+
+<center><h1>
+Glyph Stroker
+</h1></center>
+<h2>Synopsis</h2>
+<table align=center cellspacing=5 cellpadding=0 border=0>
+<tr><td></td><td><a href="#FT_Stroker">FT_Stroker</a></td><td></td><td><a href="#FT_Stroker_EndSubPath">FT_Stroker_EndSubPath</a></td></tr>
+<tr><td></td><td><a href="#FT_Stroker_LineJoin">FT_Stroker_LineJoin</a></td><td></td><td><a href="#FT_Stroker_LineTo">FT_Stroker_LineTo</a></td></tr>
+<tr><td></td><td><a href="#FT_Stroker_LineCap">FT_Stroker_LineCap</a></td><td></td><td><a href="#FT_Stroker_ConicTo">FT_Stroker_ConicTo</a></td></tr>
+<tr><td></td><td><a href="#FT_StrokerBorder">FT_StrokerBorder</a></td><td></td><td><a href="#FT_Stroker_CubicTo">FT_Stroker_CubicTo</a></td></tr>
+<tr><td></td><td><a href="#FT_Outline_GetInsideBorder">FT_Outline_GetInsideBorder</a></td><td></td><td><a href="#FT_Stroker_GetBorderCounts">FT_Stroker_GetBorderCounts</a></td></tr>
+<tr><td></td><td><a href="#FT_Outline_GetOutsideBorder">FT_Outline_GetOutsideBorder</a></td><td></td><td><a href="#FT_Stroker_ExportBorder">FT_Stroker_ExportBorder</a></td></tr>
+<tr><td></td><td><a href="#FT_Stroker_New">FT_Stroker_New</a></td><td></td><td><a href="#FT_Stroker_GetCounts">FT_Stroker_GetCounts</a></td></tr>
+<tr><td></td><td><a href="#FT_Stroker_Set">FT_Stroker_Set</a></td><td></td><td><a href="#FT_Stroker_Export">FT_Stroker_Export</a></td></tr>
+<tr><td></td><td><a href="#FT_Stroker_Rewind">FT_Stroker_Rewind</a></td><td></td><td><a href="#FT_Stroker_Done">FT_Stroker_Done</a></td></tr>
+<tr><td></td><td><a href="#FT_Stroker_ParseOutline">FT_Stroker_ParseOutline</a></td><td></td><td><a href="#FT_Glyph_Stroke">FT_Glyph_Stroke</a></td></tr>
+<tr><td></td><td><a href="#FT_Stroker_BeginSubPath">FT_Stroker_BeginSubPath</a></td><td></td><td><a href="#FT_Glyph_StrokeBorder">FT_Glyph_StrokeBorder</a></td></tr>
+</table><br><br>
+
+<table align=center width="87%"><tr><td>
+<p>This component generates stroked outlines of a given vectorial glyph. It also allows you to retrieve the &lsquo;outside&rsquo; and/or the &lsquo;inside&rsquo; borders of the stroke.</p>
+<p>This can be useful to generate &lsquo;bordered&rsquo; glyph, i.e., glyphs displayed with a coloured (and anti-aliased) border around their shape.</p>
+</td></tr></table><br>
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Stroker">FT_Stroker</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_STROKER_H (freetype/ftstroke.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_StrokerRec_* <b>FT_Stroker</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Opaque handler to a path stroker object.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Stroker_LineJoin">FT_Stroker_LineJoin</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_STROKER_H (freetype/ftstroke.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_Stroker_LineJoin_
+ {
+ <a href="ft2-glyph_stroker.html#FT_Stroker_LineJoin">FT_STROKER_LINEJOIN_ROUND</a> = 0,
+ <a href="ft2-glyph_stroker.html#FT_Stroker_LineJoin">FT_STROKER_LINEJOIN_BEVEL</a>,
+ <a href="ft2-glyph_stroker.html#FT_Stroker_LineJoin">FT_STROKER_LINEJOIN_MITER</a>
+
+ } <b>FT_Stroker_LineJoin</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>These values determine how two joining lines are rendered in a stroker.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td colspan=0><b>FT_STROKER_LINEJOIN_ROUND</b></td></tr>
+<tr valign=top><td></td><td>
+<p>Used to render rounded line joins. Circular arcs are used to join two lines smoothly.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_STROKER_LINEJOIN_BEVEL</b></td></tr>
+<tr valign=top><td></td><td>
+<p>Used to render beveled line joins; i.e., the two joining lines are extended until they intersect.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_STROKER_LINEJOIN_MITER</b></td></tr>
+<tr valign=top><td></td><td>
+<p>Same as beveled rendering, except that an additional line break is added if the angle between the two joining lines is too closed (this is useful to avoid unpleasant spikes in beveled rendering).</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Stroker_LineCap">FT_Stroker_LineCap</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_STROKER_H (freetype/ftstroke.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_Stroker_LineCap_
+ {
+ <a href="ft2-glyph_stroker.html#FT_Stroker_LineCap">FT_STROKER_LINECAP_BUTT</a> = 0,
+ <a href="ft2-glyph_stroker.html#FT_Stroker_LineCap">FT_STROKER_LINECAP_ROUND</a>,
+ <a href="ft2-glyph_stroker.html#FT_Stroker_LineCap">FT_STROKER_LINECAP_SQUARE</a>
+
+ } <b>FT_Stroker_LineCap</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>These values determine how the end of opened sub-paths are rendered in a stroke.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td colspan=0><b>FT_STROKER_LINECAP_BUTT</b></td></tr>
+<tr valign=top><td></td><td>
+<p>The end of lines is rendered as a full stop on the last point itself.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_STROKER_LINECAP_ROUND</b></td></tr>
+<tr valign=top><td></td><td>
+<p>The end of lines is rendered as a half-circle around the last point.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_STROKER_LINECAP_SQUARE</b></td></tr>
+<tr valign=top><td></td><td>
+<p>The end of lines is rendered as a square around the last point.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_StrokerBorder">FT_StrokerBorder</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_STROKER_H (freetype/ftstroke.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_StrokerBorder_
+ {
+ <a href="ft2-glyph_stroker.html#FT_StrokerBorder">FT_STROKER_BORDER_LEFT</a> = 0,
+ <a href="ft2-glyph_stroker.html#FT_StrokerBorder">FT_STROKER_BORDER_RIGHT</a>
+
+ } <b>FT_StrokerBorder</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>These values are used to select a given stroke border in <a href="ft2-glyph_stroker.html#FT_Stroker_GetBorderCounts">FT_Stroker_GetBorderCounts</a> and <a href="ft2-glyph_stroker.html#FT_Stroker_ExportBorder">FT_Stroker_ExportBorder</a>.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>FT_STROKER_BORDER_LEFT</b></td><td>
+<p>Select the left border, relative to the drawing direction.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_STROKER_BORDER_RIGHT</b></td></tr>
+<tr valign=top><td></td><td>
+<p>Select the right border, relative to the drawing direction.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>Applications are generally interested in the &lsquo;inside&rsquo; and &lsquo;outside&rsquo; borders. However, there is no direct mapping between these and the &lsquo;left&rsquo; and &lsquo;right&rsquo; ones, since this really depends on the glyph's drawing orientation, which varies between font formats.</p>
+<p>You can however use <a href="ft2-glyph_stroker.html#FT_Outline_GetInsideBorder">FT_Outline_GetInsideBorder</a> and <a href="ft2-glyph_stroker.html#FT_Outline_GetOutsideBorder">FT_Outline_GetOutsideBorder</a> to get these.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Outline_GetInsideBorder">FT_Outline_GetInsideBorder</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_STROKER_H (freetype/ftstroke.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-glyph_stroker.html#FT_StrokerBorder">FT_StrokerBorder</a> )
+ <b>FT_Outline_GetInsideBorder</b>( <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>* outline );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Retrieve the <a href="ft2-glyph_stroker.html#FT_StrokerBorder">FT_StrokerBorder</a> value corresponding to the &lsquo;inside&rsquo; borders of a given outline.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>outline</b></td><td>
+<p>The source outline handle.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>The border index. <a href="ft2-glyph_stroker.html#FT_StrokerBorder">FT_STROKER_BORDER_LEFT</a> for empty or invalid outlines.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Outline_GetOutsideBorder">FT_Outline_GetOutsideBorder</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_STROKER_H (freetype/ftstroke.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-glyph_stroker.html#FT_StrokerBorder">FT_StrokerBorder</a> )
+ <b>FT_Outline_GetOutsideBorder</b>( <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>* outline );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Retrieve the <a href="ft2-glyph_stroker.html#FT_StrokerBorder">FT_StrokerBorder</a> value corresponding to the &lsquo;outside&rsquo; borders of a given outline.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>outline</b></td><td>
+<p>The source outline handle.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>The border index. <a href="ft2-glyph_stroker.html#FT_StrokerBorder">FT_STROKER_BORDER_LEFT</a> for empty or invalid outlines.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Stroker_New">FT_Stroker_New</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_STROKER_H (freetype/ftstroke.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Stroker_New</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
+ <a href="ft2-glyph_stroker.html#FT_Stroker">FT_Stroker</a> *astroker );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Create a new stroker object.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>library</b></td><td>
+<p>FreeType library handle.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>astroker</b></td><td>
+<p>A new stroker object handle. NULL in case of error.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Stroker_Set">FT_Stroker_Set</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_STROKER_H (freetype/ftstroke.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <span class="keyword">void</span> )
+ <b>FT_Stroker_Set</b>( <a href="ft2-glyph_stroker.html#FT_Stroker">FT_Stroker</a> stroker,
+ <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> radius,
+ <a href="ft2-glyph_stroker.html#FT_Stroker_LineCap">FT_Stroker_LineCap</a> line_cap,
+ <a href="ft2-glyph_stroker.html#FT_Stroker_LineJoin">FT_Stroker_LineJoin</a> line_join,
+ <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> miter_limit );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Reset a stroker object's attributes.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>stroker</b></td><td>
+<p>The target stroker handle.</p>
+</td></tr>
+<tr valign=top><td><b>radius</b></td><td>
+<p>The border radius.</p>
+</td></tr>
+<tr valign=top><td><b>line_cap</b></td><td>
+<p>The line cap style.</p>
+</td></tr>
+<tr valign=top><td><b>line_join</b></td><td>
+<p>The line join style.</p>
+</td></tr>
+<tr valign=top><td><b>miter_limit</b></td><td>
+<p>The miter limit for the FT_STROKER_LINEJOIN_MITER style, expressed as 16.16 fixed point value.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The radius is expressed in the same units that the outline coordinates.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Stroker_Rewind">FT_Stroker_Rewind</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_STROKER_H (freetype/ftstroke.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <span class="keyword">void</span> )
+ <b>FT_Stroker_Rewind</b>( <a href="ft2-glyph_stroker.html#FT_Stroker">FT_Stroker</a> stroker );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Reset a stroker object without changing its attributes. You should call this function before beginning a new series of calls to <a href="ft2-glyph_stroker.html#FT_Stroker_BeginSubPath">FT_Stroker_BeginSubPath</a> or <a href="ft2-glyph_stroker.html#FT_Stroker_EndSubPath">FT_Stroker_EndSubPath</a>.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>stroker</b></td><td>
+<p>The target stroker handle.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Stroker_ParseOutline">FT_Stroker_ParseOutline</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_STROKER_H (freetype/ftstroke.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Stroker_ParseOutline</b>( <a href="ft2-glyph_stroker.html#FT_Stroker">FT_Stroker</a> stroker,
+ <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>* outline,
+ <a href="ft2-basic_types.html#FT_Bool">FT_Bool</a> opened );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A convenience function used to parse a whole outline with the stroker. The resulting outline(s) can be retrieved later by functions like <a href="ft2-glyph_stroker.html#FT_Stroker_GetCounts">FT_Stroker_GetCounts</a> and <a href="ft2-glyph_stroker.html#FT_Stroker_Export">FT_Stroker_Export</a>.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>stroker</b></td><td>
+<p>The target stroker handle.</p>
+</td></tr>
+<tr valign=top><td><b>outline</b></td><td>
+<p>The source outline.</p>
+</td></tr>
+<tr valign=top><td><b>opened</b></td><td>
+<p>A boolean. If 1, the outline is treated as an open path instead of a closed one.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>If &lsquo;opened&rsquo; is 0 (the default), the outline is treated as a closed path, and the stroker will generate two distinct &lsquo;border&rsquo; outlines.</p>
+<p>If &lsquo;opened&rsquo; is 1, the outline is processed as an open path, and the stroker will generate a single &lsquo;stroke&rsquo; outline.</p>
+<p>This function calls <a href="ft2-glyph_stroker.html#FT_Stroker_Rewind">FT_Stroker_Rewind</a> automatically.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Stroker_BeginSubPath">FT_Stroker_BeginSubPath</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_STROKER_H (freetype/ftstroke.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Stroker_BeginSubPath</b>( <a href="ft2-glyph_stroker.html#FT_Stroker">FT_Stroker</a> stroker,
+ <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* to,
+ <a href="ft2-basic_types.html#FT_Bool">FT_Bool</a> open );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Start a new sub-path in the stroker.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>stroker</b></td><td>
+<p>The target stroker handle.</p>
+</td></tr>
+<tr valign=top><td><b>to</b></td><td>
+<p>A pointer to the start vector.</p>
+</td></tr>
+<tr valign=top><td><b>open</b></td><td>
+<p>A boolean. If 1, the sub-path is treated as an open one.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>This function is useful when you need to stroke a path that is not stored as an <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a> object.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Stroker_EndSubPath">FT_Stroker_EndSubPath</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_STROKER_H (freetype/ftstroke.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Stroker_EndSubPath</b>( <a href="ft2-glyph_stroker.html#FT_Stroker">FT_Stroker</a> stroker );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Close the current sub-path in the stroker.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>stroker</b></td><td>
+<p>The target stroker handle.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>You should call this function after <a href="ft2-glyph_stroker.html#FT_Stroker_BeginSubPath">FT_Stroker_BeginSubPath</a>. If the subpath was not &lsquo;opened&rsquo;, this function will &lsquo;draw&rsquo; a single line segment to the start position when needed.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Stroker_LineTo">FT_Stroker_LineTo</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_STROKER_H (freetype/ftstroke.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Stroker_LineTo</b>( <a href="ft2-glyph_stroker.html#FT_Stroker">FT_Stroker</a> stroker,
+ <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* to );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>&lsquo;Draw&rsquo; a single line segment in the stroker's current sub-path, from the last position.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>stroker</b></td><td>
+<p>The target stroker handle.</p>
+</td></tr>
+<tr valign=top><td><b>to</b></td><td>
+<p>A pointer to the destination point.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>You should call this function between <a href="ft2-glyph_stroker.html#FT_Stroker_BeginSubPath">FT_Stroker_BeginSubPath</a> and <a href="ft2-glyph_stroker.html#FT_Stroker_EndSubPath">FT_Stroker_EndSubPath</a>.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Stroker_ConicTo">FT_Stroker_ConicTo</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_STROKER_H (freetype/ftstroke.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Stroker_ConicTo</b>( <a href="ft2-glyph_stroker.html#FT_Stroker">FT_Stroker</a> stroker,
+ <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* control,
+ <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* to );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>&lsquo;Draw&rsquo; a single quadratic Bézier in the stroker's current sub-path, from the last position.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>stroker</b></td><td>
+<p>The target stroker handle.</p>
+</td></tr>
+<tr valign=top><td><b>control</b></td><td>
+<p>A pointer to a Bézier control point.</p>
+</td></tr>
+<tr valign=top><td><b>to</b></td><td>
+<p>A pointer to the destination point.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>You should call this function between <a href="ft2-glyph_stroker.html#FT_Stroker_BeginSubPath">FT_Stroker_BeginSubPath</a> and <a href="ft2-glyph_stroker.html#FT_Stroker_EndSubPath">FT_Stroker_EndSubPath</a>.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Stroker_CubicTo">FT_Stroker_CubicTo</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_STROKER_H (freetype/ftstroke.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Stroker_CubicTo</b>( <a href="ft2-glyph_stroker.html#FT_Stroker">FT_Stroker</a> stroker,
+ <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* control1,
+ <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* control2,
+ <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* to );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>&lsquo;Draw&rsquo; a single cubic Bézier in the stroker's current sub-path, from the last position.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>stroker</b></td><td>
+<p>The target stroker handle.</p>
+</td></tr>
+<tr valign=top><td><b>control1</b></td><td>
+<p>A pointer to the first Bézier control point.</p>
+</td></tr>
+<tr valign=top><td><b>control2</b></td><td>
+<p>A pointer to second Bézier control point.</p>
+</td></tr>
+<tr valign=top><td><b>to</b></td><td>
+<p>A pointer to the destination point.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>You should call this function between <a href="ft2-glyph_stroker.html#FT_Stroker_BeginSubPath">FT_Stroker_BeginSubPath</a> and <a href="ft2-glyph_stroker.html#FT_Stroker_EndSubPath">FT_Stroker_EndSubPath</a>.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Stroker_GetBorderCounts">FT_Stroker_GetBorderCounts</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_STROKER_H (freetype/ftstroke.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Stroker_GetBorderCounts</b>( <a href="ft2-glyph_stroker.html#FT_Stroker">FT_Stroker</a> stroker,
+ <a href="ft2-glyph_stroker.html#FT_StrokerBorder">FT_StrokerBorder</a> border,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> *anum_points,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> *anum_contours );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Call this function once you have finished parsing your paths with the stroker. It will return the number of points and contours necessary to export one of the &lsquo;border&rsquo; or &lsquo;stroke&rsquo; outlines generated by the stroker.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>stroker</b></td><td>
+<p>The target stroker handle.</p>
+</td></tr>
+<tr valign=top><td><b>border</b></td><td>
+<p>The border index.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>anum_points</b></td><td>
+<p>The number of points.</p>
+</td></tr>
+<tr valign=top><td><b>anum_contours</b></td><td>
+<p>The number of contours.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>When an outline, or a sub-path, is &lsquo;closed&rsquo;, the stroker generates two independent &lsquo;border&rsquo; outlines, named &lsquo;left&rsquo; and &lsquo;right&rsquo;.</p>
+<p>When the outline, or a sub-path, is &lsquo;opened&rsquo;, the stroker merges the &lsquo;border&rsquo; outlines with caps. The &lsquo;left&rsquo; border receives all points, while the &lsquo;right&rsquo; border becomes empty.</p>
+<p>Use the function <a href="ft2-glyph_stroker.html#FT_Stroker_GetCounts">FT_Stroker_GetCounts</a> instead if you want to retrieve the counts associated to both borders.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Stroker_ExportBorder">FT_Stroker_ExportBorder</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_STROKER_H (freetype/ftstroke.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <span class="keyword">void</span> )
+ <b>FT_Stroker_ExportBorder</b>( <a href="ft2-glyph_stroker.html#FT_Stroker">FT_Stroker</a> stroker,
+ <a href="ft2-glyph_stroker.html#FT_StrokerBorder">FT_StrokerBorder</a> border,
+ <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>* outline );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Call this function after <a href="ft2-glyph_stroker.html#FT_Stroker_GetBorderCounts">FT_Stroker_GetBorderCounts</a> to export the corresponding border to your own <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a> structure.</p>
+<p>Note that this function will append the border points and contours to your outline, but will not try to resize its arrays.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>stroker</b></td><td>
+<p>The target stroker handle.</p>
+</td></tr>
+<tr valign=top><td><b>border</b></td><td>
+<p>The border index.</p>
+</td></tr>
+<tr valign=top><td><b>outline</b></td><td>
+<p>The target outline handle.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>Always call this function after <a href="ft2-glyph_stroker.html#FT_Stroker_GetBorderCounts">FT_Stroker_GetBorderCounts</a> to get sure that there is enough room in your <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a> object to receive all new data.</p>
+<p>When an outline, or a sub-path, is &lsquo;closed&rsquo;, the stroker generates two independent &lsquo;border&rsquo; outlines, named &lsquo;left&rsquo; and &lsquo;right&rsquo;</p>
+<p>When the outline, or a sub-path, is &lsquo;opened&rsquo;, the stroker merges the &lsquo;border&rsquo; outlines with caps. The &lsquo;left&rsquo; border receives all points, while the &lsquo;right&rsquo; border becomes empty.</p>
+<p>Use the function <a href="ft2-glyph_stroker.html#FT_Stroker_Export">FT_Stroker_Export</a> instead if you want to retrieve all borders at once.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Stroker_GetCounts">FT_Stroker_GetCounts</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_STROKER_H (freetype/ftstroke.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Stroker_GetCounts</b>( <a href="ft2-glyph_stroker.html#FT_Stroker">FT_Stroker</a> stroker,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> *anum_points,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> *anum_contours );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Call this function once you have finished parsing your paths with the stroker. It returns the number of points and contours necessary to export all points/borders from the stroked outline/path.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>stroker</b></td><td>
+<p>The target stroker handle.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>anum_points</b></td><td>
+<p>The number of points.</p>
+</td></tr>
+<tr valign=top><td><b>anum_contours</b></td><td>
+<p>The number of contours.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Stroker_Export">FT_Stroker_Export</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_STROKER_H (freetype/ftstroke.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <span class="keyword">void</span> )
+ <b>FT_Stroker_Export</b>( <a href="ft2-glyph_stroker.html#FT_Stroker">FT_Stroker</a> stroker,
+ <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>* outline );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Call this function after <a href="ft2-glyph_stroker.html#FT_Stroker_GetBorderCounts">FT_Stroker_GetBorderCounts</a> to export the all borders to your own <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a> structure.</p>
+<p>Note that this function will append the border points and contours to your outline, but will not try to resize its arrays.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>stroker</b></td><td>
+<p>The target stroker handle.</p>
+</td></tr>
+<tr valign=top><td><b>outline</b></td><td>
+<p>The target outline handle.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Stroker_Done">FT_Stroker_Done</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_STROKER_H (freetype/ftstroke.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <span class="keyword">void</span> )
+ <b>FT_Stroker_Done</b>( <a href="ft2-glyph_stroker.html#FT_Stroker">FT_Stroker</a> stroker );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Destroy a stroker object.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>stroker</b></td><td>
+<p>A stroker handle. Can be NULL.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Glyph_Stroke">FT_Glyph_Stroke</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_STROKER_H (freetype/ftstroke.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Glyph_Stroke</b>( <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> *pglyph,
+ <a href="ft2-glyph_stroker.html#FT_Stroker">FT_Stroker</a> stroker,
+ <a href="ft2-basic_types.html#FT_Bool">FT_Bool</a> destroy );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Stroke a given outline glyph object with a given stroker.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>pglyph</b></td><td>
+<p>Source glyph handle on input, new glyph handle on output.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>stroker</b></td><td>
+<p>A stroker handle.</p>
+</td></tr>
+<tr valign=top><td><b>destroy</b></td><td>
+<p>A Boolean. If 1, the source glyph object is destroyed on success.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The source glyph is untouched in case of error.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Glyph_StrokeBorder">FT_Glyph_StrokeBorder</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_STROKER_H (freetype/ftstroke.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Glyph_StrokeBorder</b>( <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> *pglyph,
+ <a href="ft2-glyph_stroker.html#FT_Stroker">FT_Stroker</a> stroker,
+ <a href="ft2-basic_types.html#FT_Bool">FT_Bool</a> inside,
+ <a href="ft2-basic_types.html#FT_Bool">FT_Bool</a> destroy );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Stroke a given outline glyph object with a given stroker, but only return either its inside or outside border.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>pglyph</b></td><td>
+<p>Source glyph handle on input, new glyph handle on output.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>stroker</b></td><td>
+<p>A stroker handle.</p>
+</td></tr>
+<tr valign=top><td><b>inside</b></td><td>
+<p>A Boolean. If 1, return the inside border, otherwise the outside border.</p>
+</td></tr>
+<tr valign=top><td><b>destroy</b></td><td>
+<p>A Boolean. If 1, the source glyph object is destroyed on success.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The source glyph is untouched in case of error.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+</body>
+</html>
diff --git a/src/3rdparty/freetype/docs/reference/ft2-glyph_variants.html b/src/3rdparty/freetype/docs/reference/ft2-glyph_variants.html
new file mode 100644
index 0000000..e51ea1f
--- /dev/null
+++ b/src/3rdparty/freetype/docs/reference/ft2-glyph_variants.html
@@ -0,0 +1,263 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>FreeType-2.3.6 API Reference</title>
+<style type="text/css">
+ body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
+ color: #000000;
+ background: #FFFFFF; }
+
+ p { text-align: justify; }
+ h1 { text-align: center; }
+ li { text-align: justify; }
+ td { padding: 0 0.5em 0 0.5em; }
+ td.left { padding: 0 0.5em 0 0.5em;
+ text-align: left; }
+
+ a:link { color: #0000EF; }
+ a:visited { color: #51188E; }
+ a:hover { color: #FF0000; }
+
+ span.keyword { font-family: monospace;
+ text-align: left;
+ white-space: pre;
+ color: darkblue; }
+
+ pre.colored { color: blue; }
+
+ ul.empty { list-style-type: none; }
+</style>
+</head>
+<body>
+<center><h1>FreeType-2.3.6 API Reference</h1></center>
+
+<center><h1>
+Glyph Variants
+</h1></center>
+<h2>Synopsis</h2>
+<table align=center cellspacing=5 cellpadding=0 border=0>
+<tr><td></td><td><a href="#FT_Face_GetCharVariantIndex">FT_Face_GetCharVariantIndex</a></td><td></td><td><a href="#FT_Face_GetVariantsOfChar">FT_Face_GetVariantsOfChar</a></td></tr>
+<tr><td></td><td><a href="#FT_Face_GetCharVariantIsDefault">FT_Face_GetCharVariantIsDefault</a></td><td></td><td><a href="#FT_Face_GetCharsOfVariant">FT_Face_GetCharsOfVariant</a></td></tr>
+<tr><td></td><td><a href="#FT_Face_GetVariantSelectors">FT_Face_GetVariantSelectors</a></td><td></td><td></td></tr>
+</table><br><br>
+
+<table align=center width="87%"><tr><td>
+<p>Many CJK characters have variant forms. They are a sort of grey area somewhere between being totally irrelevant and semantically distinct; for this reason, the Unicode consortium decided to introduce Ideographic Variation Sequences (IVS), consisting of a Unicode base character and one of 240 variant selectors (U+E0100-U+E01EF), instead of further extending the already huge code range for CJK characters.</p>
+<p>An IVS is registered and unique; for further details please refer to Unicode Technical Report #37, the Ideographic Variation Database. To date (October 2007), the character with the most variants is U+908A, having 8 such IVS.</p>
+<p>Adobe and MS decided to support IVS with a new cmap subtable (format 14). It is an odd subtable because it is not a mapping of input code points to glyphs, but contains lists of all variants supported by the font.</p>
+<p>A variant may be either &lsquo;default&rsquo; or &lsquo;non-default&rsquo;. A default variant is the one you will get for that code point if you look it up in the standard Unicode cmap. A non-default variant is a different glyph.</p>
+</td></tr></table><br>
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Face_GetCharVariantIndex">FT_Face_GetCharVariantIndex</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> )
+ <b>FT_Face_GetCharVariantIndex</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> charcode,
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> variantSelector );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Return the glyph index of a given character code as modified by the variation selector.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to the source face object.</p>
+</td></tr>
+<tr valign=top><td><b>charcode</b></td><td>
+<p>The character code point in Unicode.</p>
+</td></tr>
+<tr valign=top><td><b>variantSelector</b></td><td>
+<p>The Unicode code point of the variation selector.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>The glyph index. 0 means either &lsquo;undefined character code&rsquo;, or &lsquo;undefined selector code&rsquo;, or &lsquo;no variation selector cmap subtable&rsquo;, or &lsquo;current CharMap is not Unicode&rsquo;.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>If you use FreeType to manipulate the contents of font files directly, be aware that the glyph index returned by this function doesn't always correspond to the internal indices used within the file. This is done to ensure that value 0 always corresponds to the &lsquo;missing glyph&rsquo;.</p>
+<p>This function is only meaningful if a) the font has a variation selector cmap sub table, and b) the current charmap has a Unicode encoding.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>since</b></em></td></tr><tr><td>
+<p>2.3.6</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Face_GetCharVariantIsDefault">FT_Face_GetCharVariantIsDefault</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Int">FT_Int</a> )
+ <b>FT_Face_GetCharVariantIsDefault</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> charcode,
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> variantSelector );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Check whether this variant of this Unicode character is the one to be found in the &lsquo;cmap&rsquo;.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to the source face object.</p>
+</td></tr>
+<tr valign=top><td><b>charcode</b></td><td>
+<p>The character codepoint in Unicode.</p>
+</td></tr>
+<tr valign=top><td><b>variantSelector</b></td><td>
+<p>The Unicode codepoint of the variation selector.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>1 if found in the standard (Unicode) cmap, 0 if found in the variation selector cmap, or -1 if it is not a variant.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>This function is only meaningful if the font has a variation selector cmap subtable.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>since</b></em></td></tr><tr><td>
+<p>2.3.6</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Face_GetVariantSelectors">FT_Face_GetVariantSelectors</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_UInt32">FT_UInt32</a>* )
+ <b>FT_Face_GetVariantSelectors</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Return a zero-terminated list of Unicode variant selectors found in the font.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to the source face object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>A pointer to an array of selector code points, or NULL if there is no valid variant selector cmap subtable.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The last item in the array is 0; the array is owned by the <a href="ft2-base_interface.html#FT_Face">FT_Face</a> object but can be overwritten or released on the next call to a FreeType function.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>since</b></em></td></tr><tr><td>
+<p>2.3.6</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Face_GetVariantsOfChar">FT_Face_GetVariantsOfChar</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_UInt32">FT_UInt32</a>* )
+ <b>FT_Face_GetVariantsOfChar</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> charcode );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Return a zero-terminated list of Unicode variant selectors found for the specified character code.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to the source face object.</p>
+</td></tr>
+<tr valign=top><td><b>charcode</b></td><td>
+<p>The character codepoint in Unicode.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>A pointer to an array of variant selector code points which are active for the given character, or NULL if the corresponding list is empty.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The last item in the array is 0; the array is owned by the <a href="ft2-base_interface.html#FT_Face">FT_Face</a> object but can be overwritten or released on the next call to a FreeType function.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>since</b></em></td></tr><tr><td>
+<p>2.3.6</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Face_GetCharsOfVariant">FT_Face_GetCharsOfVariant</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_UInt32">FT_UInt32</a>* )
+ <b>FT_Face_GetCharsOfVariant</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> variantSelector );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Return a zero-terminated list of Unicode character codes found for the specified variant selector.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to the source face object.</p>
+</td></tr>
+<tr valign=top><td><b>variantSelector</b></td><td>
+<p>The variant selector code point in Unicode.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>A list of all the code points which are specified by this selector (both default and non-default codes are returned) or NULL if there is no valid cmap or the variant selector is invalid.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The last item in the array is 0; the array is owned by the <a href="ft2-base_interface.html#FT_Face">FT_Face</a> object but can be overwritten or released on the next call to a FreeType function.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>since</b></em></td></tr><tr><td>
+<p>2.3.6</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+</body>
+</html>
diff --git a/src/3rdparty/freetype/docs/reference/ft2-gx_validation.html b/src/3rdparty/freetype/docs/reference/ft2-gx_validation.html
new file mode 100644
index 0000000..611e0e6
--- /dev/null
+++ b/src/3rdparty/freetype/docs/reference/ft2-gx_validation.html
@@ -0,0 +1,352 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>FreeType-2.3.6 API Reference</title>
+<style type="text/css">
+ body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
+ color: #000000;
+ background: #FFFFFF; }
+
+ p { text-align: justify; }
+ h1 { text-align: center; }
+ li { text-align: justify; }
+ td { padding: 0 0.5em 0 0.5em; }
+ td.left { padding: 0 0.5em 0 0.5em;
+ text-align: left; }
+
+ a:link { color: #0000EF; }
+ a:visited { color: #51188E; }
+ a:hover { color: #FF0000; }
+
+ span.keyword { font-family: monospace;
+ text-align: left;
+ white-space: pre;
+ color: darkblue; }
+
+ pre.colored { color: blue; }
+
+ ul.empty { list-style-type: none; }
+</style>
+</head>
+<body>
+<center><h1>FreeType-2.3.6 API Reference</h1></center>
+
+<center><h1>
+TrueTypeGX/AAT Validation
+</h1></center>
+<h2>Synopsis</h2>
+<table align=center cellspacing=5 cellpadding=0 border=0>
+<tr><td></td><td><a href="#FT_VALIDATE_GX_LENGTH">FT_VALIDATE_GX_LENGTH</a></td><td></td><td><a href="#FT_TrueTypeGX_Free">FT_TrueTypeGX_Free</a></td><td></td><td><a href="#FT_ClassicKern_Free">FT_ClassicKern_Free</a></td></tr>
+<tr><td></td><td><a href="#FT_VALIDATE_GXXXX">FT_VALIDATE_GXXXX</a></td><td></td><td><a href="#FT_VALIDATE_CKERNXXX">FT_VALIDATE_CKERNXXX</a></td><td></td><td></td></tr>
+<tr><td></td><td><a href="#FT_TrueTypeGX_Validate">FT_TrueTypeGX_Validate</a></td><td></td><td><a href="#FT_ClassicKern_Validate">FT_ClassicKern_Validate</a></td><td></td><td></td></tr>
+</table><br><br>
+
+<table align=center width="87%"><tr><td>
+<p>This section contains the declaration of functions to validate some TrueTypeGX tables (feat, mort, morx, bsln, just, kern, opbd, trak, prop, lcar).</p>
+</td></tr></table><br>
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_VALIDATE_GX_LENGTH">FT_VALIDATE_GX_LENGTH</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_VALIDATE_GX_LENGTH</b> (FT_VALIDATE_GX_LAST_INDEX + 1)
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>The number of tables checked in this module. Use it as a parameter for the &lsquo;table-length&rsquo; argument of function <a href="ft2-gx_validation.html#FT_TrueTypeGX_Validate">FT_TrueTypeGX_Validate</a>.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_VALIDATE_GXXXX">FT_VALIDATE_GXXXX</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_feat</a> FT_VALIDATE_GX_BITFIELD( feat )
+#define <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_mort</a> FT_VALIDATE_GX_BITFIELD( mort )
+#define <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_morx</a> FT_VALIDATE_GX_BITFIELD( morx )
+#define <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_bsln</a> FT_VALIDATE_GX_BITFIELD( bsln )
+#define <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_just</a> FT_VALIDATE_GX_BITFIELD( just )
+#define <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_kern</a> FT_VALIDATE_GX_BITFIELD( kern )
+#define <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_opbd</a> FT_VALIDATE_GX_BITFIELD( opbd )
+#define <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_trak</a> FT_VALIDATE_GX_BITFIELD( trak )
+#define <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_prop</a> FT_VALIDATE_GX_BITFIELD( prop )
+#define <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_lcar</a> FT_VALIDATE_GX_BITFIELD( lcar )
+
+#define <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_GX</a> ( <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_feat</a> | \
+ <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_mort</a> | \
+ <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_morx</a> | \
+ <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_bsln</a> | \
+ <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_just</a> | \
+ <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_kern</a> | \
+ <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_opbd</a> | \
+ <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_trak</a> | \
+ <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_prop</a> | \
+ <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_lcar</a> )
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A list of bit-field constants used with <a href="ft2-gx_validation.html#FT_TrueTypeGX_Validate">FT_TrueTypeGX_Validate</a> to indicate which TrueTypeGX/AAT Type tables should be validated.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>FT_VALIDATE_feat</b></td><td>
+<p>Validate &lsquo;feat&rsquo; table.</p>
+</td></tr>
+<tr valign=top><td><b>FT_VALIDATE_mort</b></td><td>
+<p>Validate &lsquo;mort&rsquo; table.</p>
+</td></tr>
+<tr valign=top><td><b>FT_VALIDATE_morx</b></td><td>
+<p>Validate &lsquo;morx&rsquo; table.</p>
+</td></tr>
+<tr valign=top><td><b>FT_VALIDATE_bsln</b></td><td>
+<p>Validate &lsquo;bsln&rsquo; table.</p>
+</td></tr>
+<tr valign=top><td><b>FT_VALIDATE_just</b></td><td>
+<p>Validate &lsquo;just&rsquo; table.</p>
+</td></tr>
+<tr valign=top><td><b>FT_VALIDATE_kern</b></td><td>
+<p>Validate &lsquo;kern&rsquo; table.</p>
+</td></tr>
+<tr valign=top><td><b>FT_VALIDATE_opbd</b></td><td>
+<p>Validate &lsquo;opbd&rsquo; table.</p>
+</td></tr>
+<tr valign=top><td><b>FT_VALIDATE_trak</b></td><td>
+<p>Validate &lsquo;trak&rsquo; table.</p>
+</td></tr>
+<tr valign=top><td><b>FT_VALIDATE_prop</b></td><td>
+<p>Validate &lsquo;prop&rsquo; table.</p>
+</td></tr>
+<tr valign=top><td><b>FT_VALIDATE_lcar</b></td><td>
+<p>Validate &lsquo;lcar&rsquo; table.</p>
+</td></tr>
+<tr valign=top><td><b>FT_VALIDATE_GX</b></td><td>
+<p>Validate all TrueTypeGX tables (feat, mort, morx, bsln, just, kern, opbd, trak, prop and lcar).</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_TrueTypeGX_Validate">FT_TrueTypeGX_Validate</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_TrueTypeGX_Validate</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> validation_flags,
+ <a href="ft2-basic_types.html#FT_Bytes">FT_Bytes</a> tables[<a href="ft2-gx_validation.html#FT_VALIDATE_GX_LENGTH">FT_VALIDATE_GX_LENGTH</a>],
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> table_length );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Validate various TrueTypeGX tables to assure that all offsets and indices are valid. The idea is that a higher-level library which actually does the text layout can access those tables without error checking (which can be quite time consuming).</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to the input face.</p>
+</td></tr>
+<tr valign=top><td><b>validation_flags</b></td><td>
+<p>A bit field which specifies the tables to be validated. See <a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_GXXXX</a> for possible values.</p>
+</td></tr>
+<tr valign=top><td><b>table_length</b></td><td>
+<p>The size of the &lsquo;tables&rsquo; array. Normally, <a href="ft2-gx_validation.html#FT_VALIDATE_GX_LENGTH">FT_VALIDATE_GX_LENGTH</a> should be passed.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>tables</b></td><td>
+<p>The array where all validated sfnt tables are stored. The array itself must be allocated by a client.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>This function only works with TrueTypeGX fonts, returning an error otherwise.</p>
+<p>After use, the application should deallocate the buffers pointed to by each &lsquo;tables&rsquo; element, by calling <a href="ft2-gx_validation.html#FT_TrueTypeGX_Free">FT_TrueTypeGX_Free</a>. A NULL value indicates that the table either doesn't exist in the font, the application hasn't asked for validation, or the validator doesn't have the ability to validate the sfnt table.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_TrueTypeGX_Free">FT_TrueTypeGX_Free</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <span class="keyword">void</span> )
+ <b>FT_TrueTypeGX_Free</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#FT_Bytes">FT_Bytes</a> table );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Free the buffer allocated by TrueTypeGX validator.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to the input face.</p>
+</td></tr>
+<tr valign=top><td><b>table</b></td><td>
+<p>The pointer to the buffer allocated by <a href="ft2-gx_validation.html#FT_TrueTypeGX_Validate">FT_TrueTypeGX_Validate</a>.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>This function must be used to free the buffer allocated by <a href="ft2-gx_validation.html#FT_TrueTypeGX_Validate">FT_TrueTypeGX_Validate</a> only.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_VALIDATE_CKERNXXX">FT_VALIDATE_CKERNXXX</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <a href="ft2-gx_validation.html#FT_VALIDATE_CKERNXXX">FT_VALIDATE_MS</a> ( FT_VALIDATE_GX_START &lt;&lt; 0 )
+#define <a href="ft2-gx_validation.html#FT_VALIDATE_CKERNXXX">FT_VALIDATE_APPLE</a> ( FT_VALIDATE_GX_START &lt;&lt; 1 )
+
+#define <a href="ft2-gx_validation.html#FT_VALIDATE_CKERNXXX">FT_VALIDATE_CKERN</a> ( <a href="ft2-gx_validation.html#FT_VALIDATE_CKERNXXX">FT_VALIDATE_MS</a> | <a href="ft2-gx_validation.html#FT_VALIDATE_CKERNXXX">FT_VALIDATE_APPLE</a> )
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A list of bit-field constants used with <a href="ft2-gx_validation.html#FT_ClassicKern_Validate">FT_ClassicKern_Validate</a> to indicate the classic kern dialect or dialects. If the selected type doesn't fit, <a href="ft2-gx_validation.html#FT_ClassicKern_Validate">FT_ClassicKern_Validate</a> regards the table as invalid.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>FT_VALIDATE_MS</b></td><td>
+<p>Handle the &lsquo;kern&rsquo; table as a classic Microsoft kern table.</p>
+</td></tr>
+<tr valign=top><td><b>FT_VALIDATE_APPLE</b></td><td>
+<p>Handle the &lsquo;kern&rsquo; table as a classic Apple kern table.</p>
+</td></tr>
+<tr valign=top><td><b>FT_VALIDATE_CKERN</b></td><td>
+<p>Handle the &lsquo;kern&rsquo; as either classic Apple or Microsoft kern table.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_ClassicKern_Validate">FT_ClassicKern_Validate</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_ClassicKern_Validate</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> validation_flags,
+ <a href="ft2-basic_types.html#FT_Bytes">FT_Bytes</a> *ckern_table );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Validate classic (16bit format) kern table to assure that the offsets and indices are valid. The idea is that a higher-level library which actually does the text layout can access those tables without error checking (which can be quite time consuming).</p>
+<p>The &lsquo;kern&rsquo; table validator in <a href="ft2-gx_validation.html#FT_TrueTypeGX_Validate">FT_TrueTypeGX_Validate</a> deals with both the new 32bit format and the classic 16bit format, while FT_ClassicKern_Validate only supports the classic 16bit format.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to the input face.</p>
+</td></tr>
+<tr valign=top><td><b>validation_flags</b></td><td>
+<p>A bit field which specifies the dialect to be validated. See <a href="ft2-gx_validation.html#FT_VALIDATE_CKERNXXX">FT_VALIDATE_CKERNXXX</a> for possible values.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>ckern_table</b></td><td>
+<p>A pointer to the kern table.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>After use, the application should deallocate the buffers pointed to by &lsquo;ckern_table&rsquo;, by calling <a href="ft2-gx_validation.html#FT_ClassicKern_Free">FT_ClassicKern_Free</a>. A NULL value indicates that the table doesn't exist in the font.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_ClassicKern_Free">FT_ClassicKern_Free</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_GX_VALIDATE_H (freetype/ftgxval.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <span class="keyword">void</span> )
+ <b>FT_ClassicKern_Free</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#FT_Bytes">FT_Bytes</a> table );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Free the buffer allocated by classic Kern validator.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to the input face.</p>
+</td></tr>
+<tr valign=top><td><b>table</b></td><td>
+<p>The pointer to the buffer that is allocated by <a href="ft2-gx_validation.html#FT_ClassicKern_Validate">FT_ClassicKern_Validate</a>.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>This function must be used to free the buffer allocated by <a href="ft2-gx_validation.html#FT_ClassicKern_Validate">FT_ClassicKern_Validate</a> only.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+</body>
+</html>
diff --git a/src/3rdparty/freetype/docs/reference/ft2-gzip.html b/src/3rdparty/freetype/docs/reference/ft2-gzip.html
new file mode 100644
index 0000000..e1dbf27
--- /dev/null
+++ b/src/3rdparty/freetype/docs/reference/ft2-gzip.html
@@ -0,0 +1,90 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>FreeType-2.3.6 API Reference</title>
+<style type="text/css">
+ body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
+ color: #000000;
+ background: #FFFFFF; }
+
+ p { text-align: justify; }
+ h1 { text-align: center; }
+ li { text-align: justify; }
+ td { padding: 0 0.5em 0 0.5em; }
+ td.left { padding: 0 0.5em 0 0.5em;
+ text-align: left; }
+
+ a:link { color: #0000EF; }
+ a:visited { color: #51188E; }
+ a:hover { color: #FF0000; }
+
+ span.keyword { font-family: monospace;
+ text-align: left;
+ white-space: pre;
+ color: darkblue; }
+
+ pre.colored { color: blue; }
+
+ ul.empty { list-style-type: none; }
+</style>
+</head>
+<body>
+<center><h1>FreeType-2.3.6 API Reference</h1></center>
+
+<center><h1>
+GZIP Streams
+</h1></center>
+<h2>Synopsis</h2>
+<table align=center cellspacing=5 cellpadding=0 border=0>
+<tr><td></td><td><a href="#FT_Stream_OpenGzip">FT_Stream_OpenGzip</a></td><td></td><td></td><td></td><td></td></tr>
+</table><br><br>
+
+<table align=center width="87%"><tr><td>
+<p>This section contains the declaration of Gzip-specific functions.</p>
+</td></tr></table><br>
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Stream_OpenGzip">FT_Stream_OpenGzip</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_GZIP_H (freetype/ftgzip.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Stream_OpenGzip</b>( <a href="ft2-system_interface.html#FT_Stream">FT_Stream</a> stream,
+ <a href="ft2-system_interface.html#FT_Stream">FT_Stream</a> source );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Open a new stream to parse gzip-compressed font files. This is mainly used to support the compressed &lsquo;*.pcf.gz&rsquo; fonts that come with XFree86.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>stream</b></td><td>
+<p>The target embedding stream.</p>
+</td></tr>
+<tr valign=top><td><b>source</b></td><td>
+<p>The source stream.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The source stream must be opened <i>before</i> calling this function.</p>
+<p>Calling the internal function &lsquo;FT_Stream_Close&rsquo; on the new stream will <b>not</b> call &lsquo;FT_Stream_Close&rsquo; on the source stream. None of the stream objects will be released to the heap.</p>
+<p>The stream implementation is very basic and resets the decompression process each time seeking backwards is needed within the stream.</p>
+<p>In certain builds of the library, gzip compression recognition is automatically handled when calling <a href="ft2-base_interface.html#FT_New_Face">FT_New_Face</a> or <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a>. This means that if no font driver is capable of handling the raw compressed file, the library will try to open a gzipped stream from it and re-open the face with it.</p>
+<p>This function may return &lsquo;FT_Err_Unimplemented_Feature&rsquo; if your build of FreeType was not compiled with zlib support.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+</body>
+</html>
diff --git a/src/3rdparty/freetype/docs/reference/ft2-header_file_macros.html b/src/3rdparty/freetype/docs/reference/ft2-header_file_macros.html
new file mode 100644
index 0000000..33905e9
--- /dev/null
+++ b/src/3rdparty/freetype/docs/reference/ft2-header_file_macros.html
@@ -0,0 +1,816 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>FreeType-2.3.6 API Reference</title>
+<style type="text/css">
+ body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
+ color: #000000;
+ background: #FFFFFF; }
+
+ p { text-align: justify; }
+ h1 { text-align: center; }
+ li { text-align: justify; }
+ td { padding: 0 0.5em 0 0.5em; }
+ td.left { padding: 0 0.5em 0 0.5em;
+ text-align: left; }
+
+ a:link { color: #0000EF; }
+ a:visited { color: #51188E; }
+ a:hover { color: #FF0000; }
+
+ span.keyword { font-family: monospace;
+ text-align: left;
+ white-space: pre;
+ color: darkblue; }
+
+ pre.colored { color: blue; }
+
+ ul.empty { list-style-type: none; }
+</style>
+</head>
+<body>
+<center><h1>FreeType-2.3.6 API Reference</h1></center>
+
+<center><h1>
+Header File Macros
+</h1></center>
+<h2>Synopsis</h2>
+<table align=center cellspacing=5 cellpadding=0 border=0>
+<tr><td></td><td><a href="#FT_CONFIG_CONFIG_H">FT_CONFIG_CONFIG_H</a></td><td></td><td><a href="#FT_WINFONTS_H">FT_WINFONTS_H</a></td></tr>
+<tr><td></td><td><a href="#FT_CONFIG_STANDARD_LIBRARY_H">FT_CONFIG_STANDARD_LIBRARY_H</a></td><td></td><td><a href="#FT_GLYPH_H">FT_GLYPH_H</a></td></tr>
+<tr><td></td><td><a href="#FT_CONFIG_OPTIONS_H">FT_CONFIG_OPTIONS_H</a></td><td></td><td><a href="#FT_BITMAP_H">FT_BITMAP_H</a></td></tr>
+<tr><td></td><td><a href="#FT_CONFIG_MODULES_H">FT_CONFIG_MODULES_H</a></td><td></td><td><a href="#FT_BBOX_H">FT_BBOX_H</a></td></tr>
+<tr><td></td><td><a href="#FT_FREETYPE_H">FT_FREETYPE_H</a></td><td></td><td><a href="#FT_CACHE_H">FT_CACHE_H</a></td></tr>
+<tr><td></td><td><a href="#FT_ERRORS_H">FT_ERRORS_H</a></td><td></td><td><a href="#FT_CACHE_IMAGE_H">FT_CACHE_IMAGE_H</a></td></tr>
+<tr><td></td><td><a href="#FT_MODULE_ERRORS_H">FT_MODULE_ERRORS_H</a></td><td></td><td><a href="#FT_CACHE_SMALL_BITMAPS_H">FT_CACHE_SMALL_BITMAPS_H</a></td></tr>
+<tr><td></td><td><a href="#FT_SYSTEM_H">FT_SYSTEM_H</a></td><td></td><td><a href="#FT_CACHE_CHARMAP_H">FT_CACHE_CHARMAP_H</a></td></tr>
+<tr><td></td><td><a href="#FT_IMAGE_H">FT_IMAGE_H</a></td><td></td><td><a href="#FT_MAC_H">FT_MAC_H</a></td></tr>
+<tr><td></td><td><a href="#FT_TYPES_H">FT_TYPES_H</a></td><td></td><td><a href="#FT_MULTIPLE_MASTERS_H">FT_MULTIPLE_MASTERS_H</a></td></tr>
+<tr><td></td><td><a href="#FT_LIST_H">FT_LIST_H</a></td><td></td><td><a href="#FT_SFNT_NAMES_H">FT_SFNT_NAMES_H</a></td></tr>
+<tr><td></td><td><a href="#FT_OUTLINE_H">FT_OUTLINE_H</a></td><td></td><td><a href="#FT_OPENTYPE_VALIDATE_H">FT_OPENTYPE_VALIDATE_H</a></td></tr>
+<tr><td></td><td><a href="#FT_SIZES_H">FT_SIZES_H</a></td><td></td><td><a href="#FT_GX_VALIDATE_H">FT_GX_VALIDATE_H</a></td></tr>
+<tr><td></td><td><a href="#FT_MODULE_H">FT_MODULE_H</a></td><td></td><td><a href="#FT_PFR_H">FT_PFR_H</a></td></tr>
+<tr><td></td><td><a href="#FT_RENDER_H">FT_RENDER_H</a></td><td></td><td><a href="#FT_STROKER_H">FT_STROKER_H</a></td></tr>
+<tr><td></td><td><a href="#FT_TYPE1_TABLES_H">FT_TYPE1_TABLES_H</a></td><td></td><td><a href="#FT_SYNTHESIS_H">FT_SYNTHESIS_H</a></td></tr>
+<tr><td></td><td><a href="#FT_TRUETYPE_IDS_H">FT_TRUETYPE_IDS_H</a></td><td></td><td><a href="#FT_XFREE86_H">FT_XFREE86_H</a></td></tr>
+<tr><td></td><td><a href="#FT_TRUETYPE_TABLES_H">FT_TRUETYPE_TABLES_H</a></td><td></td><td><a href="#FT_TRIGONOMETRY_H">FT_TRIGONOMETRY_H</a></td></tr>
+<tr><td></td><td><a href="#FT_TRUETYPE_TAGS_H">FT_TRUETYPE_TAGS_H</a></td><td></td><td><a href="#FT_LCD_FILTER_H">FT_LCD_FILTER_H</a></td></tr>
+<tr><td></td><td><a href="#FT_BDF_H">FT_BDF_H</a></td><td></td><td><a href="#FT_UNPATENTED_HINTING_H">FT_UNPATENTED_HINTING_H</a></td></tr>
+<tr><td></td><td><a href="#FT_CID_H">FT_CID_H</a></td><td></td><td><a href="#FT_INCREMENTAL_H">FT_INCREMENTAL_H</a></td></tr>
+<tr><td></td><td><a href="#FT_GZIP_H">FT_GZIP_H</a></td><td></td><td><a href="#FT_GASP_H">FT_GASP_H</a></td></tr>
+<tr><td></td><td><a href="#FT_LZW_H">FT_LZW_H</a></td><td></td><td></td></tr>
+</table><br><br>
+
+<table align=center width="87%"><tr><td>
+<p>The following macros are defined to the name of specific FreeType 2 header files. They can be used directly in #include statements as in:</p>
+<pre class="colored">
+ #include FT_FREETYPE_H
+ #include FT_MULTIPLE_MASTERS_H
+ #include FT_GLYPH_H
+</pre>
+<p>There are several reasons why we are now using macros to name public header files. The first one is that such macros are not limited to the infamous 8.3 naming rule required by DOS (and &lsquo;FT_MULTIPLE_MASTERS_H&rsquo; is a lot more meaningful than &lsquo;ftmm.h&rsquo;).</p>
+<p>The second reason is that it allows for more flexibility in the way FreeType 2 is installed on a given system.</p>
+</td></tr></table><br>
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_CONFIG_CONFIG_H">FT_CONFIG_CONFIG_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#ifndef <b>FT_CONFIG_CONFIG_H</b>
+#define <b>FT_CONFIG_CONFIG_H</b> &lt;freetype/config/ftconfig.h&gt;
+#endif
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing FreeType 2 configuration data.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_CONFIG_STANDARD_LIBRARY_H">FT_CONFIG_STANDARD_LIBRARY_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#ifndef <b>FT_CONFIG_STANDARD_LIBRARY_H</b>
+#define <b>FT_CONFIG_STANDARD_LIBRARY_H</b> &lt;freetype/config/ftstdlib.h&gt;
+#endif
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing FreeType 2 interface to the standard C library functions.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_CONFIG_OPTIONS_H">FT_CONFIG_OPTIONS_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#ifndef <b>FT_CONFIG_OPTIONS_H</b>
+#define <b>FT_CONFIG_OPTIONS_H</b> &lt;freetype/config/ftoption.h&gt;
+#endif
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing FreeType 2 project-specific configuration options.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_CONFIG_MODULES_H">FT_CONFIG_MODULES_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#ifndef <b>FT_CONFIG_MODULES_H</b>
+#define <b>FT_CONFIG_MODULES_H</b> &lt;freetype/config/ftmodule.h&gt;
+#endif
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing the list of FreeType 2 modules that are statically linked to new library instances in <a href="ft2-base_interface.html#FT_Init_FreeType">FT_Init_FreeType</a>.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_FREETYPE_H">FT_FREETYPE_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_FREETYPE_H</b> &lt;freetype/freetype.h&gt;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing the base FreeType 2 API.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_ERRORS_H">FT_ERRORS_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_ERRORS_H</b> &lt;freetype/fterrors.h&gt;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing the list of FreeType 2 error codes (and messages).</p>
+<p>It is included by <a href="ft2-header_file_macros.html#FT_FREETYPE_H">FT_FREETYPE_H</a>.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_MODULE_ERRORS_H">FT_MODULE_ERRORS_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_MODULE_ERRORS_H</b> &lt;freetype/ftmoderr.h&gt;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing the list of FreeType 2 module error offsets (and messages).</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_SYSTEM_H">FT_SYSTEM_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_SYSTEM_H</b> &lt;freetype/ftsystem.h&gt;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing the FreeType 2 interface to low-level operations (i.e., memory management and stream i/o).</p>
+<p>It is included by <a href="ft2-header_file_macros.html#FT_FREETYPE_H">FT_FREETYPE_H</a>.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_IMAGE_H">FT_IMAGE_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_IMAGE_H</b> &lt;freetype/ftimage.h&gt;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing type definitions related to glyph images (i.e., bitmaps, outlines, scan-converter parameters).</p>
+<p>It is included by <a href="ft2-header_file_macros.html#FT_FREETYPE_H">FT_FREETYPE_H</a>.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_TYPES_H">FT_TYPES_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_TYPES_H</b> &lt;freetype/fttypes.h&gt;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing the basic data types defined by FreeType 2.</p>
+<p>It is included by <a href="ft2-header_file_macros.html#FT_FREETYPE_H">FT_FREETYPE_H</a>.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_LIST_H">FT_LIST_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_LIST_H</b> &lt;freetype/ftlist.h&gt;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing the list management API of FreeType 2.</p>
+<p>(Most applications will never need to include this file.)</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_OUTLINE_H">FT_OUTLINE_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_OUTLINE_H</b> &lt;freetype/ftoutln.h&gt;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing the scalable outline management API of FreeType 2.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_SIZES_H">FT_SIZES_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_SIZES_H</b> &lt;freetype/ftsizes.h&gt;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing the API which manages multiple <a href="ft2-base_interface.html#FT_Size">FT_Size</a> objects per face.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_MODULE_H">FT_MODULE_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_MODULE_H</b> &lt;freetype/ftmodapi.h&gt;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing the module management API of FreeType 2.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_RENDER_H">FT_RENDER_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_RENDER_H</b> &lt;freetype/ftrender.h&gt;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing the renderer module management API of FreeType 2.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_TYPE1_TABLES_H">FT_TYPE1_TABLES_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_TYPE1_TABLES_H</b> &lt;freetype/t1tables.h&gt;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing the types and API specific to the Type 1 format.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_TRUETYPE_IDS_H">FT_TRUETYPE_IDS_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_TRUETYPE_IDS_H</b> &lt;freetype/ttnameid.h&gt;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing the enumeration values which identify name strings, languages, encodings, etc. This file really contains a <i>large</i> set of constant macro definitions, taken from the TrueType and OpenType specifications.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_TRUETYPE_TABLES_H">FT_TRUETYPE_TABLES_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_TRUETYPE_TABLES_H</b> &lt;freetype/tttables.h&gt;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing the types and API specific to the TrueType (as well as OpenType) format.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_TRUETYPE_TAGS_H">FT_TRUETYPE_TAGS_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_TRUETYPE_TAGS_H</b> &lt;freetype/tttags.h&gt;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing the definitions of TrueType four-byte &lsquo;tags&rsquo; which identify blocks in SFNT-based font formats (i.e., TrueType and OpenType).</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_BDF_H">FT_BDF_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_BDF_H</b> &lt;freetype/ftbdf.h&gt;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing the definitions of an API which accesses BDF-specific strings from a face.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_CID_H">FT_CID_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_CID_H</b> &lt;freetype/ftcid.h&gt;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing the definitions of an API which access CID font information from a face.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_GZIP_H">FT_GZIP_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_GZIP_H</b> &lt;freetype/ftgzip.h&gt;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing the definitions of an API which supports gzip-compressed files.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_LZW_H">FT_LZW_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_LZW_H</b> &lt;freetype/ftlzw.h&gt;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing the definitions of an API which supports LZW-compressed files.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_WINFONTS_H">FT_WINFONTS_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_WINFONTS_H</b> &lt;freetype/ftwinfnt.h&gt;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing the definitions of an API which supports Windows FNT files.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_GLYPH_H">FT_GLYPH_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_GLYPH_H</b> &lt;freetype/ftglyph.h&gt;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing the API of the optional glyph management component.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_BITMAP_H">FT_BITMAP_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_BITMAP_H</b> &lt;freetype/ftbitmap.h&gt;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing the API of the optional bitmap conversion component.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_BBOX_H">FT_BBOX_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_BBOX_H</b> &lt;freetype/ftbbox.h&gt;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing the API of the optional exact bounding box computation routines.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_CACHE_H">FT_CACHE_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_CACHE_H</b> &lt;freetype/ftcache.h&gt;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing the API of the optional FreeType 2 cache sub-system.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_CACHE_IMAGE_H">FT_CACHE_IMAGE_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_CACHE_IMAGE_H</b> <a href="ft2-header_file_macros.html#FT_CACHE_H">FT_CACHE_H</a>
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing the &lsquo;glyph image&rsquo; API of the FreeType 2 cache sub-system.</p>
+<p>It is used to define a cache for <a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a> elements. You can also use the API defined in <a href="ft2-header_file_macros.html#FT_CACHE_SMALL_BITMAPS_H">FT_CACHE_SMALL_BITMAPS_H</a> if you only need to store small glyph bitmaps, as it will use less memory.</p>
+<p>This macro is deprecated. Simply include <a href="ft2-header_file_macros.html#FT_CACHE_H">FT_CACHE_H</a> to have all glyph image-related cache declarations.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_CACHE_SMALL_BITMAPS_H">FT_CACHE_SMALL_BITMAPS_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_CACHE_SMALL_BITMAPS_H</b> <a href="ft2-header_file_macros.html#FT_CACHE_H">FT_CACHE_H</a>
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing the &lsquo;small bitmaps&rsquo; API of the FreeType 2 cache sub-system.</p>
+<p>It is used to define a cache for small glyph bitmaps in a relatively memory-efficient way. You can also use the API defined in <a href="ft2-header_file_macros.html#FT_CACHE_IMAGE_H">FT_CACHE_IMAGE_H</a> if you want to cache arbitrary glyph images, including scalable outlines.</p>
+<p>This macro is deprecated. Simply include <a href="ft2-header_file_macros.html#FT_CACHE_H">FT_CACHE_H</a> to have all small bitmaps-related cache declarations.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_CACHE_CHARMAP_H">FT_CACHE_CHARMAP_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_CACHE_CHARMAP_H</b> <a href="ft2-header_file_macros.html#FT_CACHE_H">FT_CACHE_H</a>
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing the &lsquo;charmap&rsquo; API of the FreeType 2 cache sub-system.</p>
+<p>This macro is deprecated. Simply include <a href="ft2-header_file_macros.html#FT_CACHE_H">FT_CACHE_H</a> to have all charmap-based cache declarations.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_MAC_H">FT_MAC_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_MAC_H</b> &lt;freetype/ftmac.h&gt;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing the Macintosh-specific FreeType 2 API. The latter is used to access fonts embedded in resource forks.</p>
+<p>This header file must be explicitly included by client applications compiled on the Mac (note that the base API still works though).</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_MULTIPLE_MASTERS_H">FT_MULTIPLE_MASTERS_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_MULTIPLE_MASTERS_H</b> &lt;freetype/ftmm.h&gt;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing the optional multiple-masters management API of FreeType 2.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_SFNT_NAMES_H">FT_SFNT_NAMES_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_SFNT_NAMES_H</b> &lt;freetype/ftsnames.h&gt;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing the optional FreeType 2 API which accesses embedded &lsquo;name&rsquo; strings in SFNT-based font formats (i.e., TrueType and OpenType).</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_OPENTYPE_VALIDATE_H">FT_OPENTYPE_VALIDATE_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_OPENTYPE_VALIDATE_H</b> &lt;freetype/ftotval.h&gt;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing the optional FreeType 2 API which validates OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF).</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_GX_VALIDATE_H">FT_GX_VALIDATE_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_GX_VALIDATE_H</b> &lt;freetype/ftgxval.h&gt;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing the optional FreeType 2 API which validates TrueTypeGX/AAT tables (feat, mort, morx, bsln, just, kern, opbd, trak, prop).</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_PFR_H">FT_PFR_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_PFR_H</b> &lt;freetype/ftpfr.h&gt;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing the FreeType 2 API which accesses PFR-specific data.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_STROKER_H">FT_STROKER_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_STROKER_H</b> &lt;freetype/ftstroke.h&gt;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing the FreeType 2 API which provides functions to stroke outline paths.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_SYNTHESIS_H">FT_SYNTHESIS_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_SYNTHESIS_H</b> &lt;freetype/ftsynth.h&gt;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing the FreeType 2 API which performs artificial obliquing and emboldening.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_XFREE86_H">FT_XFREE86_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_XFREE86_H</b> &lt;freetype/ftxf86.h&gt;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing the FreeType 2 API which provides functions specific to the XFree86 and X.Org X11 servers.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_TRIGONOMETRY_H">FT_TRIGONOMETRY_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_TRIGONOMETRY_H</b> &lt;freetype/fttrigon.h&gt;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing the FreeType 2 API which performs trigonometric computations (e.g., cosines and arc tangents).</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_LCD_FILTER_H">FT_LCD_FILTER_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_LCD_FILTER_H</b> &lt;freetype/ftlcdfil.h&gt;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing the FreeType 2 API which performs color filtering for subpixel rendering.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_UNPATENTED_HINTING_H">FT_UNPATENTED_HINTING_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_UNPATENTED_HINTING_H</b> &lt;freetype/ttunpat.h&gt;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing the FreeType 2 API which performs color filtering for subpixel rendering.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_INCREMENTAL_H">FT_INCREMENTAL_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_INCREMENTAL_H</b> &lt;freetype/ftincrem.h&gt;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing the FreeType 2 API which performs color filtering for subpixel rendering.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_GASP_H">FT_GASP_H</a></h4>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_GASP_H</b> &lt;freetype/ftgasp.h&gt;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A macro used in #include statements to name the file containing the FreeType 2 API which returns entries from the TrueType GASP table.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+</body>
+</html>
diff --git a/src/3rdparty/freetype/docs/reference/ft2-incremental.html b/src/3rdparty/freetype/docs/reference/ft2-incremental.html
new file mode 100644
index 0000000..e438eb1
--- /dev/null
+++ b/src/3rdparty/freetype/docs/reference/ft2-incremental.html
@@ -0,0 +1,393 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>FreeType-2.3.6 API Reference</title>
+<style type="text/css">
+ body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
+ color: #000000;
+ background: #FFFFFF; }
+
+ p { text-align: justify; }
+ h1 { text-align: center; }
+ li { text-align: justify; }
+ td { padding: 0 0.5em 0 0.5em; }
+ td.left { padding: 0 0.5em 0 0.5em;
+ text-align: left; }
+
+ a:link { color: #0000EF; }
+ a:visited { color: #51188E; }
+ a:hover { color: #FF0000; }
+
+ span.keyword { font-family: monospace;
+ text-align: left;
+ white-space: pre;
+ color: darkblue; }
+
+ pre.colored { color: blue; }
+
+ ul.empty { list-style-type: none; }
+</style>
+</head>
+<body>
+<center><h1>FreeType-2.3.6 API Reference</h1></center>
+
+<center><h1>
+Incremental Loading
+</h1></center>
+<h2>Synopsis</h2>
+<table align=center cellspacing=5 cellpadding=0 border=0>
+<tr><td></td><td><a href="#FT_Incremental">FT_Incremental</a></td><td></td><td><a href="#FT_Incremental_GetGlyphMetricsFunc">FT_Incremental_GetGlyphMetricsFunc</a></td></tr>
+<tr><td></td><td><a href="#FT_Incremental_MetricsRec">FT_Incremental_MetricsRec</a></td><td></td><td><a href="#FT_Incremental_FuncsRec">FT_Incremental_FuncsRec</a></td></tr>
+<tr><td></td><td><a href="#FT_Incremental_Metrics">FT_Incremental_Metrics</a></td><td></td><td><a href="#FT_Incremental_InterfaceRec">FT_Incremental_InterfaceRec</a></td></tr>
+<tr><td></td><td><a href="#FT_Incremental_GetGlyphDataFunc">FT_Incremental_GetGlyphDataFunc</a></td><td></td><td><a href="#FT_Incremental_Interface">FT_Incremental_Interface</a></td></tr>
+<tr><td></td><td><a href="#FT_Incremental_FreeGlyphDataFunc">FT_Incremental_FreeGlyphDataFunc</a></td><td></td><td><a href="#FT_PARAM_TAG_INCREMENTAL">FT_PARAM_TAG_INCREMENTAL</a></td></tr>
+</table><br><br>
+
+<table align=center width="87%"><tr><td>
+<p>This section contains various functions used to perform so-called &lsquo;incremental&rsquo; glyph loading. This is a mode where all glyphs loaded from a given <a href="ft2-base_interface.html#FT_Face">FT_Face</a> are provided by the client application,</p>
+<p>Apart from that, all other tables are loaded normally from the font file. This mode is useful when FreeType is used within another engine, e.g., a Postscript Imaging Processor.</p>
+<p>To enable this mode, you must use <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a>, passing an <a href="ft2-base_interface.html#FT_Parameter">FT_Parameter</a> with the <a href="ft2-incremental.html#FT_PARAM_TAG_INCREMENTAL">FT_PARAM_TAG_INCREMENTAL</a> tag and an <a href="ft2-incremental.html#FT_Incremental_Interface">FT_Incremental_Interface</a> value. See the comments for <a href="ft2-incremental.html#FT_Incremental_InterfaceRec">FT_Incremental_InterfaceRec</a> for an example.</p>
+</td></tr></table><br>
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Incremental">FT_Incremental</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_IncrementalRec_* <b>FT_Incremental</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>An opaque type describing a user-provided object used to implement &lsquo;incremental&rsquo; glyph loading within FreeType. This is used to support embedded fonts in certain environments (e.g., Postscript interpreters), where the glyph data isn't in the font file, or must be overridden by different values.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>It is up to client applications to create and implement <a href="ft2-incremental.html#FT_Incremental">FT_Incremental</a> objects, as long as they provide implementations for the methods <a href="ft2-incremental.html#FT_Incremental_GetGlyphDataFunc">FT_Incremental_GetGlyphDataFunc</a>, <a href="ft2-incremental.html#FT_Incremental_FreeGlyphDataFunc">FT_Incremental_FreeGlyphDataFunc</a> and <a href="ft2-incremental.html#FT_Incremental_GetGlyphMetricsFunc">FT_Incremental_GetGlyphMetricsFunc</a>.</p>
+<p>See the description of <a href="ft2-incremental.html#FT_Incremental_InterfaceRec">FT_Incremental_InterfaceRec</a> to understand how to use incremental objects with FreeType.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Incremental_MetricsRec">FT_Incremental_MetricsRec</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Incremental_MetricsRec_
+ {
+ <a href="ft2-basic_types.html#FT_Long">FT_Long</a> bearing_x;
+ <a href="ft2-basic_types.html#FT_Long">FT_Long</a> bearing_y;
+ <a href="ft2-basic_types.html#FT_Long">FT_Long</a> advance;
+
+ } <b>FT_Incremental_MetricsRec</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A small structure used to contain the basic glyph metrics returned by the <a href="ft2-incremental.html#FT_Incremental_GetGlyphMetricsFunc">FT_Incremental_GetGlyphMetricsFunc</a> method.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>bearing_x</b></td><td>
+<p>Left bearing, in font units.</p>
+</td></tr>
+<tr valign=top><td><b>bearing_y</b></td><td>
+<p>Top bearing, in font units.</p>
+</td></tr>
+<tr valign=top><td><b>advance</b></td><td>
+<p>Glyph advance, in font units.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>These correspond to horizontal or vertical metrics depending on the value of the &lsquo;vertical&rsquo; argument to the function <a href="ft2-incremental.html#FT_Incremental_GetGlyphMetricsFunc">FT_Incremental_GetGlyphMetricsFunc</a>.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Incremental_Metrics">FT_Incremental_Metrics</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Incremental_MetricsRec_* <b>FT_Incremental_Metrics</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A handle to an <a href="ft2-incremental.html#FT_Incremental_MetricsRec">FT_Incremental_MetricsRec</a> structure.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Incremental_GetGlyphDataFunc">FT_Incremental_GetGlyphDataFunc</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <a href="ft2-basic_types.html#FT_Error">FT_Error</a>
+ (*<b>FT_Incremental_GetGlyphDataFunc</b>)( <a href="ft2-incremental.html#FT_Incremental">FT_Incremental</a> incremental,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> glyph_index,
+ <a href="ft2-basic_types.html#FT_Data">FT_Data</a>* adata );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A function called by FreeType to access a given glyph's data bytes during <a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a> or <a href="ft2-base_interface.html#FT_Load_Char">FT_Load_Char</a> if incremental loading is enabled.</p>
+<p>Note that the format of the glyph's data bytes depends on the font file format. For TrueType, it must correspond to the raw bytes within the &lsquo;glyf&rsquo; table. For Postscript formats, it must correspond to the <b>unencrypted</b> charstring bytes, without any &lsquo;lenIV&rsquo; header. It is undefined for any other format.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>incremental</b></td><td>
+<p>Handle to an opaque <a href="ft2-incremental.html#FT_Incremental">FT_Incremental</a> handle provided by the client application.</p>
+</td></tr>
+<tr valign=top><td><b>glyph_index</b></td><td>
+<p>Index of relevant glyph.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>adata</b></td><td>
+<p>A structure describing the returned glyph data bytes (which will be accessed as a read-only byte block).</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>If this function returns successfully the method <a href="ft2-incremental.html#FT_Incremental_FreeGlyphDataFunc">FT_Incremental_FreeGlyphDataFunc</a> will be called later to release the data bytes.</p>
+<p>Nested calls to <a href="ft2-incremental.html#FT_Incremental_GetGlyphDataFunc">FT_Incremental_GetGlyphDataFunc</a> can happen for compound glyphs.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Incremental_FreeGlyphDataFunc">FT_Incremental_FreeGlyphDataFunc</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">void</span>
+ (*<b>FT_Incremental_FreeGlyphDataFunc</b>)( <a href="ft2-incremental.html#FT_Incremental">FT_Incremental</a> incremental,
+ <a href="ft2-basic_types.html#FT_Data">FT_Data</a>* data );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A function used to release the glyph data bytes returned by a successful call to <a href="ft2-incremental.html#FT_Incremental_GetGlyphDataFunc">FT_Incremental_GetGlyphDataFunc</a>.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>incremental</b></td><td>
+<p>A handle to an opaque <a href="ft2-incremental.html#FT_Incremental">FT_Incremental</a> handle provided by the client application.</p>
+</td></tr>
+<tr valign=top><td><b>data</b></td><td>
+<p>A structure describing the glyph data bytes (which will be accessed as a read-only byte block).</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Incremental_GetGlyphMetricsFunc">FT_Incremental_GetGlyphMetricsFunc</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <a href="ft2-basic_types.html#FT_Error">FT_Error</a>
+ (*<b>FT_Incremental_GetGlyphMetricsFunc</b>)
+ ( <a href="ft2-incremental.html#FT_Incremental">FT_Incremental</a> incremental,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> glyph_index,
+ <a href="ft2-basic_types.html#FT_Bool">FT_Bool</a> vertical,
+ <a href="ft2-incremental.html#FT_Incremental_MetricsRec">FT_Incremental_MetricsRec</a> *ametrics );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A function used to retrieve the basic metrics of a given glyph index before accessing its data. This is necessary because, in certain formats like TrueType, the metrics are stored in a different place from the glyph images proper.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>incremental</b></td><td>
+<p>A handle to an opaque <a href="ft2-incremental.html#FT_Incremental">FT_Incremental</a> handle provided by the client application.</p>
+</td></tr>
+<tr valign=top><td><b>glyph_index</b></td><td>
+<p>Index of relevant glyph.</p>
+</td></tr>
+<tr valign=top><td><b>vertical</b></td><td>
+<p>If true, return vertical metrics.</p>
+</td></tr>
+<tr valign=top><td><b>ametrics</b></td><td>
+<p>This parameter is used for both input and output. The original glyph metrics, if any, in font units. If metrics are not available all the values must be set to zero.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>ametrics</b></td><td>
+<p>The replacement glyph metrics in font units.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Incremental_FuncsRec">FT_Incremental_FuncsRec</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Incremental_FuncsRec_
+ {
+ <a href="ft2-incremental.html#FT_Incremental_GetGlyphDataFunc">FT_Incremental_GetGlyphDataFunc</a> get_glyph_data;
+ <a href="ft2-incremental.html#FT_Incremental_FreeGlyphDataFunc">FT_Incremental_FreeGlyphDataFunc</a> free_glyph_data;
+ <a href="ft2-incremental.html#FT_Incremental_GetGlyphMetricsFunc">FT_Incremental_GetGlyphMetricsFunc</a> get_glyph_metrics;
+
+ } <b>FT_Incremental_FuncsRec</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A table of functions for accessing fonts that load data incrementally. Used in <a href="ft2-incremental.html#FT_Incremental_InterfaceRec">FT_Incremental_InterfaceRec</a>.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>get_glyph_data</b></td><td>
+<p>The function to get glyph data. Must not be null.</p>
+</td></tr>
+<tr valign=top><td><b>free_glyph_data</b></td><td>
+<p>The function to release glyph data. Must not be null.</p>
+</td></tr>
+<tr valign=top><td><b>get_glyph_metrics</b></td><td>
+<p>The function to get glyph metrics. May be null if the font does not provide overriding glyph metrics.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Incremental_InterfaceRec">FT_Incremental_InterfaceRec</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Incremental_InterfaceRec_
+ {
+ <span class="keyword">const</span> <a href="ft2-incremental.html#FT_Incremental_FuncsRec">FT_Incremental_FuncsRec</a>* funcs;
+ <a href="ft2-incremental.html#FT_Incremental">FT_Incremental</a> object;
+
+ } <b>FT_Incremental_InterfaceRec</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A structure to be used with <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a> to indicate that the user wants to support incremental glyph loading. You should use it with <a href="ft2-incremental.html#FT_PARAM_TAG_INCREMENTAL">FT_PARAM_TAG_INCREMENTAL</a> as in the following example:</p>
+<pre class="colored">
+ FT_Incremental_InterfaceRec inc_int;
+ FT_Parameter parameter;
+ FT_Open_Args open_args;
+
+
+ // set up incremental descriptor
+ inc_int.funcs = my_funcs;
+ inc_int.object = my_object;
+
+ // set up optional parameter
+ parameter.tag = FT_PARAM_TAG_INCREMENTAL;
+ parameter.data = &amp;inc_int;
+
+ // set up FT_Open_Args structure
+ open_args.flags = FT_OPEN_PATHNAME | FT_OPEN_PARAMS;
+ open_args.pathname = my_font_pathname;
+ open_args.num_params = 1;
+ open_args.params = &amp;parameter; // we use one optional argument
+
+ // open the font
+ error = FT_Open_Face( library, &amp;open_args, index, &amp;face );
+ ...
+</pre>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Incremental_Interface">FT_Incremental_Interface</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <a href="ft2-incremental.html#FT_Incremental_InterfaceRec">FT_Incremental_InterfaceRec</a>* <b>FT_Incremental_Interface</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A pointer to an <a href="ft2-incremental.html#FT_Incremental_InterfaceRec">FT_Incremental_InterfaceRec</a> structure.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_PARAM_TAG_INCREMENTAL">FT_PARAM_TAG_INCREMENTAL</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_INCREMENTAL_H (freetype/ftincrem.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_PARAM_TAG_INCREMENTAL</b> <a href="ft2-basic_types.html#FT_MAKE_TAG">FT_MAKE_TAG</a>( 'i', 'n', 'c', 'r' )
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A constant used as the tag of <a href="ft2-base_interface.html#FT_Parameter">FT_Parameter</a> structures to indicate an incremental loading object to be used by FreeType.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+</body>
+</html>
diff --git a/src/3rdparty/freetype/docs/reference/ft2-index.html b/src/3rdparty/freetype/docs/reference/ft2-index.html
new file mode 100644
index 0000000..d108d0a
--- /dev/null
+++ b/src/3rdparty/freetype/docs/reference/ft2-index.html
@@ -0,0 +1,279 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>FreeType-2.3.6 API Reference</title>
+<style type="text/css">
+ body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
+ color: #000000;
+ background: #FFFFFF; }
+
+ p { text-align: justify; }
+ h1 { text-align: center; }
+ li { text-align: justify; }
+ td { padding: 0 0.5em 0 0.5em; }
+ td.left { padding: 0 0.5em 0 0.5em;
+ text-align: left; }
+
+ a:link { color: #0000EF; }
+ a:visited { color: #51188E; }
+ a:hover { color: #FF0000; }
+
+ span.keyword { font-family: monospace;
+ text-align: left;
+ white-space: pre;
+ color: darkblue; }
+
+ pre.colored { color: blue; }
+
+ ul.empty { list-style-type: none; }
+</style>
+</head>
+<body>
+<center><h1>FreeType-2.3.6 API Reference</h1></center>
+
+<table align=center border=0 cellpadding=0 cellspacing=0>
+<tr><td><a href="ft2-bdf_fonts.html#FT_PropertyType">BDF_PROPERTY_TYPE_ATOM</a></td><td><a href="ft2-list_processing.html#FT_List_Finalize">FT_List_Finalize</a></td><td><a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID</a></td></tr>
+<tr><td><a href="ft2-bdf_fonts.html#FT_PropertyType">BDF_PROPERTY_TYPE_CARDINAL</a></td><td><a href="ft2-list_processing.html#FT_List_Find">FT_List_Find</a></td><td><a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_SCALE</a></td></tr>
+<tr><td><a href="ft2-bdf_fonts.html#FT_PropertyType">BDF_PROPERTY_TYPE_INTEGER</a></td><td><a href="ft2-list_processing.html#FT_List_Insert">FT_List_Insert</a></td><td><a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_USE_MY_METRICS</a></td></tr>
+<tr><td><a href="ft2-bdf_fonts.html#FT_PropertyType">BDF_PROPERTY_TYPE_NONE</a></td><td><a href="ft2-list_processing.html#FT_List_Iterate">FT_List_Iterate</a></td><td><a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_XXX</a></td></tr>
+<tr><td><a href="ft2-bdf_fonts.html#BDF_Property">BDF_Property</a></td><td><a href="ft2-list_processing.html#FT_List_Iterator">FT_List_Iterator</a></td><td><a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_XY_SCALE</a></td></tr>
+<tr><td><a href="ft2-bdf_fonts.html#BDF_PropertyRec">BDF_PropertyRec</a></td><td><a href="ft2-list_processing.html#FT_List_Remove">FT_List_Remove</a></td><td><a href="ft2-base_interface.html#FT_SubGlyph">FT_SubGlyph</a></td></tr>
+<tr><td><a href="ft2-type1_tables.html#CID_FaceDict">CID_FaceDict</a></td><td><a href="ft2-list_processing.html#FT_List_Up">FT_List_Up</a></td><td><a href="ft2-header_file_macros.html#FT_SYNTHESIS_H">FT_SYNTHESIS_H</a></td></tr>
+<tr><td><a href="ft2-type1_tables.html#CID_FaceDictRec">CID_FaceDictRec</a></td><td><a href="ft2-list_processing.html#FT_ListNode">FT_ListNode</a></td><td><a href="ft2-header_file_macros.html#FT_SYSTEM_H">FT_SYSTEM_H</a></td></tr>
+<tr><td><a href="ft2-type1_tables.html#CID_FaceInfo">CID_FaceInfo</a></td><td><a href="ft2-list_processing.html#FT_ListNodeRec">FT_ListNodeRec</a></td><td><a href="ft2-basic_types.html#FT_Tag">FT_Tag</a></td></tr>
+<tr><td><a href="ft2-type1_tables.html#CID_FaceInfoRec">CID_FaceInfoRec</a></td><td><a href="ft2-list_processing.html#FT_ListRec">FT_ListRec</a></td><td><a href="ft2-computations.html#FT_Tan">FT_Tan</a></td></tr>
+<tr><td><a href="ft2-type1_tables.html#CID_Info">CID_Info</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_CROP_BITMAP</a></td><td><a href="ft2-header_file_macros.html#FT_TRIGONOMETRY_H">FT_TRIGONOMETRY_H</a></td></tr>
+<tr><td><a href="ft2-version.html#FREETYPE_XXX">FREETYPE_MAJOR</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_DEFAULT</a></td><td><a href="ft2-truetype_engine.html#FT_TrueTypeEngineType">FT_TRUETYPE_ENGINE_TYPE_NONE</a></td></tr>
+<tr><td><a href="ft2-version.html#FREETYPE_XXX">FREETYPE_MINOR</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_FORCE_AUTOHINT</a></td><td><a href="ft2-truetype_engine.html#FT_TrueTypeEngineType">FT_TRUETYPE_ENGINE_TYPE_PATENTED</a></td></tr>
+<tr><td><a href="ft2-version.html#FREETYPE_XXX">FREETYPE_PATCH</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH</a></td><td><a href="ft2-truetype_engine.html#FT_TrueTypeEngineType">FT_TRUETYPE_ENGINE_TYPE_UNPATENTED</a></td></tr>
+<tr><td><a href="ft2-version.html#FREETYPE_XXX">FREETYPE_XXX</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_IGNORE_TRANSFORM</a></td><td><a href="ft2-header_file_macros.html#FT_TRUETYPE_IDS_H">FT_TRUETYPE_IDS_H</a></td></tr>
+<tr><td><a href="ft2-sizes_management.html#FT_Activate_Size">FT_Activate_Size</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_LINEAR_DESIGN</a></td><td><a href="ft2-header_file_macros.html#FT_TRUETYPE_TABLES_H">FT_TRUETYPE_TABLES_H</a></td></tr>
+<tr><td><a href="ft2-module_management.html#FT_Add_Default_Modules">FT_Add_Default_Modules</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_MONOCHROME</a></td><td><a href="ft2-header_file_macros.html#FT_TRUETYPE_TAGS_H">FT_TRUETYPE_TAGS_H</a></td></tr>
+<tr><td><a href="ft2-module_management.html#FT_Add_Module">FT_Add_Module</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_AUTOHINT</a></td><td><a href="ft2-truetype_engine.html#FT_TrueTypeEngineType">FT_TrueTypeEngineType</a></td></tr>
+<tr><td><a href="ft2-system_interface.html#FT_Alloc_Func">FT_Alloc_Func</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_BITMAP</a></td><td><a href="ft2-gx_validation.html#FT_TrueTypeGX_Free">FT_TrueTypeGX_Free</a></td></tr>
+<tr><td><a href="ft2-computations.html#FT_ANGLE_2PI">FT_ANGLE_2PI</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_HINTING</a></td><td><a href="ft2-gx_validation.html#FT_TrueTypeGX_Validate">FT_TrueTypeGX_Validate</a></td></tr>
+<tr><td><a href="ft2-computations.html#FT_ANGLE_PI">FT_ANGLE_PI</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_RECURSE</a></td><td><a href="ft2-header_file_macros.html#FT_TYPE1_TABLES_H">FT_TYPE1_TABLES_H</a></td></tr>
+<tr><td><a href="ft2-computations.html#FT_ANGLE_PI2">FT_ANGLE_PI2</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_SCALE</a></td><td><a href="ft2-header_file_macros.html#FT_TYPES_H">FT_TYPES_H</a></td></tr>
+<tr><td><a href="ft2-computations.html#FT_ANGLE_PI4">FT_ANGLE_PI4</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_PEDANTIC</a></td><td><a href="ft2-basic_types.html#FT_UFWord">FT_UFWord</a></td></tr>
+<tr><td><a href="ft2-computations.html#FT_Angle">FT_Angle</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_RENDER</a></td><td><a href="ft2-basic_types.html#FT_UInt">FT_UInt</a></td></tr>
+<tr><td><a href="ft2-computations.html#FT_Angle_Diff">FT_Angle_Diff</a></td><td><a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_LCD</a></td><td><a href="ft2-basic_types.html#FT_UInt16">FT_UInt16</a></td></tr>
+<tr><td><a href="ft2-computations.html#FT_Atan2">FT_Atan2</a></td><td><a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_LCD_V</a></td><td><a href="ft2-basic_types.html#FT_UInt32">FT_UInt32</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Attach_File">FT_Attach_File</a></td><td><a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_LIGHT</a></td><td><a href="ft2-basic_types.html#FT_ULong">FT_ULong</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Attach_Stream">FT_Attach_Stream</a></td><td><a href="ft2-base_interface.html#FT_LOAD_TARGET_MODE">FT_LOAD_TARGET_MODE</a></td><td><a href="ft2-header_file_macros.html#FT_UNPATENTED_HINTING_H">FT_UNPATENTED_HINTING_H</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_BBOX_H">FT_BBOX_H</a></td><td><a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_MONO</a></td><td><a href="ft2-basic_types.html#FT_UnitVector">FT_UnitVector</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_BBox">FT_BBox</a></td><td><a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_NORMAL</a></td><td><a href="ft2-basic_types.html#FT_UShort">FT_UShort</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_BDF_H">FT_BDF_H</a></td><td><a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_XXX</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_CKERNXXX">FT_VALIDATE_APPLE</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_BITMAP_H">FT_BITMAP_H</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_VERTICAL_LAYOUT</a></td><td><a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_BASE</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_Bitmap">FT_Bitmap</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_XXX</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_bsln</a></td></tr>
+<tr><td><a href="ft2-bitmap_handling.html#FT_Bitmap_Convert">FT_Bitmap_Convert</a></td><td><a href="ft2-base_interface.html#FT_Load_Char">FT_Load_Char</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_CKERNXXX">FT_VALIDATE_CKERN</a></td></tr>
+<tr><td><a href="ft2-bitmap_handling.html#FT_Bitmap_Copy">FT_Bitmap_Copy</a></td><td><a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_CKERNXXX">FT_VALIDATE_CKERNXXX</a></td></tr>
+<tr><td><a href="ft2-bitmap_handling.html#FT_Bitmap_Done">FT_Bitmap_Done</a></td><td><a href="ft2-truetype_tables.html#FT_Load_Sfnt_Table">FT_Load_Sfnt_Table</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_feat</a></td></tr>
+<tr><td><a href="ft2-bitmap_handling.html#FT_Bitmap_Embolden">FT_Bitmap_Embolden</a></td><td><a href="ft2-basic_types.html#FT_Long">FT_Long</a></td><td><a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_GDEF</a></td></tr>
+<tr><td><a href="ft2-bitmap_handling.html#FT_Bitmap_New">FT_Bitmap_New</a></td><td><a href="ft2-header_file_macros.html#FT_LZW_H">FT_LZW_H</a></td><td><a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_GPOS</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Bitmap_Size">FT_Bitmap_Size</a></td><td><a href="ft2-header_file_macros.html#FT_MAC_H">FT_MAC_H</a></td><td><a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_GSUB</a></td></tr>
+<tr><td><a href="ft2-glyph_management.html#FT_BitmapGlyph">FT_BitmapGlyph</a></td><td><a href="ft2-basic_types.html#FT_MAKE_TAG">FT_MAKE_TAG</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_GX</a></td></tr>
+<tr><td><a href="ft2-glyph_management.html#FT_BitmapGlyphRec">FT_BitmapGlyphRec</a></td><td><a href="ft2-basic_types.html#FT_Matrix">FT_Matrix</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GX_LENGTH">FT_VALIDATE_GX_LENGTH</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_Bool">FT_Bool</a></td><td><a href="ft2-computations.html#FT_Matrix_Invert">FT_Matrix_Invert</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_GXXXX</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_Byte">FT_Byte</a></td><td><a href="ft2-computations.html#FT_Matrix_Multiply">FT_Matrix_Multiply</a></td><td><a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_JSTF</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_Bytes">FT_Bytes</a></td><td><a href="ft2-system_interface.html#FT_Memory">FT_Memory</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_just</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_CACHE_CHARMAP_H">FT_CACHE_CHARMAP_H</a></td><td><a href="ft2-system_interface.html#FT_MemoryRec">FT_MemoryRec</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_kern</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_CACHE_H">FT_CACHE_H</a></td><td><a href="ft2-multiple_masters.html#FT_MM_Axis">FT_MM_Axis</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_lcar</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_CACHE_IMAGE_H">FT_CACHE_IMAGE_H</a></td><td><a href="ft2-multiple_masters.html#FT_MM_Var">FT_MM_Var</a></td><td><a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_MATH</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_CACHE_SMALL_BITMAPS_H">FT_CACHE_SMALL_BITMAPS_H</a></td><td><a href="ft2-header_file_macros.html#FT_MODULE_ERRORS_H">FT_MODULE_ERRORS_H</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_CKERNXXX">FT_VALIDATE_MS</a></td></tr>
+<tr><td><a href="ft2-computations.html#FT_CeilFix">FT_CeilFix</a></td><td><a href="ft2-header_file_macros.html#FT_MODULE_H">FT_MODULE_H</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_mort</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_Char">FT_Char</a></td><td><a href="ft2-base_interface.html#FT_Module">FT_Module</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_morx</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_CharMap">FT_CharMap</a></td><td><a href="ft2-module_management.html#FT_Module_Class">FT_Module_Class</a></td><td><a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_OT</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_CharMapRec">FT_CharMapRec</a></td><td><a href="ft2-module_management.html#FT_Module_Constructor">FT_Module_Constructor</a></td><td><a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_OTXXX</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_CID_H">FT_CID_H</a></td><td><a href="ft2-module_management.html#FT_Module_Destructor">FT_Module_Destructor</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_opbd</a></td></tr>
+<tr><td><a href="ft2-gx_validation.html#FT_ClassicKern_Free">FT_ClassicKern_Free</a></td><td><a href="ft2-module_management.html#FT_Module_Requester">FT_Module_Requester</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_prop</a></td></tr>
+<tr><td><a href="ft2-gx_validation.html#FT_ClassicKern_Validate">FT_ClassicKern_Validate</a></td><td><a href="ft2-header_file_macros.html#FT_MULTIPLE_MASTERS_H">FT_MULTIPLE_MASTERS_H</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_trak</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_CONFIG_CONFIG_H">FT_CONFIG_CONFIG_H</a></td><td><a href="ft2-computations.html#FT_MulDiv">FT_MulDiv</a></td><td><a href="ft2-multiple_masters.html#FT_Var_Axis">FT_Var_Axis</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_CONFIG_MODULES_H">FT_CONFIG_MODULES_H</a></td><td><a href="ft2-computations.html#FT_MulFix">FT_MulFix</a></td><td><a href="ft2-multiple_masters.html#FT_Var_Named_Style">FT_Var_Named_Style</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_CONFIG_OPTIONS_H">FT_CONFIG_OPTIONS_H</a></td><td><a href="ft2-multiple_masters.html#FT_Multi_Master">FT_Multi_Master</a></td><td><a href="ft2-basic_types.html#FT_Vector">FT_Vector</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_CONFIG_STANDARD_LIBRARY_H">FT_CONFIG_STANDARD_LIBRARY_H</a></td><td><a href="ft2-base_interface.html#FT_New_Face">FT_New_Face</a></td><td><a href="ft2-computations.html#FT_Vector_From_Polar">FT_Vector_From_Polar</a></td></tr>
+<tr><td><a href="ft2-computations.html#FT_Cos">FT_Cos</a></td><td><a href="ft2-mac_specific.html#FT_New_Face_From_FOND">FT_New_Face_From_FOND</a></td><td><a href="ft2-computations.html#FT_Vector_Length">FT_Vector_Length</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_Data">FT_Data</a></td><td><a href="ft2-mac_specific.html#FT_New_Face_From_FSRef">FT_New_Face_From_FSRef</a></td><td><a href="ft2-computations.html#FT_Vector_Polarize">FT_Vector_Polarize</a></td></tr>
+<tr><td><a href="ft2-computations.html#FT_DivFix">FT_DivFix</a></td><td><a href="ft2-mac_specific.html#FT_New_Face_From_FSSpec">FT_New_Face_From_FSSpec</a></td><td><a href="ft2-computations.html#FT_Vector_Rotate">FT_Vector_Rotate</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Done_Face">FT_Done_Face</a></td><td><a href="ft2-module_management.html#FT_New_Library">FT_New_Library</a></td><td><a href="ft2-computations.html#FT_Vector_Transform">FT_Vector_Transform</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Done_FreeType">FT_Done_FreeType</a></td><td><a href="ft2-base_interface.html#FT_New_Memory_Face">FT_New_Memory_Face</a></td><td><a href="ft2-computations.html#FT_Vector_Unit">FT_Vector_Unit</a></td></tr>
+<tr><td><a href="ft2-glyph_management.html#FT_Done_Glyph">FT_Done_Glyph</a></td><td><a href="ft2-sizes_management.html#FT_New_Size">FT_New_Size</a></td><td><a href="ft2-header_file_macros.html#FT_WINFONTS_H">FT_WINFONTS_H</a></td></tr>
+<tr><td><a href="ft2-module_management.html#FT_Done_Library">FT_Done_Library</a></td><td><a href="ft2-basic_types.html#FT_Offset">FT_Offset</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_Header">FT_WinFNT_Header</a></td></tr>
+<tr><td><a href="ft2-sizes_management.html#FT_Done_Size">FT_Done_Size</a></td><td><a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_DRIVER</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_HeaderRec">FT_WinFNT_HeaderRec</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Driver">FT_Driver</a></td><td><a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_MEMORY</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1250</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_ENC_TAG">FT_ENC_TAG</a></td><td><a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_PARAMS</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1251</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_ADOBE_CUSTOM</a></td><td><a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_PATHNAME</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1252</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_ADOBE_EXPERT</a></td><td><a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_STREAM</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1253</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_ADOBE_LATIN_1</a></td><td><a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_XXX</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1254</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_ADOBE_STANDARD</a></td><td><a href="ft2-header_file_macros.html#FT_OPENTYPE_VALIDATE_H">FT_OPENTYPE_VALIDATE_H</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1255</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_APPLE_ROMAN</a></td><td><a href="ft2-base_interface.html#FT_Open_Args">FT_Open_Args</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1256</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_BIG5</a></td><td><a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1257</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_GB2312</a></td><td><a href="ft2-ot_validation.html#FT_OpenType_Free">FT_OpenType_Free</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1258</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_JOHAB</a></td><td><a href="ft2-ot_validation.html#FT_OpenType_Validate">FT_OpenType_Validate</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1361</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_BIG5</a></td><td><a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_FILL_LEFT</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP874</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_GB2312</a></td><td><a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_FILL_RIGHT</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP932</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_JOHAB</a></td><td><a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_NONE</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP936</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_SJIS</a></td><td><a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_POSTSCRIPT</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP949</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_SYMBOL</a></td><td><a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_TRUETYPE</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP950</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_WANSUNG</a></td><td><a href="ft2-outline_processing.html#FT_Orientation">FT_Orientation</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_DEFAULT</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_NONE</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_EVEN_ODD_FILL</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_MAC</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_OLD_LATIN_2</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_FLAGS</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_OEM</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_SJIS</a></td><td><a href="ft2-header_file_macros.html#FT_OUTLINE_H">FT_OUTLINE_H</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_SYMBOL</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_UNICODE</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_HIGH_PRECISION</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_XXX</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_WANSUNG</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_IGNORE_DROPOUTS</a></td><td><a href="ft2-header_file_macros.html#FT_XFREE86_H">FT_XFREE86_H</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_Encoding</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_NONE</a></td><td><a href="ft2-cache_subsystem.html#FTC_CMapCache">FTC_CMapCache</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_ERRORS_H">FT_ERRORS_H</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_OWNER</a></td><td><a href="ft2-cache_subsystem.html#FTC_CMapCache_Lookup">FTC_CMapCache_Lookup</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_Error">FT_Error</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_REVERSE_FILL</a></td><td><a href="ft2-cache_subsystem.html#FTC_CMapCache_New">FTC_CMapCache_New</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_F26Dot6">FT_F26Dot6</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_SINGLE_PASS</a></td><td><a href="ft2-cache_subsystem.html#FTC_Face_Requester">FTC_Face_Requester</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_F2Dot14">FT_F2Dot14</a></td><td><a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a></td><td><a href="ft2-cache_subsystem.html#FTC_FaceID">FTC_FaceID</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_CID_KEYED</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Check">FT_Outline_Check</a></td><td><a href="ft2-cache_subsystem.html#FTC_ImageCache">FTC_ImageCache</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_EXTERNAL_STREAM</a></td><td><a href="ft2-outline_processing.html#FT_Outline_ConicToFunc">FT_Outline_ConicToFunc</a></td><td><a href="ft2-cache_subsystem.html#FTC_ImageCache_Lookup">FTC_ImageCache_Lookup</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_FAST_GLYPHS</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Copy">FT_Outline_Copy</a></td><td><a href="ft2-cache_subsystem.html#FTC_ImageCache_LookupScaler">FTC_ImageCache_LookupScaler</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_FIXED_SIZES</a></td><td><a href="ft2-outline_processing.html#FT_Outline_CubicToFunc">FT_Outline_CubicToFunc</a></td><td><a href="ft2-cache_subsystem.html#FTC_ImageCache_New">FTC_ImageCache_New</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_FIXED_WIDTH</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Decompose">FT_Outline_Decompose</a></td><td><a href="ft2-cache_subsystem.html#FTC_ImageType">FTC_ImageType</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_GLYPH_NAMES</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Done">FT_Outline_Done</a></td><td><a href="ft2-cache_subsystem.html#FTC_ImageTypeRec">FTC_ImageTypeRec</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_HINTER</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Embolden">FT_Outline_Embolden</a></td><td><a href="ft2-cache_subsystem.html#FTC_Manager">FTC_Manager</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_HORIZONTAL</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Funcs">FT_Outline_Funcs</a></td><td><a href="ft2-cache_subsystem.html#FTC_Manager_Done">FTC_Manager_Done</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_KERNING</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Get_BBox">FT_Outline_Get_BBox</a></td><td><a href="ft2-cache_subsystem.html#FTC_Manager_LookupFace">FTC_Manager_LookupFace</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_MULTIPLE_MASTERS</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Get_Bitmap">FT_Outline_Get_Bitmap</a></td><td><a href="ft2-cache_subsystem.html#FTC_Manager_LookupSize">FTC_Manager_LookupSize</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_SCALABLE</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Get_CBox">FT_Outline_Get_CBox</a></td><td><a href="ft2-cache_subsystem.html#FTC_Manager_New">FTC_Manager_New</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_SFNT</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Get_Orientation">FT_Outline_Get_Orientation</a></td><td><a href="ft2-cache_subsystem.html#FTC_Manager_RemoveFaceID">FTC_Manager_RemoveFaceID</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_VERTICAL</a></td><td><a href="ft2-glyph_stroker.html#FT_Outline_GetInsideBorder">FT_Outline_GetInsideBorder</a></td><td><a href="ft2-cache_subsystem.html#FTC_Manager_Reset">FTC_Manager_Reset</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_XXX</a></td><td><a href="ft2-glyph_stroker.html#FT_Outline_GetOutsideBorder">FT_Outline_GetOutsideBorder</a></td><td><a href="ft2-cache_subsystem.html#FTC_Node">FTC_Node</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Face">FT_Face</a></td><td><a href="ft2-outline_processing.html#FT_Outline_LineToFunc">FT_Outline_LineToFunc</a></td><td><a href="ft2-cache_subsystem.html#FTC_Node_Unref">FTC_Node_Unref</a></td></tr>
+<tr><td><a href="ft2-version.html#FT_Face_CheckTrueTypePatents">FT_Face_CheckTrueTypePatents</a></td><td><a href="ft2-outline_processing.html#FT_Outline_MoveToFunc">FT_Outline_MoveToFunc</a></td><td><a href="ft2-cache_subsystem.html#FTC_SBit">FTC_SBit</a></td></tr>
+<tr><td><a href="ft2-glyph_variants.html#FT_Face_GetCharsOfVariant">FT_Face_GetCharsOfVariant</a></td><td><a href="ft2-outline_processing.html#FT_Outline_New">FT_Outline_New</a></td><td><a href="ft2-cache_subsystem.html#FTC_SBitCache">FTC_SBitCache</a></td></tr>
+<tr><td><a href="ft2-glyph_variants.html#FT_Face_GetCharVariantIndex">FT_Face_GetCharVariantIndex</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Render">FT_Outline_Render</a></td><td><a href="ft2-cache_subsystem.html#FTC_SBitCache_Lookup">FTC_SBitCache_Lookup</a></td></tr>
+<tr><td><a href="ft2-glyph_variants.html#FT_Face_GetCharVariantIsDefault">FT_Face_GetCharVariantIsDefault</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Reverse">FT_Outline_Reverse</a></td><td><a href="ft2-cache_subsystem.html#FTC_SBitCache_LookupScaler">FTC_SBitCache_LookupScaler</a></td></tr>
+<tr><td><a href="ft2-glyph_variants.html#FT_Face_GetVariantSelectors">FT_Face_GetVariantSelectors</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Transform">FT_Outline_Transform</a></td><td><a href="ft2-cache_subsystem.html#FTC_SBitCache_New">FTC_SBitCache_New</a></td></tr>
+<tr><td><a href="ft2-glyph_variants.html#FT_Face_GetVariantsOfChar">FT_Face_GetVariantsOfChar</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Translate">FT_Outline_Translate</a></td><td><a href="ft2-cache_subsystem.html#FTC_SBitRec">FTC_SBitRec</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Face_Internal">FT_Face_Internal</a></td><td><a href="ft2-glyph_management.html#FT_OutlineGlyph">FT_OutlineGlyph</a></td><td><a href="ft2-cache_subsystem.html#FTC_Scaler">FTC_Scaler</a></td></tr>
+<tr><td><a href="ft2-version.html#FT_Face_SetUnpatentedHinting">FT_Face_SetUnpatentedHinting</a></td><td><a href="ft2-glyph_management.html#FT_OutlineGlyphRec">FT_OutlineGlyphRec</a></td><td><a href="ft2-cache_subsystem.html#FTC_ScalerRec">FTC_ScalerRec</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a></td><td><a href="ft2-incremental.html#FT_PARAM_TAG_INCREMENTAL">FT_PARAM_TAG_INCREMENTAL</a></td><td><a href="ft2-base_interface.html#ft_encoding_xxx">ft_encoding_xxx</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a></td><td><a href="ft2-truetype_tables.html#FT_PARAM_TAG_UNPATENTED_HINTING">FT_PARAM_TAG_UNPATENTED_HINTING</a></td><td><a href="ft2-glyph_management.html#ft_glyph_bbox_xxx">ft_glyph_bbox_gridfit</a></td></tr>
+<tr><td><a href="ft2-computations.html#FT_FloorFix">FT_FloorFix</a></td><td><a href="ft2-basic_types.html#FT_Palette_Mode">FT_Palette_Mode</a></td><td><a href="ft2-glyph_management.html#ft_glyph_bbox_xxx">ft_glyph_bbox_pixels</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_FREETYPE_H">FT_FREETYPE_H</a></td><td><a href="ft2-base_interface.html#FT_Parameter">FT_Parameter</a></td><td><a href="ft2-glyph_management.html#ft_glyph_bbox_xxx">ft_glyph_bbox_subpixels</a></td></tr>
+<tr><td><a href="ft2-system_interface.html#FT_Free_Func">FT_Free_Func</a></td><td><a href="ft2-header_file_macros.html#FT_PFR_H">FT_PFR_H</a></td><td><a href="ft2-glyph_management.html#ft_glyph_bbox_xxx">ft_glyph_bbox_truncate</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_FWord">FT_FWord</a></td><td><a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_GRAY</a></td><td><a href="ft2-glyph_management.html#ft_glyph_bbox_xxx">ft_glyph_bbox_unscaled</a></td></tr>
+<tr><td><a href="ft2-gasp_table.html#FT_GASP_XXX">FT_GASP_DO_GRAY</a></td><td><a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_GRAY2</a></td><td><a href="ft2-glyph_management.html#ft_glyph_bbox_xxx">ft_glyph_bbox_xxx</a></td></tr>
+<tr><td><a href="ft2-gasp_table.html#FT_GASP_XXX">FT_GASP_DO_GRIDFIT</a></td><td><a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_GRAY4</a></td><td><a href="ft2-basic_types.html#ft_glyph_format_xxx">ft_glyph_format_bitmap</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_GASP_H">FT_GASP_H</a></td><td><a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_LCD</a></td><td><a href="ft2-basic_types.html#ft_glyph_format_xxx">ft_glyph_format_composite</a></td></tr>
+<tr><td><a href="ft2-gasp_table.html#FT_GASP_XXX">FT_GASP_NO_TABLE</a></td><td><a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_LCD_V</a></td><td><a href="ft2-basic_types.html#ft_glyph_format_xxx">ft_glyph_format_none</a></td></tr>
+<tr><td><a href="ft2-gasp_table.html#FT_GASP_XXX">FT_GASP_SYMMETRIC_GRIDFIT</a></td><td><a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_MONO</a></td><td><a href="ft2-basic_types.html#ft_glyph_format_xxx">ft_glyph_format_outline</a></td></tr>
+<tr><td><a href="ft2-gasp_table.html#FT_GASP_XXX">FT_GASP_SYMMETRIC_SMOOTHING</a></td><td><a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_NONE</a></td><td><a href="ft2-basic_types.html#ft_glyph_format_xxx">ft_glyph_format_plotter</a></td></tr>
+<tr><td><a href="ft2-gasp_table.html#FT_GASP_XXX">FT_GASP_XXX</a></td><td><a href="ft2-basic_types.html#FT_Pixel_Mode">FT_Pixel_Mode</a></td><td><a href="ft2-basic_types.html#ft_glyph_format_xxx">ft_glyph_format_xxx</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_Generic">FT_Generic</a></td><td><a href="ft2-basic_types.html#FT_Pointer">FT_Pointer</a></td><td><a href="ft2-base_interface.html#ft_kerning_default">ft_kerning_default</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_Generic_Finalizer">FT_Generic_Finalizer</a></td><td><a href="ft2-basic_types.html#FT_Pos">FT_Pos</a></td><td><a href="ft2-base_interface.html#ft_kerning_unfitted">ft_kerning_unfitted</a></td></tr>
+<tr><td><a href="ft2-bdf_fonts.html#FT_Get_BDF_Charset_ID">FT_Get_BDF_Charset_ID</a></td><td><a href="ft2-bdf_fonts.html#FT_PropertyType">FT_PropertyType</a></td><td><a href="ft2-base_interface.html#ft_kerning_unscaled">ft_kerning_unscaled</a></td></tr>
+<tr><td><a href="ft2-bdf_fonts.html#FT_Get_BDF_Property">FT_Get_BDF_Property</a></td><td><a href="ft2-basic_types.html#FT_PtrDist">FT_PtrDist</a></td><td><a href="ft2-base_interface.html#FT_OPEN_XXX">ft_open_driver</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Get_Char_Index">FT_Get_Char_Index</a></td><td><a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_AA</a></td><td><a href="ft2-base_interface.html#FT_OPEN_XXX">ft_open_memory</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Get_Charmap_Index">FT_Get_Charmap_Index</a></td><td><a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_CLIP</a></td><td><a href="ft2-base_interface.html#FT_OPEN_XXX">ft_open_params</a></td></tr>
+<tr><td><a href="ft2-cid_fonts.html#FT_Get_CID_Registry_Ordering_Supplement">FT_Get_CID_Registry_Ordering_Supplement</a></td><td><a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_DEFAULT</a></td><td><a href="ft2-base_interface.html#FT_OPEN_XXX">ft_open_pathname</a></td></tr>
+<tr><td><a href="ft2-truetype_tables.html#FT_Get_CMap_Format">FT_Get_CMap_Format</a></td><td><a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_DIRECT</a></td><td><a href="ft2-base_interface.html#FT_OPEN_XXX">ft_open_stream</a></td></tr>
+<tr><td><a href="ft2-truetype_tables.html#FT_Get_CMap_Language_ID">FT_Get_CMap_Language_ID</a></td><td><a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_XXX</a></td><td><a href="ft2-outline_processing.html#ft_outline_flags">ft_outline_even_odd_fill</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Get_First_Char">FT_Get_First_Char</a></td><td><a href="ft2-raster.html#FT_Raster">FT_Raster</a></td><td><a href="ft2-outline_processing.html#ft_outline_flags">ft_outline_flags</a></td></tr>
+<tr><td><a href="ft2-gasp_table.html#FT_Get_Gasp">FT_Get_Gasp</a></td><td><a href="ft2-raster.html#FT_Raster_BitSet_Func">FT_Raster_BitSet_Func</a></td><td><a href="ft2-outline_processing.html#ft_outline_flags">ft_outline_high_precision</a></td></tr>
+<tr><td><a href="ft2-glyph_management.html#FT_Get_Glyph">FT_Get_Glyph</a></td><td><a href="ft2-raster.html#FT_Raster_BitTest_Func">FT_Raster_BitTest_Func</a></td><td><a href="ft2-outline_processing.html#ft_outline_flags">ft_outline_ignore_dropouts</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Get_Glyph_Name">FT_Get_Glyph_Name</a></td><td><a href="ft2-raster.html#FT_Raster_DoneFunc">FT_Raster_DoneFunc</a></td><td><a href="ft2-outline_processing.html#ft_outline_flags">ft_outline_none</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Get_Kerning">FT_Get_Kerning</a></td><td><a href="ft2-raster.html#FT_Raster_Funcs">FT_Raster_Funcs</a></td><td><a href="ft2-outline_processing.html#ft_outline_flags">ft_outline_owner</a></td></tr>
+<tr><td><a href="ft2-multiple_masters.html#FT_Get_MM_Var">FT_Get_MM_Var</a></td><td><a href="ft2-raster.html#FT_Raster_NewFunc">FT_Raster_NewFunc</a></td><td><a href="ft2-outline_processing.html#ft_outline_flags">ft_outline_reverse_fill</a></td></tr>
+<tr><td><a href="ft2-module_management.html#FT_Get_Module">FT_Get_Module</a></td><td><a href="ft2-raster.html#FT_Raster_Params">FT_Raster_Params</a></td><td><a href="ft2-outline_processing.html#ft_outline_flags">ft_outline_single_pass</a></td></tr>
+<tr><td><a href="ft2-multiple_masters.html#FT_Get_Multi_Master">FT_Get_Multi_Master</a></td><td><a href="ft2-raster.html#FT_Raster_RenderFunc">FT_Raster_RenderFunc</a></td><td><a href="ft2-basic_types.html#FT_Palette_Mode">ft_palette_mode_rgb</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Get_Name_Index">FT_Get_Name_Index</a></td><td><a href="ft2-raster.html#FT_Raster_ResetFunc">FT_Raster_ResetFunc</a></td><td><a href="ft2-basic_types.html#FT_Palette_Mode">ft_palette_mode_rgba</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Get_Next_Char">FT_Get_Next_Char</a></td><td><a href="ft2-raster.html#FT_Raster_SetModeFunc">FT_Raster_SetModeFunc</a></td><td><a href="ft2-basic_types.html#ft_pixel_mode_xxx">ft_pixel_mode_grays</a></td></tr>
+<tr><td><a href="ft2-pfr_fonts.html#FT_Get_PFR_Advance">FT_Get_PFR_Advance</a></td><td><a href="ft2-header_file_macros.html#FT_RENDER_H">FT_RENDER_H</a></td><td><a href="ft2-basic_types.html#ft_pixel_mode_xxx">ft_pixel_mode_mono</a></td></tr>
+<tr><td><a href="ft2-pfr_fonts.html#FT_Get_PFR_Kerning">FT_Get_PFR_Kerning</a></td><td><a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_LCD</a></td><td><a href="ft2-basic_types.html#ft_pixel_mode_xxx">ft_pixel_mode_none</a></td></tr>
+<tr><td><a href="ft2-pfr_fonts.html#FT_Get_PFR_Metrics">FT_Get_PFR_Metrics</a></td><td><a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_LCD_V</a></td><td><a href="ft2-basic_types.html#ft_pixel_mode_xxx">ft_pixel_mode_pal2</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Get_Postscript_Name">FT_Get_Postscript_Name</a></td><td><a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_LIGHT</a></td><td><a href="ft2-basic_types.html#ft_pixel_mode_xxx">ft_pixel_mode_pal4</a></td></tr>
+<tr><td><a href="ft2-type1_tables.html#FT_Get_PS_Font_Info">FT_Get_PS_Font_Info</a></td><td><a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_MONO</a></td><td><a href="ft2-basic_types.html#ft_pixel_mode_xxx">ft_pixel_mode_xxx</a></td></tr>
+<tr><td><a href="ft2-type1_tables.html#FT_Get_PS_Font_Private">FT_Get_PS_Font_Private</a></td><td><a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_NORMAL</a></td><td><a href="ft2-base_interface.html#ft_render_mode_xxx">ft_render_mode_mono</a></td></tr>
+<tr><td><a href="ft2-module_management.html#FT_Get_Renderer">FT_Get_Renderer</a></td><td><a href="ft2-system_interface.html#FT_Realloc_Func">FT_Realloc_Func</a></td><td><a href="ft2-base_interface.html#ft_render_mode_xxx">ft_render_mode_normal</a></td></tr>
+<tr><td><a href="ft2-sfnt_names.html#FT_Get_Sfnt_Name">FT_Get_Sfnt_Name</a></td><td><a href="ft2-module_management.html#FT_Remove_Module">FT_Remove_Module</a></td><td><a href="ft2-base_interface.html#ft_render_mode_xxx">ft_render_mode_xxx</a></td></tr>
+<tr><td><a href="ft2-sfnt_names.html#FT_Get_Sfnt_Name_Count">FT_Get_Sfnt_Name_Count</a></td><td><a href="ft2-base_interface.html#FT_Render_Glyph">FT_Render_Glyph</a></td><td><a href="ft2-type1_tables.html#PS_FontInfo">PS_FontInfo</a></td></tr>
+<tr><td><a href="ft2-truetype_tables.html#FT_Get_Sfnt_Table">FT_Get_Sfnt_Table</a></td><td><a href="ft2-base_interface.html#FT_Render_Mode">FT_Render_Mode</a></td><td><a href="ft2-type1_tables.html#PS_FontInfoRec">PS_FontInfoRec</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Get_SubGlyph_Info">FT_Get_SubGlyph_Info</a></td><td><a href="ft2-base_interface.html#FT_Renderer">FT_Renderer</a></td><td><a href="ft2-type1_tables.html#PS_Private">PS_Private</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Get_Track_Kerning">FT_Get_Track_Kerning</a></td><td><a href="ft2-module_management.html#FT_Renderer_Class">FT_Renderer_Class</a></td><td><a href="ft2-type1_tables.html#PS_PrivateRec">PS_PrivateRec</a></td></tr>
+<tr><td><a href="ft2-truetype_engine.html#FT_Get_TrueType_Engine_Type">FT_Get_TrueType_Engine_Type</a></td><td><a href="ft2-base_interface.html#FT_Request_Size">FT_Request_Size</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_Blend_Flags</a></td></tr>
+<tr><td><a href="ft2-winfnt_fonts.html#FT_Get_WinFNT_Header">FT_Get_WinFNT_Header</a></td><td><a href="ft2-computations.html#FT_RoundFix">FT_RoundFix</a></td><td><a href="ft2-type1_tables.html#T1_FontInfo">T1_FontInfo</a></td></tr>
+<tr><td><a href="ft2-font_formats.html#FT_Get_X11_Font_Format">FT_Get_X11_Font_Format</a></td><td><a href="ft2-base_interface.html#FT_Select_Charmap">FT_Select_Charmap</a></td><td><a href="ft2-type1_tables.html#T1_Private">T1_Private</a></td></tr>
+<tr><td><a href="ft2-mac_specific.html#FT_GetFile_From_Mac_ATS_Name">FT_GetFile_From_Mac_ATS_Name</a></td><td><a href="ft2-base_interface.html#FT_Select_Size">FT_Select_Size</a></td><td><a href="ft2-truetype_tables.html#TT_ADOBE_ID_XXX">TT_ADOBE_ID_CUSTOM</a></td></tr>
+<tr><td><a href="ft2-mac_specific.html#FT_GetFile_From_Mac_Name">FT_GetFile_From_Mac_Name</a></td><td><a href="ft2-base_interface.html#FT_Set_Char_Size">FT_Set_Char_Size</a></td><td><a href="ft2-truetype_tables.html#TT_ADOBE_ID_XXX">TT_ADOBE_ID_EXPERT</a></td></tr>
+<tr><td><a href="ft2-mac_specific.html#FT_GetFilePath_From_Mac_ATS_Name">FT_GetFilePath_From_Mac_ATS_Name</a></td><td><a href="ft2-base_interface.html#FT_Set_Charmap">FT_Set_Charmap</a></td><td><a href="ft2-truetype_tables.html#TT_ADOBE_ID_XXX">TT_ADOBE_ID_LATIN_1</a></td></tr>
+<tr><td><a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_GRIDFIT</a></td><td><a href="ft2-module_management.html#FT_Set_Debug_Hook">FT_Set_Debug_Hook</a></td><td><a href="ft2-truetype_tables.html#TT_ADOBE_ID_XXX">TT_ADOBE_ID_STANDARD</a></td></tr>
+<tr><td><a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_PIXELS</a></td><td><a href="ft2-multiple_masters.html#FT_Set_MM_Blend_Coordinates">FT_Set_MM_Blend_Coordinates</a></td><td><a href="ft2-truetype_tables.html#TT_ADOBE_ID_XXX">TT_ADOBE_ID_XXX</a></td></tr>
+<tr><td><a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_SUBPIXELS</a></td><td><a href="ft2-multiple_masters.html#FT_Set_MM_Design_Coordinates">FT_Set_MM_Design_Coordinates</a></td><td><a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_DEFAULT</a></td></tr>
+<tr><td><a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_TRUNCATE</a></td><td><a href="ft2-base_interface.html#FT_Set_Pixel_Sizes">FT_Set_Pixel_Sizes</a></td><td><a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_ISO_10646</a></td></tr>
+<tr><td><a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_UNSCALED</a></td><td><a href="ft2-module_management.html#FT_Set_Renderer">FT_Set_Renderer</a></td><td><a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_UNICODE_1_1</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_BITMAP</a></td><td><a href="ft2-base_interface.html#FT_Set_Transform">FT_Set_Transform</a></td><td><a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_UNICODE_2_0</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_COMPOSITE</a></td><td><a href="ft2-multiple_masters.html#FT_Set_Var_Blend_Coordinates">FT_Set_Var_Blend_Coordinates</a></td><td><a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_UNICODE_32</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_NONE</a></td><td><a href="ft2-multiple_masters.html#FT_Set_Var_Design_Coordinates">FT_Set_Var_Design_Coordinates</a></td><td><a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_VARIANT_SELECTOR</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_OUTLINE</a></td><td><a href="ft2-header_file_macros.html#FT_SFNT_NAMES_H">FT_SFNT_NAMES_H</a></td><td><a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_XXX</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_PLOTTER</a></td><td><a href="ft2-truetype_tables.html#FT_Sfnt_Table_Info">FT_Sfnt_Table_Info</a></td><td><a href="ft2-truetype_tables.html#TT_Header">TT_Header</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_GLYPH_H">FT_GLYPH_H</a></td><td><a href="ft2-truetype_tables.html#FT_Sfnt_Tag">FT_Sfnt_Tag</a></td><td><a href="ft2-truetype_tables.html#TT_HoriHeader">TT_HoriHeader</a></td></tr>
+<tr><td><a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a></td><td><a href="ft2-sfnt_names.html#FT_SfntName">FT_SfntName</a></td><td><a href="ft2-truetype_tables.html#TT_ISO_ID_XXX">TT_ISO_ID_10646</a></td></tr>
+<tr><td><a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_Glyph_BBox_Mode</a></td><td><a href="ft2-basic_types.html#FT_Short">FT_Short</a></td><td><a href="ft2-truetype_tables.html#TT_ISO_ID_XXX">TT_ISO_ID_7BIT_ASCII</a></td></tr>
+<tr><td><a href="ft2-glyph_management.html#FT_Glyph_Copy">FT_Glyph_Copy</a></td><td><a href="ft2-base_interface.html#FT_Size_Request_Type">FT_SIZE_REQUEST_TYPE_BBOX</a></td><td><a href="ft2-truetype_tables.html#TT_ISO_ID_XXX">TT_ISO_ID_8859_1</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_Glyph_Format">FT_Glyph_Format</a></td><td><a href="ft2-base_interface.html#FT_Size_Request_Type">FT_SIZE_REQUEST_TYPE_CELL</a></td><td><a href="ft2-truetype_tables.html#TT_ISO_ID_XXX">TT_ISO_ID_XXX</a></td></tr>
+<tr><td><a href="ft2-glyph_management.html#FT_Glyph_Get_CBox">FT_Glyph_Get_CBox</a></td><td><a href="ft2-base_interface.html#FT_Size_Request_Type">FT_SIZE_REQUEST_TYPE_NOMINAL</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_ARABIC</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Glyph_Metrics">FT_Glyph_Metrics</a></td><td><a href="ft2-base_interface.html#FT_Size_Request_Type">FT_SIZE_REQUEST_TYPE_REAL_DIM</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_ARMENIAN</a></td></tr>
+<tr><td><a href="ft2-glyph_stroker.html#FT_Glyph_Stroke">FT_Glyph_Stroke</a></td><td><a href="ft2-base_interface.html#FT_Size_Request_Type">FT_SIZE_REQUEST_TYPE_SCALES</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_BENGALI</a></td></tr>
+<tr><td><a href="ft2-glyph_stroker.html#FT_Glyph_StrokeBorder">FT_Glyph_StrokeBorder</a></td><td><a href="ft2-header_file_macros.html#FT_SIZES_H">FT_SIZES_H</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_BURMESE</a></td></tr>
+<tr><td><a href="ft2-glyph_management.html#FT_Glyph_To_Bitmap">FT_Glyph_To_Bitmap</a></td><td><a href="ft2-computations.html#FT_Sin">FT_Sin</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_DEVANAGARI</a></td></tr>
+<tr><td><a href="ft2-glyph_management.html#FT_Glyph_Transform">FT_Glyph_Transform</a></td><td><a href="ft2-base_interface.html#FT_Size">FT_Size</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_GEEZ</a></td></tr>
+<tr><td><a href="ft2-glyph_management.html#FT_GlyphRec">FT_GlyphRec</a></td><td><a href="ft2-base_interface.html#FT_Size_Internal">FT_Size_Internal</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_GEORGIAN</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_GlyphSlot">FT_GlyphSlot</a></td><td><a href="ft2-base_interface.html#FT_Size_Metrics">FT_Size_Metrics</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_GREEK</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_GlyphSlotRec">FT_GlyphSlotRec</a></td><td><a href="ft2-base_interface.html#FT_Size_Request">FT_Size_Request</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_GUJARATI</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_GX_VALIDATE_H">FT_GX_VALIDATE_H</a></td><td><a href="ft2-base_interface.html#FT_Size_Request_Type">FT_Size_Request_Type</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_GURMUKHI</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_GZIP_H">FT_GZIP_H</a></td><td><a href="ft2-base_interface.html#FT_Size_RequestRec">FT_Size_RequestRec</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_HEBREW</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_HAS_FAST_GLYPHS">FT_HAS_FAST_GLYPHS</a></td><td><a href="ft2-base_interface.html#FT_SizeRec">FT_SizeRec</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_JAPANESE</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_HAS_FIXED_SIZES">FT_HAS_FIXED_SIZES</a></td><td><a href="ft2-base_interface.html#FT_Slot_Internal">FT_Slot_Internal</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_KANNADA</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_HAS_GLYPH_NAMES">FT_HAS_GLYPH_NAMES</a></td><td><a href="ft2-raster.html#FT_Span">FT_Span</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_KHMER</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_HAS_HORIZONTAL">FT_HAS_HORIZONTAL</a></td><td><a href="ft2-raster.html#FT_SpanFunc">FT_SpanFunc</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_KOREAN</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_HAS_KERNING">FT_HAS_KERNING</a></td><td><a href="ft2-glyph_stroker.html#FT_StrokerBorder">FT_STROKER_BORDER_LEFT</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_LAOTIAN</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_HAS_MULTIPLE_MASTERS">FT_HAS_MULTIPLE_MASTERS</a></td><td><a href="ft2-glyph_stroker.html#FT_StrokerBorder">FT_STROKER_BORDER_RIGHT</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_MALAYALAM</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_HAS_VERTICAL">FT_HAS_VERTICAL</a></td><td><a href="ft2-header_file_macros.html#FT_STROKER_H">FT_STROKER_H</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_MALDIVIAN</a></td></tr>
+<tr><td><a href="ft2-type1_tables.html#FT_Has_PS_Glyph_Names">FT_Has_PS_Glyph_Names</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineCap">FT_STROKER_LINECAP_BUTT</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_MONGOLIAN</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_IMAGE_H">FT_IMAGE_H</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineCap">FT_STROKER_LINECAP_ROUND</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_ORIYA</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_IMAGE_TAG">FT_IMAGE_TAG</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineCap">FT_STROKER_LINECAP_SQUARE</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_ROMAN</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_INCREMENTAL_H">FT_INCREMENTAL_H</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineJoin">FT_STROKER_LINEJOIN_BEVEL</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_RSYMBOL</a></td></tr>
+<tr><td><a href="ft2-incremental.html#FT_Incremental">FT_Incremental</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineJoin">FT_STROKER_LINEJOIN_MITER</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_RUSSIAN</a></td></tr>
+<tr><td><a href="ft2-incremental.html#FT_Incremental_FreeGlyphDataFunc">FT_Incremental_FreeGlyphDataFunc</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineJoin">FT_STROKER_LINEJOIN_ROUND</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_SIMPLIFIED_CHINESE</a></td></tr>
+<tr><td><a href="ft2-incremental.html#FT_Incremental_FuncsRec">FT_Incremental_FuncsRec</a></td><td><a href="ft2-base_interface.html#FT_STYLE_FLAG_XXX">FT_STYLE_FLAG_BOLD</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_SINDHI</a></td></tr>
+<tr><td><a href="ft2-incremental.html#FT_Incremental_GetGlyphDataFunc">FT_Incremental_GetGlyphDataFunc</a></td><td><a href="ft2-base_interface.html#FT_STYLE_FLAG_XXX">FT_STYLE_FLAG_ITALIC</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_SINHALESE</a></td></tr>
+<tr><td><a href="ft2-incremental.html#FT_Incremental_GetGlyphMetricsFunc">FT_Incremental_GetGlyphMetricsFunc</a></td><td><a href="ft2-base_interface.html#FT_STYLE_FLAG_XXX">FT_STYLE_FLAG_XXX</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_SLAVIC</a></td></tr>
+<tr><td><a href="ft2-incremental.html#FT_Incremental_Interface">FT_Incremental_Interface</a></td><td><a href="ft2-system_interface.html#FT_Stream">FT_Stream</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_TAMIL</a></td></tr>
+<tr><td><a href="ft2-incremental.html#FT_Incremental_InterfaceRec">FT_Incremental_InterfaceRec</a></td><td><a href="ft2-system_interface.html#FT_Stream_CloseFunc">FT_Stream_CloseFunc</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_TELUGU</a></td></tr>
+<tr><td><a href="ft2-incremental.html#FT_Incremental_Metrics">FT_Incremental_Metrics</a></td><td><a href="ft2-system_interface.html#FT_Stream_IoFunc">FT_Stream_IoFunc</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_THAI</a></td></tr>
+<tr><td><a href="ft2-incremental.html#FT_Incremental_MetricsRec">FT_Incremental_MetricsRec</a></td><td><a href="ft2-gzip.html#FT_Stream_OpenGzip">FT_Stream_OpenGzip</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_TIBETAN</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Init_FreeType">FT_Init_FreeType</a></td><td><a href="ft2-lzw.html#FT_Stream_OpenLZW">FT_Stream_OpenLZW</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_TRADITIONAL_CHINESE</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_Int">FT_Int</a></td><td><a href="ft2-system_interface.html#FT_StreamDesc">FT_StreamDesc</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_UNINTERP</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_Int16">FT_Int16</a></td><td><a href="ft2-system_interface.html#FT_StreamRec">FT_StreamRec</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_VIETNAMESE</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_Int32">FT_Int32</a></td><td><a href="ft2-basic_types.html#FT_String">FT_String</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_XXX</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_IS_CID_KEYED">FT_IS_CID_KEYED</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker">FT_Stroker</a></td><td><a href="ft2-truetype_tables.html#TT_MaxProfile">TT_MaxProfile</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_IS_FIXED_WIDTH">FT_IS_FIXED_WIDTH</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_BeginSubPath">FT_Stroker_BeginSubPath</a></td><td><a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_BIG_5</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_IS_SCALABLE">FT_IS_SCALABLE</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_ConicTo">FT_Stroker_ConicTo</a></td><td><a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_GB2312</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_IS_SFNT">FT_IS_SFNT</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_CubicTo">FT_Stroker_CubicTo</a></td><td><a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_JOHAB</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Kerning_Mode">FT_KERNING_DEFAULT</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_Done">FT_Stroker_Done</a></td><td><a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_SJIS</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Kerning_Mode">FT_KERNING_UNFITTED</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_EndSubPath">FT_Stroker_EndSubPath</a></td><td><a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_SYMBOL_CS</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Kerning_Mode">FT_KERNING_UNSCALED</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_Export">FT_Stroker_Export</a></td><td><a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_UCS_4</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Kerning_Mode">FT_Kerning_Mode</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_ExportBorder">FT_Stroker_ExportBorder</a></td><td><a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_UNICODE_CS</a></td></tr>
+<tr><td><a href="ft2-lcd_filtering.html#FT_LcdFilter">FT_LCD_FILTER_DEFAULT</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_GetBorderCounts">FT_Stroker_GetBorderCounts</a></td><td><a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_WANSUNG</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_LCD_FILTER_H">FT_LCD_FILTER_H</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_GetCounts">FT_Stroker_GetCounts</a></td><td><a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_XXX</a></td></tr>
+<tr><td><a href="ft2-lcd_filtering.html#FT_LcdFilter">FT_LCD_FILTER_LEGACY</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineCap">FT_Stroker_LineCap</a></td><td><a href="ft2-truetype_tables.html#TT_OS2">TT_OS2</a></td></tr>
+<tr><td><a href="ft2-lcd_filtering.html#FT_LcdFilter">FT_LCD_FILTER_LIGHT</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineJoin">FT_Stroker_LineJoin</a></td><td><a href="ft2-truetype_tables.html#TT_PCLT">TT_PCLT</a></td></tr>
+<tr><td><a href="ft2-lcd_filtering.html#FT_LcdFilter">FT_LCD_FILTER_NONE</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineTo">FT_Stroker_LineTo</a></td><td><a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_ADOBE</a></td></tr>
+<tr><td><a href="ft2-lcd_filtering.html#FT_LcdFilter">FT_LcdFilter</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_New">FT_Stroker_New</a></td><td><a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_APPLE_UNICODE</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_LIST_H">FT_LIST_H</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_ParseOutline">FT_Stroker_ParseOutline</a></td><td><a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_CUSTOM</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Library">FT_Library</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_Rewind">FT_Stroker_Rewind</a></td><td><a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_ISO</a></td></tr>
+<tr><td><a href="ft2-lcd_filtering.html#FT_Library_SetLcdFilter">FT_Library_SetLcdFilter</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_Set">FT_Stroker_Set</a></td><td><a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_MACINTOSH</a></td></tr>
+<tr><td><a href="ft2-version.html#FT_Library_Version">FT_Library_Version</a></td><td><a href="ft2-glyph_stroker.html#FT_StrokerBorder">FT_StrokerBorder</a></td><td><a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_MICROSOFT</a></td></tr>
+<tr><td><a href="ft2-list_processing.html#FT_List">FT_List</a></td><td><a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_2X2</a></td><td><a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_XXX</a></td></tr>
+<tr><td><a href="ft2-list_processing.html#FT_List_Add">FT_List_Add</a></td><td><a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS</a></td><td><a href="ft2-truetype_tables.html#TT_Postscript">TT_Postscript</a></td></tr>
+<tr><td><a href="ft2-list_processing.html#FT_List_Destructor">FT_List_Destructor</a></td><td><a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES</a></td><td><a href="ft2-truetype_tables.html#TT_VertHeader">TT_VertHeader</a></td></tr>
+</table>
+<hr>
+<table><tr><td width="100%"></td>
+<td><font size=-2>[<a href="
+ft2-toc.html">TOC</a>]</font></td></tr></table>
+
diff --git a/src/3rdparty/freetype/docs/reference/ft2-lcd_filtering.html b/src/3rdparty/freetype/docs/reference/ft2-lcd_filtering.html
new file mode 100644
index 0000000..5543304
--- /dev/null
+++ b/src/3rdparty/freetype/docs/reference/ft2-lcd_filtering.html
@@ -0,0 +1,145 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>FreeType-2.3.6 API Reference</title>
+<style type="text/css">
+ body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
+ color: #000000;
+ background: #FFFFFF; }
+
+ p { text-align: justify; }
+ h1 { text-align: center; }
+ li { text-align: justify; }
+ td { padding: 0 0.5em 0 0.5em; }
+ td.left { padding: 0 0.5em 0 0.5em;
+ text-align: left; }
+
+ a:link { color: #0000EF; }
+ a:visited { color: #51188E; }
+ a:hover { color: #FF0000; }
+
+ span.keyword { font-family: monospace;
+ text-align: left;
+ white-space: pre;
+ color: darkblue; }
+
+ pre.colored { color: blue; }
+
+ ul.empty { list-style-type: none; }
+</style>
+</head>
+<body>
+<center><h1>FreeType-2.3.6 API Reference</h1></center>
+
+<center><h1>
+LCD Filtering
+</h1></center>
+<h2>Synopsis</h2>
+<table align=center cellspacing=5 cellpadding=0 border=0>
+<tr><td></td><td><a href="#FT_LcdFilter">FT_LcdFilter</a></td><td></td><td><a href="#FT_Library_SetLcdFilter">FT_Library_SetLcdFilter</a></td><td></td><td></td></tr>
+</table><br><br>
+
+<table align=center width="87%"><tr><td>
+<p>The <a href="ft2-lcd_filtering.html#FT_Library_SetLcdFilter">FT_Library_SetLcdFilter</a> API can be used to specify a low-pass filter which is then applied to LCD-optimized bitmaps generated through <a href="ft2-base_interface.html#FT_Render_Glyph">FT_Render_Glyph</a>. This is useful to reduce color fringes which would occur with unfiltered rendering.</p>
+<p>Note that no filter is active by default, and that this function is <b>not</b> implemented in default builds of the library. You need to #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING in your &lsquo;ftoption.h&rsquo; file in order to activate it.</p>
+</td></tr></table><br>
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_LcdFilter">FT_LcdFilter</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_LCD_FILTER_H (freetype/ftlcdfil.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_LcdFilter_
+ {
+ <a href="ft2-lcd_filtering.html#FT_LcdFilter">FT_LCD_FILTER_NONE</a> = 0,
+ <a href="ft2-lcd_filtering.html#FT_LcdFilter">FT_LCD_FILTER_DEFAULT</a> = 1,
+ <a href="ft2-lcd_filtering.html#FT_LcdFilter">FT_LCD_FILTER_LIGHT</a> = 2,
+ <a href="ft2-lcd_filtering.html#FT_LcdFilter">FT_LCD_FILTER_LEGACY</a> = 16,
+
+ FT_LCD_FILTER_MAX /* do not remove */
+
+ } <b>FT_LcdFilter</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A list of values to identify various types of LCD filters.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>FT_LCD_FILTER_NONE</b></td><td>
+<p>Do not perform filtering. When used with subpixel rendering, this results in sometimes severe color fringes.</p>
+</td></tr>
+<tr valign=top><td><b>FT_LCD_FILTER_DEFAULT</b></td><td>
+<p>The default filter reduces color fringes considerably, at the cost of a slight blurriness in the output.</p>
+</td></tr>
+<tr valign=top><td><b>FT_LCD_FILTER_LIGHT</b></td><td>
+<p>The light filter is a variant that produces less blurriness at the cost of slightly more color fringes than the default one. It might be better, depending on taste, your monitor, or your personal vision.</p>
+</td></tr>
+<tr valign=top><td><b>FT_LCD_FILTER_LEGACY</b></td><td>
+<p>This filter corresponds to the original libXft color filter. It provides high contrast output but can exhibit really bad color fringes if glyphs are not extremely well hinted to the pixel grid. In other words, it only works well if the TrueType bytecode interpreter is enabled <b>and</b> high-quality hinted fonts are used.</p>
+<p>This filter is only provided for comparison purposes, and might be disabled or stay unsupported in the future.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>since</b></em></td></tr><tr><td>
+<p>2.3.0</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Library_SetLcdFilter">FT_Library_SetLcdFilter</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_LCD_FILTER_H (freetype/ftlcdfil.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Library_SetLcdFilter</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
+ <a href="ft2-lcd_filtering.html#FT_LcdFilter">FT_LcdFilter</a> filter );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>This function is used to apply color filtering to LCD decimated bitmaps, like the ones used when calling <a href="ft2-base_interface.html#FT_Render_Glyph">FT_Render_Glyph</a> with <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_LCD</a> or <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_LCD_V</a>.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>library</b></td><td>
+<p>A handle to the target library instance.</p>
+</td></tr>
+<tr valign=top><td><b>filter</b></td><td>
+<p>The filter type.</p>
+<p>You can use <a href="ft2-lcd_filtering.html#FT_LcdFilter">FT_LCD_FILTER_NONE</a> here to disable this feature, or <a href="ft2-lcd_filtering.html#FT_LcdFilter">FT_LCD_FILTER_DEFAULT</a> to use a default filter that should work well on most LCD screens.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>This feature is always disabled by default. Clients must make an explicit call to this function with a &lsquo;filter&rsquo; value other than <a href="ft2-lcd_filtering.html#FT_LcdFilter">FT_LCD_FILTER_NONE</a> in order to enable it.</p>
+<p>Due to <b>PATENTS</b> covering subpixel rendering, this function doesn't do anything except returning &lsquo;FT_Err_Unimplemented_Feature&rsquo; if the configuration macro FT_CONFIG_OPTION_SUBPIXEL_RENDERING is not defined in your build of the library, which should correspond to all default builds of FreeType.</p>
+<p>The filter affects glyph bitmaps rendered through <a href="ft2-base_interface.html#FT_Render_Glyph">FT_Render_Glyph</a>, <a href="ft2-outline_processing.html#FT_Outline_Get_Bitmap">FT_Outline_Get_Bitmap</a>, <a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a>, and <a href="ft2-base_interface.html#FT_Load_Char">FT_Load_Char</a>.</p>
+<p>It does <i>not</i> affect the output of <a href="ft2-outline_processing.html#FT_Outline_Render">FT_Outline_Render</a> and <a href="ft2-outline_processing.html#FT_Outline_Get_Bitmap">FT_Outline_Get_Bitmap</a>.</p>
+<p>If this feature is activated, the dimensions of LCD glyph bitmaps are either larger or taller than the dimensions of the corresponding outline with regards to the pixel grid. For example, for <a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_LCD</a>, the filter adds up to 3 pixels to the left, and up to 3 pixels to the right.</p>
+<p>The bitmap offset values are adjusted correctly, so clients shouldn't need to modify their layout and glyph positioning code when enabling the filter.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>since</b></em></td></tr><tr><td>
+<p>2.3.0</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+</body>
+</html>
diff --git a/src/3rdparty/freetype/docs/reference/ft2-list_processing.html b/src/3rdparty/freetype/docs/reference/ft2-list_processing.html
new file mode 100644
index 0000000..5264236
--- /dev/null
+++ b/src/3rdparty/freetype/docs/reference/ft2-list_processing.html
@@ -0,0 +1,479 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>FreeType-2.3.6 API Reference</title>
+<style type="text/css">
+ body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
+ color: #000000;
+ background: #FFFFFF; }
+
+ p { text-align: justify; }
+ h1 { text-align: center; }
+ li { text-align: justify; }
+ td { padding: 0 0.5em 0 0.5em; }
+ td.left { padding: 0 0.5em 0 0.5em;
+ text-align: left; }
+
+ a:link { color: #0000EF; }
+ a:visited { color: #51188E; }
+ a:hover { color: #FF0000; }
+
+ span.keyword { font-family: monospace;
+ text-align: left;
+ white-space: pre;
+ color: darkblue; }
+
+ pre.colored { color: blue; }
+
+ ul.empty { list-style-type: none; }
+</style>
+</head>
+<body>
+<center><h1>FreeType-2.3.6 API Reference</h1></center>
+
+<center><h1>
+List Processing
+</h1></center>
+<h2>Synopsis</h2>
+<table align=center cellspacing=5 cellpadding=0 border=0>
+<tr><td></td><td><a href="#FT_List">FT_List</a></td><td></td><td><a href="#FT_List_Add">FT_List_Add</a></td><td></td><td><a href="#FT_List_Iterate">FT_List_Iterate</a></td></tr>
+<tr><td></td><td><a href="#FT_ListNode">FT_ListNode</a></td><td></td><td><a href="#FT_List_Insert">FT_List_Insert</a></td><td></td><td><a href="#FT_List_Destructor">FT_List_Destructor</a></td></tr>
+<tr><td></td><td><a href="#FT_ListRec">FT_ListRec</a></td><td></td><td><a href="#FT_List_Remove">FT_List_Remove</a></td><td></td><td><a href="#FT_List_Finalize">FT_List_Finalize</a></td></tr>
+<tr><td></td><td><a href="#FT_ListNodeRec">FT_ListNodeRec</a></td><td></td><td><a href="#FT_List_Up">FT_List_Up</a></td><td></td><td></td></tr>
+<tr><td></td><td><a href="#FT_List_Find">FT_List_Find</a></td><td></td><td><a href="#FT_List_Iterator">FT_List_Iterator</a></td><td></td><td></td></tr>
+</table><br><br>
+
+<table align=center width="87%"><tr><td>
+<p>This section contains various definitions related to list processing using doubly-linked nodes.</p>
+</td></tr></table><br>
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_List">FT_List</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPES_H (freetype/fttypes.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_ListRec_* <b>FT_List</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A handle to a list record (see <a href="ft2-list_processing.html#FT_ListRec">FT_ListRec</a>).</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_ListNode">FT_ListNode</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPES_H (freetype/fttypes.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_ListNodeRec_* <b>FT_ListNode</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Many elements and objects in FreeType are listed through an <a href="ft2-list_processing.html#FT_List">FT_List</a> record (see <a href="ft2-list_processing.html#FT_ListRec">FT_ListRec</a>). As its name suggests, an FT_ListNode is a handle to a single list element.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_ListRec">FT_ListRec</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPES_H (freetype/fttypes.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_ListRec_
+ {
+ <a href="ft2-list_processing.html#FT_ListNode">FT_ListNode</a> head;
+ <a href="ft2-list_processing.html#FT_ListNode">FT_ListNode</a> tail;
+
+ } <b>FT_ListRec</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A structure used to hold a simple doubly-linked list. These are used in many parts of FreeType.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>head</b></td><td>
+<p>The head (first element) of doubly-linked list.</p>
+</td></tr>
+<tr valign=top><td><b>tail</b></td><td>
+<p>The tail (last element) of doubly-linked list.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_ListNodeRec">FT_ListNodeRec</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPES_H (freetype/fttypes.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_ListNodeRec_
+ {
+ <a href="ft2-list_processing.html#FT_ListNode">FT_ListNode</a> prev;
+ <a href="ft2-list_processing.html#FT_ListNode">FT_ListNode</a> next;
+ <span class="keyword">void</span>* data;
+
+ } <b>FT_ListNodeRec</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A structure used to hold a single list element.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>prev</b></td><td>
+<p>The previous element in the list. NULL if first.</p>
+</td></tr>
+<tr valign=top><td><b>next</b></td><td>
+<p>The next element in the list. NULL if last.</p>
+</td></tr>
+<tr valign=top><td><b>data</b></td><td>
+<p>A typeless pointer to the listed object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_List_Find">FT_List_Find</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_LIST_H (freetype/ftlist.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-list_processing.html#FT_ListNode">FT_ListNode</a> )
+ <b>FT_List_Find</b>( <a href="ft2-list_processing.html#FT_List">FT_List</a> list,
+ <span class="keyword">void</span>* data );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Finds the list node for a given listed object.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>list</b></td><td>
+<p>A pointer to the parent list.</p>
+</td></tr>
+<tr valign=top><td><b>data</b></td><td>
+<p>The address of the listed object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>List node. NULL if it wasn't found.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_List_Add">FT_List_Add</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_LIST_H (freetype/ftlist.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <span class="keyword">void</span> )
+ <b>FT_List_Add</b>( <a href="ft2-list_processing.html#FT_List">FT_List</a> list,
+ <a href="ft2-list_processing.html#FT_ListNode">FT_ListNode</a> node );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Appends an element to the end of a list.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>list</b></td><td>
+<p>A pointer to the parent list.</p>
+</td></tr>
+<tr valign=top><td><b>node</b></td><td>
+<p>The node to append.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_List_Insert">FT_List_Insert</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_LIST_H (freetype/ftlist.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <span class="keyword">void</span> )
+ <b>FT_List_Insert</b>( <a href="ft2-list_processing.html#FT_List">FT_List</a> list,
+ <a href="ft2-list_processing.html#FT_ListNode">FT_ListNode</a> node );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Inserts an element at the head of a list.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>list</b></td><td>
+<p>A pointer to parent list.</p>
+</td></tr>
+<tr valign=top><td><b>node</b></td><td>
+<p>The node to insert.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_List_Remove">FT_List_Remove</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_LIST_H (freetype/ftlist.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <span class="keyword">void</span> )
+ <b>FT_List_Remove</b>( <a href="ft2-list_processing.html#FT_List">FT_List</a> list,
+ <a href="ft2-list_processing.html#FT_ListNode">FT_ListNode</a> node );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Removes a node from a list. This function doesn't check whether the node is in the list!</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>node</b></td><td>
+<p>The node to remove.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>list</b></td><td>
+<p>A pointer to the parent list.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_List_Up">FT_List_Up</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_LIST_H (freetype/ftlist.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <span class="keyword">void</span> )
+ <b>FT_List_Up</b>( <a href="ft2-list_processing.html#FT_List">FT_List</a> list,
+ <a href="ft2-list_processing.html#FT_ListNode">FT_ListNode</a> node );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Moves a node to the head/top of a list. Used to maintain LRU lists.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>list</b></td><td>
+<p>A pointer to the parent list.</p>
+</td></tr>
+<tr valign=top><td><b>node</b></td><td>
+<p>The node to move.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_List_Iterator">FT_List_Iterator</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_LIST_H (freetype/ftlist.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <a href="ft2-basic_types.html#FT_Error">FT_Error</a>
+ (*<b>FT_List_Iterator</b>)( <a href="ft2-list_processing.html#FT_ListNode">FT_ListNode</a> node,
+ <span class="keyword">void</span>* user );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>An FT_List iterator function which is called during a list parse by <a href="ft2-list_processing.html#FT_List_Iterate">FT_List_Iterate</a>.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>node</b></td><td>
+<p>The current iteration list node.</p>
+</td></tr>
+<tr valign=top><td><b>user</b></td><td>
+<p>A typeless pointer passed to <a href="ft2-list_processing.html#FT_List_Iterate">FT_List_Iterate</a>. Can be used to point to the iteration's state.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_List_Iterate">FT_List_Iterate</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_LIST_H (freetype/ftlist.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_List_Iterate</b>( <a href="ft2-list_processing.html#FT_List">FT_List</a> list,
+ <a href="ft2-list_processing.html#FT_List_Iterator">FT_List_Iterator</a> iterator,
+ <span class="keyword">void</span>* user );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Parses a list and calls a given iterator function on each element. Note that parsing is stopped as soon as one of the iterator calls returns a non-zero value.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>list</b></td><td>
+<p>A handle to the list.</p>
+</td></tr>
+<tr valign=top><td><b>iterator</b></td><td>
+<p>An iterator function, called on each node of the list.</p>
+</td></tr>
+<tr valign=top><td><b>user</b></td><td>
+<p>A user-supplied field which is passed as the second argument to the iterator.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>The result (a FreeType error code) of the last iterator call.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_List_Destructor">FT_List_Destructor</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_LIST_H (freetype/ftlist.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">void</span>
+ (*<b>FT_List_Destructor</b>)( <a href="ft2-system_interface.html#FT_Memory">FT_Memory</a> memory,
+ <span class="keyword">void</span>* data,
+ <span class="keyword">void</span>* user );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>An <a href="ft2-list_processing.html#FT_List">FT_List</a> iterator function which is called during a list finalization by <a href="ft2-list_processing.html#FT_List_Finalize">FT_List_Finalize</a> to destroy all elements in a given list.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>system</b></td><td>
+<p>The current system object.</p>
+</td></tr>
+<tr valign=top><td><b>data</b></td><td>
+<p>The current object to destroy.</p>
+</td></tr>
+<tr valign=top><td><b>user</b></td><td>
+<p>A typeless pointer passed to <a href="ft2-list_processing.html#FT_List_Iterate">FT_List_Iterate</a>. It can be used to point to the iteration's state.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_List_Finalize">FT_List_Finalize</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_LIST_H (freetype/ftlist.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <span class="keyword">void</span> )
+ <b>FT_List_Finalize</b>( <a href="ft2-list_processing.html#FT_List">FT_List</a> list,
+ <a href="ft2-list_processing.html#FT_List_Destructor">FT_List_Destructor</a> destroy,
+ <a href="ft2-system_interface.html#FT_Memory">FT_Memory</a> memory,
+ <span class="keyword">void</span>* user );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Destroys all elements in the list as well as the list itself.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>list</b></td><td>
+<p>A handle to the list.</p>
+</td></tr>
+<tr valign=top><td><b>destroy</b></td><td>
+<p>A list destructor that will be applied to each element of the list.</p>
+</td></tr>
+<tr valign=top><td><b>memory</b></td><td>
+<p>The current memory object which handles deallocation.</p>
+</td></tr>
+<tr valign=top><td><b>user</b></td><td>
+<p>A user-supplied field which is passed as the last argument to the destructor.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+</body>
+</html>
diff --git a/src/3rdparty/freetype/docs/reference/ft2-lzw.html b/src/3rdparty/freetype/docs/reference/ft2-lzw.html
new file mode 100644
index 0000000..232091b
--- /dev/null
+++ b/src/3rdparty/freetype/docs/reference/ft2-lzw.html
@@ -0,0 +1,90 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>FreeType-2.3.6 API Reference</title>
+<style type="text/css">
+ body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
+ color: #000000;
+ background: #FFFFFF; }
+
+ p { text-align: justify; }
+ h1 { text-align: center; }
+ li { text-align: justify; }
+ td { padding: 0 0.5em 0 0.5em; }
+ td.left { padding: 0 0.5em 0 0.5em;
+ text-align: left; }
+
+ a:link { color: #0000EF; }
+ a:visited { color: #51188E; }
+ a:hover { color: #FF0000; }
+
+ span.keyword { font-family: monospace;
+ text-align: left;
+ white-space: pre;
+ color: darkblue; }
+
+ pre.colored { color: blue; }
+
+ ul.empty { list-style-type: none; }
+</style>
+</head>
+<body>
+<center><h1>FreeType-2.3.6 API Reference</h1></center>
+
+<center><h1>
+LZW Streams
+</h1></center>
+<h2>Synopsis</h2>
+<table align=center cellspacing=5 cellpadding=0 border=0>
+<tr><td></td><td><a href="#FT_Stream_OpenLZW">FT_Stream_OpenLZW</a></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
+</table><br><br>
+
+<table align=center width="87%"><tr><td>
+<p>This section contains the declaration of LZW-specific functions.</p>
+</td></tr></table><br>
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Stream_OpenLZW">FT_Stream_OpenLZW</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_LZW_H (freetype/ftlzw.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Stream_OpenLZW</b>( <a href="ft2-system_interface.html#FT_Stream">FT_Stream</a> stream,
+ <a href="ft2-system_interface.html#FT_Stream">FT_Stream</a> source );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Open a new stream to parse LZW-compressed font files. This is mainly used to support the compressed &lsquo;*.pcf.Z&rsquo; fonts that come with XFree86.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>stream</b></td><td>
+<p>The target embedding stream.</p>
+</td></tr>
+<tr valign=top><td><b>source</b></td><td>
+<p>The source stream.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The source stream must be opened <i>before</i> calling this function.</p>
+<p>Calling the internal function &lsquo;FT_Stream_Close&rsquo; on the new stream will <b>not</b> call &lsquo;FT_Stream_Close&rsquo; on the source stream. None of the stream objects will be released to the heap.</p>
+<p>The stream implementation is very basic and resets the decompression process each time seeking backwards is needed within the stream</p>
+<p>In certain builds of the library, LZW compression recognition is automatically handled when calling <a href="ft2-base_interface.html#FT_New_Face">FT_New_Face</a> or <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a>. This means that if no font driver is capable of handling the raw compressed file, the library will try to open a LZW stream from it and re-open the face with it.</p>
+<p>This function may return &lsquo;FT_Err_Unimplemented_Feature&rsquo; if your build of FreeType was not compiled with LZW support.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+</body>
+</html>
diff --git a/src/3rdparty/freetype/docs/reference/ft2-mac_specific.html b/src/3rdparty/freetype/docs/reference/ft2-mac_specific.html
new file mode 100644
index 0000000..4ae69b7
--- /dev/null
+++ b/src/3rdparty/freetype/docs/reference/ft2-mac_specific.html
@@ -0,0 +1,364 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>FreeType-2.3.6 API Reference</title>
+<style type="text/css">
+ body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
+ color: #000000;
+ background: #FFFFFF; }
+
+ p { text-align: justify; }
+ h1 { text-align: center; }
+ li { text-align: justify; }
+ td { padding: 0 0.5em 0 0.5em; }
+ td.left { padding: 0 0.5em 0 0.5em;
+ text-align: left; }
+
+ a:link { color: #0000EF; }
+ a:visited { color: #51188E; }
+ a:hover { color: #FF0000; }
+
+ span.keyword { font-family: monospace;
+ text-align: left;
+ white-space: pre;
+ color: darkblue; }
+
+ pre.colored { color: blue; }
+
+ ul.empty { list-style-type: none; }
+</style>
+</head>
+<body>
+<center><h1>FreeType-2.3.6 API Reference</h1></center>
+
+<center><h1>
+Mac Specific Interface
+</h1></center>
+<h2>Synopsis</h2>
+<table align=center cellspacing=5 cellpadding=0 border=0>
+<tr><td></td><td><a href="#FT_New_Face_From_FOND">FT_New_Face_From_FOND</a></td><td></td><td><a href="#FT_GetFilePath_From_Mac_ATS_Name">FT_GetFilePath_From_Mac_ATS_Name</a></td></tr>
+<tr><td></td><td><a href="#FT_GetFile_From_Mac_Name">FT_GetFile_From_Mac_Name</a></td><td></td><td><a href="#FT_New_Face_From_FSSpec">FT_New_Face_From_FSSpec</a></td></tr>
+<tr><td></td><td><a href="#FT_GetFile_From_Mac_ATS_Name">FT_GetFile_From_Mac_ATS_Name</a></td><td></td><td><a href="#FT_New_Face_From_FSRef">FT_New_Face_From_FSRef</a></td></tr>
+</table><br><br>
+
+<table align=center width="87%"><tr><td>
+<p>The following definitions are only available if FreeType is compiled on a Macintosh.</p>
+</td></tr></table><br>
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_New_Face_From_FOND">FT_New_Face_From_FOND</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_MAC_H (freetype/ftmac.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_New_Face_From_FOND</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
+ Handle fond,
+ <a href="ft2-basic_types.html#FT_Long">FT_Long</a> face_index,
+ <a href="ft2-base_interface.html#FT_Face">FT_Face</a> *aface )
+ FT_DEPRECATED_ATTRIBUTE;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Create a new face object from a FOND resource.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>library</b></td><td>
+<p>A handle to the library resource.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>fond</b></td><td>
+<p>A FOND resource.</p>
+</td></tr>
+<tr valign=top><td><b>face_index</b></td><td>
+<p>Only supported for the -1 &lsquo;sanity check&rsquo; special case.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>aface</b></td><td>
+<p>A handle to a new face object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>notes</b></em></td></tr><tr><td>
+<p>This function can be used to create <a href="ft2-base_interface.html#FT_Face">FT_Face</a> objects from fonts that are installed in the system as follows.</p>
+<pre class="colored">
+ fond = GetResource( 'FOND', fontName );
+ error = FT_New_Face_From_FOND( library, fond, 0, &amp;face );
+</pre>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_GetFile_From_Mac_Name">FT_GetFile_From_Mac_Name</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_MAC_H (freetype/ftmac.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_GetFile_From_Mac_Name</b>( <span class="keyword">const</span> <span class="keyword">char</span>* fontName,
+ FSSpec* pathSpec,
+ <a href="ft2-basic_types.html#FT_Long">FT_Long</a>* face_index )
+ FT_DEPRECATED_ATTRIBUTE;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Return an FSSpec for the disk file containing the named font.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>fontName</b></td><td>
+<p>Mac OS name of the font (e.g., Times New Roman Bold).</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>pathSpec</b></td><td>
+<p>FSSpec to the file. For passing to <a href="ft2-mac_specific.html#FT_New_Face_From_FSSpec">FT_New_Face_From_FSSpec</a>.</p>
+</td></tr>
+<tr valign=top><td><b>face_index</b></td><td>
+<p>Index of the face. For passing to <a href="ft2-mac_specific.html#FT_New_Face_From_FSSpec">FT_New_Face_From_FSSpec</a>.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_GetFile_From_Mac_ATS_Name">FT_GetFile_From_Mac_ATS_Name</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_MAC_H (freetype/ftmac.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_GetFile_From_Mac_ATS_Name</b>( <span class="keyword">const</span> <span class="keyword">char</span>* fontName,
+ FSSpec* pathSpec,
+ <a href="ft2-basic_types.html#FT_Long">FT_Long</a>* face_index )
+ FT_DEPRECATED_ATTRIBUTE;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Return an FSSpec for the disk file containing the named font.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>fontName</b></td><td>
+<p>Mac OS name of the font in ATS framework.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>pathSpec</b></td><td>
+<p>FSSpec to the file. For passing to <a href="ft2-mac_specific.html#FT_New_Face_From_FSSpec">FT_New_Face_From_FSSpec</a>.</p>
+</td></tr>
+<tr valign=top><td><b>face_index</b></td><td>
+<p>Index of the face. For passing to <a href="ft2-mac_specific.html#FT_New_Face_From_FSSpec">FT_New_Face_From_FSSpec</a>.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_GetFilePath_From_Mac_ATS_Name">FT_GetFilePath_From_Mac_ATS_Name</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_MAC_H (freetype/ftmac.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_GetFilePath_From_Mac_ATS_Name</b>( <span class="keyword">const</span> <span class="keyword">char</span>* fontName,
+ UInt8* path,
+ UInt32 maxPathSize,
+ <a href="ft2-basic_types.html#FT_Long">FT_Long</a>* face_index )
+ FT_DEPRECATED_ATTRIBUTE;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Return a pathname of the disk file and face index for given font name which is handled by ATS framework.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>fontName</b></td><td>
+<p>Mac OS name of the font in ATS framework.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>path</b></td><td>
+<p>Buffer to store pathname of the file. For passing to <a href="ft2-base_interface.html#FT_New_Face">FT_New_Face</a>. The client must allocate this buffer before calling this function.</p>
+</td></tr>
+<tr valign=top><td><b>maxPathSize</b></td><td>
+<p>Lengths of the buffer &lsquo;path&rsquo; that client allocated.</p>
+</td></tr>
+<tr valign=top><td><b>face_index</b></td><td>
+<p>Index of the face. For passing to <a href="ft2-base_interface.html#FT_New_Face">FT_New_Face</a>.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_New_Face_From_FSSpec">FT_New_Face_From_FSSpec</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_MAC_H (freetype/ftmac.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_New_Face_From_FSSpec</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
+ <span class="keyword">const</span> FSSpec *spec,
+ <a href="ft2-basic_types.html#FT_Long">FT_Long</a> face_index,
+ <a href="ft2-base_interface.html#FT_Face">FT_Face</a> *aface )
+ FT_DEPRECATED_ATTRIBUTE;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Create a new face object from a given resource and typeface index using an FSSpec to the font file.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>library</b></td><td>
+<p>A handle to the library resource.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>spec</b></td><td>
+<p>FSSpec to the font file.</p>
+</td></tr>
+<tr valign=top><td><b>face_index</b></td><td>
+<p>The index of the face within the resource. The first face has index 0.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>aface</b></td><td>
+<p>A handle to a new face object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p><a href="ft2-mac_specific.html#FT_New_Face_From_FSSpec">FT_New_Face_From_FSSpec</a> is identical to <a href="ft2-base_interface.html#FT_New_Face">FT_New_Face</a> except it accepts an FSSpec instead of a path.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_New_Face_From_FSRef">FT_New_Face_From_FSRef</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_MAC_H (freetype/ftmac.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_New_Face_From_FSRef</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
+ <span class="keyword">const</span> FSRef *ref,
+ <a href="ft2-basic_types.html#FT_Long">FT_Long</a> face_index,
+ <a href="ft2-base_interface.html#FT_Face">FT_Face</a> *aface )
+ FT_DEPRECATED_ATTRIBUTE;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Create a new face object from a given resource and typeface index using an FSRef to the font file.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>library</b></td><td>
+<p>A handle to the library resource.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>spec</b></td><td>
+<p>FSRef to the font file.</p>
+</td></tr>
+<tr valign=top><td><b>face_index</b></td><td>
+<p>The index of the face within the resource. The first face has index 0.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>aface</b></td><td>
+<p>A handle to a new face object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p><a href="ft2-mac_specific.html#FT_New_Face_From_FSRef">FT_New_Face_From_FSRef</a> is identical to <a href="ft2-base_interface.html#FT_New_Face">FT_New_Face</a> except it accepts an FSRef instead of a path.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+</body>
+</html>
diff --git a/src/3rdparty/freetype/docs/reference/ft2-module_management.html b/src/3rdparty/freetype/docs/reference/ft2-module_management.html
new file mode 100644
index 0000000..173d2bb
--- /dev/null
+++ b/src/3rdparty/freetype/docs/reference/ft2-module_management.html
@@ -0,0 +1,622 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>FreeType-2.3.6 API Reference</title>
+<style type="text/css">
+ body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
+ color: #000000;
+ background: #FFFFFF; }
+
+ p { text-align: justify; }
+ h1 { text-align: center; }
+ li { text-align: justify; }
+ td { padding: 0 0.5em 0 0.5em; }
+ td.left { padding: 0 0.5em 0 0.5em;
+ text-align: left; }
+
+ a:link { color: #0000EF; }
+ a:visited { color: #51188E; }
+ a:hover { color: #FF0000; }
+
+ span.keyword { font-family: monospace;
+ text-align: left;
+ white-space: pre;
+ color: darkblue; }
+
+ pre.colored { color: blue; }
+
+ ul.empty { list-style-type: none; }
+</style>
+</head>
+<body>
+<center><h1>FreeType-2.3.6 API Reference</h1></center>
+
+<center><h1>
+Module Management
+</h1></center>
+<h2>Synopsis</h2>
+<table align=center cellspacing=5 cellpadding=0 border=0>
+<tr><td></td><td><a href="#FT_Module_Constructor">FT_Module_Constructor</a></td><td></td><td><a href="#FT_Get_Module">FT_Get_Module</a></td><td></td><td><a href="#FT_Add_Default_Modules">FT_Add_Default_Modules</a></td></tr>
+<tr><td></td><td><a href="#FT_Module_Destructor">FT_Module_Destructor</a></td><td></td><td><a href="#FT_Remove_Module">FT_Remove_Module</a></td><td></td><td><a href="#FT_Renderer_Class">FT_Renderer_Class</a></td></tr>
+<tr><td></td><td><a href="#FT_Module_Requester">FT_Module_Requester</a></td><td></td><td><a href="#FT_New_Library">FT_New_Library</a></td><td></td><td><a href="#FT_Get_Renderer">FT_Get_Renderer</a></td></tr>
+<tr><td></td><td><a href="#FT_Module_Class">FT_Module_Class</a></td><td></td><td><a href="#FT_Done_Library">FT_Done_Library</a></td><td></td><td><a href="#FT_Set_Renderer">FT_Set_Renderer</a></td></tr>
+<tr><td></td><td><a href="#FT_Add_Module">FT_Add_Module</a></td><td></td><td><a href="#FT_Set_Debug_Hook">FT_Set_Debug_Hook</a></td><td></td><td></td></tr>
+</table><br><br>
+
+<table align=center width="87%"><tr><td>
+<p>The definitions below are used to manage modules within FreeType. Modules can be added, upgraded, and removed at runtime.</p>
+</td></tr></table><br>
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Module_Constructor">FT_Module_Constructor</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_MODULE_H (freetype/ftmodapi.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <a href="ft2-basic_types.html#FT_Error">FT_Error</a>
+ (*<b>FT_Module_Constructor</b>)( <a href="ft2-base_interface.html#FT_Module">FT_Module</a> module );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A function used to initialize (not create) a new module object.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>module</b></td><td>
+<p>The module to initialize.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Module_Destructor">FT_Module_Destructor</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_MODULE_H (freetype/ftmodapi.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">void</span>
+ (*<b>FT_Module_Destructor</b>)( <a href="ft2-base_interface.html#FT_Module">FT_Module</a> module );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A function used to finalize (not destroy) a given module object.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>module</b></td><td>
+<p>The module to finalize.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Module_Requester">FT_Module_Requester</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_MODULE_H (freetype/ftmodapi.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> FT_Module_Interface
+ (*<b>FT_Module_Requester</b>)( <a href="ft2-base_interface.html#FT_Module">FT_Module</a> module,
+ <span class="keyword">const</span> <span class="keyword">char</span>* name );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A function used to query a given module for a specific interface.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>module</b></td><td>
+<p>The module to finalize.</p>
+</td></tr>
+<tr valign=top><td><b>name</b></td><td>
+<p>The name of the interface in the module.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Module_Class">FT_Module_Class</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_MODULE_H (freetype/ftmodapi.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Module_Class_
+ {
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> module_flags;
+ <a href="ft2-basic_types.html#FT_Long">FT_Long</a> module_size;
+ <span class="keyword">const</span> <a href="ft2-basic_types.html#FT_String">FT_String</a>* module_name;
+ <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> module_version;
+ <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> module_requires;
+
+ <span class="keyword">const</span> <span class="keyword">void</span>* module_interface;
+
+ <a href="ft2-module_management.html#FT_Module_Constructor">FT_Module_Constructor</a> module_init;
+ <a href="ft2-module_management.html#FT_Module_Destructor">FT_Module_Destructor</a> module_done;
+ <a href="ft2-module_management.html#FT_Module_Requester">FT_Module_Requester</a> get_interface;
+
+ } <b>FT_Module_Class</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>The module class descriptor.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>module_flags</b></td><td>
+<p>Bit flags describing the module.</p>
+</td></tr>
+<tr valign=top><td><b>module_size</b></td><td>
+<p>The size of one module object/instance in bytes.</p>
+</td></tr>
+<tr valign=top><td><b>module_name</b></td><td>
+<p>The name of the module.</p>
+</td></tr>
+<tr valign=top><td><b>module_version</b></td><td>
+<p>The version, as a 16.16 fixed number (major.minor).</p>
+</td></tr>
+<tr valign=top><td><b>module_requires</b></td><td>
+<p>The version of FreeType this module requires, as a 16.16 fixed number (major.minor). Starts at version 2.0, i.e., 0x20000.</p>
+</td></tr>
+<tr valign=top><td><b>module_init</b></td><td>
+<p>The initializing function.</p>
+</td></tr>
+<tr valign=top><td><b>module_done</b></td><td>
+<p>The finalizing function.</p>
+</td></tr>
+<tr valign=top><td><b>get_interface</b></td><td>
+<p>The interface requesting function.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Add_Module">FT_Add_Module</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_MODULE_H (freetype/ftmodapi.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Add_Module</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
+ <span class="keyword">const</span> <a href="ft2-module_management.html#FT_Module_Class">FT_Module_Class</a>* clazz );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Adds a new module to a given library instance.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>library</b></td><td>
+<p>A handle to the library object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>clazz</b></td><td>
+<p>A pointer to class descriptor for the module.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>An error will be returned if a module already exists by that name, or if the module requires a version of FreeType that is too great.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Get_Module">FT_Get_Module</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_MODULE_H (freetype/ftmodapi.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-base_interface.html#FT_Module">FT_Module</a> )
+ <b>FT_Get_Module</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
+ <span class="keyword">const</span> <span class="keyword">char</span>* module_name );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Finds a module by its name.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>library</b></td><td>
+<p>A handle to the library object.</p>
+</td></tr>
+<tr valign=top><td><b>module_name</b></td><td>
+<p>The module's name (as an ASCII string).</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>A module handle. 0 if none was found.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>FreeType's internal modules aren't documented very well, and you should look up the source code for details.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Remove_Module">FT_Remove_Module</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_MODULE_H (freetype/ftmodapi.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Remove_Module</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
+ <a href="ft2-base_interface.html#FT_Module">FT_Module</a> module );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Removes a given module from a library instance.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>library</b></td><td>
+<p>A handle to a library object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>module</b></td><td>
+<p>A handle to a module object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The module object is destroyed by the function in case of success.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_New_Library">FT_New_Library</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_MODULE_H (freetype/ftmodapi.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_New_Library</b>( <a href="ft2-system_interface.html#FT_Memory">FT_Memory</a> memory,
+ <a href="ft2-base_interface.html#FT_Library">FT_Library</a> *alibrary );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>This function is used to create a new FreeType library instance from a given memory object. It is thus possible to use libraries with distinct memory allocators within the same program.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>memory</b></td><td>
+<p>A handle to the original memory object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>alibrary</b></td><td>
+<p>A pointer to handle of a new library object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Done_Library">FT_Done_Library</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_MODULE_H (freetype/ftmodapi.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Done_Library</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Discards a given library object. This closes all drivers and discards all resource objects.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>library</b></td><td>
+<p>A handle to the target library.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Set_Debug_Hook">FT_Set_Debug_Hook</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_MODULE_H (freetype/ftmodapi.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <span class="keyword">void</span> )
+ <b>FT_Set_Debug_Hook</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> hook_index,
+ FT_DebugHook_Func debug_hook );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Sets a debug hook function for debugging the interpreter of a font format.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>library</b></td><td>
+<p>A handle to the library object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>hook_index</b></td><td>
+<p>The index of the debug hook. You should use the values defined in &lsquo;ftobjs.h&rsquo;, e.g., &lsquo;FT_DEBUG_HOOK_TRUETYPE&rsquo;.</p>
+</td></tr>
+<tr valign=top><td><b>debug_hook</b></td><td>
+<p>The function used to debug the interpreter.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>Currently, four debug hook slots are available, but only two (for the TrueType and the Type 1 interpreter) are defined.</p>
+<p>Since the internal headers of FreeType are no longer installed, the symbol &lsquo;FT_DEBUG_HOOK_TRUETYPE&rsquo; isn't available publicly. This is a bug and will be fixed in a forthcoming release.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Add_Default_Modules">FT_Add_Default_Modules</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_MODULE_H (freetype/ftmodapi.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <span class="keyword">void</span> )
+ <b>FT_Add_Default_Modules</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Adds the set of default drivers to a given library object. This is only useful when you create a library object with <a href="ft2-module_management.html#FT_New_Library">FT_New_Library</a> (usually to plug a custom memory manager).</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>library</b></td><td>
+<p>A handle to a new library object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Renderer_Class">FT_Renderer_Class</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_RENDER_H (freetype/ftrender.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Renderer_Class_
+ {
+ <a href="ft2-module_management.html#FT_Module_Class">FT_Module_Class</a> root;
+
+ <a href="ft2-basic_types.html#FT_Glyph_Format">FT_Glyph_Format</a> glyph_format;
+
+ FT_Renderer_RenderFunc render_glyph;
+ FT_Renderer_TransformFunc transform_glyph;
+ FT_Renderer_GetCBoxFunc get_glyph_cbox;
+ FT_Renderer_SetModeFunc set_mode;
+
+ <a href="ft2-raster.html#FT_Raster_Funcs">FT_Raster_Funcs</a>* raster_class;
+
+ } <b>FT_Renderer_Class</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>The renderer module class descriptor.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>root</b></td><td>
+<p>The root <a href="ft2-module_management.html#FT_Module_Class">FT_Module_Class</a> fields.</p>
+</td></tr>
+<tr valign=top><td><b>glyph_format</b></td><td>
+<p>The glyph image format this renderer handles.</p>
+</td></tr>
+<tr valign=top><td><b>render_glyph</b></td><td>
+<p>A method used to render the image that is in a given glyph slot into a bitmap.</p>
+</td></tr>
+<tr valign=top><td><b>transform_glyph</b></td><td>
+<p>A method used to transform the image that is in a given glyph slot.</p>
+</td></tr>
+<tr valign=top><td><b>get_glyph_cbox</b></td><td>
+<p>A method used to access the glyph's cbox.</p>
+</td></tr>
+<tr valign=top><td><b>set_mode</b></td><td>
+<p>A method used to pass additional parameters.</p>
+</td></tr>
+<tr valign=top><td><b>raster_class</b></td><td>
+<p>For <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_OUTLINE</a> renderers only. This is a pointer to its raster's class.</p>
+</td></tr>
+<tr valign=top><td><b>raster</b></td><td>
+<p>For <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_OUTLINE</a> renderers only. This is a pointer to the corresponding raster object, if any.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Get_Renderer">FT_Get_Renderer</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_RENDER_H (freetype/ftrender.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-base_interface.html#FT_Renderer">FT_Renderer</a> )
+ <b>FT_Get_Renderer</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
+ <a href="ft2-basic_types.html#FT_Glyph_Format">FT_Glyph_Format</a> format );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Retrieves the current renderer for a given glyph format.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>library</b></td><td>
+<p>A handle to the library object.</p>
+</td></tr>
+<tr valign=top><td><b>format</b></td><td>
+<p>The glyph format.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>A renderer handle. 0 if none found.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>An error will be returned if a module already exists by that name, or if the module requires a version of FreeType that is too great.</p>
+<p>To add a new renderer, simply use <a href="ft2-module_management.html#FT_Add_Module">FT_Add_Module</a>. To retrieve a renderer by its name, use <a href="ft2-module_management.html#FT_Get_Module">FT_Get_Module</a>.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Set_Renderer">FT_Set_Renderer</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_RENDER_H (freetype/ftrender.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Set_Renderer</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
+ <a href="ft2-base_interface.html#FT_Renderer">FT_Renderer</a> renderer,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> num_params,
+ <a href="ft2-base_interface.html#FT_Parameter">FT_Parameter</a>* parameters );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Sets the current renderer to use, and set additional mode.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>library</b></td><td>
+<p>A handle to the library object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>renderer</b></td><td>
+<p>A handle to the renderer object.</p>
+</td></tr>
+<tr valign=top><td><b>num_params</b></td><td>
+<p>The number of additional parameters.</p>
+</td></tr>
+<tr valign=top><td><b>parameters</b></td><td>
+<p>Additional parameters.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>In case of success, the renderer will be used to convert glyph images in the renderer's known format into bitmaps.</p>
+<p>This doesn't change the current renderer for other formats.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+</body>
+</html>
diff --git a/src/3rdparty/freetype/docs/reference/ft2-multiple_masters.html b/src/3rdparty/freetype/docs/reference/ft2-multiple_masters.html
new file mode 100644
index 0000000..94aecc2
--- /dev/null
+++ b/src/3rdparty/freetype/docs/reference/ft2-multiple_masters.html
@@ -0,0 +1,507 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>FreeType-2.3.6 API Reference</title>
+<style type="text/css">
+ body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
+ color: #000000;
+ background: #FFFFFF; }
+
+ p { text-align: justify; }
+ h1 { text-align: center; }
+ li { text-align: justify; }
+ td { padding: 0 0.5em 0 0.5em; }
+ td.left { padding: 0 0.5em 0 0.5em;
+ text-align: left; }
+
+ a:link { color: #0000EF; }
+ a:visited { color: #51188E; }
+ a:hover { color: #FF0000; }
+
+ span.keyword { font-family: monospace;
+ text-align: left;
+ white-space: pre;
+ color: darkblue; }
+
+ pre.colored { color: blue; }
+
+ ul.empty { list-style-type: none; }
+</style>
+</head>
+<body>
+<center><h1>FreeType-2.3.6 API Reference</h1></center>
+
+<center><h1>
+Multiple Masters
+</h1></center>
+<h2>Synopsis</h2>
+<table align=center cellspacing=5 cellpadding=0 border=0>
+<tr><td></td><td><a href="#FT_MM_Axis">FT_MM_Axis</a></td><td></td><td><a href="#FT_Get_MM_Var">FT_Get_MM_Var</a></td></tr>
+<tr><td></td><td><a href="#FT_Multi_Master">FT_Multi_Master</a></td><td></td><td><a href="#FT_Set_MM_Design_Coordinates">FT_Set_MM_Design_Coordinates</a></td></tr>
+<tr><td></td><td><a href="#FT_Var_Axis">FT_Var_Axis</a></td><td></td><td><a href="#FT_Set_Var_Design_Coordinates">FT_Set_Var_Design_Coordinates</a></td></tr>
+<tr><td></td><td><a href="#FT_Var_Named_Style">FT_Var_Named_Style</a></td><td></td><td><a href="#FT_Set_MM_Blend_Coordinates">FT_Set_MM_Blend_Coordinates</a></td></tr>
+<tr><td></td><td><a href="#FT_MM_Var">FT_MM_Var</a></td><td></td><td><a href="#FT_Set_Var_Blend_Coordinates">FT_Set_Var_Blend_Coordinates</a></td></tr>
+<tr><td></td><td><a href="#FT_Get_Multi_Master">FT_Get_Multi_Master</a></td><td></td><td></td></tr>
+</table><br><br>
+
+<table align=center width="87%"><tr><td>
+<p>The following types and functions are used to manage Multiple Master fonts, i.e., the selection of specific design instances by setting design axis coordinates.</p>
+<p>George Williams has extended this interface to make it work with both Type 1 Multiple Masters fonts and GX distortable (var) fonts. Some of these routines only work with MM fonts, others will work with both types. They are similar enough that a consistent interface makes sense.</p>
+</td></tr></table><br>
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_MM_Axis">FT_MM_Axis</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_MM_Axis_
+ {
+ <a href="ft2-basic_types.html#FT_String">FT_String</a>* name;
+ <a href="ft2-basic_types.html#FT_Long">FT_Long</a> minimum;
+ <a href="ft2-basic_types.html#FT_Long">FT_Long</a> maximum;
+
+ } <b>FT_MM_Axis</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A simple structure used to model a given axis in design space for Multiple Masters fonts.</p>
+<p>This structure can't be used for GX var fonts.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>name</b></td><td>
+<p>The axis's name.</p>
+</td></tr>
+<tr valign=top><td><b>minimum</b></td><td>
+<p>The axis's minimum design coordinate.</p>
+</td></tr>
+<tr valign=top><td><b>maximum</b></td><td>
+<p>The axis's maximum design coordinate.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Multi_Master">FT_Multi_Master</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Multi_Master_
+ {
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> num_axis;
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> num_designs;
+ <a href="ft2-multiple_masters.html#FT_MM_Axis">FT_MM_Axis</a> axis[T1_MAX_MM_AXIS];
+
+ } <b>FT_Multi_Master</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A structure used to model the axes and space of a Multiple Masters font.</p>
+<p>This structure can't be used for GX var fonts.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>num_axis</b></td><td>
+<p>Number of axes. Cannot exceed 4.</p>
+</td></tr>
+<tr valign=top><td><b>num_designs</b></td><td>
+<p>Number of designs; should be normally 2^num_axis even though the Type 1 specification strangely allows for intermediate designs to be present. This number cannot exceed 16.</p>
+</td></tr>
+<tr valign=top><td><b>axis</b></td><td>
+<p>A table of axis descriptors.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Var_Axis">FT_Var_Axis</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Var_Axis_
+ {
+ <a href="ft2-basic_types.html#FT_String">FT_String</a>* name;
+
+ <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> minimum;
+ <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> def;
+ <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> maximum;
+
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> tag;
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> strid;
+
+ } <b>FT_Var_Axis</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A simple structure used to model a given axis in design space for Multiple Masters and GX var fonts.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>name</b></td><td>
+<p>The axis's name. Not always meaningful for GX.</p>
+</td></tr>
+<tr valign=top><td><b>minimum</b></td><td>
+<p>The axis's minimum design coordinate.</p>
+</td></tr>
+<tr valign=top><td><b>def</b></td><td>
+<p>The axis's default design coordinate. FreeType computes meaningful default values for MM; it is then an integer value, not in 16.16 format.</p>
+</td></tr>
+<tr valign=top><td><b>maximum</b></td><td>
+<p>The axis's maximum design coordinate.</p>
+</td></tr>
+<tr valign=top><td><b>tag</b></td><td>
+<p>The axis's tag (the GX equivalent to &lsquo;name&rsquo;). FreeType provides default values for MM if possible.</p>
+</td></tr>
+<tr valign=top><td><b>strid</b></td><td>
+<p>The entry in &lsquo;name&rsquo; table (another GX version of &lsquo;name&rsquo;). Not meaningful for MM.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Var_Named_Style">FT_Var_Named_Style</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Var_Named_Style_
+ {
+ <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a>* coords;
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> strid;
+
+ } <b>FT_Var_Named_Style</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A simple structure used to model a named style in a GX var font.</p>
+<p>This structure can't be used for MM fonts.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>coords</b></td><td>
+<p>The design coordinates for this style. This is an array with one entry for each axis.</p>
+</td></tr>
+<tr valign=top><td><b>strid</b></td><td>
+<p>The entry in &lsquo;name&rsquo; table identifying this style.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_MM_Var">FT_MM_Var</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_MM_Var_
+ {
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> num_axis;
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> num_designs;
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> num_namedstyles;
+ <a href="ft2-multiple_masters.html#FT_Var_Axis">FT_Var_Axis</a>* axis;
+ <a href="ft2-multiple_masters.html#FT_Var_Named_Style">FT_Var_Named_Style</a>* namedstyle;
+
+ } <b>FT_MM_Var</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A structure used to model the axes and space of a Multiple Masters or GX var distortable font.</p>
+<p>Some fields are specific to one format and not to the other.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>num_axis</b></td><td>
+<p>The number of axes. The maximum value is 4 for MM; no limit in GX.</p>
+</td></tr>
+<tr valign=top><td><b>num_designs</b></td><td>
+<p>The number of designs; should be normally 2^num_axis for MM fonts. Not meaningful for GX (where every glyph could have a different number of designs).</p>
+</td></tr>
+<tr valign=top><td><b>num_namedstyles</b></td><td>
+<p>The number of named styles; only meaningful for GX which allows certain design coordinates to have a string ID (in the &lsquo;name&rsquo; table) associated with them. The font can tell the user that, for example, Weight=1.5 is &lsquo;Bold&rsquo;.</p>
+</td></tr>
+<tr valign=top><td><b>axis</b></td><td>
+<p>A table of axis descriptors. GX fonts contain slightly more data than MM.</p>
+</td></tr>
+<tr valign=top><td><b>namedstyles</b></td><td>
+<p>A table of named styles. Only meaningful with GX.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Get_Multi_Master">FT_Get_Multi_Master</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Get_Multi_Master</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-multiple_masters.html#FT_Multi_Master">FT_Multi_Master</a> *amaster );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Retrieves the Multiple Master descriptor of a given font.</p>
+<p>This function can't be used with GX fonts.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to the source face.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>amaster</b></td><td>
+<p>The Multiple Masters descriptor.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Get_MM_Var">FT_Get_MM_Var</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Get_MM_Var</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-multiple_masters.html#FT_MM_Var">FT_MM_Var</a>* *amaster );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Retrieves the Multiple Master/GX var descriptor of a given font.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to the source face.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>amaster</b></td><td>
+<p>The Multiple Masters descriptor. Allocates a data structure, which the user must free (a single call to FT_FREE will do it).</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Set_MM_Design_Coordinates">FT_Set_MM_Design_Coordinates</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Set_MM_Design_Coordinates</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> num_coords,
+ <a href="ft2-basic_types.html#FT_Long">FT_Long</a>* coords );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>For Multiple Masters fonts, choose an interpolated font design through design coordinates.</p>
+<p>This function can't be used with GX fonts.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to the source face.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>num_coords</b></td><td>
+<p>The number of design coordinates (must be equal to the number of axes in the font).</p>
+</td></tr>
+<tr valign=top><td><b>coords</b></td><td>
+<p>An array of design coordinates.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Set_Var_Design_Coordinates">FT_Set_Var_Design_Coordinates</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Set_Var_Design_Coordinates</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> num_coords,
+ <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a>* coords );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>For Multiple Master or GX Var fonts, choose an interpolated font design through design coordinates.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to the source face.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>num_coords</b></td><td>
+<p>The number of design coordinates (must be equal to the number of axes in the font).</p>
+</td></tr>
+<tr valign=top><td><b>coords</b></td><td>
+<p>An array of design coordinates.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Set_MM_Blend_Coordinates">FT_Set_MM_Blend_Coordinates</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Set_MM_Blend_Coordinates</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> num_coords,
+ <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a>* coords );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>For Multiple Masters and GX var fonts, choose an interpolated font design through normalized blend coordinates.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to the source face.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>num_coords</b></td><td>
+<p>The number of design coordinates (must be equal to the number of axes in the font).</p>
+</td></tr>
+<tr valign=top><td><b>coords</b></td><td>
+<p>The design coordinates array (each element must be between 0 and 1.0).</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Set_Var_Blend_Coordinates">FT_Set_Var_Blend_Coordinates</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_MULTIPLE_MASTERS_H (freetype/ftmm.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Set_Var_Blend_Coordinates</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> num_coords,
+ <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a>* coords );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>This is another name of <a href="ft2-multiple_masters.html#FT_Set_MM_Blend_Coordinates">FT_Set_MM_Blend_Coordinates</a>.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+</body>
+</html>
diff --git a/src/3rdparty/freetype/docs/reference/ft2-ot_validation.html b/src/3rdparty/freetype/docs/reference/ft2-ot_validation.html
new file mode 100644
index 0000000..9db7884
--- /dev/null
+++ b/src/3rdparty/freetype/docs/reference/ft2-ot_validation.html
@@ -0,0 +1,204 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>FreeType-2.3.6 API Reference</title>
+<style type="text/css">
+ body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
+ color: #000000;
+ background: #FFFFFF; }
+
+ p { text-align: justify; }
+ h1 { text-align: center; }
+ li { text-align: justify; }
+ td { padding: 0 0.5em 0 0.5em; }
+ td.left { padding: 0 0.5em 0 0.5em;
+ text-align: left; }
+
+ a:link { color: #0000EF; }
+ a:visited { color: #51188E; }
+ a:hover { color: #FF0000; }
+
+ span.keyword { font-family: monospace;
+ text-align: left;
+ white-space: pre;
+ color: darkblue; }
+
+ pre.colored { color: blue; }
+
+ ul.empty { list-style-type: none; }
+</style>
+</head>
+<body>
+<center><h1>FreeType-2.3.6 API Reference</h1></center>
+
+<center><h1>
+OpenType Validation
+</h1></center>
+<h2>Synopsis</h2>
+<table align=center cellspacing=5 cellpadding=0 border=0>
+<tr><td></td><td><a href="#FT_VALIDATE_OTXXX">FT_VALIDATE_OTXXX</a></td><td></td><td><a href="#FT_OpenType_Validate">FT_OpenType_Validate</a></td><td></td><td><a href="#FT_OpenType_Free">FT_OpenType_Free</a></td></tr>
+</table><br><br>
+
+<table align=center width="87%"><tr><td>
+<p>This section contains the declaration of functions to validate some OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF, MATH).</p>
+</td></tr></table><br>
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_VALIDATE_OTXXX">FT_VALIDATE_OTXXX</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_OPENTYPE_VALIDATE_H (freetype/ftotval.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_BASE</a> 0x0100
+#define <a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_GDEF</a> 0x0200
+#define <a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_GPOS</a> 0x0400
+#define <a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_GSUB</a> 0x0800
+#define <a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_JSTF</a> 0x1000
+#define <a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_MATH</a> 0x2000
+
+#define <a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_OT</a> <a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_BASE</a> | \
+ <a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_GDEF</a> | \
+ <a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_GPOS</a> | \
+ <a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_GSUB</a> | \
+ <a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_JSTF</a> | \
+ <a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_MATH</a>
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A list of bit-field constants used with <a href="ft2-ot_validation.html#FT_OpenType_Validate">FT_OpenType_Validate</a> to indicate which OpenType tables should be validated.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>FT_VALIDATE_BASE</b></td><td>
+<p>Validate BASE table.</p>
+</td></tr>
+<tr valign=top><td><b>FT_VALIDATE_GDEF</b></td><td>
+<p>Validate GDEF table.</p>
+</td></tr>
+<tr valign=top><td><b>FT_VALIDATE_GPOS</b></td><td>
+<p>Validate GPOS table.</p>
+</td></tr>
+<tr valign=top><td><b>FT_VALIDATE_GSUB</b></td><td>
+<p>Validate GSUB table.</p>
+</td></tr>
+<tr valign=top><td><b>FT_VALIDATE_JSTF</b></td><td>
+<p>Validate JSTF table.</p>
+</td></tr>
+<tr valign=top><td><b>FT_VALIDATE_MATH</b></td><td>
+<p>Validate MATH table.</p>
+</td></tr>
+<tr valign=top><td><b>FT_VALIDATE_OT</b></td><td>
+<p>Validate all OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF, MATH).</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_OpenType_Validate">FT_OpenType_Validate</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_OPENTYPE_VALIDATE_H (freetype/ftotval.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_OpenType_Validate</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> validation_flags,
+ <a href="ft2-basic_types.html#FT_Bytes">FT_Bytes</a> *BASE_table,
+ <a href="ft2-basic_types.html#FT_Bytes">FT_Bytes</a> *GDEF_table,
+ <a href="ft2-basic_types.html#FT_Bytes">FT_Bytes</a> *GPOS_table,
+ <a href="ft2-basic_types.html#FT_Bytes">FT_Bytes</a> *GSUB_table,
+ <a href="ft2-basic_types.html#FT_Bytes">FT_Bytes</a> *JSTF_table );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Validate various OpenType tables to assure that all offsets and indices are valid. The idea is that a higher-level library which actually does the text layout can access those tables without error checking (which can be quite time consuming).</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to the input face.</p>
+</td></tr>
+<tr valign=top><td><b>validation_flags</b></td><td>
+<p>A bit field which specifies the tables to be validated. See <a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_OTXXX</a> for possible values.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>BASE_table</b></td><td>
+<p>A pointer to the BASE table.</p>
+</td></tr>
+<tr valign=top><td><b>GDEF_table</b></td><td>
+<p>A pointer to the GDEF table.</p>
+</td></tr>
+<tr valign=top><td><b>GPOS_table</b></td><td>
+<p>A pointer to the GPOS table.</p>
+</td></tr>
+<tr valign=top><td><b>GSUB_table</b></td><td>
+<p>A pointer to the GSUB table.</p>
+</td></tr>
+<tr valign=top><td><b>JSTF_table</b></td><td>
+<p>A pointer to the JSTF table.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>This function only works with OpenType fonts, returning an error otherwise.</p>
+<p>After use, the application should deallocate the five tables with <a href="ft2-ot_validation.html#FT_OpenType_Free">FT_OpenType_Free</a>. A NULL value indicates that the table either doesn't exist in the font, or the application hasn't asked for validation.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_OpenType_Free">FT_OpenType_Free</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_OPENTYPE_VALIDATE_H (freetype/ftotval.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <span class="keyword">void</span> )
+ <b>FT_OpenType_Free</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#FT_Bytes">FT_Bytes</a> table );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Free the buffer allocated by OpenType validator.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to the input face.</p>
+</td></tr>
+<tr valign=top><td><b>table</b></td><td>
+<p>The pointer to the buffer that is allocated by <a href="ft2-ot_validation.html#FT_OpenType_Validate">FT_OpenType_Validate</a>.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>This function must be used to free the buffer allocated by <a href="ft2-ot_validation.html#FT_OpenType_Validate">FT_OpenType_Validate</a> only.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+</body>
+</html>
diff --git a/src/3rdparty/freetype/docs/reference/ft2-outline_processing.html b/src/3rdparty/freetype/docs/reference/ft2-outline_processing.html
new file mode 100644
index 0000000..9153b8d
--- /dev/null
+++ b/src/3rdparty/freetype/docs/reference/ft2-outline_processing.html
@@ -0,0 +1,1086 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>FreeType-2.3.6 API Reference</title>
+<style type="text/css">
+ body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
+ color: #000000;
+ background: #FFFFFF; }
+
+ p { text-align: justify; }
+ h1 { text-align: center; }
+ li { text-align: justify; }
+ td { padding: 0 0.5em 0 0.5em; }
+ td.left { padding: 0 0.5em 0 0.5em;
+ text-align: left; }
+
+ a:link { color: #0000EF; }
+ a:visited { color: #51188E; }
+ a:hover { color: #FF0000; }
+
+ span.keyword { font-family: monospace;
+ text-align: left;
+ white-space: pre;
+ color: darkblue; }
+
+ pre.colored { color: blue; }
+
+ ul.empty { list-style-type: none; }
+</style>
+</head>
+<body>
+<center><h1>FreeType-2.3.6 API Reference</h1></center>
+
+<center><h1>
+Outline Processing
+</h1></center>
+<h2>Synopsis</h2>
+<table align=center cellspacing=5 cellpadding=0 border=0>
+<tr><td></td><td><a href="#FT_Outline">FT_Outline</a></td><td></td><td><a href="#FT_Outline_MoveToFunc">FT_Outline_MoveToFunc</a></td></tr>
+<tr><td></td><td><a href="#FT_OUTLINE_FLAGS">FT_OUTLINE_FLAGS</a></td><td></td><td><a href="#FT_Outline_LineToFunc">FT_Outline_LineToFunc</a></td></tr>
+<tr><td></td><td><a href="#FT_Outline_New">FT_Outline_New</a></td><td></td><td><a href="#FT_Outline_ConicToFunc">FT_Outline_ConicToFunc</a></td></tr>
+<tr><td></td><td><a href="#FT_Outline_Done">FT_Outline_Done</a></td><td></td><td><a href="#FT_Outline_CubicToFunc">FT_Outline_CubicToFunc</a></td></tr>
+<tr><td></td><td><a href="#FT_Outline_Copy">FT_Outline_Copy</a></td><td></td><td><a href="#FT_Outline_Funcs">FT_Outline_Funcs</a></td></tr>
+<tr><td></td><td><a href="#FT_Outline_Translate">FT_Outline_Translate</a></td><td></td><td><a href="#FT_Outline_Decompose">FT_Outline_Decompose</a></td></tr>
+<tr><td></td><td><a href="#FT_Outline_Transform">FT_Outline_Transform</a></td><td></td><td><a href="#FT_Outline_Get_CBox">FT_Outline_Get_CBox</a></td></tr>
+<tr><td></td><td><a href="#FT_Outline_Embolden">FT_Outline_Embolden</a></td><td></td><td><a href="#FT_Outline_Get_Bitmap">FT_Outline_Get_Bitmap</a></td></tr>
+<tr><td></td><td><a href="#FT_Outline_Reverse">FT_Outline_Reverse</a></td><td></td><td><a href="#FT_Outline_Render">FT_Outline_Render</a></td></tr>
+<tr><td></td><td><a href="#FT_Outline_Check">FT_Outline_Check</a></td><td></td><td><a href="#FT_Orientation">FT_Orientation</a></td></tr>
+<tr><td></td><td><a href="#FT_Outline_Get_BBox">FT_Outline_Get_BBox</a></td><td></td><td><a href="#FT_Outline_Get_Orientation">FT_Outline_Get_Orientation</a></td></tr>
+<tr><td></td><td><a href="#ft_outline_flags">ft_outline_flags</a></td><td></td><td></td></tr>
+</table><br><br>
+
+<table align=center width="87%"><tr><td>
+<p>This section contains routines used to create and destroy scalable glyph images known as &lsquo;outlines&rsquo;. These can also be measured, transformed, and converted into bitmaps and pixmaps.</p>
+</td></tr></table><br>
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Outline">FT_Outline</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_IMAGE_H (freetype/ftimage.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Outline_
+ {
+ <span class="keyword">short</span> n_contours; /* number of contours in glyph */
+ <span class="keyword">short</span> n_points; /* number of points in the glyph */
+
+ <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* points; /* the outline's points */
+ <span class="keyword">char</span>* tags; /* the points flags */
+ <span class="keyword">short</span>* contours; /* the contour end points */
+
+ <span class="keyword">int</span> flags; /* outline masks */
+
+ } <b>FT_Outline</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>This structure is used to describe an outline to the scan-line converter.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>n_contours</b></td><td>
+<p>The number of contours in the outline.</p>
+</td></tr>
+<tr valign=top><td><b>n_points</b></td><td>
+<p>The number of points in the outline.</p>
+</td></tr>
+<tr valign=top><td><b>points</b></td><td>
+<p>A pointer to an array of &lsquo;n_points&rsquo; <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a> elements, giving the outline's point coordinates.</p>
+</td></tr>
+<tr valign=top><td><b>tags</b></td><td>
+<p>A pointer to an array of &lsquo;n_points&rsquo; chars, giving each outline point's type. If bit 0 is unset, the point is &lsquo;off&rsquo; the curve, i.e., a Bézier control point, while it is &lsquo;on&rsquo; when set.</p>
+<p>Bit 1 is meaningful for &lsquo;off&rsquo; points only. If set, it indicates a third-order Bézier arc control point; and a second-order control point if unset.</p>
+</td></tr>
+<tr valign=top><td><b>contours</b></td><td>
+<p>An array of &lsquo;n_contours&rsquo; shorts, giving the end point of each contour within the outline. For example, the first contour is defined by the points &lsquo;0&rsquo; to &lsquo;contours[0]&rsquo;, the second one is defined by the points &lsquo;contours[0]+1&rsquo; to &lsquo;contours[1]&rsquo;, etc.</p>
+</td></tr>
+<tr valign=top><td><b>flags</b></td><td>
+<p>A set of bit flags used to characterize the outline and give hints to the scan-converter and hinter on how to convert/grid-fit it. See <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_FLAGS</a>.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_OUTLINE_FLAGS">FT_OUTLINE_FLAGS</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_IMAGE_H (freetype/ftimage.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_NONE</a> 0x0
+#define <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_OWNER</a> 0x1
+#define <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_EVEN_ODD_FILL</a> 0x2
+#define <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_REVERSE_FILL</a> 0x4
+#define <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_IGNORE_DROPOUTS</a> 0x8
+
+#define <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_HIGH_PRECISION</a> 0x100
+#define <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_SINGLE_PASS</a> 0x200
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A list of bit-field constants use for the flags in an outline's &lsquo;flags&rsquo; field.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>FT_OUTLINE_NONE</b></td><td>
+<p>Value 0 is reserved.</p>
+</td></tr>
+<tr valign=top><td><b>FT_OUTLINE_OWNER</b></td><td>
+<p>If set, this flag indicates that the outline's field arrays (i.e., &lsquo;points&rsquo;, &lsquo;flags&rsquo; &amp; &lsquo;contours&rsquo;) are &lsquo;owned&rsquo; by the outline object, and should thus be freed when it is destroyed.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_OUTLINE_EVEN_ODD_FILL</b></td></tr>
+<tr valign=top><td></td><td>
+<p>By default, outlines are filled using the non-zero winding rule. If set to 1, the outline will be filled using the even-odd fill rule (only works with the smooth raster).</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_OUTLINE_REVERSE_FILL</b></td></tr>
+<tr valign=top><td></td><td>
+<p>By default, outside contours of an outline are oriented in clock-wise direction, as defined in the TrueType specification. This flag is set if the outline uses the opposite direction (typically for Type 1 fonts). This flag is ignored by the scan-converter.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_OUTLINE_IGNORE_DROPOUTS</b></td></tr>
+<tr valign=top><td></td><td>
+<p>By default, the scan converter will try to detect drop-outs in an outline and correct the glyph bitmap to ensure consistent shape continuity. If set, this flag hints the scan-line converter to ignore such cases.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_OUTLINE_HIGH_PRECISION</b></td></tr>
+<tr valign=top><td></td><td>
+<p>This flag indicates that the scan-line converter should try to convert this outline to bitmaps with the highest possible quality. It is typically set for small character sizes. Note that this is only a hint, that might be completely ignored by a given scan-converter.</p>
+</td></tr>
+<tr valign=top><td><b>FT_OUTLINE_SINGLE_PASS</b></td><td>
+<p>This flag is set to force a given scan-converter to only use a single pass over the outline to render a bitmap glyph image. Normally, it is set for very large character sizes. It is only a hint, that might be completely ignored by a given scan-converter.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Outline_New">FT_Outline_New</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_OUTLINE_H (freetype/ftoutln.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Outline_New</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> numPoints,
+ <a href="ft2-basic_types.html#FT_Int">FT_Int</a> numContours,
+ <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a> *anoutline );
+
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ FT_Outline_New_Internal( <a href="ft2-system_interface.html#FT_Memory">FT_Memory</a> memory,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> numPoints,
+ <a href="ft2-basic_types.html#FT_Int">FT_Int</a> numContours,
+ <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a> *anoutline );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Creates a new outline of a given size.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>library</b></td><td>
+<p>A handle to the library object from where the outline is allocated. Note however that the new outline will <b>not</b> necessarily be <b>freed</b>, when destroying the library, by <a href="ft2-base_interface.html#FT_Done_FreeType">FT_Done_FreeType</a>.</p>
+</td></tr>
+<tr valign=top><td><b>numPoints</b></td><td>
+<p>The maximal number of points within the outline.</p>
+</td></tr>
+<tr valign=top><td><b>numContours</b></td><td>
+<p>The maximal number of contours within the outline.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>anoutline</b></td><td>
+<p>A handle to the new outline. NULL in case of error.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The reason why this function takes a &lsquo;library&rsquo; parameter is simply to use the library's memory allocator.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Outline_Done">FT_Outline_Done</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_OUTLINE_H (freetype/ftoutln.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Outline_Done</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
+ <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>* outline );
+
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ FT_Outline_Done_Internal( <a href="ft2-system_interface.html#FT_Memory">FT_Memory</a> memory,
+ <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>* outline );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Destroys an outline created with <a href="ft2-outline_processing.html#FT_Outline_New">FT_Outline_New</a>.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>library</b></td><td>
+<p>A handle of the library object used to allocate the outline.</p>
+</td></tr>
+<tr valign=top><td><b>outline</b></td><td>
+<p>A pointer to the outline object to be discarded.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>If the outline's &lsquo;owner&rsquo; field is not set, only the outline descriptor will be released.</p>
+<p>The reason why this function takes an &lsquo;library&rsquo; parameter is simply to use ft_mem_free().</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Outline_Copy">FT_Outline_Copy</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_OUTLINE_H (freetype/ftoutln.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Outline_Copy</b>( <span class="keyword">const</span> <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>* source,
+ <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a> *target );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Copies an outline into another one. Both objects must have the same sizes (number of points &amp; number of contours) when this function is called.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>source</b></td><td>
+<p>A handle to the source outline.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>target</b></td><td>
+<p>A handle to the target outline.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Outline_Translate">FT_Outline_Translate</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_OUTLINE_H (freetype/ftoutln.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <span class="keyword">void</span> )
+ <b>FT_Outline_Translate</b>( <span class="keyword">const</span> <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>* outline,
+ <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> xOffset,
+ <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> yOffset );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Applies a simple translation to the points of an outline.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>outline</b></td><td>
+<p>A pointer to the target outline descriptor.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>xOffset</b></td><td>
+<p>The horizontal offset.</p>
+</td></tr>
+<tr valign=top><td><b>yOffset</b></td><td>
+<p>The vertical offset.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Outline_Transform">FT_Outline_Transform</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_OUTLINE_H (freetype/ftoutln.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <span class="keyword">void</span> )
+ <b>FT_Outline_Transform</b>( <span class="keyword">const</span> <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>* outline,
+ <span class="keyword">const</span> <a href="ft2-basic_types.html#FT_Matrix">FT_Matrix</a>* matrix );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Applies a simple 2x2 matrix to all of an outline's points. Useful for applying rotations, slanting, flipping, etc.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>outline</b></td><td>
+<p>A pointer to the target outline descriptor.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>matrix</b></td><td>
+<p>A pointer to the transformation matrix.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>You can use <a href="ft2-outline_processing.html#FT_Outline_Translate">FT_Outline_Translate</a> if you need to translate the outline's points.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Outline_Embolden">FT_Outline_Embolden</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_OUTLINE_H (freetype/ftoutln.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Outline_Embolden</b>( <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>* outline,
+ <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> strength );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Emboldens an outline. The new outline will be at most 4 times &lsquo;strength&rsquo; pixels wider and higher. You may think of the left and bottom borders as unchanged.</p>
+<p>Negative &lsquo;strength&rsquo; values to reduce the outline thickness are possible also.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>outline</b></td><td>
+<p>A handle to the target outline.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>strength</b></td><td>
+<p>How strong the glyph is emboldened. Expressed in 26.6 pixel format.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The used algorithm to increase or decrease the thickness of the glyph doesn't change the number of points; this means that certain situations like acute angles or intersections are sometimes handled incorrectly.</p>
+<p>Example call:</p>
+<pre class="colored">
+ FT_Load_Glyph( face, index, FT_LOAD_DEFAULT );
+ if ( face-&gt;slot-&gt;format == FT_GLYPH_FORMAT_OUTLINE )
+ FT_Outline_Embolden( &amp;face-&gt;slot-&gt;outline, strength );
+</pre>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Outline_Reverse">FT_Outline_Reverse</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_OUTLINE_H (freetype/ftoutln.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <span class="keyword">void</span> )
+ <b>FT_Outline_Reverse</b>( <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>* outline );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Reverses the drawing direction of an outline. This is used to ensure consistent fill conventions for mirrored glyphs.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>outline</b></td><td>
+<p>A pointer to the target outline descriptor.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>This functions toggles the bit flag <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_REVERSE_FILL</a> in the outline's &lsquo;flags&rsquo; field.</p>
+<p>It shouldn't be used by a normal client application, unless it knows what it is doing.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Outline_Check">FT_Outline_Check</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_OUTLINE_H (freetype/ftoutln.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Outline_Check</b>( <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>* outline );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Check the contents of an outline descriptor.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>outline</b></td><td>
+<p>A handle to a source outline.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Outline_Get_BBox">FT_Outline_Get_BBox</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_BBOX_H (freetype/ftbbox.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Outline_Get_BBox</b>( <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>* outline,
+ <a href="ft2-basic_types.html#FT_BBox">FT_BBox</a> *abbox );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Computes the exact bounding box of an outline. This is slower than computing the control box. However, it uses an advanced algorithm which returns <i>very</i> quickly when the two boxes coincide. Otherwise, the outline Bézier arcs are traversed to extract their extrema.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>outline</b></td><td>
+<p>A pointer to the source outline.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>abbox</b></td><td>
+<p>The outline's exact bounding box.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="ft_outline_flags">ft_outline_flags</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_IMAGE_H (freetype/ftimage.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <a href="ft2-outline_processing.html#ft_outline_flags">ft_outline_none</a> <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_NONE</a>
+#define <a href="ft2-outline_processing.html#ft_outline_flags">ft_outline_owner</a> <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_OWNER</a>
+#define <a href="ft2-outline_processing.html#ft_outline_flags">ft_outline_even_odd_fill</a> <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_EVEN_ODD_FILL</a>
+#define <a href="ft2-outline_processing.html#ft_outline_flags">ft_outline_reverse_fill</a> <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_REVERSE_FILL</a>
+#define <a href="ft2-outline_processing.html#ft_outline_flags">ft_outline_ignore_dropouts</a> <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_IGNORE_DROPOUTS</a>
+#define <a href="ft2-outline_processing.html#ft_outline_flags">ft_outline_high_precision</a> <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_HIGH_PRECISION</a>
+#define <a href="ft2-outline_processing.html#ft_outline_flags">ft_outline_single_pass</a> <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_SINGLE_PASS</a>
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>These constants are deprecated. Please use the corresponding <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_FLAGS</a> values.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>ft_outline_none</b></td><td>
+<p>See <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_NONE</a>.</p>
+</td></tr>
+<tr valign=top><td><b>ft_outline_owner</b></td><td>
+<p>See <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_OWNER</a>.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>ft_outline_even_odd_fill</b></td></tr>
+<tr valign=top><td></td><td>
+<p>See <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_EVEN_ODD_FILL</a>.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>ft_outline_reverse_fill</b></td></tr>
+<tr valign=top><td></td><td>
+<p>See <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_REVERSE_FILL</a>.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>ft_outline_ignore_dropouts</b></td></tr>
+<tr valign=top><td></td><td>
+<p>See <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_IGNORE_DROPOUTS</a>.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>ft_outline_high_precision</b></td></tr>
+<tr valign=top><td></td><td>
+<p>See <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_HIGH_PRECISION</a>.</p>
+</td></tr>
+<tr valign=top><td><b>ft_outline_single_pass</b></td><td>
+<p>See <a href="ft2-outline_processing.html#FT_OUTLINE_FLAGS">FT_OUTLINE_SINGLE_PASS</a>.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Outline_MoveToFunc">FT_Outline_MoveToFunc</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_IMAGE_H (freetype/ftimage.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">int</span>
+ (*<b>FT_Outline_MoveToFunc</b>)( <span class="keyword">const</span> <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* to,
+ <span class="keyword">void</span>* user );
+
+#define FT_Outline_MoveTo_Func <b>FT_Outline_MoveToFunc</b>
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A function pointer type used to describe the signature of a &lsquo;move to&rsquo; function during outline walking/decomposition.</p>
+<p>A &lsquo;move to&rsquo; is emitted to start a new contour in an outline.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>to</b></td><td>
+<p>A pointer to the target point of the &lsquo;move to&rsquo;.</p>
+</td></tr>
+<tr valign=top><td><b>user</b></td><td>
+<p>A typeless pointer which is passed from the caller of the decomposition function.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>Error code. 0 means success.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Outline_LineToFunc">FT_Outline_LineToFunc</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_IMAGE_H (freetype/ftimage.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">int</span>
+ (*<b>FT_Outline_LineToFunc</b>)( <span class="keyword">const</span> <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* to,
+ <span class="keyword">void</span>* user );
+
+#define FT_Outline_LineTo_Func <b>FT_Outline_LineToFunc</b>
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A function pointer type used to describe the signature of a &lsquo;line to&rsquo; function during outline walking/decomposition.</p>
+<p>A &lsquo;line to&rsquo; is emitted to indicate a segment in the outline.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>to</b></td><td>
+<p>A pointer to the target point of the &lsquo;line to&rsquo;.</p>
+</td></tr>
+<tr valign=top><td><b>user</b></td><td>
+<p>A typeless pointer which is passed from the caller of the decomposition function.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>Error code. 0 means success.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Outline_ConicToFunc">FT_Outline_ConicToFunc</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_IMAGE_H (freetype/ftimage.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">int</span>
+ (*<b>FT_Outline_ConicToFunc</b>)( <span class="keyword">const</span> <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* control,
+ <span class="keyword">const</span> <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* to,
+ <span class="keyword">void</span>* user );
+
+#define FT_Outline_ConicTo_Func <b>FT_Outline_ConicToFunc</b>
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A function pointer type use to describe the signature of a &lsquo;conic to&rsquo; function during outline walking/decomposition.</p>
+<p>A &lsquo;conic to&rsquo; is emitted to indicate a second-order Bézier arc in the outline.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>control</b></td><td>
+<p>An intermediate control point between the last position and the new target in &lsquo;to&rsquo;.</p>
+</td></tr>
+<tr valign=top><td><b>to</b></td><td>
+<p>A pointer to the target end point of the conic arc.</p>
+</td></tr>
+<tr valign=top><td><b>user</b></td><td>
+<p>A typeless pointer which is passed from the caller of the decomposition function.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>Error code. 0 means success.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Outline_CubicToFunc">FT_Outline_CubicToFunc</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_IMAGE_H (freetype/ftimage.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">int</span>
+ (*<b>FT_Outline_CubicToFunc</b>)( <span class="keyword">const</span> <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* control1,
+ <span class="keyword">const</span> <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* control2,
+ <span class="keyword">const</span> <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a>* to,
+ <span class="keyword">void</span>* user );
+
+#define FT_Outline_CubicTo_Func <b>FT_Outline_CubicToFunc</b>
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A function pointer type used to describe the signature of a &lsquo;cubic to&rsquo; function during outline walking/decomposition.</p>
+<p>A &lsquo;cubic to&rsquo; is emitted to indicate a third-order Bézier arc.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>control1</b></td><td>
+<p>A pointer to the first Bézier control point.</p>
+</td></tr>
+<tr valign=top><td><b>control2</b></td><td>
+<p>A pointer to the second Bézier control point.</p>
+</td></tr>
+<tr valign=top><td><b>to</b></td><td>
+<p>A pointer to the target end point.</p>
+</td></tr>
+<tr valign=top><td><b>user</b></td><td>
+<p>A typeless pointer which is passed from the caller of the decomposition function.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>Error code. 0 means success.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Outline_Funcs">FT_Outline_Funcs</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_IMAGE_H (freetype/ftimage.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Outline_Funcs_
+ {
+ <a href="ft2-outline_processing.html#FT_Outline_MoveToFunc">FT_Outline_MoveToFunc</a> move_to;
+ <a href="ft2-outline_processing.html#FT_Outline_LineToFunc">FT_Outline_LineToFunc</a> line_to;
+ <a href="ft2-outline_processing.html#FT_Outline_ConicToFunc">FT_Outline_ConicToFunc</a> conic_to;
+ <a href="ft2-outline_processing.html#FT_Outline_CubicToFunc">FT_Outline_CubicToFunc</a> cubic_to;
+
+ <span class="keyword">int</span> shift;
+ <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> delta;
+
+ } <b>FT_Outline_Funcs</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A structure to hold various function pointers used during outline decomposition in order to emit segments, conic, and cubic Béziers, as well as &lsquo;move to&rsquo; and &lsquo;close to&rsquo; operations.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>move_to</b></td><td>
+<p>The &lsquo;move to&rsquo; emitter.</p>
+</td></tr>
+<tr valign=top><td><b>line_to</b></td><td>
+<p>The segment emitter.</p>
+</td></tr>
+<tr valign=top><td><b>conic_to</b></td><td>
+<p>The second-order Bézier arc emitter.</p>
+</td></tr>
+<tr valign=top><td><b>cubic_to</b></td><td>
+<p>The third-order Bézier arc emitter.</p>
+</td></tr>
+<tr valign=top><td><b>shift</b></td><td>
+<p>The shift that is applied to coordinates before they are sent to the emitter.</p>
+</td></tr>
+<tr valign=top><td><b>delta</b></td><td>
+<p>The delta that is applied to coordinates before they are sent to the emitter, but after the shift.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The point coordinates sent to the emitters are the transformed version of the original coordinates (this is important for high accuracy during scan-conversion). The transformation is simple:</p>
+<pre class="colored">
+ x' = (x &lt;&lt; shift) - delta
+ y' = (x &lt;&lt; shift) - delta
+</pre>
+<p>Set the value of &lsquo;shift&rsquo; and &lsquo;delta&rsquo; to 0 to get the original point coordinates.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Outline_Decompose">FT_Outline_Decompose</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_OUTLINE_H (freetype/ftoutln.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Outline_Decompose</b>( <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>* outline,
+ <span class="keyword">const</span> <a href="ft2-outline_processing.html#FT_Outline_Funcs">FT_Outline_Funcs</a>* func_interface,
+ <span class="keyword">void</span>* user );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Walks over an outline's structure to decompose it into individual segments and Bézier arcs. This function is also able to emit &lsquo;move to&rsquo; and &lsquo;close to&rsquo; operations to indicate the start and end of new contours in the outline.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>outline</b></td><td>
+<p>A pointer to the source target.</p>
+</td></tr>
+<tr valign=top><td><b>func_interface</b></td><td>
+<p>A table of &lsquo;emitters&rsquo;, i.e,. function pointers called during decomposition to indicate path operations.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>user</b></td><td>
+<p>A typeless pointer which is passed to each emitter during the decomposition. It can be used to store the state during the decomposition.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Outline_Get_CBox">FT_Outline_Get_CBox</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_OUTLINE_H (freetype/ftoutln.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <span class="keyword">void</span> )
+ <b>FT_Outline_Get_CBox</b>( <span class="keyword">const</span> <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>* outline,
+ <a href="ft2-basic_types.html#FT_BBox">FT_BBox</a> *acbox );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Returns an outline's &lsquo;control box&rsquo;. The control box encloses all the outline's points, including Bézier control points. Though it coincides with the exact bounding box for most glyphs, it can be slightly larger in some situations (like when rotating an outline which contains Bézier outside arcs).</p>
+<p>Computing the control box is very fast, while getting the bounding box can take much more time as it needs to walk over all segments and arcs in the outline. To get the latter, you can use the &lsquo;ftbbox&rsquo; component which is dedicated to this single task.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>outline</b></td><td>
+<p>A pointer to the source outline descriptor.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>acbox</b></td><td>
+<p>The outline's control box.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Outline_Get_Bitmap">FT_Outline_Get_Bitmap</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_OUTLINE_H (freetype/ftoutln.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Outline_Get_Bitmap</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
+ <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>* outline,
+ <span class="keyword">const</span> <a href="ft2-basic_types.html#FT_Bitmap">FT_Bitmap</a> *abitmap );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Renders an outline within a bitmap. The outline's image is simply OR-ed to the target bitmap.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>library</b></td><td>
+<p>A handle to a FreeType library object.</p>
+</td></tr>
+<tr valign=top><td><b>outline</b></td><td>
+<p>A pointer to the source outline descriptor.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>abitmap</b></td><td>
+<p>A pointer to the target bitmap descriptor.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>This function does NOT CREATE the bitmap, it only renders an outline image within the one you pass to it!</p>
+<p>It will use the raster corresponding to the default glyph format.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Outline_Render">FT_Outline_Render</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_OUTLINE_H (freetype/ftoutln.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Outline_Render</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
+ <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>* outline,
+ <a href="ft2-raster.html#FT_Raster_Params">FT_Raster_Params</a>* params );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Renders an outline within a bitmap using the current scan-convert. This functions uses an <a href="ft2-raster.html#FT_Raster_Params">FT_Raster_Params</a> structure as an argument, allowing advanced features like direct composition, translucency, etc.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>library</b></td><td>
+<p>A handle to a FreeType library object.</p>
+</td></tr>
+<tr valign=top><td><b>outline</b></td><td>
+<p>A pointer to the source outline descriptor.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>params</b></td><td>
+<p>A pointer to an <a href="ft2-raster.html#FT_Raster_Params">FT_Raster_Params</a> structure used to describe the rendering operation.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>You should know what you are doing and how <a href="ft2-raster.html#FT_Raster_Params">FT_Raster_Params</a> works to use this function.</p>
+<p>The field &lsquo;params.source&rsquo; will be set to &lsquo;outline&rsquo; before the scan converter is called, which means that the value you give to it is actually ignored.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Orientation">FT_Orientation</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_OUTLINE_H (freetype/ftoutln.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_Orientation_
+ {
+ <a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_TRUETYPE</a> = 0,
+ <a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_POSTSCRIPT</a> = 1,
+ <a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_FILL_RIGHT</a> = <a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_TRUETYPE</a>,
+ <a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_FILL_LEFT</a> = <a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_POSTSCRIPT</a>,
+ <a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_NONE</a>
+
+ } <b>FT_Orientation</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A list of values used to describe an outline's contour orientation.</p>
+<p>The TrueType and Postscript specifications use different conventions to determine whether outline contours should be filled or unfilled.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td colspan=0><b>FT_ORIENTATION_TRUETYPE</b></td></tr>
+<tr valign=top><td></td><td>
+<p>According to the TrueType specification, clockwise contours must be filled, and counter-clockwise ones must be unfilled.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_ORIENTATION_POSTSCRIPT</b></td></tr>
+<tr valign=top><td></td><td>
+<p>According to the Postscript specification, counter-clockwise contours must be filled, and clockwise ones must be unfilled.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_ORIENTATION_FILL_RIGHT</b></td></tr>
+<tr valign=top><td></td><td>
+<p>This is identical to <a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_TRUETYPE</a>, but is used to remember that in TrueType, everything that is to the right of the drawing direction of a contour must be filled.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_ORIENTATION_FILL_LEFT</b></td></tr>
+<tr valign=top><td></td><td>
+<p>This is identical to <a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_POSTSCRIPT</a>, but is used to remember that in Postscript, everything that is to the left of the drawing direction of a contour must be filled.</p>
+</td></tr>
+<tr valign=top><td><b>FT_ORIENTATION_NONE</b></td><td>
+<p>The orientation cannot be determined. That is, different parts of the glyph have different orientation.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Outline_Get_Orientation">FT_Outline_Get_Orientation</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_OUTLINE_H (freetype/ftoutln.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-outline_processing.html#FT_Orientation">FT_Orientation</a> )
+ <b>FT_Outline_Get_Orientation</b>( <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>* outline );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>This function analyzes a glyph outline and tries to compute its fill orientation (see <a href="ft2-outline_processing.html#FT_Orientation">FT_Orientation</a>). This is done by computing the direction of each global horizontal and/or vertical extrema within the outline.</p>
+<p>Note that this will return <a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_TRUETYPE</a> for empty outlines.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>outline</b></td><td>
+<p>A handle to the source outline.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>The orientation.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+</body>
+</html>
diff --git a/src/3rdparty/freetype/docs/reference/ft2-pfr_fonts.html b/src/3rdparty/freetype/docs/reference/ft2-pfr_fonts.html
new file mode 100644
index 0000000..3a45e4e
--- /dev/null
+++ b/src/3rdparty/freetype/docs/reference/ft2-pfr_fonts.html
@@ -0,0 +1,202 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>FreeType-2.3.6 API Reference</title>
+<style type="text/css">
+ body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
+ color: #000000;
+ background: #FFFFFF; }
+
+ p { text-align: justify; }
+ h1 { text-align: center; }
+ li { text-align: justify; }
+ td { padding: 0 0.5em 0 0.5em; }
+ td.left { padding: 0 0.5em 0 0.5em;
+ text-align: left; }
+
+ a:link { color: #0000EF; }
+ a:visited { color: #51188E; }
+ a:hover { color: #FF0000; }
+
+ span.keyword { font-family: monospace;
+ text-align: left;
+ white-space: pre;
+ color: darkblue; }
+
+ pre.colored { color: blue; }
+
+ ul.empty { list-style-type: none; }
+</style>
+</head>
+<body>
+<center><h1>FreeType-2.3.6 API Reference</h1></center>
+
+<center><h1>
+PFR Fonts
+</h1></center>
+<h2>Synopsis</h2>
+<table align=center cellspacing=5 cellpadding=0 border=0>
+<tr><td></td><td><a href="#FT_Get_PFR_Metrics">FT_Get_PFR_Metrics</a></td><td></td><td><a href="#FT_Get_PFR_Kerning">FT_Get_PFR_Kerning</a></td><td></td><td><a href="#FT_Get_PFR_Advance">FT_Get_PFR_Advance</a></td></tr>
+</table><br><br>
+
+<table align=center width="87%"><tr><td>
+<p>This section contains the declaration of PFR-specific functions.</p>
+</td></tr></table><br>
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Get_PFR_Metrics">FT_Get_PFR_Metrics</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_PFR_H (freetype/ftpfr.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Get_PFR_Metrics</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> *aoutline_resolution,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> *ametrics_resolution,
+ <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> *ametrics_x_scale,
+ <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> *ametrics_y_scale );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Return the outline and metrics resolutions of a given PFR face.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>Handle to the input face. It can be a non-PFR face.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>aoutline_resolution</b></td><td>
+<p>Outline resolution. This is equivalent to &lsquo;face-&gt;units_per_EM&rsquo;. Optional (parameter can be NULL).</p>
+</td></tr>
+<tr valign=top><td><b>ametrics_resolution</b></td><td>
+<p>Metrics resolution. This is equivalent to &lsquo;outline_resolution&rsquo; for non-PFR fonts. Optional (parameter can be NULL).</p>
+</td></tr>
+<tr valign=top><td><b>ametrics_x_scale</b></td><td>
+<p>A 16.16 fixed-point number used to scale distance expressed in metrics units to device sub-pixels. This is equivalent to &lsquo;face-&gt;size-&gt;x_scale&rsquo;, but for metrics only. Optional (parameter can be NULL)</p>
+</td></tr>
+<tr valign=top><td><b>ametrics_y_scale</b></td><td>
+<p>Same as &lsquo;ametrics_x_scale&rsquo; but for the vertical direction. optional (parameter can be NULL)</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>If the input face is not a PFR, this function will return an error. However, in all cases, it will return valid values.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Get_PFR_Kerning">FT_Get_PFR_Kerning</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_PFR_H (freetype/ftpfr.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Get_PFR_Kerning</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> left,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> right,
+ <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a> *avector );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Return the kerning pair corresponding to two glyphs in a PFR face. The distance is expressed in metrics units, unlike the result of <a href="ft2-base_interface.html#FT_Get_Kerning">FT_Get_Kerning</a>.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to the input face.</p>
+</td></tr>
+<tr valign=top><td><b>left</b></td><td>
+<p>Index of the left glyph.</p>
+</td></tr>
+<tr valign=top><td><b>right</b></td><td>
+<p>Index of the right glyph.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>avector</b></td><td>
+<p>A kerning vector.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>This function always return distances in original PFR metrics units. This is unlike <a href="ft2-base_interface.html#FT_Get_Kerning">FT_Get_Kerning</a> with the <a href="ft2-base_interface.html#FT_Kerning_Mode">FT_KERNING_UNSCALED</a> mode, which always returns distances converted to outline units.</p>
+<p>You can use the value of the &lsquo;x_scale&rsquo; and &lsquo;y_scale&rsquo; parameters returned by <a href="ft2-pfr_fonts.html#FT_Get_PFR_Metrics">FT_Get_PFR_Metrics</a> to scale these to device sub-pixels.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Get_PFR_Advance">FT_Get_PFR_Advance</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_PFR_H (freetype/ftpfr.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Get_PFR_Advance</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> gindex,
+ <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> *aadvance );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Return a given glyph advance, expressed in original metrics units, from a PFR font.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to the input face.</p>
+</td></tr>
+<tr valign=top><td><b>gindex</b></td><td>
+<p>The glyph index.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>aadvance</b></td><td>
+<p>The glyph advance in metrics units.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>You can use the &lsquo;x_scale&rsquo; or &lsquo;y_scale&rsquo; results of <a href="ft2-pfr_fonts.html#FT_Get_PFR_Metrics">FT_Get_PFR_Metrics</a> to convert the advance to device sub-pixels (i.e., 1/64th of pixels).</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+</body>
+</html>
diff --git a/src/3rdparty/freetype/docs/reference/ft2-raster.html b/src/3rdparty/freetype/docs/reference/ft2-raster.html
new file mode 100644
index 0000000..8eeaa7d
--- /dev/null
+++ b/src/3rdparty/freetype/docs/reference/ft2-raster.html
@@ -0,0 +1,602 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>FreeType-2.3.6 API Reference</title>
+<style type="text/css">
+ body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
+ color: #000000;
+ background: #FFFFFF; }
+
+ p { text-align: justify; }
+ h1 { text-align: center; }
+ li { text-align: justify; }
+ td { padding: 0 0.5em 0 0.5em; }
+ td.left { padding: 0 0.5em 0 0.5em;
+ text-align: left; }
+
+ a:link { color: #0000EF; }
+ a:visited { color: #51188E; }
+ a:hover { color: #FF0000; }
+
+ span.keyword { font-family: monospace;
+ text-align: left;
+ white-space: pre;
+ color: darkblue; }
+
+ pre.colored { color: blue; }
+
+ ul.empty { list-style-type: none; }
+</style>
+</head>
+<body>
+<center><h1>FreeType-2.3.6 API Reference</h1></center>
+
+<center><h1>
+Scanline Converter
+</h1></center>
+<h2>Synopsis</h2>
+<table align=center cellspacing=5 cellpadding=0 border=0>
+<tr><td></td><td><a href="#FT_Raster">FT_Raster</a></td><td></td><td><a href="#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_XXX</a></td><td></td><td><a href="#FT_Raster_SetModeFunc">FT_Raster_SetModeFunc</a></td></tr>
+<tr><td></td><td><a href="#FT_Span">FT_Span</a></td><td></td><td><a href="#FT_Raster_Params">FT_Raster_Params</a></td><td></td><td><a href="#FT_Raster_RenderFunc">FT_Raster_RenderFunc</a></td></tr>
+<tr><td></td><td><a href="#FT_SpanFunc">FT_SpanFunc</a></td><td></td><td><a href="#FT_Raster_NewFunc">FT_Raster_NewFunc</a></td><td></td><td><a href="#FT_Raster_Funcs">FT_Raster_Funcs</a></td></tr>
+<tr><td></td><td><a href="#FT_Raster_BitTest_Func">FT_Raster_BitTest_Func</a></td><td></td><td><a href="#FT_Raster_DoneFunc">FT_Raster_DoneFunc</a></td><td></td><td></td></tr>
+<tr><td></td><td><a href="#FT_Raster_BitSet_Func">FT_Raster_BitSet_Func</a></td><td></td><td><a href="#FT_Raster_ResetFunc">FT_Raster_ResetFunc</a></td><td></td><td></td></tr>
+</table><br><br>
+
+<table align=center width="87%"><tr><td>
+<p>This section contains technical definitions.</p>
+</td></tr></table><br>
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Raster">FT_Raster</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_IMAGE_H (freetype/ftimage.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_RasterRec_* <b>FT_Raster</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A handle (pointer) to a raster object. Each object can be used independently to convert an outline into a bitmap or pixmap.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Span">FT_Span</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_IMAGE_H (freetype/ftimage.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Span_
+ {
+ <span class="keyword">short</span> x;
+ <span class="keyword">unsigned</span> <span class="keyword">short</span> len;
+ <span class="keyword">unsigned</span> <span class="keyword">char</span> coverage;
+
+ } <b>FT_Span</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A structure used to model a single span of gray (or black) pixels when rendering a monochrome or anti-aliased bitmap.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>x</b></td><td>
+<p>The span's horizontal start position.</p>
+</td></tr>
+<tr valign=top><td><b>len</b></td><td>
+<p>The span's length in pixels.</p>
+</td></tr>
+<tr valign=top><td><b>coverage</b></td><td>
+<p>The span color/coverage, ranging from 0 (background) to 255 (foreground). Only used for anti-aliased rendering.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>This structure is used by the span drawing callback type named <a href="ft2-raster.html#FT_SpanFunc">FT_SpanFunc</a> which takes the y-coordinate of the span as a a parameter.</p>
+<p>The coverage value is always between 0 and 255.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_SpanFunc">FT_SpanFunc</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_IMAGE_H (freetype/ftimage.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">void</span>
+ (*<b>FT_SpanFunc</b>)( <span class="keyword">int</span> y,
+ <span class="keyword">int</span> count,
+ <span class="keyword">const</span> <a href="ft2-raster.html#FT_Span">FT_Span</a>* spans,
+ <span class="keyword">void</span>* user );
+
+#define FT_Raster_Span_Func <b>FT_SpanFunc</b>
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A function used as a call-back by the anti-aliased renderer in order to let client applications draw themselves the gray pixel spans on each scan line.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>y</b></td><td>
+<p>The scanline's y-coordinate.</p>
+</td></tr>
+<tr valign=top><td><b>count</b></td><td>
+<p>The number of spans to draw on this scanline.</p>
+</td></tr>
+<tr valign=top><td><b>spans</b></td><td>
+<p>A table of &lsquo;count&rsquo; spans to draw on the scanline.</p>
+</td></tr>
+<tr valign=top><td><b>user</b></td><td>
+<p>User-supplied data that is passed to the callback.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>This callback allows client applications to directly render the gray spans of the anti-aliased bitmap to any kind of surfaces.</p>
+<p>This can be used to write anti-aliased outlines directly to a given background bitmap, and even perform translucency.</p>
+<p>Note that the &lsquo;count&rsquo; field cannot be greater than a fixed value defined by the &lsquo;FT_MAX_GRAY_SPANS&rsquo; configuration macro in &lsquo;ftoption.h&rsquo;. By default, this value is set to 32, which means that if there are more than 32 spans on a given scanline, the callback is called several times with the same &lsquo;y&rsquo; parameter in order to draw all callbacks.</p>
+<p>Otherwise, the callback is only called once per scan-line, and only for those scanlines that do have &lsquo;gray&rsquo; pixels on them.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Raster_BitTest_Func">FT_Raster_BitTest_Func</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_IMAGE_H (freetype/ftimage.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">int</span>
+ (*<b>FT_Raster_BitTest_Func</b>)( <span class="keyword">int</span> y,
+ <span class="keyword">int</span> x,
+ <span class="keyword">void</span>* user );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>THIS TYPE IS DEPRECATED. DO NOT USE IT.</p>
+<p>A function used as a call-back by the monochrome scan-converter to test whether a given target pixel is already set to the drawing &lsquo;color&rsquo;. These tests are crucial to implement drop-out control per-se the TrueType spec.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>y</b></td><td>
+<p>The pixel's y-coordinate.</p>
+</td></tr>
+<tr valign=top><td><b>x</b></td><td>
+<p>The pixel's x-coordinate.</p>
+</td></tr>
+<tr valign=top><td><b>user</b></td><td>
+<p>User-supplied data that is passed to the callback.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>1 if the pixel is &lsquo;set&rsquo;, 0 otherwise.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Raster_BitSet_Func">FT_Raster_BitSet_Func</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_IMAGE_H (freetype/ftimage.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">void</span>
+ (*<b>FT_Raster_BitSet_Func</b>)( <span class="keyword">int</span> y,
+ <span class="keyword">int</span> x,
+ <span class="keyword">void</span>* user );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>THIS TYPE IS DEPRECATED. DO NOT USE IT.</p>
+<p>A function used as a call-back by the monochrome scan-converter to set an individual target pixel. This is crucial to implement drop-out control according to the TrueType specification.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>y</b></td><td>
+<p>The pixel's y-coordinate.</p>
+</td></tr>
+<tr valign=top><td><b>x</b></td><td>
+<p>The pixel's x-coordinate.</p>
+</td></tr>
+<tr valign=top><td><b>user</b></td><td>
+<p>User-supplied data that is passed to the callback.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>1 if the pixel is &lsquo;set&rsquo;, 0 otherwise.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_XXX</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_IMAGE_H (freetype/ftimage.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_DEFAULT</a> 0x0
+#define <a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_AA</a> 0x1
+#define <a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_DIRECT</a> 0x2
+#define <a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_CLIP</a> 0x4
+
+ /* deprecated */
+#define ft_raster_flag_default <a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_DEFAULT</a>
+#define ft_raster_flag_aa <a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_AA</a>
+#define ft_raster_flag_direct <a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_DIRECT</a>
+#define ft_raster_flag_clip <a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_CLIP</a>
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A list of bit flag constants as used in the &lsquo;flags&rsquo; field of a <a href="ft2-raster.html#FT_Raster_Params">FT_Raster_Params</a> structure.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>FT_RASTER_FLAG_DEFAULT</b></td><td>
+<p>This value is 0.</p>
+</td></tr>
+<tr valign=top><td><b>FT_RASTER_FLAG_AA</b></td><td>
+<p>This flag is set to indicate that an anti-aliased glyph image should be generated. Otherwise, it will be monochrome (1-bit).</p>
+</td></tr>
+<tr valign=top><td><b>FT_RASTER_FLAG_DIRECT</b></td><td>
+<p>This flag is set to indicate direct rendering. In this mode, client applications must provide their own span callback. This lets them directly draw or compose over an existing bitmap. If this bit is not set, the target pixmap's buffer <i>must</i> be zeroed before rendering.</p>
+<p>Note that for now, direct rendering is only possible with anti-aliased glyphs.</p>
+</td></tr>
+<tr valign=top><td><b>FT_RASTER_FLAG_CLIP</b></td><td>
+<p>This flag is only used in direct rendering mode. If set, the output will be clipped to a box specified in the &lsquo;clip_box&rsquo; field of the <a href="ft2-raster.html#FT_Raster_Params">FT_Raster_Params</a> structure.</p>
+<p>Note that by default, the glyph bitmap is clipped to the target pixmap, except in direct rendering mode where all spans are generated if no clipping box is set.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Raster_Params">FT_Raster_Params</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_IMAGE_H (freetype/ftimage.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Raster_Params_
+ {
+ <span class="keyword">const</span> <a href="ft2-basic_types.html#FT_Bitmap">FT_Bitmap</a>* target;
+ <span class="keyword">const</span> <span class="keyword">void</span>* source;
+ <span class="keyword">int</span> flags;
+ <a href="ft2-raster.html#FT_SpanFunc">FT_SpanFunc</a> gray_spans;
+ <a href="ft2-raster.html#FT_SpanFunc">FT_SpanFunc</a> black_spans;
+ <a href="ft2-raster.html#FT_Raster_BitTest_Func">FT_Raster_BitTest_Func</a> bit_test; /* doesn't work! */
+ <a href="ft2-raster.html#FT_Raster_BitSet_Func">FT_Raster_BitSet_Func</a> bit_set; /* doesn't work! */
+ <span class="keyword">void</span>* user;
+ <a href="ft2-basic_types.html#FT_BBox">FT_BBox</a> clip_box;
+
+ } <b>FT_Raster_Params</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A structure to hold the arguments used by a raster's render function.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>target</b></td><td>
+<p>The target bitmap.</p>
+</td></tr>
+<tr valign=top><td><b>source</b></td><td>
+<p>A pointer to the source glyph image (e.g., an <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a>).</p>
+</td></tr>
+<tr valign=top><td><b>flags</b></td><td>
+<p>The rendering flags.</p>
+</td></tr>
+<tr valign=top><td><b>gray_spans</b></td><td>
+<p>The gray span drawing callback.</p>
+</td></tr>
+<tr valign=top><td><b>black_spans</b></td><td>
+<p>The black span drawing callback.</p>
+</td></tr>
+<tr valign=top><td><b>bit_test</b></td><td>
+<p>The bit test callback. UNIMPLEMENTED!</p>
+</td></tr>
+<tr valign=top><td><b>bit_set</b></td><td>
+<p>The bit set callback. UNIMPLEMENTED!</p>
+</td></tr>
+<tr valign=top><td><b>user</b></td><td>
+<p>User-supplied data that is passed to each drawing callback.</p>
+</td></tr>
+<tr valign=top><td><b>clip_box</b></td><td>
+<p>An optional clipping box. It is only used in direct rendering mode. Note that coordinates here should be expressed in <i>integer</i> pixels (and not in 26.6 fixed-point units).</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>An anti-aliased glyph bitmap is drawn if the <a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_AA</a> bit flag is set in the &lsquo;flags&rsquo; field, otherwise a monochrome bitmap is generated.</p>
+<p>If the <a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_DIRECT</a> bit flag is set in &lsquo;flags&rsquo;, the raster will call the &lsquo;gray_spans&rsquo; callback to draw gray pixel spans, in the case of an aa glyph bitmap, it will call &lsquo;black_spans&rsquo;, and &lsquo;bit_test&rsquo; and &lsquo;bit_set&rsquo; in the case of a monochrome bitmap. This allows direct composition over a pre-existing bitmap through user-provided callbacks to perform the span drawing/composition.</p>
+<p>Note that the &lsquo;bit_test&rsquo; and &lsquo;bit_set&rsquo; callbacks are required when rendering a monochrome bitmap, as they are crucial to implement correct drop-out control as defined in the TrueType specification.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Raster_NewFunc">FT_Raster_NewFunc</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_IMAGE_H (freetype/ftimage.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">int</span>
+ (*<b>FT_Raster_NewFunc</b>)( <span class="keyword">void</span>* memory,
+ <a href="ft2-raster.html#FT_Raster">FT_Raster</a>* raster );
+
+#define FT_Raster_New_Func <b>FT_Raster_NewFunc</b>
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A function used to create a new raster object.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>memory</b></td><td>
+<p>A handle to the memory allocator.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>raster</b></td><td>
+<p>A handle to the new raster object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>Error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The &lsquo;memory&rsquo; parameter is a typeless pointer in order to avoid un-wanted dependencies on the rest of the FreeType code. In practice, it is an <a href="ft2-system_interface.html#FT_Memory">FT_Memory</a> object, i.e., a handle to the standard FreeType memory allocator. However, this field can be completely ignored by a given raster implementation.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Raster_DoneFunc">FT_Raster_DoneFunc</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_IMAGE_H (freetype/ftimage.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">void</span>
+ (*<b>FT_Raster_DoneFunc</b>)( <a href="ft2-raster.html#FT_Raster">FT_Raster</a> raster );
+
+#define FT_Raster_Done_Func <b>FT_Raster_DoneFunc</b>
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A function used to destroy a given raster object.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>raster</b></td><td>
+<p>A handle to the raster object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Raster_ResetFunc">FT_Raster_ResetFunc</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_IMAGE_H (freetype/ftimage.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">void</span>
+ (*<b>FT_Raster_ResetFunc</b>)( <a href="ft2-raster.html#FT_Raster">FT_Raster</a> raster,
+ <span class="keyword">unsigned</span> <span class="keyword">char</span>* pool_base,
+ <span class="keyword">unsigned</span> <span class="keyword">long</span> pool_size );
+
+#define FT_Raster_Reset_Func <b>FT_Raster_ResetFunc</b>
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>FreeType provides an area of memory called the &lsquo;render pool&rsquo;, available to all registered rasters. This pool can be freely used during a given scan-conversion but is shared by all rasters. Its content is thus transient.</p>
+<p>This function is called each time the render pool changes, or just after a new raster object is created.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>raster</b></td><td>
+<p>A handle to the new raster object.</p>
+</td></tr>
+<tr valign=top><td><b>pool_base</b></td><td>
+<p>The address in memory of the render pool.</p>
+</td></tr>
+<tr valign=top><td><b>pool_size</b></td><td>
+<p>The size in bytes of the render pool.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>Rasters can ignore the render pool and rely on dynamic memory allocation if they want to (a handle to the memory allocator is passed to the raster constructor). However, this is not recommended for efficiency purposes.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Raster_SetModeFunc">FT_Raster_SetModeFunc</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_IMAGE_H (freetype/ftimage.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">int</span>
+ (*<b>FT_Raster_SetModeFunc</b>)( <a href="ft2-raster.html#FT_Raster">FT_Raster</a> raster,
+ <span class="keyword">unsigned</span> <span class="keyword">long</span> mode,
+ <span class="keyword">void</span>* args );
+
+#define FT_Raster_Set_Mode_Func <b>FT_Raster_SetModeFunc</b>
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>This function is a generic facility to change modes or attributes in a given raster. This can be used for debugging purposes, or simply to allow implementation-specific &lsquo;features&rsquo; in a given raster module.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>raster</b></td><td>
+<p>A handle to the new raster object.</p>
+</td></tr>
+<tr valign=top><td><b>mode</b></td><td>
+<p>A 4-byte tag used to name the mode or property.</p>
+</td></tr>
+<tr valign=top><td><b>args</b></td><td>
+<p>A pointer to the new mode/property to use.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Raster_RenderFunc">FT_Raster_RenderFunc</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_IMAGE_H (freetype/ftimage.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">int</span>
+ (*<b>FT_Raster_RenderFunc</b>)( <a href="ft2-raster.html#FT_Raster">FT_Raster</a> raster,
+ <span class="keyword">const</span> <a href="ft2-raster.html#FT_Raster_Params">FT_Raster_Params</a>* params );
+
+#define FT_Raster_Render_Func <b>FT_Raster_RenderFunc</b>
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Invokes a given raster to scan-convert a given glyph image into a target bitmap.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>raster</b></td><td>
+<p>A handle to the raster object.</p>
+</td></tr>
+<tr valign=top><td><b>params</b></td><td>
+<p>A pointer to an <a href="ft2-raster.html#FT_Raster_Params">FT_Raster_Params</a> structure used to store the rendering parameters.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>Error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The exact format of the source image depends on the raster's glyph format defined in its <a href="ft2-raster.html#FT_Raster_Funcs">FT_Raster_Funcs</a> structure. It can be an <a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a> or anything else in order to support a large array of glyph formats.</p>
+<p>Note also that the render function can fail and return a &lsquo;FT_Err_Unimplemented_Feature&rsquo; error code if the raster used does not support direct composition.</p>
+<p>XXX: For now, the standard raster doesn't support direct composition but this should change for the final release (see the files &lsquo;demos/src/ftgrays.c&rsquo; and &lsquo;demos/src/ftgrays2.c&rsquo; for examples of distinct implementations which support direct composition).</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Raster_Funcs">FT_Raster_Funcs</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_IMAGE_H (freetype/ftimage.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_Raster_Funcs_
+ {
+ <a href="ft2-basic_types.html#FT_Glyph_Format">FT_Glyph_Format</a> glyph_format;
+ <a href="ft2-raster.html#FT_Raster_NewFunc">FT_Raster_NewFunc</a> raster_new;
+ <a href="ft2-raster.html#FT_Raster_ResetFunc">FT_Raster_ResetFunc</a> raster_reset;
+ <a href="ft2-raster.html#FT_Raster_SetModeFunc">FT_Raster_SetModeFunc</a> raster_set_mode;
+ <a href="ft2-raster.html#FT_Raster_RenderFunc">FT_Raster_RenderFunc</a> raster_render;
+ <a href="ft2-raster.html#FT_Raster_DoneFunc">FT_Raster_DoneFunc</a> raster_done;
+
+ } <b>FT_Raster_Funcs</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A structure used to describe a given raster class to the library.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>glyph_format</b></td><td>
+<p>The supported glyph format for this raster.</p>
+</td></tr>
+<tr valign=top><td><b>raster_new</b></td><td>
+<p>The raster constructor.</p>
+</td></tr>
+<tr valign=top><td><b>raster_reset</b></td><td>
+<p>Used to reset the render pool within the raster.</p>
+</td></tr>
+<tr valign=top><td><b>raster_render</b></td><td>
+<p>A function to render a glyph into a given bitmap.</p>
+</td></tr>
+<tr valign=top><td><b>raster_done</b></td><td>
+<p>The raster destructor.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+</body>
+</html>
diff --git a/src/3rdparty/freetype/docs/reference/ft2-sfnt_names.html b/src/3rdparty/freetype/docs/reference/ft2-sfnt_names.html
new file mode 100644
index 0000000..bf64117
--- /dev/null
+++ b/src/3rdparty/freetype/docs/reference/ft2-sfnt_names.html
@@ -0,0 +1,186 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>FreeType-2.3.6 API Reference</title>
+<style type="text/css">
+ body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
+ color: #000000;
+ background: #FFFFFF; }
+
+ p { text-align: justify; }
+ h1 { text-align: center; }
+ li { text-align: justify; }
+ td { padding: 0 0.5em 0 0.5em; }
+ td.left { padding: 0 0.5em 0 0.5em;
+ text-align: left; }
+
+ a:link { color: #0000EF; }
+ a:visited { color: #51188E; }
+ a:hover { color: #FF0000; }
+
+ span.keyword { font-family: monospace;
+ text-align: left;
+ white-space: pre;
+ color: darkblue; }
+
+ pre.colored { color: blue; }
+
+ ul.empty { list-style-type: none; }
+</style>
+</head>
+<body>
+<center><h1>FreeType-2.3.6 API Reference</h1></center>
+
+<center><h1>
+SFNT Names
+</h1></center>
+<h2>Synopsis</h2>
+<table align=center cellspacing=5 cellpadding=0 border=0>
+<tr><td></td><td><a href="#FT_SfntName">FT_SfntName</a></td><td></td><td><a href="#FT_Get_Sfnt_Name_Count">FT_Get_Sfnt_Name_Count</a></td><td></td><td><a href="#FT_Get_Sfnt_Name">FT_Get_Sfnt_Name</a></td></tr>
+</table><br><br>
+
+<table align=center width="87%"><tr><td>
+<p>The TrueType and OpenType specification allow the inclusion of a special &lsquo;names table&rsquo; in font files. This table contains textual (and internationalized) information regarding the font, like family name, copyright, version, etc.</p>
+<p>The definitions below are used to access them if available.</p>
+<p>Note that this has nothing to do with glyph names!</p>
+</td></tr></table><br>
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_SfntName">FT_SfntName</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_SFNT_NAMES_H (freetype/ftsnames.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_SfntName_
+ {
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> platform_id;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> encoding_id;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> language_id;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> name_id;
+
+ <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a>* string; /* this string is *not* null-terminated! */
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> string_len; /* in bytes */
+
+ } <b>FT_SfntName</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A structure used to model an SFNT &lsquo;name&rsquo; table entry.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>platform_id</b></td><td>
+<p>The platform ID for &lsquo;string&rsquo;.</p>
+</td></tr>
+<tr valign=top><td><b>encoding_id</b></td><td>
+<p>The encoding ID for &lsquo;string&rsquo;.</p>
+</td></tr>
+<tr valign=top><td><b>language_id</b></td><td>
+<p>The language ID for &lsquo;string&rsquo;.</p>
+</td></tr>
+<tr valign=top><td><b>name_id</b></td><td>
+<p>An identifier for &lsquo;string&rsquo;.</p>
+</td></tr>
+<tr valign=top><td><b>string</b></td><td>
+<p>The &lsquo;name&rsquo; string. Note that its format differs depending on the (platform,encoding) pair. It can be a Pascal String, a UTF-16 one, etc.</p>
+<p>Generally speaking, the string is not zero-terminated. Please refer to the TrueType specification for details.</p>
+</td></tr>
+<tr valign=top><td><b>string_len</b></td><td>
+<p>The length of &lsquo;string&rsquo; in bytes.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>Possible values for &lsquo;platform_id&rsquo;, &lsquo;encoding_id&rsquo;, &lsquo;language_id&rsquo;, and &lsquo;name_id&rsquo; are given in the file &lsquo;ttnameid.h&rsquo;. For details please refer to the TrueType or OpenType specification.</p>
+<p>See also <a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_XXX</a>, <a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_XXX</a>, <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_XXX</a>, <a href="ft2-truetype_tables.html#TT_ISO_ID_XXX">TT_ISO_ID_XXX</a>, and <a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_XXX</a>.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Get_Sfnt_Name_Count">FT_Get_Sfnt_Name_Count</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_SFNT_NAMES_H (freetype/ftsnames.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> )
+ <b>FT_Get_Sfnt_Name_Count</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Retrieves the number of name strings in the SFNT &lsquo;name&rsquo; table.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to the source face.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>The number of strings in the &lsquo;name&rsquo; table.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Get_Sfnt_Name">FT_Get_Sfnt_Name</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_SFNT_NAMES_H (freetype/ftsnames.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Get_Sfnt_Name</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> idx,
+ <a href="ft2-sfnt_names.html#FT_SfntName">FT_SfntName</a> *aname );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Retrieves a string of the SFNT &lsquo;name&rsquo; table for a given index.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to the source face.</p>
+</td></tr>
+<tr valign=top><td><b>idx</b></td><td>
+<p>The index of the &lsquo;name&rsquo; string.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>aname</b></td><td>
+<p>The indexed <a href="ft2-sfnt_names.html#FT_SfntName">FT_SfntName</a> structure.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The &lsquo;string&rsquo; array returned in the &lsquo;aname&rsquo; structure is not null-terminated.</p>
+<p>Use <a href="ft2-sfnt_names.html#FT_Get_Sfnt_Name_Count">FT_Get_Sfnt_Name_Count</a> to get the total number of available &lsquo;name&rsquo; table entries, then do a loop until you get the right platform, encoding, and name ID.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+</body>
+</html>
diff --git a/src/3rdparty/freetype/docs/reference/ft2-sizes_management.html b/src/3rdparty/freetype/docs/reference/ft2-sizes_management.html
new file mode 100644
index 0000000..66f6365
--- /dev/null
+++ b/src/3rdparty/freetype/docs/reference/ft2-sizes_management.html
@@ -0,0 +1,160 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>FreeType-2.3.6 API Reference</title>
+<style type="text/css">
+ body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
+ color: #000000;
+ background: #FFFFFF; }
+
+ p { text-align: justify; }
+ h1 { text-align: center; }
+ li { text-align: justify; }
+ td { padding: 0 0.5em 0 0.5em; }
+ td.left { padding: 0 0.5em 0 0.5em;
+ text-align: left; }
+
+ a:link { color: #0000EF; }
+ a:visited { color: #51188E; }
+ a:hover { color: #FF0000; }
+
+ span.keyword { font-family: monospace;
+ text-align: left;
+ white-space: pre;
+ color: darkblue; }
+
+ pre.colored { color: blue; }
+
+ ul.empty { list-style-type: none; }
+</style>
+</head>
+<body>
+<center><h1>FreeType-2.3.6 API Reference</h1></center>
+
+<center><h1>
+Size Management
+</h1></center>
+<h2>Synopsis</h2>
+<table align=center cellspacing=5 cellpadding=0 border=0>
+<tr><td></td><td><a href="#FT_New_Size">FT_New_Size</a></td><td></td><td><a href="#FT_Done_Size">FT_Done_Size</a></td><td></td><td><a href="#FT_Activate_Size">FT_Activate_Size</a></td><td></td><td></td></tr>
+</table><br><br>
+
+<table align=center width="87%"><tr><td>
+<p>When creating a new face object (e.g., with <a href="ft2-base_interface.html#FT_New_Face">FT_New_Face</a>), an <a href="ft2-base_interface.html#FT_Size">FT_Size</a> object is automatically created and used to store all pixel-size dependent information, available in the &lsquo;face-&gt;size&rsquo; field.</p>
+<p>It is however possible to create more sizes for a given face, mostly in order to manage several character pixel sizes of the same font family and style. See <a href="ft2-sizes_management.html#FT_New_Size">FT_New_Size</a> and <a href="ft2-sizes_management.html#FT_Done_Size">FT_Done_Size</a>.</p>
+<p>Note that <a href="ft2-base_interface.html#FT_Set_Pixel_Sizes">FT_Set_Pixel_Sizes</a> and <a href="ft2-base_interface.html#FT_Set_Char_Size">FT_Set_Char_Size</a> only modify the contents of the current &lsquo;active&rsquo; size; you thus need to use <a href="ft2-sizes_management.html#FT_Activate_Size">FT_Activate_Size</a> to change it.</p>
+<p>99% of applications won't need the functions provided here, especially if they use the caching sub-system, so be cautious when using these.</p>
+</td></tr></table><br>
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_New_Size">FT_New_Size</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_SIZES_H (freetype/ftsizes.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_New_Size</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-base_interface.html#FT_Size">FT_Size</a>* size );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Create a new size object from a given face object.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to a parent face object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>asize</b></td><td>
+<p>A handle to a new size object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>You need to call <a href="ft2-sizes_management.html#FT_Activate_Size">FT_Activate_Size</a> in order to select the new size for upcoming calls to <a href="ft2-base_interface.html#FT_Set_Pixel_Sizes">FT_Set_Pixel_Sizes</a>, <a href="ft2-base_interface.html#FT_Set_Char_Size">FT_Set_Char_Size</a>, <a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a>, <a href="ft2-base_interface.html#FT_Load_Char">FT_Load_Char</a>, etc.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Done_Size">FT_Done_Size</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_SIZES_H (freetype/ftsizes.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Done_Size</b>( <a href="ft2-base_interface.html#FT_Size">FT_Size</a> size );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Discard a given size object. Note that <a href="ft2-base_interface.html#FT_Done_Face">FT_Done_Face</a> automatically discards all size objects allocated with <a href="ft2-sizes_management.html#FT_New_Size">FT_New_Size</a>.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>size</b></td><td>
+<p>A handle to a target size object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Activate_Size">FT_Activate_Size</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_SIZES_H (freetype/ftsizes.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Activate_Size</b>( <a href="ft2-base_interface.html#FT_Size">FT_Size</a> size );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Even though it is possible to create several size objects for a given face (see <a href="ft2-sizes_management.html#FT_New_Size">FT_New_Size</a> for details), functions like <a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a> or <a href="ft2-base_interface.html#FT_Load_Char">FT_Load_Char</a> only use the last-created one to determine the &lsquo;current character pixel size&rsquo;.</p>
+<p>This function can be used to &lsquo;activate&rsquo; a previously created size object.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>size</b></td><td>
+<p>A handle to a target size object.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>If &lsquo;face&rsquo; is the size's parent face object, this function changes the value of &lsquo;face-&gt;size&rsquo; to the input size handle.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+</body>
+</html>
diff --git a/src/3rdparty/freetype/docs/reference/ft2-system_interface.html b/src/3rdparty/freetype/docs/reference/ft2-system_interface.html
new file mode 100644
index 0000000..a726795
--- /dev/null
+++ b/src/3rdparty/freetype/docs/reference/ft2-system_interface.html
@@ -0,0 +1,411 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>FreeType-2.3.6 API Reference</title>
+<style type="text/css">
+ body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
+ color: #000000;
+ background: #FFFFFF; }
+
+ p { text-align: justify; }
+ h1 { text-align: center; }
+ li { text-align: justify; }
+ td { padding: 0 0.5em 0 0.5em; }
+ td.left { padding: 0 0.5em 0 0.5em;
+ text-align: left; }
+
+ a:link { color: #0000EF; }
+ a:visited { color: #51188E; }
+ a:hover { color: #FF0000; }
+
+ span.keyword { font-family: monospace;
+ text-align: left;
+ white-space: pre;
+ color: darkblue; }
+
+ pre.colored { color: blue; }
+
+ ul.empty { list-style-type: none; }
+</style>
+</head>
+<body>
+<center><h1>FreeType-2.3.6 API Reference</h1></center>
+
+<center><h1>
+System Interface
+</h1></center>
+<h2>Synopsis</h2>
+<table align=center cellspacing=5 cellpadding=0 border=0>
+<tr><td></td><td><a href="#FT_Memory">FT_Memory</a></td><td></td><td><a href="#FT_MemoryRec">FT_MemoryRec</a></td><td></td><td><a href="#FT_Stream_CloseFunc">FT_Stream_CloseFunc</a></td></tr>
+<tr><td></td><td><a href="#FT_Alloc_Func">FT_Alloc_Func</a></td><td></td><td><a href="#FT_Stream">FT_Stream</a></td><td></td><td><a href="#FT_StreamRec">FT_StreamRec</a></td></tr>
+<tr><td></td><td><a href="#FT_Free_Func">FT_Free_Func</a></td><td></td><td><a href="#FT_StreamDesc">FT_StreamDesc</a></td><td></td><td></td></tr>
+<tr><td></td><td><a href="#FT_Realloc_Func">FT_Realloc_Func</a></td><td></td><td><a href="#FT_Stream_IoFunc">FT_Stream_IoFunc</a></td><td></td><td></td></tr>
+</table><br><br>
+
+<table align=center width="87%"><tr><td>
+<p>This section contains various definitions related to memory management and i/o access. You need to understand this information if you want to use a custom memory manager or you own i/o streams.</p>
+</td></tr></table><br>
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Memory">FT_Memory</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_SYSTEM_H (freetype/ftsystem.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_MemoryRec_* <b>FT_Memory</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A handle to a given memory manager object, defined with an <a href="ft2-system_interface.html#FT_MemoryRec">FT_MemoryRec</a> structure.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Alloc_Func">FT_Alloc_Func</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_SYSTEM_H (freetype/ftsystem.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">void</span>*
+ (*<b>FT_Alloc_Func</b>)( <a href="ft2-system_interface.html#FT_Memory">FT_Memory</a> memory,
+ <span class="keyword">long</span> size );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A function used to allocate &lsquo;size&rsquo; bytes from &lsquo;memory&rsquo;.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>memory</b></td><td>
+<p>A handle to the source memory manager.</p>
+</td></tr>
+<tr valign=top><td><b>size</b></td><td>
+<p>The size in bytes to allocate.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>Address of new memory block. 0 in case of failure.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Free_Func">FT_Free_Func</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_SYSTEM_H (freetype/ftsystem.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">void</span>
+ (*<b>FT_Free_Func</b>)( <a href="ft2-system_interface.html#FT_Memory">FT_Memory</a> memory,
+ <span class="keyword">void</span>* block );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A function used to release a given block of memory.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>memory</b></td><td>
+<p>A handle to the source memory manager.</p>
+</td></tr>
+<tr valign=top><td><b>block</b></td><td>
+<p>The address of the target memory block.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Realloc_Func">FT_Realloc_Func</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_SYSTEM_H (freetype/ftsystem.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">void</span>*
+ (*<b>FT_Realloc_Func</b>)( <a href="ft2-system_interface.html#FT_Memory">FT_Memory</a> memory,
+ <span class="keyword">long</span> cur_size,
+ <span class="keyword">long</span> new_size,
+ <span class="keyword">void</span>* block );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A function used to re-allocate a given block of memory.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>memory</b></td><td>
+<p>A handle to the source memory manager.</p>
+</td></tr>
+<tr valign=top><td><b>cur_size</b></td><td>
+<p>The block's current size in bytes.</p>
+</td></tr>
+<tr valign=top><td><b>new_size</b></td><td>
+<p>The block's requested new size.</p>
+</td></tr>
+<tr valign=top><td><b>block</b></td><td>
+<p>The block's current address.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>New block address. 0 in case of memory shortage.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>In case of error, the old block must still be available.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_MemoryRec">FT_MemoryRec</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_SYSTEM_H (freetype/ftsystem.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">struct</span> FT_MemoryRec_
+ {
+ <span class="keyword">void</span>* user;
+ <a href="ft2-system_interface.html#FT_Alloc_Func">FT_Alloc_Func</a> alloc;
+ <a href="ft2-system_interface.html#FT_Free_Func">FT_Free_Func</a> free;
+ <a href="ft2-system_interface.html#FT_Realloc_Func">FT_Realloc_Func</a> realloc;
+ };
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A structure used to describe a given memory manager to FreeType 2.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>user</b></td><td>
+<p>A generic typeless pointer for user data.</p>
+</td></tr>
+<tr valign=top><td><b>alloc</b></td><td>
+<p>A pointer type to an allocation function.</p>
+</td></tr>
+<tr valign=top><td><b>free</b></td><td>
+<p>A pointer type to an memory freeing function.</p>
+</td></tr>
+<tr valign=top><td><b>realloc</b></td><td>
+<p>A pointer type to a reallocation function.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Stream">FT_Stream</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_SYSTEM_H (freetype/ftsystem.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_StreamRec_* <b>FT_Stream</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A handle to an input stream.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_StreamDesc">FT_StreamDesc</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_SYSTEM_H (freetype/ftsystem.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">union</span> FT_StreamDesc_
+ {
+ <span class="keyword">long</span> value;
+ <span class="keyword">void</span>* pointer;
+
+ } <b>FT_StreamDesc</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A union type used to store either a long or a pointer. This is used to store a file descriptor or a &lsquo;FILE*&rsquo; in an input stream.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Stream_IoFunc">FT_Stream_IoFunc</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_SYSTEM_H (freetype/ftsystem.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">unsigned</span> <span class="keyword">long</span>
+ (*<b>FT_Stream_IoFunc</b>)( <a href="ft2-system_interface.html#FT_Stream">FT_Stream</a> stream,
+ <span class="keyword">unsigned</span> <span class="keyword">long</span> offset,
+ <span class="keyword">unsigned</span> <span class="keyword">char</span>* buffer,
+ <span class="keyword">unsigned</span> <span class="keyword">long</span> count );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A function used to seek and read data from a given input stream.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>stream</b></td><td>
+<p>A handle to the source stream.</p>
+</td></tr>
+<tr valign=top><td><b>offset</b></td><td>
+<p>The offset of read in stream (always from start).</p>
+</td></tr>
+<tr valign=top><td><b>buffer</b></td><td>
+<p>The address of the read buffer.</p>
+</td></tr>
+<tr valign=top><td><b>count</b></td><td>
+<p>The number of bytes to read from the stream.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>The number of bytes effectively read by the stream.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>This function might be called to perform a seek or skip operation with a &lsquo;count&rsquo; of 0.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Stream_CloseFunc">FT_Stream_CloseFunc</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_SYSTEM_H (freetype/ftsystem.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">void</span>
+ (*<b>FT_Stream_CloseFunc</b>)( <a href="ft2-system_interface.html#FT_Stream">FT_Stream</a> stream );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A function used to close a given input stream.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>stream</b></td><td>
+<p>A handle to the target stream.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_StreamRec">FT_StreamRec</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_SYSTEM_H (freetype/ftsystem.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_StreamRec_
+ {
+ <span class="keyword">unsigned</span> <span class="keyword">char</span>* base;
+ <span class="keyword">unsigned</span> <span class="keyword">long</span> size;
+ <span class="keyword">unsigned</span> <span class="keyword">long</span> pos;
+
+ <a href="ft2-system_interface.html#FT_StreamDesc">FT_StreamDesc</a> descriptor;
+ <a href="ft2-system_interface.html#FT_StreamDesc">FT_StreamDesc</a> pathname;
+ <a href="ft2-system_interface.html#FT_Stream_IoFunc">FT_Stream_IoFunc</a> read;
+ <a href="ft2-system_interface.html#FT_Stream_CloseFunc">FT_Stream_CloseFunc</a> close;
+
+ <a href="ft2-system_interface.html#FT_Memory">FT_Memory</a> memory;
+ <span class="keyword">unsigned</span> <span class="keyword">char</span>* cursor;
+ <span class="keyword">unsigned</span> <span class="keyword">char</span>* limit;
+
+ } <b>FT_StreamRec</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A structure used to describe an input stream.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>base</b></td><td>
+<p>For memory-based streams, this is the address of the first stream byte in memory. This field should always be set to NULL for disk-based streams.</p>
+</td></tr>
+<tr valign=top><td><b>size</b></td><td>
+<p>The stream size in bytes.</p>
+</td></tr>
+<tr valign=top><td><b>pos</b></td><td>
+<p>The current position within the stream.</p>
+</td></tr>
+<tr valign=top><td><b>descriptor</b></td><td>
+<p>This field is a union that can hold an integer or a pointer. It is used by stream implementations to store file descriptors or &lsquo;FILE*&rsquo; pointers.</p>
+</td></tr>
+<tr valign=top><td><b>pathname</b></td><td>
+<p>This field is completely ignored by FreeType. However, it is often useful during debugging to use it to store the stream's filename (where available).</p>
+</td></tr>
+<tr valign=top><td><b>read</b></td><td>
+<p>The stream's input function.</p>
+</td></tr>
+<tr valign=top><td><b>close</b></td><td>
+<p>The stream;s close function.</p>
+</td></tr>
+<tr valign=top><td><b>memory</b></td><td>
+<p>The memory manager to use to preload frames. This is set internally by FreeType and shouldn't be touched by stream implementations.</p>
+</td></tr>
+<tr valign=top><td><b>cursor</b></td><td>
+<p>This field is set and used internally by FreeType when parsing frames.</p>
+</td></tr>
+<tr valign=top><td><b>limit</b></td><td>
+<p>This field is set and used internally by FreeType when parsing frames.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+</body>
+</html>
diff --git a/src/3rdparty/freetype/docs/reference/ft2-toc.html b/src/3rdparty/freetype/docs/reference/ft2-toc.html
new file mode 100644
index 0000000..e3df83c
--- /dev/null
+++ b/src/3rdparty/freetype/docs/reference/ft2-toc.html
@@ -0,0 +1,203 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>FreeType-2.3.6 API Reference</title>
+<style type="text/css">
+ body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
+ color: #000000;
+ background: #FFFFFF; }
+
+ p { text-align: justify; }
+ h1 { text-align: center; }
+ li { text-align: justify; }
+ td { padding: 0 0.5em 0 0.5em; }
+ td.left { padding: 0 0.5em 0 0.5em;
+ text-align: left; }
+
+ a:link { color: #0000EF; }
+ a:visited { color: #51188E; }
+ a:hover { color: #FF0000; }
+
+ span.keyword { font-family: monospace;
+ text-align: left;
+ white-space: pre;
+ color: darkblue; }
+
+ pre.colored { color: blue; }
+
+ ul.empty { list-style-type: none; }
+</style>
+</head>
+<body>
+<center><h1>FreeType-2.3.6 API Reference</h1></center>
+
+<center><h1>Table of Contents</h1></center>
+<br><table align=center width="75%"><tr><td><h2>General Remarks</h2><ul class="empty"><li>
+<table cellpadding=5>
+<tr valign=top><td class="left">
+<a href="ft2-user_allocation.html">User allocation</a></td><td>
+<p>How client applications should allocate FreeType data structures.</p>
+</td></tr>
+</table>
+</li></ul></td></tr></table>
+<br><table align=center width="75%"><tr><td><h2>Core API</h2><ul class="empty"><li>
+<table cellpadding=5>
+<tr valign=top><td class="left">
+<a href="ft2-version.html">FreeType Version</a></td><td>
+<p>Functions and macros related to FreeType versions.</p>
+</td></tr>
+<tr valign=top><td class="left">
+<a href="ft2-basic_types.html">Basic Data Types</a></td><td>
+<p>The basic data types defined by the library.</p>
+</td></tr>
+<tr valign=top><td class="left">
+<a href="ft2-base_interface.html">Base Interface</a></td><td>
+<p>The FreeType 2 base font interface.</p>
+</td></tr>
+<tr valign=top><td class="left">
+<a href="ft2-glyph_variants.html">Glyph Variants</a></td><td>
+<p>The FreeType 2 interface to Unicode Ideographic Variation Sequences (IVS), using the SFNT cmap format 14.</p>
+</td></tr>
+<tr valign=top><td class="left">
+<a href="ft2-glyph_management.html">Glyph Management</a></td><td>
+<p>Generic interface to manage individual glyph data.</p>
+</td></tr>
+<tr valign=top><td class="left">
+<a href="ft2-mac_specific.html">Mac Specific Interface</a></td><td>
+<p>Only available on the Macintosh.</p>
+</td></tr>
+<tr valign=top><td class="left">
+<a href="ft2-sizes_management.html">Size Management</a></td><td>
+<p>Managing multiple sizes per face.</p>
+</td></tr>
+<tr valign=top><td class="left">
+<a href="ft2-header_file_macros.html">Header File Macros</a></td><td>
+<p>Macro definitions used to #include specific header files.</p>
+</td></tr>
+</table>
+</li></ul></td></tr></table>
+<br><table align=center width="75%"><tr><td><h2>Format-Specific API</h2><ul class="empty"><li>
+<table cellpadding=5>
+<tr valign=top><td class="left">
+<a href="ft2-multiple_masters.html">Multiple Masters</a></td><td>
+<p>How to manage Multiple Masters fonts.</p>
+</td></tr>
+<tr valign=top><td class="left">
+<a href="ft2-truetype_tables.html">TrueType Tables</a></td><td>
+<p>TrueType specific table types and functions.</p>
+</td></tr>
+<tr valign=top><td class="left">
+<a href="ft2-type1_tables.html">Type 1 Tables</a></td><td>
+<p>Type 1 (PostScript) specific font tables.</p>
+</td></tr>
+<tr valign=top><td class="left">
+<a href="ft2-sfnt_names.html">SFNT Names</a></td><td>
+<p>Access the names embedded in TrueType and OpenType files.</p>
+</td></tr>
+<tr valign=top><td class="left">
+<a href="ft2-bdf_fonts.html">BDF Files</a></td><td>
+<p>BDF specific API.</p>
+</td></tr>
+<tr valign=top><td class="left">
+<a href="ft2-cid_fonts.html">CID Fonts</a></td><td>
+<p>CID-keyed font specific API.</p>
+</td></tr>
+<tr valign=top><td class="left">
+<a href="ft2-pfr_fonts.html">PFR Fonts</a></td><td>
+<p>PFR/TrueDoc specific API.</p>
+</td></tr>
+<tr valign=top><td class="left">
+<a href="ft2-winfnt_fonts.html">Window FNT Files</a></td><td>
+<p>Windows FNT specific API.</p>
+</td></tr>
+<tr valign=top><td class="left">
+<a href="ft2-font_formats.html">Font Formats</a></td><td>
+<p>Getting the font format.</p>
+</td></tr>
+<tr valign=top><td class="left">
+<a href="ft2-gasp_table.html">Gasp Table</a></td><td>
+<p>Retrieving TrueType &lsquo;gasp&rsquo; table entries</p>
+</td></tr>
+</table>
+</li></ul></td></tr></table>
+<br><table align=center width="75%"><tr><td><h2>Cache Sub-System</h2><ul class="empty"><li>
+<table cellpadding=5>
+<tr valign=top><td class="left">
+<a href="ft2-cache_subsystem.html">Cache Sub-System</a></td><td>
+<p>How to cache face, size, and glyph data with FreeType 2.</p>
+</td></tr>
+</table>
+</li></ul></td></tr></table>
+<br><table align=center width="75%"><tr><td><h2>Support API</h2><ul class="empty"><li>
+<table cellpadding=5>
+<tr valign=top><td class="left">
+<a href="ft2-computations.html">Computations</a></td><td>
+<p>Crunching fixed numbers and vectors.</p>
+</td></tr>
+<tr valign=top><td class="left">
+<a href="ft2-list_processing.html">List Processing</a></td><td>
+<p>Simple management of lists.</p>
+</td></tr>
+<tr valign=top><td class="left">
+<a href="ft2-outline_processing.html">Outline Processing</a></td><td>
+<p>Functions to create, transform, and render vectorial glyph images.</p>
+</td></tr>
+<tr valign=top><td class="left">
+<a href="ft2-bitmap_handling.html">Bitmap Handling</a></td><td>
+<p>Handling FT_Bitmap objects.</p>
+</td></tr>
+<tr valign=top><td class="left">
+<a href="ft2-raster.html">Scanline Converter</a></td><td>
+<p>How vectorial outlines are converted into bitmaps and pixmaps.</p>
+</td></tr>
+<tr valign=top><td class="left">
+<a href="ft2-glyph_stroker.html">Glyph Stroker</a></td><td>
+<p>Generating bordered and stroked glyphs.</p>
+</td></tr>
+<tr valign=top><td class="left">
+<a href="ft2-system_interface.html">System Interface</a></td><td>
+<p>How FreeType manages memory and i/o.</p>
+</td></tr>
+<tr valign=top><td class="left">
+<a href="ft2-module_management.html">Module Management</a></td><td>
+<p>How to add, upgrade, and remove modules from FreeType.</p>
+</td></tr>
+<tr valign=top><td class="left">
+<a href="ft2-gzip.html">GZIP Streams</a></td><td>
+<p>Using gzip-compressed font files.</p>
+</td></tr>
+<tr valign=top><td class="left">
+<a href="ft2-lzw.html">LZW Streams</a></td><td>
+<p>Using LZW-compressed font files.</p>
+</td></tr>
+<tr valign=top><td class="left">
+<a href="ft2-lcd_filtering.html">LCD Filtering</a></td><td>
+<p>Reduce color fringes of LCD-optimized bitmaps.</p>
+</td></tr>
+</table>
+</li></ul></td></tr></table>
+<br><table align=center width="75%"><tr><td><h2>Miscellaneous</h2><ul class="empty"><li>
+<table cellpadding=5>
+<tr valign=top><td class="left">
+<a href="ft2-ot_validation.html">OpenType Validation</a></td><td>
+<p>An API to validate OpenType tables.</p>
+</td></tr>
+<tr valign=top><td class="left">
+<a href="ft2-incremental.html">Incremental Loading</a></td><td>
+<p>Custom Glyph Loading.</p>
+</td></tr>
+<tr valign=top><td class="left">
+<a href="ft2-truetype_engine.html">The TrueType Engine</a></td><td>
+<p>TrueType bytecode support.</p>
+</td></tr>
+<tr valign=top><td class="left">
+<a href="ft2-gx_validation.html">TrueTypeGX/AAT Validation</a></td><td>
+<p>An API to validate TrueTypeGX/AAT tables.</p>
+</td></tr>
+</table>
+</li></ul></td></tr></table>
+<br><table align=center width="75%"><tr><td><h2><a href="ft2-index.html">Global Index</a></h2><ul class="empty"><li></li></ul></td></tr></table>
+<center><font size=-2>generated on Tue Jun 10 08:02:21 2008</font></center></body>
+</html>
diff --git a/src/3rdparty/freetype/docs/reference/ft2-truetype_engine.html b/src/3rdparty/freetype/docs/reference/ft2-truetype_engine.html
new file mode 100644
index 0000000..4f1292a
--- /dev/null
+++ b/src/3rdparty/freetype/docs/reference/ft2-truetype_engine.html
@@ -0,0 +1,128 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>FreeType-2.3.6 API Reference</title>
+<style type="text/css">
+ body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
+ color: #000000;
+ background: #FFFFFF; }
+
+ p { text-align: justify; }
+ h1 { text-align: center; }
+ li { text-align: justify; }
+ td { padding: 0 0.5em 0 0.5em; }
+ td.left { padding: 0 0.5em 0 0.5em;
+ text-align: left; }
+
+ a:link { color: #0000EF; }
+ a:visited { color: #51188E; }
+ a:hover { color: #FF0000; }
+
+ span.keyword { font-family: monospace;
+ text-align: left;
+ white-space: pre;
+ color: darkblue; }
+
+ pre.colored { color: blue; }
+
+ ul.empty { list-style-type: none; }
+</style>
+</head>
+<body>
+<center><h1>FreeType-2.3.6 API Reference</h1></center>
+
+<center><h1>
+The TrueType Engine
+</h1></center>
+<h2>Synopsis</h2>
+<table align=center cellspacing=5 cellpadding=0 border=0>
+<tr><td></td><td><a href="#FT_TrueTypeEngineType">FT_TrueTypeEngineType</a></td><td></td><td><a href="#FT_Get_TrueType_Engine_Type">FT_Get_TrueType_Engine_Type</a></td></tr>
+</table><br><br>
+
+<table align=center width="87%"><tr><td>
+<p>This section contains a function used to query the level of TrueType bytecode support compiled in this version of the library.</p>
+</td></tr></table><br>
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_TrueTypeEngineType">FT_TrueTypeEngineType</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_MODULE_H (freetype/ftmodapi.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_TrueTypeEngineType_
+ {
+ <a href="ft2-truetype_engine.html#FT_TrueTypeEngineType">FT_TRUETYPE_ENGINE_TYPE_NONE</a> = 0,
+ <a href="ft2-truetype_engine.html#FT_TrueTypeEngineType">FT_TRUETYPE_ENGINE_TYPE_UNPATENTED</a>,
+ <a href="ft2-truetype_engine.html#FT_TrueTypeEngineType">FT_TRUETYPE_ENGINE_TYPE_PATENTED</a>
+
+ } <b>FT_TrueTypeEngineType</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A list of values describing which kind of TrueType bytecode engine is implemented in a given FT_Library instance. It is used by the <a href="ft2-truetype_engine.html#FT_Get_TrueType_Engine_Type">FT_Get_TrueType_Engine_Type</a> function.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td colspan=0><b>FT_TRUETYPE_ENGINE_TYPE_NONE</b></td></tr>
+<tr valign=top><td></td><td>
+<p>The library doesn't implement any kind of bytecode interpreter.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_TRUETYPE_ENGINE_TYPE_UNPATENTED</b></td></tr>
+<tr valign=top><td></td><td>
+<p>The library implements a bytecode interpreter that doesn't support the patented operations of the TrueType virtual machine.</p>
+<p>Its main use is to load certain Asian fonts which position and scale glyph components with bytecode instructions. It produces bad output for most other fonts.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>FT_TRUETYPE_ENGINE_TYPE_PATENTED</b></td></tr>
+<tr valign=top><td></td><td>
+<p>The library implements a bytecode interpreter that covers the full instruction set of the TrueType virtual machine. See the file &lsquo;docs/PATENTS&rsquo; for legal aspects.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>since</b></em></td></tr><tr><td>
+<p>2.2</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Get_TrueType_Engine_Type">FT_Get_TrueType_Engine_Type</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_MODULE_H (freetype/ftmodapi.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-truetype_engine.html#FT_TrueTypeEngineType">FT_TrueTypeEngineType</a> )
+ <b>FT_Get_TrueType_Engine_Type</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Return a <a href="ft2-truetype_engine.html#FT_TrueTypeEngineType">FT_TrueTypeEngineType</a> value to indicate which level of the TrueType virtual machine a given library instance supports.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>library</b></td><td>
+<p>A library instance.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>A value indicating which level is supported.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>since</b></em></td></tr><tr><td>
+<p>2.2</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+</body>
+</html>
diff --git a/src/3rdparty/freetype/docs/reference/ft2-truetype_tables.html b/src/3rdparty/freetype/docs/reference/ft2-truetype_tables.html
new file mode 100644
index 0000000..75c0293
--- /dev/null
+++ b/src/3rdparty/freetype/docs/reference/ft2-truetype_tables.html
@@ -0,0 +1,1213 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>FreeType-2.3.6 API Reference</title>
+<style type="text/css">
+ body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
+ color: #000000;
+ background: #FFFFFF; }
+
+ p { text-align: justify; }
+ h1 { text-align: center; }
+ li { text-align: justify; }
+ td { padding: 0 0.5em 0 0.5em; }
+ td.left { padding: 0 0.5em 0 0.5em;
+ text-align: left; }
+
+ a:link { color: #0000EF; }
+ a:visited { color: #51188E; }
+ a:hover { color: #FF0000; }
+
+ span.keyword { font-family: monospace;
+ text-align: left;
+ white-space: pre;
+ color: darkblue; }
+
+ pre.colored { color: blue; }
+
+ ul.empty { list-style-type: none; }
+</style>
+</head>
+<body>
+<center><h1>FreeType-2.3.6 API Reference</h1></center>
+
+<center><h1>
+TrueType Tables
+</h1></center>
+<h2>Synopsis</h2>
+<table align=center cellspacing=5 cellpadding=0 border=0>
+<tr><td></td><td><a href="#TT_PLATFORM_XXX">TT_PLATFORM_XXX</a></td><td></td><td><a href="#TT_Postscript">TT_Postscript</a></td></tr>
+<tr><td></td><td><a href="#TT_APPLE_ID_XXX">TT_APPLE_ID_XXX</a></td><td></td><td><a href="#TT_PCLT">TT_PCLT</a></td></tr>
+<tr><td></td><td><a href="#TT_MAC_ID_XXX">TT_MAC_ID_XXX</a></td><td></td><td><a href="#TT_MaxProfile">TT_MaxProfile</a></td></tr>
+<tr><td></td><td><a href="#TT_ISO_ID_XXX">TT_ISO_ID_XXX</a></td><td></td><td><a href="#FT_Sfnt_Tag">FT_Sfnt_Tag</a></td></tr>
+<tr><td></td><td><a href="#TT_MS_ID_XXX">TT_MS_ID_XXX</a></td><td></td><td><a href="#FT_Get_Sfnt_Table">FT_Get_Sfnt_Table</a></td></tr>
+<tr><td></td><td><a href="#TT_ADOBE_ID_XXX">TT_ADOBE_ID_XXX</a></td><td></td><td><a href="#FT_Load_Sfnt_Table">FT_Load_Sfnt_Table</a></td></tr>
+<tr><td></td><td><a href="#TT_Header">TT_Header</a></td><td></td><td><a href="#FT_Sfnt_Table_Info">FT_Sfnt_Table_Info</a></td></tr>
+<tr><td></td><td><a href="#TT_HoriHeader">TT_HoriHeader</a></td><td></td><td><a href="#FT_Get_CMap_Language_ID">FT_Get_CMap_Language_ID</a></td></tr>
+<tr><td></td><td><a href="#TT_VertHeader">TT_VertHeader</a></td><td></td><td><a href="#FT_Get_CMap_Format">FT_Get_CMap_Format</a></td></tr>
+<tr><td></td><td><a href="#TT_OS2">TT_OS2</a></td><td></td><td><a href="#FT_PARAM_TAG_UNPATENTED_HINTING">FT_PARAM_TAG_UNPATENTED_HINTING</a></td></tr>
+</table><br><br>
+
+<table align=center width="87%"><tr><td>
+<p>This section contains the definition of TrueType-specific tables as well as some routines used to access and process them.</p>
+</td></tr></table><br>
+<table align=center width="75%"><tr><td>
+<h4><a name="TT_PLATFORM_XXX">TT_PLATFORM_XXX</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_APPLE_UNICODE</a> 0
+#define <a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_MACINTOSH</a> 1
+#define <a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_ISO</a> 2 /* deprecated */
+#define <a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_MICROSOFT</a> 3
+#define <a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_CUSTOM</a> 4
+#define <a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_ADOBE</a> 7 /* artificial */
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A list of valid values for the &lsquo;platform_id&rsquo; identifier code in <a href="ft2-base_interface.html#FT_CharMapRec">FT_CharMapRec</a> and <a href="ft2-sfnt_names.html#FT_SfntName">FT_SfntName</a> structures.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td colspan=0><b>TT_PLATFORM_APPLE_UNICODE</b></td></tr>
+<tr valign=top><td></td><td>
+<p>Used by Apple to indicate a Unicode character map and/or name entry. See <a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_XXX</a> for corresponding &lsquo;encoding_id&rsquo; values. Note that name entries in this format are coded as big-endian UCS-2 character codes <i>only</i>.</p>
+</td></tr>
+<tr valign=top><td><b>TT_PLATFORM_MACINTOSH</b></td><td>
+<p>Used by Apple to indicate a MacOS-specific charmap and/or name entry. See <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_XXX</a> for corresponding &lsquo;encoding_id&rsquo; values. Note that most TrueType fonts contain an Apple roman charmap to be usable on MacOS systems (even if they contain a Microsoft charmap as well).</p>
+</td></tr>
+<tr valign=top><td><b>TT_PLATFORM_ISO</b></td><td>
+<p>This value was used to specify Unicode charmaps. It is however now deprecated. See <a href="ft2-truetype_tables.html#TT_ISO_ID_XXX">TT_ISO_ID_XXX</a> for a list of corresponding &lsquo;encoding_id&rsquo; values.</p>
+</td></tr>
+<tr valign=top><td><b>TT_PLATFORM_MICROSOFT</b></td><td>
+<p>Used by Microsoft to indicate Windows-specific charmaps. See <a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_XXX</a> for a list of corresponding &lsquo;encoding_id&rsquo; values. Note that most fonts contain a Unicode charmap using (TT_PLATFORM_MICROSOFT, <a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_UNICODE_CS</a>).</p>
+</td></tr>
+<tr valign=top><td><b>TT_PLATFORM_CUSTOM</b></td><td>
+<p>Used to indicate application-specific charmaps.</p>
+</td></tr>
+<tr valign=top><td><b>TT_PLATFORM_ADOBE</b></td><td>
+<p>This value isn't part of any font format specification, but is used by FreeType to report Adobe-specific charmaps in an <a href="ft2-base_interface.html#FT_CharMapRec">FT_CharMapRec</a> structure. See <a href="ft2-truetype_tables.html#TT_ADOBE_ID_XXX">TT_ADOBE_ID_XXX</a>.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="TT_APPLE_ID_XXX">TT_APPLE_ID_XXX</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_DEFAULT</a> 0 /* Unicode 1.0 */
+#define <a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_UNICODE_1_1</a> 1 /* specify Hangul at U+34xx */
+#define <a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_ISO_10646</a> 2 /* deprecated */
+#define <a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_UNICODE_2_0</a> 3 /* or later */
+#define <a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_UNICODE_32</a> 4 /* 2.0 or later, full repertoire */
+#define <a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_VARIANT_SELECTOR</a> 5 /* variation selector data */
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A list of valid values for the &lsquo;encoding_id&rsquo; for <a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_APPLE_UNICODE</a> charmaps and name entries.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>TT_APPLE_ID_DEFAULT</b></td><td>
+<p>Unicode version 1.0.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>TT_APPLE_ID_UNICODE_1_1</b></td></tr>
+<tr valign=top><td></td><td>
+<p>Unicode 1.1; specifies Hangul characters starting at U+34xx.</p>
+</td></tr>
+<tr valign=top><td><b>TT_APPLE_ID_ISO_10646</b></td><td>
+<p>Deprecated (identical to preceding).</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>TT_APPLE_ID_UNICODE_2_0</b></td></tr>
+<tr valign=top><td></td><td>
+<p>Unicode 2.0 and beyond (UTF-16 BMP only).</p>
+</td></tr>
+<tr valign=top><td><b>TT_APPLE_ID_UNICODE_32</b></td><td>
+<p>Unicode 3.1 and beyond, using UTF-32.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>TT_APPLE_ID_VARIANT_SELECTOR</b></td></tr>
+<tr valign=top><td></td><td>
+<p>From Adobe, not Apple. Not a normal cmap. Specifies variations on a real cmap.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="TT_MAC_ID_XXX">TT_MAC_ID_XXX</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_ROMAN</a> 0
+#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_JAPANESE</a> 1
+#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_TRADITIONAL_CHINESE</a> 2
+#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_KOREAN</a> 3
+#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_ARABIC</a> 4
+#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_HEBREW</a> 5
+#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_GREEK</a> 6
+#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_RUSSIAN</a> 7
+#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_RSYMBOL</a> 8
+#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_DEVANAGARI</a> 9
+#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_GURMUKHI</a> 10
+#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_GUJARATI</a> 11
+#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_ORIYA</a> 12
+#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_BENGALI</a> 13
+#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_TAMIL</a> 14
+#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_TELUGU</a> 15
+#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_KANNADA</a> 16
+#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_MALAYALAM</a> 17
+#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_SINHALESE</a> 18
+#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_BURMESE</a> 19
+#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_KHMER</a> 20
+#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_THAI</a> 21
+#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_LAOTIAN</a> 22
+#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_GEORGIAN</a> 23
+#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_ARMENIAN</a> 24
+#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_MALDIVIAN</a> 25
+#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_SIMPLIFIED_CHINESE</a> 25
+#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_TIBETAN</a> 26
+#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_MONGOLIAN</a> 27
+#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_GEEZ</a> 28
+#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_SLAVIC</a> 29
+#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_VIETNAMESE</a> 30
+#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_SINDHI</a> 31
+#define <a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_UNINTERP</a> 32
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A list of valid values for the &lsquo;encoding_id&rsquo; for <a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_MACINTOSH</a> charmaps and name entries.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>TT_MAC_ID_ROMAN</b></td><td>
+<p></p>
+</td></tr>
+<tr valign=top><td><b>TT_MAC_ID_JAPANESE</b></td><td>
+<p></p>
+</td></tr>
+<tr valign=top><td colspan=0><b>TT_MAC_ID_TRADITIONAL_CHINESE</b></td></tr>
+<tr valign=top><td></td><td>
+<p></p>
+</td></tr>
+<tr valign=top><td><b>TT_MAC_ID_KOREAN</b></td><td>
+<p></p>
+</td></tr>
+<tr valign=top><td><b>TT_MAC_ID_ARABIC</b></td><td>
+<p></p>
+</td></tr>
+<tr valign=top><td><b>TT_MAC_ID_HEBREW</b></td><td>
+<p></p>
+</td></tr>
+<tr valign=top><td><b>TT_MAC_ID_GREEK</b></td><td>
+<p></p>
+</td></tr>
+<tr valign=top><td><b>TT_MAC_ID_RUSSIAN</b></td><td>
+<p></p>
+</td></tr>
+<tr valign=top><td><b>TT_MAC_ID_RSYMBOL</b></td><td>
+<p></p>
+</td></tr>
+<tr valign=top><td><b>TT_MAC_ID_DEVANAGARI</b></td><td>
+<p></p>
+</td></tr>
+<tr valign=top><td><b>TT_MAC_ID_GURMUKHI</b></td><td>
+<p></p>
+</td></tr>
+<tr valign=top><td><b>TT_MAC_ID_GUJARATI</b></td><td>
+<p></p>
+</td></tr>
+<tr valign=top><td><b>TT_MAC_ID_ORIYA</b></td><td>
+<p></p>
+</td></tr>
+<tr valign=top><td><b>TT_MAC_ID_BENGALI</b></td><td>
+<p></p>
+</td></tr>
+<tr valign=top><td><b>TT_MAC_ID_TAMIL</b></td><td>
+<p></p>
+</td></tr>
+<tr valign=top><td><b>TT_MAC_ID_TELUGU</b></td><td>
+<p></p>
+</td></tr>
+<tr valign=top><td><b>TT_MAC_ID_KANNADA</b></td><td>
+<p></p>
+</td></tr>
+<tr valign=top><td><b>TT_MAC_ID_MALAYALAM</b></td><td>
+<p></p>
+</td></tr>
+<tr valign=top><td><b>TT_MAC_ID_SINHALESE</b></td><td>
+<p></p>
+</td></tr>
+<tr valign=top><td><b>TT_MAC_ID_BURMESE</b></td><td>
+<p></p>
+</td></tr>
+<tr valign=top><td><b>TT_MAC_ID_KHMER</b></td><td>
+<p></p>
+</td></tr>
+<tr valign=top><td><b>TT_MAC_ID_THAI</b></td><td>
+<p></p>
+</td></tr>
+<tr valign=top><td><b>TT_MAC_ID_LAOTIAN</b></td><td>
+<p></p>
+</td></tr>
+<tr valign=top><td><b>TT_MAC_ID_GEORGIAN</b></td><td>
+<p></p>
+</td></tr>
+<tr valign=top><td><b>TT_MAC_ID_ARMENIAN</b></td><td>
+<p></p>
+</td></tr>
+<tr valign=top><td><b>TT_MAC_ID_MALDIVIAN</b></td><td>
+<p></p>
+</td></tr>
+<tr valign=top><td colspan=0><b>TT_MAC_ID_SIMPLIFIED_CHINESE</b></td></tr>
+<tr valign=top><td></td><td>
+<p></p>
+</td></tr>
+<tr valign=top><td><b>TT_MAC_ID_TIBETAN</b></td><td>
+<p></p>
+</td></tr>
+<tr valign=top><td><b>TT_MAC_ID_MONGOLIAN</b></td><td>
+<p></p>
+</td></tr>
+<tr valign=top><td><b>TT_MAC_ID_GEEZ</b></td><td>
+<p></p>
+</td></tr>
+<tr valign=top><td><b>TT_MAC_ID_SLAVIC</b></td><td>
+<p></p>
+</td></tr>
+<tr valign=top><td><b>TT_MAC_ID_VIETNAMESE</b></td><td>
+<p></p>
+</td></tr>
+<tr valign=top><td><b>TT_MAC_ID_SINDHI</b></td><td>
+<p></p>
+</td></tr>
+<tr valign=top><td><b>TT_MAC_ID_UNINTERP</b></td><td>
+<p></p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="TT_ISO_ID_XXX">TT_ISO_ID_XXX</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <a href="ft2-truetype_tables.html#TT_ISO_ID_XXX">TT_ISO_ID_7BIT_ASCII</a> 0
+#define <a href="ft2-truetype_tables.html#TT_ISO_ID_XXX">TT_ISO_ID_10646</a> 1
+#define <a href="ft2-truetype_tables.html#TT_ISO_ID_XXX">TT_ISO_ID_8859_1</a> 2
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A list of valid values for the &lsquo;encoding_id&rsquo; for <a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_ISO</a> charmaps and name entries.</p>
+<p>Their use is now deprecated.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>TT_ISO_ID_7BIT_ASCII</b></td><td>
+<p>ASCII.</p>
+</td></tr>
+<tr valign=top><td><b>TT_ISO_ID_10646</b></td><td>
+<p>ISO/10646.</p>
+</td></tr>
+<tr valign=top><td><b>TT_ISO_ID_8859_1</b></td><td>
+<p>Also known as Latin-1.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="TT_MS_ID_XXX">TT_MS_ID_XXX</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_SYMBOL_CS</a> 0
+#define <a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_UNICODE_CS</a> 1
+#define <a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_SJIS</a> 2
+#define <a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_GB2312</a> 3
+#define <a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_BIG_5</a> 4
+#define <a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_WANSUNG</a> 5
+#define <a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_JOHAB</a> 6
+#define <a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_UCS_4</a> 10
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A list of valid values for the &lsquo;encoding_id&rsquo; for <a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_MICROSOFT</a> charmaps and name entries.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>TT_MS_ID_SYMBOL_CS</b></td><td>
+<p>Corresponds to Microsoft symbol encoding. See <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_SYMBOL</a>.</p>
+</td></tr>
+<tr valign=top><td><b>TT_MS_ID_UNICODE_CS</b></td><td>
+<p>Corresponds to a Microsoft WGL4 charmap, matching Unicode. See <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_UNICODE</a>.</p>
+</td></tr>
+<tr valign=top><td><b>TT_MS_ID_SJIS</b></td><td>
+<p>Corresponds to SJIS Japanese encoding. See <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_SJIS</a>.</p>
+</td></tr>
+<tr valign=top><td><b>TT_MS_ID_GB2312</b></td><td>
+<p>Corresponds to Simplified Chinese as used in Mainland China. See <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_GB2312</a>.</p>
+</td></tr>
+<tr valign=top><td><b>TT_MS_ID_BIG_5</b></td><td>
+<p>Corresponds to Traditional Chinese as used in Taiwan and Hong Kong. See <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_BIG5</a>.</p>
+</td></tr>
+<tr valign=top><td><b>TT_MS_ID_WANSUNG</b></td><td>
+<p>Corresponds to Korean Wansung encoding. See <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_WANSUNG</a>.</p>
+</td></tr>
+<tr valign=top><td><b>TT_MS_ID_JOHAB</b></td><td>
+<p>Corresponds to Johab encoding. See <a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_JOHAB</a>.</p>
+</td></tr>
+<tr valign=top><td><b>TT_MS_ID_UCS_4</b></td><td>
+<p>Corresponds to UCS-4 or UTF-32 charmaps. This has been added to the OpenType specification version 1.4 (mid-2001.)</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="TT_ADOBE_ID_XXX">TT_ADOBE_ID_XXX</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TRUETYPE_IDS_H (freetype/ttnameid.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <a href="ft2-truetype_tables.html#TT_ADOBE_ID_XXX">TT_ADOBE_ID_STANDARD</a> 0
+#define <a href="ft2-truetype_tables.html#TT_ADOBE_ID_XXX">TT_ADOBE_ID_EXPERT</a> 1
+#define <a href="ft2-truetype_tables.html#TT_ADOBE_ID_XXX">TT_ADOBE_ID_CUSTOM</a> 2
+#define <a href="ft2-truetype_tables.html#TT_ADOBE_ID_XXX">TT_ADOBE_ID_LATIN_1</a> 3
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A list of valid values for the &lsquo;encoding_id&rsquo; for <a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_ADOBE</a> charmaps. This is a FreeType-specific extension!</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>TT_ADOBE_ID_STANDARD</b></td><td>
+<p>Adobe standard encoding.</p>
+</td></tr>
+<tr valign=top><td><b>TT_ADOBE_ID_EXPERT</b></td><td>
+<p>Adobe expert encoding.</p>
+</td></tr>
+<tr valign=top><td><b>TT_ADOBE_ID_CUSTOM</b></td><td>
+<p>Adobe custom encoding.</p>
+</td></tr>
+<tr valign=top><td><b>TT_ADOBE_ID_LATIN_1</b></td><td>
+<p>Adobe Latin 1 encoding.</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="TT_Header">TT_Header</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> TT_Header_
+ {
+ <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> Table_Version;
+ <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> Font_Revision;
+
+ <a href="ft2-basic_types.html#FT_Long">FT_Long</a> CheckSum_Adjust;
+ <a href="ft2-basic_types.html#FT_Long">FT_Long</a> Magic_Number;
+
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> Flags;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> Units_Per_EM;
+
+ <a href="ft2-basic_types.html#FT_Long">FT_Long</a> Created [2];
+ <a href="ft2-basic_types.html#FT_Long">FT_Long</a> Modified[2];
+
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> xMin;
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> yMin;
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> xMax;
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> yMax;
+
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> Mac_Style;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> Lowest_Rec_PPEM;
+
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> Font_Direction;
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> Index_To_Loc_Format;
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> Glyph_Data_Format;
+
+ } <b>TT_Header</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A structure used to model a TrueType font header table. All fields follow the TrueType specification.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="TT_HoriHeader">TT_HoriHeader</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> TT_HoriHeader_
+ {
+ <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> Version;
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> Ascender;
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> Descender;
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> Line_Gap;
+
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> advance_Width_Max; /* advance width maximum */
+
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> min_Left_Side_Bearing; /* minimum left-sb */
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> min_Right_Side_Bearing; /* minimum right-sb */
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> xMax_Extent; /* xmax extents */
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> caret_Slope_Rise;
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> caret_Slope_Run;
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> caret_Offset;
+
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> Reserved[4];
+
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> metric_Data_Format;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> number_Of_HMetrics;
+
+ /* The following fields are not defined by the TrueType specification */
+ /* but they are used to connect the metrics header to the relevant */
+ /* `HMTX' table. */
+
+ <span class="keyword">void</span>* long_metrics;
+ <span class="keyword">void</span>* short_metrics;
+
+ } <b>TT_HoriHeader</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A structure used to model a TrueType horizontal header, the &lsquo;hhea&rsquo; table, as well as the corresponding horizontal metrics table, i.e., the &lsquo;hmtx&rsquo; table.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>Version</b></td><td>
+<p>The table version.</p>
+</td></tr>
+<tr valign=top><td><b>Ascender</b></td><td>
+<p>The font's ascender, i.e., the distance from the baseline to the top-most of all glyph points found in the font.</p>
+<p>This value is invalid in many fonts, as it is usually set by the font designer, and often reflects only a portion of the glyphs found in the font (maybe ASCII).</p>
+<p>You should use the &lsquo;sTypoAscender&rsquo; field of the OS/2 table instead if you want the correct one.</p>
+</td></tr>
+<tr valign=top><td><b>Descender</b></td><td>
+<p>The font's descender, i.e., the distance from the baseline to the bottom-most of all glyph points found in the font. It is negative.</p>
+<p>This value is invalid in many fonts, as it is usually set by the font designer, and often reflects only a portion of the glyphs found in the font (maybe ASCII).</p>
+<p>You should use the &lsquo;sTypoDescender&rsquo; field of the OS/2 table instead if you want the correct one.</p>
+</td></tr>
+<tr valign=top><td><b>Line_Gap</b></td><td>
+<p>The font's line gap, i.e., the distance to add to the ascender and descender to get the BTB, i.e., the baseline-to-baseline distance for the font.</p>
+</td></tr>
+<tr valign=top><td><b>advance_Width_Max</b></td><td>
+<p>This field is the maximum of all advance widths found in the font. It can be used to compute the maximum width of an arbitrary string of text.</p>
+</td></tr>
+<tr valign=top><td><b>min_Left_Side_Bearing</b></td><td>
+<p>The minimum left side bearing of all glyphs within the font.</p>
+</td></tr>
+<tr valign=top><td><b>min_Right_Side_Bearing</b></td><td>
+<p>The minimum right side bearing of all glyphs within the font.</p>
+</td></tr>
+<tr valign=top><td><b>xMax_Extent</b></td><td>
+<p>The maximum horizontal extent (i.e., the &lsquo;width&rsquo; of a glyph's bounding box) for all glyphs in the font.</p>
+</td></tr>
+<tr valign=top><td><b>caret_Slope_Rise</b></td><td>
+<p>The rise coefficient of the cursor's slope of the cursor (slope=rise/run).</p>
+</td></tr>
+<tr valign=top><td><b>caret_Slope_Run</b></td><td>
+<p>The run coefficient of the cursor's slope.</p>
+</td></tr>
+<tr valign=top><td><b>Reserved</b></td><td>
+<p>8 reserved bytes.</p>
+</td></tr>
+<tr valign=top><td><b>metric_Data_Format</b></td><td>
+<p>Always 0.</p>
+</td></tr>
+<tr valign=top><td><b>number_Of_HMetrics</b></td><td>
+<p>Number of HMetrics entries in the &lsquo;hmtx&rsquo; table -- this value can be smaller than the total number of glyphs in the font.</p>
+</td></tr>
+<tr valign=top><td><b>long_metrics</b></td><td>
+<p>A pointer into the &lsquo;hmtx&rsquo; table.</p>
+</td></tr>
+<tr valign=top><td><b>short_metrics</b></td><td>
+<p>A pointer into the &lsquo;hmtx&rsquo; table.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>IMPORTANT: The TT_HoriHeader and TT_VertHeader structures should be identical except for the names of their fields which are different.</p>
+<p>This ensures that a single function in the &lsquo;ttload&rsquo; module is able to read both the horizontal and vertical headers.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="TT_VertHeader">TT_VertHeader</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> TT_VertHeader_
+ {
+ <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> Version;
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> Ascender;
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> Descender;
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> Line_Gap;
+
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> advance_Height_Max; /* advance height maximum */
+
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> min_Top_Side_Bearing; /* minimum left-sb or top-sb */
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> min_Bottom_Side_Bearing; /* minimum right-sb or bottom-sb */
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> yMax_Extent; /* xmax or ymax extents */
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> caret_Slope_Rise;
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> caret_Slope_Run;
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> caret_Offset;
+
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> Reserved[4];
+
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> metric_Data_Format;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> number_Of_VMetrics;
+
+ /* The following fields are not defined by the TrueType specification */
+ /* but they're used to connect the metrics header to the relevant */
+ /* `HMTX' or `VMTX' table. */
+
+ <span class="keyword">void</span>* long_metrics;
+ <span class="keyword">void</span>* short_metrics;
+
+ } <b>TT_VertHeader</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A structure used to model a TrueType vertical header, the &lsquo;vhea&rsquo; table, as well as the corresponding vertical metrics table, i.e., the &lsquo;vmtx&rsquo; table.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>Version</b></td><td>
+<p>The table version.</p>
+</td></tr>
+<tr valign=top><td><b>Ascender</b></td><td>
+<p>The font's ascender, i.e., the distance from the baseline to the top-most of all glyph points found in the font.</p>
+<p>This value is invalid in many fonts, as it is usually set by the font designer, and often reflects only a portion of the glyphs found in the font (maybe ASCII).</p>
+<p>You should use the &lsquo;sTypoAscender&rsquo; field of the OS/2 table instead if you want the correct one.</p>
+</td></tr>
+<tr valign=top><td><b>Descender</b></td><td>
+<p>The font's descender, i.e., the distance from the baseline to the bottom-most of all glyph points found in the font. It is negative.</p>
+<p>This value is invalid in many fonts, as it is usually set by the font designer, and often reflects only a portion of the glyphs found in the font (maybe ASCII).</p>
+<p>You should use the &lsquo;sTypoDescender&rsquo; field of the OS/2 table instead if you want the correct one.</p>
+</td></tr>
+<tr valign=top><td><b>Line_Gap</b></td><td>
+<p>The font's line gap, i.e., the distance to add to the ascender and descender to get the BTB, i.e., the baseline-to-baseline distance for the font.</p>
+</td></tr>
+<tr valign=top><td><b>advance_Height_Max</b></td><td>
+<p>This field is the maximum of all advance heights found in the font. It can be used to compute the maximum height of an arbitrary string of text.</p>
+</td></tr>
+<tr valign=top><td><b>min_Top_Side_Bearing</b></td><td>
+<p>The minimum top side bearing of all glyphs within the font.</p>
+</td></tr>
+<tr valign=top><td colspan=0><b>min_Bottom_Side_Bearing</b></td></tr>
+<tr valign=top><td></td><td>
+<p>The minimum bottom side bearing of all glyphs within the font.</p>
+</td></tr>
+<tr valign=top><td><b>yMax_Extent</b></td><td>
+<p>The maximum vertical extent (i.e., the &lsquo;height&rsquo; of a glyph's bounding box) for all glyphs in the font.</p>
+</td></tr>
+<tr valign=top><td><b>caret_Slope_Rise</b></td><td>
+<p>The rise coefficient of the cursor's slope of the cursor (slope=rise/run).</p>
+</td></tr>
+<tr valign=top><td><b>caret_Slope_Run</b></td><td>
+<p>The run coefficient of the cursor's slope.</p>
+</td></tr>
+<tr valign=top><td><b>caret_Offset</b></td><td>
+<p>The cursor's offset for slanted fonts. This value is &lsquo;reserved&rsquo; in vmtx version 1.0.</p>
+</td></tr>
+<tr valign=top><td><b>Reserved</b></td><td>
+<p>8 reserved bytes.</p>
+</td></tr>
+<tr valign=top><td><b>metric_Data_Format</b></td><td>
+<p>Always 0.</p>
+</td></tr>
+<tr valign=top><td><b>number_Of_HMetrics</b></td><td>
+<p>Number of VMetrics entries in the &lsquo;vmtx&rsquo; table -- this value can be smaller than the total number of glyphs in the font.</p>
+</td></tr>
+<tr valign=top><td><b>long_metrics</b></td><td>
+<p>A pointer into the &lsquo;vmtx&rsquo; table.</p>
+</td></tr>
+<tr valign=top><td><b>short_metrics</b></td><td>
+<p>A pointer into the &lsquo;vmtx&rsquo; table.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>IMPORTANT: The TT_HoriHeader and TT_VertHeader structures should be identical except for the names of their fields which are different.</p>
+<p>This ensures that a single function in the &lsquo;ttload&rsquo; module is able to read both the horizontal and vertical headers.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="TT_OS2">TT_OS2</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> TT_OS2_
+ {
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> version; /* 0x0001 - more or 0xFFFF */
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> xAvgCharWidth;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> usWeightClass;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> usWidthClass;
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> fsType;
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> ySubscriptXSize;
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> ySubscriptYSize;
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> ySubscriptXOffset;
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> ySubscriptYOffset;
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> ySuperscriptXSize;
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> ySuperscriptYSize;
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> ySuperscriptXOffset;
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> ySuperscriptYOffset;
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> yStrikeoutSize;
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> yStrikeoutPosition;
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> sFamilyClass;
+
+ <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> panose[10];
+
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> ulUnicodeRange1; /* Bits 0-31 */
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> ulUnicodeRange2; /* Bits 32-63 */
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> ulUnicodeRange3; /* Bits 64-95 */
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> ulUnicodeRange4; /* Bits 96-127 */
+
+ <a href="ft2-basic_types.html#FT_Char">FT_Char</a> achVendID[4];
+
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> fsSelection;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> usFirstCharIndex;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> usLastCharIndex;
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> sTypoAscender;
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> sTypoDescender;
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> sTypoLineGap;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> usWinAscent;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> usWinDescent;
+
+ /* only version 1 tables: */
+
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> ulCodePageRange1; /* Bits 0-31 */
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> ulCodePageRange2; /* Bits 32-63 */
+
+ /* only version 2 tables: */
+
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> sxHeight;
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> sCapHeight;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> usDefaultChar;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> usBreakChar;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> usMaxContext;
+
+ } <b>TT_OS2</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A structure used to model a TrueType OS/2 table. This is the long table version. All fields comply to the TrueType specification.</p>
+<p>Note that we now support old Mac fonts which do not include an OS/2 table. In this case, the &lsquo;version&rsquo; field is always set to 0xFFFF.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="TT_Postscript">TT_Postscript</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> TT_Postscript_
+ {
+ <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> FormatType;
+ <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> italicAngle;
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> underlinePosition;
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> underlineThickness;
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> isFixedPitch;
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> minMemType42;
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> maxMemType42;
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> minMemType1;
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> maxMemType1;
+
+ /* Glyph names follow in the file, but we don't */
+ /* load them by default. See the ttpost.c file. */
+
+ } <b>TT_Postscript</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A structure used to model a TrueType Postscript table. All fields comply to the TrueType specification. This structure does not reference the Postscript glyph names, which can be nevertheless accessed with the &lsquo;ttpost&rsquo; module.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="TT_PCLT">TT_PCLT</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> TT_PCLT_
+ {
+ <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> Version;
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> FontNumber;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> Pitch;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> xHeight;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> Style;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> TypeFamily;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> CapHeight;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> SymbolSet;
+ <a href="ft2-basic_types.html#FT_Char">FT_Char</a> TypeFace[16];
+ <a href="ft2-basic_types.html#FT_Char">FT_Char</a> CharacterComplement[8];
+ <a href="ft2-basic_types.html#FT_Char">FT_Char</a> FileName[6];
+ <a href="ft2-basic_types.html#FT_Char">FT_Char</a> StrokeWeight;
+ <a href="ft2-basic_types.html#FT_Char">FT_Char</a> WidthType;
+ <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> SerifStyle;
+ <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> Reserved;
+
+ } <b>TT_PCLT</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A structure used to model a TrueType PCLT table. All fields comply to the TrueType specification.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="TT_MaxProfile">TT_MaxProfile</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> TT_MaxProfile_
+ {
+ <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> version;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> numGlyphs;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> maxPoints;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> maxContours;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> maxCompositePoints;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> maxCompositeContours;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> maxZones;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> maxTwilightPoints;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> maxStorage;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> maxFunctionDefs;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> maxInstructionDefs;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> maxStackElements;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> maxSizeOfInstructions;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> maxComponentElements;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> maxComponentDepth;
+
+ } <b>TT_MaxProfile</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>The maximum profile is a table containing many max values which can be used to pre-allocate arrays. This ensures that no memory allocation occurs during a glyph load.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>fields</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>version</b></td><td>
+<p>The version number.</p>
+</td></tr>
+<tr valign=top><td><b>numGlyphs</b></td><td>
+<p>The number of glyphs in this TrueType font.</p>
+</td></tr>
+<tr valign=top><td><b>maxPoints</b></td><td>
+<p>The maximum number of points in a non-composite TrueType glyph. See also the structure element &lsquo;maxCompositePoints&rsquo;.</p>
+</td></tr>
+<tr valign=top><td><b>maxContours</b></td><td>
+<p>The maximum number of contours in a non-composite TrueType glyph. See also the structure element &lsquo;maxCompositeContours&rsquo;.</p>
+</td></tr>
+<tr valign=top><td><b>maxCompositePoints</b></td><td>
+<p>The maximum number of points in a composite TrueType glyph. See also the structure element &lsquo;maxPoints&rsquo;.</p>
+</td></tr>
+<tr valign=top><td><b>maxCompositeContours</b></td><td>
+<p>The maximum number of contours in a composite TrueType glyph. See also the structure element &lsquo;maxContours&rsquo;.</p>
+</td></tr>
+<tr valign=top><td><b>maxZones</b></td><td>
+<p>The maximum number of zones used for glyph hinting.</p>
+</td></tr>
+<tr valign=top><td><b>maxTwilightPoints</b></td><td>
+<p>The maximum number of points in the twilight zone used for glyph hinting.</p>
+</td></tr>
+<tr valign=top><td><b>maxStorage</b></td><td>
+<p>The maximum number of elements in the storage area used for glyph hinting.</p>
+</td></tr>
+<tr valign=top><td><b>maxFunctionDefs</b></td><td>
+<p>The maximum number of function definitions in the TrueType bytecode for this font.</p>
+</td></tr>
+<tr valign=top><td><b>maxInstructionDefs</b></td><td>
+<p>The maximum number of instruction definitions in the TrueType bytecode for this font.</p>
+</td></tr>
+<tr valign=top><td><b>maxStackElements</b></td><td>
+<p>The maximum number of stack elements used during bytecode interpretation.</p>
+</td></tr>
+<tr valign=top><td><b>maxSizeOfInstructions</b></td><td>
+<p>The maximum number of TrueType opcodes used for glyph hinting.</p>
+</td></tr>
+<tr valign=top><td><b>maxComponentElements</b></td><td>
+<p>The maximum number of simple (i.e., non- composite) glyphs in a composite glyph.</p>
+</td></tr>
+<tr valign=top><td><b>maxComponentDepth</b></td><td>
+<p>The maximum nesting depth of composite glyphs.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>This structure is only used during font loading.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Sfnt_Tag">FT_Sfnt_Tag</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">enum</span> FT_Sfnt_Tag_
+ {
+ ft_sfnt_head = 0,
+ ft_sfnt_maxp = 1,
+ ft_sfnt_os2 = 2,
+ ft_sfnt_hhea = 3,
+ ft_sfnt_vhea = 4,
+ ft_sfnt_post = 5,
+ ft_sfnt_pclt = 6,
+
+ sfnt_max /* internal end mark */
+
+ } <b>FT_Sfnt_Tag</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>An enumeration used to specify the index of an SFNT table. Used in the <a href="ft2-truetype_tables.html#FT_Get_Sfnt_Table">FT_Get_Sfnt_Table</a> API function.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Get_Sfnt_Table">FT_Get_Sfnt_Table</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <span class="keyword">void</span>* )
+ <b>FT_Get_Sfnt_Table</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-truetype_tables.html#FT_Sfnt_Tag">FT_Sfnt_Tag</a> tag );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Returns a pointer to a given SFNT table within a face.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to the source.</p>
+</td></tr>
+<tr valign=top><td><b>tag</b></td><td>
+<p>The index of the SFNT table.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>A type-less pointer to the table. This will be 0 in case of error, or if the corresponding table was not found <b>OR</b> loaded from the file.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The table is owned by the face object and disappears with it.</p>
+<p>This function is only useful to access SFNT tables that are loaded by the sfnt, truetype, and opentype drivers. See <a href="ft2-truetype_tables.html#FT_Sfnt_Tag">FT_Sfnt_Tag</a> for a list.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Load_Sfnt_Table">FT_Load_Sfnt_Table</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Load_Sfnt_Table</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> tag,
+ <a href="ft2-basic_types.html#FT_Long">FT_Long</a> offset,
+ <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a>* buffer,
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a>* length );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Loads any font table into client memory.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to the source face.</p>
+</td></tr>
+<tr valign=top><td><b>tag</b></td><td>
+<p>The four-byte tag of the table to load. Use the value 0 if you want to access the whole font file. Otherwise, you can use one of the definitions found in the <a href="ft2-header_file_macros.html#FT_TRUETYPE_TAGS_H">FT_TRUETYPE_TAGS_H</a> file, or forge a new one with <a href="ft2-basic_types.html#FT_MAKE_TAG">FT_MAKE_TAG</a>.</p>
+</td></tr>
+<tr valign=top><td><b>offset</b></td><td>
+<p>The starting offset in the table (or file if tag == 0).</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>buffer</b></td><td>
+<p>The target buffer address. The client must ensure that the memory array is big enough to hold the data.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>inout</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>length</b></td><td>
+<p>If the &lsquo;length&rsquo; parameter is NULL, then try to load the whole table. Return an error code if it fails.</p>
+<p>Else, if &lsquo;*length&rsquo; is 0, exit immediately while returning the table's (or file) full size in it.</p>
+<p>Else the number of bytes to read from the table or file, from the starting offset.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>If you need to determine the table's length you should first call this function with &lsquo;*length&rsquo; set to 0, as in the following example:</p>
+<pre class="colored">
+ FT_ULong length = 0;
+
+
+ error = FT_Load_Sfnt_Table( face, tag, 0, NULL, &amp;length );
+ if ( error ) { ... table does not exist ... }
+
+ buffer = malloc( length );
+ if ( buffer == NULL ) { ... not enough memory ... }
+
+ error = FT_Load_Sfnt_Table( face, tag, 0, buffer, &amp;length );
+ if ( error ) { ... could not load table ... }
+</pre>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Sfnt_Table_Info">FT_Sfnt_Table_Info</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Sfnt_Table_Info</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> table_index,
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> *tag,
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> *length );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Returns information on an SFNT table.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to the source face.</p>
+</td></tr>
+<tr valign=top><td><b>table_index</b></td><td>
+<p>The index of an SFNT table. The function returns FT_Err_Table_Missing for an invalid value.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>tag</b></td><td>
+<p>The name tag of the SFNT table.</p>
+</td></tr>
+<tr valign=top><td><b>length</b></td><td>
+<p>The length of the SFNT table.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>SFNT tables with length zero are treated as missing by Windows.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Get_CMap_Language_ID">FT_Get_CMap_Language_ID</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> )
+ <b>FT_Get_CMap_Language_ID</b>( <a href="ft2-base_interface.html#FT_CharMap">FT_CharMap</a> charmap );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Return TrueType/sfnt specific cmap language ID. Definitions of language ID values are in &lsquo;freetype/ttnameid.h&rsquo;.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>charmap</b></td><td>
+<p>The target charmap.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>The language ID of &lsquo;charmap&rsquo;. If &lsquo;charmap&rsquo; doesn't belong to a TrueType/sfnt face, just return 0 as the default value.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Get_CMap_Format">FT_Get_CMap_Format</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TRUETYPE_TABLES_H (freetype/tttables.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Long">FT_Long</a> )
+ <b>FT_Get_CMap_Format</b>( <a href="ft2-base_interface.html#FT_CharMap">FT_CharMap</a> charmap );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Return TrueType/sfnt specific cmap format.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>charmap</b></td><td>
+<p>The target charmap.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>The format of &lsquo;charmap&rsquo;. If &lsquo;charmap&rsquo; doesn't belong to a TrueType/sfnt face, return -1.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_PARAM_TAG_UNPATENTED_HINTING">FT_PARAM_TAG_UNPATENTED_HINTING</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_UNPATENTED_HINTING_H (freetype/ttunpat.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <b>FT_PARAM_TAG_UNPATENTED_HINTING</b> <a href="ft2-basic_types.html#FT_MAKE_TAG">FT_MAKE_TAG</a>( 'u', 'n', 'p', 'a' )
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A constant used as the tag of an <a href="ft2-base_interface.html#FT_Parameter">FT_Parameter</a> structure to indicate that unpatented methods only should be used by the TrueType bytecode interpreter for a typeface opened by <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a>.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+</body>
+</html>
diff --git a/src/3rdparty/freetype/docs/reference/ft2-type1_tables.html b/src/3rdparty/freetype/docs/reference/ft2-type1_tables.html
new file mode 100644
index 0000000..9cc7e53
--- /dev/null
+++ b/src/3rdparty/freetype/docs/reference/ft2-type1_tables.html
@@ -0,0 +1,518 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>FreeType-2.3.6 API Reference</title>
+<style type="text/css">
+ body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
+ color: #000000;
+ background: #FFFFFF; }
+
+ p { text-align: justify; }
+ h1 { text-align: center; }
+ li { text-align: justify; }
+ td { padding: 0 0.5em 0 0.5em; }
+ td.left { padding: 0 0.5em 0 0.5em;
+ text-align: left; }
+
+ a:link { color: #0000EF; }
+ a:visited { color: #51188E; }
+ a:hover { color: #FF0000; }
+
+ span.keyword { font-family: monospace;
+ text-align: left;
+ white-space: pre;
+ color: darkblue; }
+
+ pre.colored { color: blue; }
+
+ ul.empty { list-style-type: none; }
+</style>
+</head>
+<body>
+<center><h1>FreeType-2.3.6 API Reference</h1></center>
+
+<center><h1>
+Type 1 Tables
+</h1></center>
+<h2>Synopsis</h2>
+<table align=center cellspacing=5 cellpadding=0 border=0>
+<tr><td></td><td><a href="#PS_FontInfoRec">PS_FontInfoRec</a></td><td></td><td><a href="#T1_Private">T1_Private</a></td><td></td><td><a href="#CID_FaceInfo">CID_FaceInfo</a></td></tr>
+<tr><td></td><td><a href="#PS_FontInfo">PS_FontInfo</a></td><td></td><td><a href="#T1_Blend_Flags">T1_Blend_Flags</a></td><td></td><td><a href="#CID_Info">CID_Info</a></td></tr>
+<tr><td></td><td><a href="#T1_FontInfo">T1_FontInfo</a></td><td></td><td><a href="#CID_FaceDictRec">CID_FaceDictRec</a></td><td></td><td><a href="#FT_Has_PS_Glyph_Names">FT_Has_PS_Glyph_Names</a></td></tr>
+<tr><td></td><td><a href="#PS_PrivateRec">PS_PrivateRec</a></td><td></td><td><a href="#CID_FaceDict">CID_FaceDict</a></td><td></td><td><a href="#FT_Get_PS_Font_Info">FT_Get_PS_Font_Info</a></td></tr>
+<tr><td></td><td><a href="#PS_Private">PS_Private</a></td><td></td><td><a href="#CID_FaceInfoRec">CID_FaceInfoRec</a></td><td></td><td><a href="#FT_Get_PS_Font_Private">FT_Get_PS_Font_Private</a></td></tr>
+</table><br><br>
+
+<table align=center width="87%"><tr><td>
+<p>This section contains the definition of Type 1-specific tables, including structures related to other PostScript font formats.</p>
+</td></tr></table><br>
+<table align=center width="75%"><tr><td>
+<h4><a name="PS_FontInfoRec">PS_FontInfoRec</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> PS_FontInfoRec_
+ {
+ <a href="ft2-basic_types.html#FT_String">FT_String</a>* version;
+ <a href="ft2-basic_types.html#FT_String">FT_String</a>* notice;
+ <a href="ft2-basic_types.html#FT_String">FT_String</a>* full_name;
+ <a href="ft2-basic_types.html#FT_String">FT_String</a>* family_name;
+ <a href="ft2-basic_types.html#FT_String">FT_String</a>* weight;
+ <a href="ft2-basic_types.html#FT_Long">FT_Long</a> italic_angle;
+ <a href="ft2-basic_types.html#FT_Bool">FT_Bool</a> is_fixed_pitch;
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> underline_position;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> underline_thickness;
+
+ } <b>PS_FontInfoRec</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A structure used to model a Type1/Type2 FontInfo dictionary. Note that for Multiple Master fonts, each instance has its own FontInfo dictionary.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="PS_FontInfo">PS_FontInfo</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> PS_FontInfoRec_* <b>PS_FontInfo</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A handle to a <a href="ft2-type1_tables.html#PS_FontInfoRec">PS_FontInfoRec</a> structure.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="T1_FontInfo">T1_FontInfo</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <a href="ft2-type1_tables.html#PS_FontInfoRec">PS_FontInfoRec</a> <b>T1_FontInfo</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>This type is equivalent to <a href="ft2-type1_tables.html#PS_FontInfoRec">PS_FontInfoRec</a>. It is deprecated but kept to maintain source compatibility between various versions of FreeType.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="PS_PrivateRec">PS_PrivateRec</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> PS_PrivateRec_
+ {
+ <a href="ft2-basic_types.html#FT_Int">FT_Int</a> unique_id;
+ <a href="ft2-basic_types.html#FT_Int">FT_Int</a> lenIV;
+
+ <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> num_blue_values;
+ <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> num_other_blues;
+ <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> num_family_blues;
+ <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> num_family_other_blues;
+
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> blue_values[14];
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> other_blues[10];
+
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> family_blues [14];
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> family_other_blues[10];
+
+ <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> blue_scale;
+ <a href="ft2-basic_types.html#FT_Int">FT_Int</a> blue_shift;
+ <a href="ft2-basic_types.html#FT_Int">FT_Int</a> blue_fuzz;
+
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> standard_width[1];
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> standard_height[1];
+
+ <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> num_snap_widths;
+ <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> num_snap_heights;
+ <a href="ft2-basic_types.html#FT_Bool">FT_Bool</a> force_bold;
+ <a href="ft2-basic_types.html#FT_Bool">FT_Bool</a> round_stem_up;
+
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> snap_widths [13]; /* including std width */
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> snap_heights[13]; /* including std height */
+
+ <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> expansion_factor;
+
+ <a href="ft2-basic_types.html#FT_Long">FT_Long</a> language_group;
+ <a href="ft2-basic_types.html#FT_Long">FT_Long</a> password;
+
+ <a href="ft2-basic_types.html#FT_Short">FT_Short</a> min_feature[2];
+
+ } <b>PS_PrivateRec</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A structure used to model a Type1/Type2 private dictionary. Note that for Multiple Master fonts, each instance has its own Private dictionary.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="PS_Private">PS_Private</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> PS_PrivateRec_* <b>PS_Private</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A handle to a <a href="ft2-type1_tables.html#PS_PrivateRec">PS_PrivateRec</a> structure.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="T1_Private">T1_Private</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <a href="ft2-type1_tables.html#PS_PrivateRec">PS_PrivateRec</a> <b>T1_Private</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>This type is equivalent to <a href="ft2-type1_tables.html#PS_PrivateRec">PS_PrivateRec</a>. It is deprecated but kept to maintain source compatibility between various versions of FreeType.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="T1_Blend_Flags">T1_Blend_Flags</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">enum</span> T1_Blend_Flags_
+ {
+ /*# required fields in a FontInfo blend dictionary */
+ T1_BLEND_UNDERLINE_POSITION = 0,
+ T1_BLEND_UNDERLINE_THICKNESS,
+ T1_BLEND_ITALIC_ANGLE,
+
+ /*# required fields in a Private blend dictionary */
+ T1_BLEND_BLUE_VALUES,
+ T1_BLEND_OTHER_BLUES,
+ T1_BLEND_STANDARD_WIDTH,
+ T1_BLEND_STANDARD_HEIGHT,
+ T1_BLEND_STEM_SNAP_WIDTHS,
+ T1_BLEND_STEM_SNAP_HEIGHTS,
+ T1_BLEND_BLUE_SCALE,
+ T1_BLEND_BLUE_SHIFT,
+ T1_BLEND_FAMILY_BLUES,
+ T1_BLEND_FAMILY_OTHER_BLUES,
+ T1_BLEND_FORCE_BOLD,
+
+ /*# never remove */
+ T1_BLEND_MAX
+
+ } <b>T1_Blend_Flags</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A set of flags used to indicate which fields are present in a given blend dictionary (font info or private). Used to support Multiple Masters fonts.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="CID_FaceDictRec">CID_FaceDictRec</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> CID_FaceDictRec_
+ {
+ <a href="ft2-type1_tables.html#PS_PrivateRec">PS_PrivateRec</a> private_dict;
+
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> len_buildchar;
+ <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> forcebold_threshold;
+ <a href="ft2-basic_types.html#FT_Pos">FT_Pos</a> stroke_width;
+ <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> expansion_factor;
+
+ <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> paint_type;
+ <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> font_type;
+ <a href="ft2-basic_types.html#FT_Matrix">FT_Matrix</a> font_matrix;
+ <a href="ft2-basic_types.html#FT_Vector">FT_Vector</a> font_offset;
+
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> num_subrs;
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> subrmap_offset;
+ <a href="ft2-basic_types.html#FT_Int">FT_Int</a> sd_bytes;
+
+ } <b>CID_FaceDictRec</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A structure used to represent data in a CID top-level dictionary.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="CID_FaceDict">CID_FaceDict</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> CID_FaceDictRec_* <b>CID_FaceDict</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A handle to a <a href="ft2-type1_tables.html#CID_FaceDictRec">CID_FaceDictRec</a> structure.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="CID_FaceInfoRec">CID_FaceInfoRec</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> CID_FaceInfoRec_
+ {
+ <a href="ft2-basic_types.html#FT_String">FT_String</a>* cid_font_name;
+ <a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a> cid_version;
+ <a href="ft2-basic_types.html#FT_Int">FT_Int</a> cid_font_type;
+
+ <a href="ft2-basic_types.html#FT_String">FT_String</a>* registry;
+ <a href="ft2-basic_types.html#FT_String">FT_String</a>* ordering;
+ <a href="ft2-basic_types.html#FT_Int">FT_Int</a> supplement;
+
+ <a href="ft2-type1_tables.html#PS_FontInfoRec">PS_FontInfoRec</a> font_info;
+ <a href="ft2-basic_types.html#FT_BBox">FT_BBox</a> font_bbox;
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> uid_base;
+
+ <a href="ft2-basic_types.html#FT_Int">FT_Int</a> num_xuid;
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> xuid[16];
+
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> cidmap_offset;
+ <a href="ft2-basic_types.html#FT_Int">FT_Int</a> fd_bytes;
+ <a href="ft2-basic_types.html#FT_Int">FT_Int</a> gd_bytes;
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> cid_count;
+
+ <a href="ft2-basic_types.html#FT_Int">FT_Int</a> num_dicts;
+ <a href="ft2-type1_tables.html#CID_FaceDict">CID_FaceDict</a> font_dicts;
+
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> data_offset;
+
+ } <b>CID_FaceInfoRec</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A structure used to represent CID Face information.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="CID_FaceInfo">CID_FaceInfo</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> CID_FaceInfoRec_* <b>CID_FaceInfo</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A handle to a <a href="ft2-type1_tables.html#CID_FaceInfoRec">CID_FaceInfoRec</a> structure.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="CID_Info">CID_Info</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <a href="ft2-type1_tables.html#CID_FaceInfoRec">CID_FaceInfoRec</a> <b>CID_Info</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>This type is equivalent to <a href="ft2-type1_tables.html#CID_FaceInfoRec">CID_FaceInfoRec</a>. It is deprecated but kept to maintain source compatibility between various versions of FreeType.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Has_PS_Glyph_Names">FT_Has_PS_Glyph_Names</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Int">FT_Int</a> )
+ <b>FT_Has_PS_Glyph_Names</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Return true if a given face provides reliable Postscript glyph names. This is similar to using the <a href="ft2-base_interface.html#FT_HAS_GLYPH_NAMES">FT_HAS_GLYPH_NAMES</a> macro, except that certain fonts (mostly TrueType) contain incorrect glyph name tables.</p>
+<p>When this function returns true, the caller is sure that the glyph names returned by <a href="ft2-base_interface.html#FT_Get_Glyph_Name">FT_Get_Glyph_Name</a> are reliable.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>face handle</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>Boolean. True if glyph names are reliable.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Get_PS_Font_Info">FT_Get_PS_Font_Info</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Get_PS_Font_Info</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-type1_tables.html#PS_FontInfo">PS_FontInfo</a> afont_info );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Retrieve the <a href="ft2-type1_tables.html#PS_FontInfoRec">PS_FontInfoRec</a> structure corresponding to a given Postscript font.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>Postscript face handle.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>afont_info</b></td><td>
+<p>Output font info structure pointer.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The string pointers within the font info structure are owned by the face and don't need to be freed by the caller.</p>
+<p>If the font's format is not Postscript-based, this function will return the &lsquo;FT_Err_Invalid_Argument&rsquo; error code.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Get_PS_Font_Private">FT_Get_PS_Font_Private</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_TYPE1_TABLES_H (freetype/t1tables.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Get_PS_Font_Private</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-type1_tables.html#PS_Private">PS_Private</a> afont_private );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Retrieve the <a href="ft2-type1_tables.html#PS_PrivateRec">PS_PrivateRec</a> structure corresponding to a given Postscript font.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>Postscript face handle.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>afont_private</b></td><td>
+<p>Output private dictionary structure pointer.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The string pointers within the font info structure are owned by the face and don't need to be freed by the caller.</p>
+<p>If the font's format is not Postscript-based, this function will return the &lsquo;FT_Err_Invalid_Argument&rsquo; error code.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+</body>
+</html>
diff --git a/src/3rdparty/freetype/docs/reference/ft2-user_allocation.html b/src/3rdparty/freetype/docs/reference/ft2-user_allocation.html
new file mode 100644
index 0000000..0799ce1
--- /dev/null
+++ b/src/3rdparty/freetype/docs/reference/ft2-user_allocation.html
@@ -0,0 +1,43 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>FreeType-2.3.6 API Reference</title>
+<style type="text/css">
+ body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
+ color: #000000;
+ background: #FFFFFF; }
+
+ p { text-align: justify; }
+ h1 { text-align: center; }
+ li { text-align: justify; }
+ td { padding: 0 0.5em 0 0.5em; }
+ td.left { padding: 0 0.5em 0 0.5em;
+ text-align: left; }
+
+ a:link { color: #0000EF; }
+ a:visited { color: #51188E; }
+ a:hover { color: #FF0000; }
+
+ span.keyword { font-family: monospace;
+ text-align: left;
+ white-space: pre;
+ color: darkblue; }
+
+ pre.colored { color: blue; }
+
+ ul.empty { list-style-type: none; }
+</style>
+</head>
+<body>
+<center><h1>FreeType-2.3.6 API Reference</h1></center>
+
+<center><h1>
+User allocation
+</h1></center>
+<table align=center width="87%"><tr><td>
+<p>FreeType assumes that structures allocated by the user and passed as arguments are zeroed out except for the actual data. With other words, it is recommended to use &lsquo;calloc&rsquo; (or variants of it) instead of &lsquo;malloc&rsquo; for allocation.</p>
+</td></tr></table><br>
+</body>
+</html>
diff --git a/src/3rdparty/freetype/docs/reference/ft2-version.html b/src/3rdparty/freetype/docs/reference/ft2-version.html
new file mode 100644
index 0000000..307f089
--- /dev/null
+++ b/src/3rdparty/freetype/docs/reference/ft2-version.html
@@ -0,0 +1,209 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>FreeType-2.3.6 API Reference</title>
+<style type="text/css">
+ body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
+ color: #000000;
+ background: #FFFFFF; }
+
+ p { text-align: justify; }
+ h1 { text-align: center; }
+ li { text-align: justify; }
+ td { padding: 0 0.5em 0 0.5em; }
+ td.left { padding: 0 0.5em 0 0.5em;
+ text-align: left; }
+
+ a:link { color: #0000EF; }
+ a:visited { color: #51188E; }
+ a:hover { color: #FF0000; }
+
+ span.keyword { font-family: monospace;
+ text-align: left;
+ white-space: pre;
+ color: darkblue; }
+
+ pre.colored { color: blue; }
+
+ ul.empty { list-style-type: none; }
+</style>
+</head>
+<body>
+<center><h1>FreeType-2.3.6 API Reference</h1></center>
+
+<center><h1>
+FreeType Version
+</h1></center>
+<h2>Synopsis</h2>
+<table align=center cellspacing=5 cellpadding=0 border=0>
+<tr><td></td><td><a href="#FREETYPE_XXX">FREETYPE_XXX</a></td><td></td><td><a href="#FT_Face_CheckTrueTypePatents">FT_Face_CheckTrueTypePatents</a></td></tr>
+<tr><td></td><td><a href="#FT_Library_Version">FT_Library_Version</a></td><td></td><td><a href="#FT_Face_SetUnpatentedHinting">FT_Face_SetUnpatentedHinting</a></td></tr>
+</table><br><br>
+
+<table align=center width="87%"><tr><td>
+<p>Note that those functions and macros are of limited use because even a new release of FreeType with only documentation changes increases the version number.</p>
+</td></tr></table><br>
+<table align=center width="75%"><tr><td>
+<h4><a name="FREETYPE_XXX">FREETYPE_XXX</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <a href="ft2-version.html#FREETYPE_XXX">FREETYPE_MAJOR</a> 2
+#define <a href="ft2-version.html#FREETYPE_XXX">FREETYPE_MINOR</a> 3
+#define <a href="ft2-version.html#FREETYPE_XXX">FREETYPE_PATCH</a> 6
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>These three macros identify the FreeType source code version. Use <a href="ft2-version.html#FT_Library_Version">FT_Library_Version</a> to access them at runtime.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>FREETYPE_MAJOR</b></td><td>
+<p>The major version number.</p>
+</td></tr>
+<tr valign=top><td><b>FREETYPE_MINOR</b></td><td>
+<p>The minor version number.</p>
+</td></tr>
+<tr valign=top><td><b>FREETYPE_PATCH</b></td><td>
+<p>The patch level.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The version number of FreeType if built as a dynamic link library with the &lsquo;libtool&rsquo; package is <i>not</i> controlled by these three macros.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Library_Version">FT_Library_Version</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <span class="keyword">void</span> )
+ <b>FT_Library_Version</b>( <a href="ft2-base_interface.html#FT_Library">FT_Library</a> library,
+ <a href="ft2-basic_types.html#FT_Int">FT_Int</a> *amajor,
+ <a href="ft2-basic_types.html#FT_Int">FT_Int</a> *aminor,
+ <a href="ft2-basic_types.html#FT_Int">FT_Int</a> *apatch );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Return the version of the FreeType library being used. This is useful when dynamically linking to the library, since one cannot use the macros <a href="ft2-version.html#FREETYPE_XXX">FREETYPE_MAJOR</a>, <a href="ft2-version.html#FREETYPE_XXX">FREETYPE_MINOR</a>, and <a href="ft2-version.html#FREETYPE_XXX">FREETYPE_PATCH</a>.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>library</b></td><td>
+<p>A source library handle.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>amajor</b></td><td>
+<p>The major version number.</p>
+</td></tr>
+<tr valign=top><td><b>aminor</b></td><td>
+<p>The minor version number.</p>
+</td></tr>
+<tr valign=top><td><b>apatch</b></td><td>
+<p>The patch version number.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>The reason why this function takes a &lsquo;library&rsquo; argument is because certain programs implement library initialization in a custom way that doesn't use <a href="ft2-base_interface.html#FT_Init_FreeType">FT_Init_FreeType</a>.</p>
+<p>In such cases, the library version might not be available before the library object has been created.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Face_CheckTrueTypePatents">FT_Face_CheckTrueTypePatents</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Bool">FT_Bool</a> )
+ <b>FT_Face_CheckTrueTypePatents</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Parse all bytecode instructions of a TrueType font file to check whether any of the patented opcodes are used. This is only useful if you want to be able to use the unpatented hinter with fonts that do <b>not</b> use these opcodes.</p>
+<p>Note that this function parses <b>all</b> glyph instructions in the font file, which may be slow.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A face handle.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>1 if this is a TrueType font that uses one of the patented opcodes, 0 otherwise.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>since</b></em></td></tr><tr><td>
+<p>2.3.5</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Face_SetUnpatentedHinting">FT_Face_SetUnpatentedHinting</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_FREETYPE_H (freetype/freetype.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Bool">FT_Bool</a> )
+ <b>FT_Face_SetUnpatentedHinting</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-basic_types.html#FT_Bool">FT_Bool</a> value );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Enable or disable the unpatented hinter for a given face. Only enable it if you have determined that the face doesn't use any patented opcodes (see <a href="ft2-version.html#FT_Face_CheckTrueTypePatents">FT_Face_CheckTrueTypePatents</a>).</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A face handle.</p>
+</td></tr>
+<tr valign=top><td><b>value</b></td><td>
+<p>New boolean setting.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>The old setting value. This will always be false if this is not a SFNT font, or if the unpatented hinter is not compiled in this instance of the library.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>since</b></em></td></tr><tr><td>
+<p>2.3.5</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+</body>
+</html>
diff --git a/src/3rdparty/freetype/docs/reference/ft2-winfnt_fonts.html b/src/3rdparty/freetype/docs/reference/ft2-winfnt_fonts.html
new file mode 100644
index 0000000..dfaad85
--- /dev/null
+++ b/src/3rdparty/freetype/docs/reference/ft2-winfnt_fonts.html
@@ -0,0 +1,274 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>FreeType-2.3.6 API Reference</title>
+<style type="text/css">
+ body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
+ color: #000000;
+ background: #FFFFFF; }
+
+ p { text-align: justify; }
+ h1 { text-align: center; }
+ li { text-align: justify; }
+ td { padding: 0 0.5em 0 0.5em; }
+ td.left { padding: 0 0.5em 0 0.5em;
+ text-align: left; }
+
+ a:link { color: #0000EF; }
+ a:visited { color: #51188E; }
+ a:hover { color: #FF0000; }
+
+ span.keyword { font-family: monospace;
+ text-align: left;
+ white-space: pre;
+ color: darkblue; }
+
+ pre.colored { color: blue; }
+
+ ul.empty { list-style-type: none; }
+</style>
+</head>
+<body>
+<center><h1>FreeType-2.3.6 API Reference</h1></center>
+
+<center><h1>
+Window FNT Files
+</h1></center>
+<h2>Synopsis</h2>
+<table align=center cellspacing=5 cellpadding=0 border=0>
+<tr><td></td><td><a href="#FT_WinFNT_ID_XXX">FT_WinFNT_ID_XXX</a></td><td></td><td><a href="#FT_WinFNT_Header">FT_WinFNT_Header</a></td><td></td><td></td></tr>
+<tr><td></td><td><a href="#FT_WinFNT_HeaderRec">FT_WinFNT_HeaderRec</a></td><td></td><td><a href="#FT_Get_WinFNT_Header">FT_Get_WinFNT_Header</a></td><td></td><td></td></tr>
+</table><br><br>
+
+<table align=center width="87%"><tr><td>
+<p>This section contains the declaration of Windows FNT specific functions.</p>
+</td></tr></table><br>
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_WinFNT_ID_XXX">FT_WinFNT_ID_XXX</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_WINFONTS_H (freetype/ftwinfnt.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1252</a> 0
+#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_DEFAULT</a> 1
+#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_SYMBOL</a> 2
+#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_MAC</a> 77
+#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP932</a> 128
+#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP949</a> 129
+#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1361</a> 130
+#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP936</a> 134
+#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP950</a> 136
+#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1253</a> 161
+#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1254</a> 162
+#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1258</a> 163
+#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1255</a> 177
+#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1256</a> 178
+#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1257</a> 186
+#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1251</a> 204
+#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP874</a> 222
+#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1250</a> 238
+#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_OEM</a> 255
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A list of valid values for the &lsquo;charset&rsquo; byte in <a href="ft2-winfnt_fonts.html#FT_WinFNT_HeaderRec">FT_WinFNT_HeaderRec</a>. Exact mapping tables for the various cpXXXX encodings (except for cp1361) can be found at ftp://ftp.unicode.org in the MAPPINGS/VENDORS/MICSFT/WINDOWS subdirectory. cp1361 is roughly a superset of MAPPINGS/OBSOLETE/EASTASIA/KSC/JOHAB.TXT.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>values</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>FT_WinFNT_ID_DEFAULT</b></td><td>
+<p>This is used for font enumeration and font creation as a &lsquo;don't care&rsquo; value. Valid font files don't contain this value. When querying for information about the character set of the font that is currently selected into a specified device context, this return value (of the related Windows API) simply denotes failure.</p>
+</td></tr>
+<tr valign=top><td><b>FT_WinFNT_ID_SYMBOL</b></td><td>
+<p>There is no known mapping table available.</p>
+</td></tr>
+<tr valign=top><td><b>FT_WinFNT_ID_MAC</b></td><td>
+<p>Mac Roman encoding.</p>
+</td></tr>
+<tr valign=top><td><b>FT_WinFNT_ID_OEM</b></td><td>
+<p>From Michael Pöttgen &lt;michael@poettgen.de&gt;:</p>
+<p>The &lsquo;Windows Font Mapping&rsquo; article says that FT_WinFNT_ID_OEM is used for the charset of vector fonts, like &lsquo;modern.fon&rsquo;, &lsquo;roman.fon&rsquo;, and &lsquo;script.fon&rsquo; on Windows.</p>
+<p>The &lsquo;CreateFont&rsquo; documentation says: The FT_WinFNT_ID_OEM value specifies a character set that is operating-system dependent.</p>
+<p>The &lsquo;IFIMETRICS&rsquo; documentation from the &lsquo;Windows Driver Development Kit&rsquo; says: This font supports an OEM-specific character set. The OEM character set is system dependent.</p>
+<p>In general OEM, as opposed to ANSI (i.e., cp1252), denotes the second default codepage that most international versions of Windows have. It is one of the OEM codepages from</p>
+<p>http://www.microsoft.com/globaldev/reference/cphome.mspx,</p>
+<p>and is used for the &lsquo;DOS boxes&rsquo;, to support legacy applications. A German Windows version for example usually uses ANSI codepage 1252 and OEM codepage 850.</p>
+</td></tr>
+<tr valign=top><td><b>FT_WinFNT_ID_CP874</b></td><td>
+<p>A superset of Thai TIS 620 and ISO 8859-11.</p>
+</td></tr>
+<tr valign=top><td><b>FT_WinFNT_ID_CP932</b></td><td>
+<p>A superset of Japanese Shift-JIS (with minor deviations).</p>
+</td></tr>
+<tr valign=top><td><b>FT_WinFNT_ID_CP936</b></td><td>
+<p>A superset of simplified Chinese GB 2312-1980 (with different ordering and minor deviations).</p>
+</td></tr>
+<tr valign=top><td><b>FT_WinFNT_ID_CP949</b></td><td>
+<p>A superset of Korean Hangul KS C 5601-1987 (with different ordering and minor deviations).</p>
+</td></tr>
+<tr valign=top><td><b>FT_WinFNT_ID_CP950</b></td><td>
+<p>A superset of traditional Chinese Big 5 ETen (with different ordering and minor deviations).</p>
+</td></tr>
+<tr valign=top><td><b>FT_WinFNT_ID_CP1250</b></td><td>
+<p>A superset of East European ISO 8859-2 (with slightly different ordering).</p>
+</td></tr>
+<tr valign=top><td><b>FT_WinFNT_ID_CP1251</b></td><td>
+<p>A superset of Russian ISO 8859-5 (with different ordering).</p>
+</td></tr>
+<tr valign=top><td><b>FT_WinFNT_ID_CP1252</b></td><td>
+<p>ANSI encoding. A superset of ISO 8859-1.</p>
+</td></tr>
+<tr valign=top><td><b>FT_WinFNT_ID_CP1253</b></td><td>
+<p>A superset of Greek ISO 8859-7 (with minor modifications).</p>
+</td></tr>
+<tr valign=top><td><b>FT_WinFNT_ID_CP1254</b></td><td>
+<p>A superset of Turkish ISO 8859-9.</p>
+</td></tr>
+<tr valign=top><td><b>FT_WinFNT_ID_CP1255</b></td><td>
+<p>A superset of Hebrew ISO 8859-8 (with some modifications).</p>
+</td></tr>
+<tr valign=top><td><b>FT_WinFNT_ID_CP1256</b></td><td>
+<p>A superset of Arabic ISO 8859-6 (with different ordering).</p>
+</td></tr>
+<tr valign=top><td><b>FT_WinFNT_ID_CP1257</b></td><td>
+<p>A superset of Baltic ISO 8859-13 (with some deviations).</p>
+</td></tr>
+<tr valign=top><td><b>FT_WinFNT_ID_CP1258</b></td><td>
+<p>For Vietnamese. This encoding doesn't cover all necessary characters.</p>
+</td></tr>
+<tr valign=top><td><b>FT_WinFNT_ID_CP1361</b></td><td>
+<p>Korean (Johab).</p>
+</td></tr>
+</table>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_WinFNT_HeaderRec">FT_WinFNT_HeaderRec</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_WINFONTS_H (freetype/ftwinfnt.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_WinFNT_HeaderRec_
+ {
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> version;
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> file_size;
+ <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> copyright[60];
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> file_type;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> nominal_point_size;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> vertical_resolution;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> horizontal_resolution;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> ascent;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> internal_leading;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> external_leading;
+ <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> italic;
+ <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> underline;
+ <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> strike_out;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> weight;
+ <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> charset;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> pixel_width;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> pixel_height;
+ <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> pitch_and_family;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> avg_width;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> max_width;
+ <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> first_char;
+ <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> last_char;
+ <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> default_char;
+ <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> break_char;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> bytes_per_row;
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> device_offset;
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> face_name_offset;
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> bits_pointer;
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> bits_offset;
+ <a href="ft2-basic_types.html#FT_Byte">FT_Byte</a> reserved;
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> flags;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> A_space;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> B_space;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> C_space;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> color_table_offset;
+ <a href="ft2-basic_types.html#FT_ULong">FT_ULong</a> reserved1[4];
+
+ } <b>FT_WinFNT_HeaderRec</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Windows FNT Header info.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_WinFNT_Header">FT_WinFNT_Header</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_WINFONTS_H (freetype/ftwinfnt.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ <span class="keyword">typedef</span> <span class="keyword">struct</span> FT_WinFNT_HeaderRec_* <b>FT_WinFNT_Header</b>;
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>A handle to an <a href="ft2-winfnt_fonts.html#FT_WinFNT_HeaderRec">FT_WinFNT_HeaderRec</a> structure.</p>
+</td></tr></table><br>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+<table align=center width="75%"><tr><td>
+<h4><a name="FT_Get_WinFNT_Header">FT_Get_WinFNT_Header</a></h4>
+<table align=center width="87%"><tr><td>
+Defined in FT_WINFONTS_H (freetype/ftwinfnt.h).
+</td></tr></table><br>
+<table align=center width="87%"><tr bgcolor="#D6E8FF"><td><pre>
+
+ FT_EXPORT( <a href="ft2-basic_types.html#FT_Error">FT_Error</a> )
+ <b>FT_Get_WinFNT_Header</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face,
+ <a href="ft2-winfnt_fonts.html#FT_WinFNT_HeaderRec">FT_WinFNT_HeaderRec</a> *aheader );
+
+</pre></table><br>
+<table align=center width="87%"><tr><td>
+<p>Retrieve a Windows FNT font info header.</p>
+</td></tr></table><br>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>input</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>face</b></td><td>
+<p>A handle to the input face.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>output</b></em></td></tr><tr><td>
+<p></p>
+<table cellpadding=3 border=0>
+<tr valign=top><td><b>aheader</b></td><td>
+<p>The WinFNT header.</p>
+</td></tr>
+</table>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>return</b></em></td></tr><tr><td>
+<p>FreeType error code. 0 means success.</p>
+</td></tr></table>
+<table align=center width="87%" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>note</b></em></td></tr><tr><td>
+<p>This function only works with Windows FNT faces, returning an error otherwise.</p>
+</td></tr></table>
+</td></tr></table>
+<hr width="75%">
+<table align=center width="75%"><tr><td><font size=-2>[<a href="ft2-index.html">Index</a>]</font></td>
+<td width="100%"></td>
+<td><font size=-2>[<a href="ft2-toc.html">TOC</a>]</font></td></tr></table>
+
+</body>
+</html>
diff --git a/src/3rdparty/freetype/docs/release b/src/3rdparty/freetype/docs/release
new file mode 100644
index 0000000..d68da88
--- /dev/null
+++ b/src/3rdparty/freetype/docs/release
@@ -0,0 +1,166 @@
+How to prepare a new release
+----------------------------
+
+. include/freetype/freetype.h: Update FREETYPE_MAJOR, FREETYPE_MINOR,
+ and FREETYPE_PATCH.
+
+. Update version numbers in all files where necessary (for example, do
+ a grep for both `2.3.1' and `231' for release 2.3.1).
+
+. builds/unix/configure.raw: Update `version_info'.
+
+. docs/CHANGES: Document differences to last release.
+
+. README: Update.
+
+. docs/VERSION.DLL: Document changed `version_info'.
+
+. ChangeLog: Announce new release (both in freetype2 and ft2demos
+ modules).
+
+. Copy the CVS archive to another directory and run
+
+ make distclean; make devel; make
+ make distclean; make devel; make multi
+ make distclean; make devel CC=g++; make CC=g++
+ make distclean; make devel CC=g++; make multi CC=g++
+
+ sh autogen.sh
+ make distclean; ./configure; make
+ make distclean; ./configure CC=g++; make
+
+ to test compilation with both gcc and g++.
+
+. Test C++ compilation for ft2demos too.
+
+. Tag the CVS (freetype2, ft2demos).
+
+ TODO: Tag the home page CVS on savannah.nongnu.org.
+
+. Say `make dist' in both the freetype2 and ft2demos modules to
+ generate the .tar.gz, .tar.bz2, and .zip files.
+
+. Create the doc bundles (freetype-doc-<version>.tar.gz,
+ freetype-doc-<version>.tar.bz2, ftdoc<version>.zip). This is
+ everything below
+
+ freetype.freedesktop.org:/srv/freetype.freedesktop.org/www/freetype2/docs/
+
+ except the `reference' subdirectory. Do *not* use option `-l' from
+ zip!
+
+ Run the following script (with updated `$VERSION' and
+ `$SAVANNAH_USER' variables) to sign and upload the bundles to both
+ Savannah and SourceForge. The signing code has been taken from the
+ `gnupload' script (part of the automake bundle).
+
+ #!/bin/sh
+
+ VERSION=2.3.1
+ SAVANNAH_USER=wl
+
+ #####################################################################
+
+ GPG='/usr/bin/gpg --batch --no-tty'
+
+ version=`echo $VERSION | sed "s/\\.//g"`
+
+ UNIX_PACKAGES="freetype ft2demos freetype-doc"
+ WINDOWS_PACKAGES="ft ftdmo ftdoc"
+ UNIX_ZIP="tar.gz tar.bz2"
+ WINDOWS_ZIP="zip"
+
+ PACKAGE_LIST=
+ for i in $UNIX_PACKAGES; do
+ for j in $UNIX_ZIP; do
+ PACKAGE_LIST="$PACKAGE_LIST $i-$VERSION.$j"
+ done
+ done
+ for i in $WINDOWS_PACKAGES; do
+ for j in $WINDOWS_ZIP; do
+ PACKAGE_LIST="$PACKAGE_LIST $i$version.$j"
+ done
+ done
+
+ set -e
+ unset passphrase
+
+ PATH=/empty echo -n "Enter GPG passphrase: "
+ stty -echo
+ read -r passphrase
+ stty echo
+ echo
+
+ for f in $PACKAGE_LIST; do
+ if test ! -f $f; then
+ echo "$0: Cannot find \`$f'" 1>&2
+ exit 1
+ else
+ :
+ fi
+ done
+
+ for f in $PACKAGE_LIST; do
+ echo "Signing $f..."
+ rm -f $f.sig
+ echo $passphrase | $GPG --passphrase-fd 0 -ba -o $f.sig $f
+ done
+
+ SIGNATURE_LIST=
+ for i in $PACKAGE_LIST; do
+ SIGNATURE_LIST="$SIGNATURE_LIST $i.sig"
+ done
+
+ scp $PACKAGE_LIST $SIGNATURE_LIST \
+ $SAVANNAH_USER@dl.sv.nongnu.org:/releases/freetype/
+
+ for f in $PACKAGE_LIST $SIGNATURE_LIST; do
+ ncftpput upload.sf.net /incoming $f
+ done
+
+ # EOF
+
+. While files on savannah.gnu.org are automatically moved to the right
+ directory, it must be done manually on SourceForge. Do that now.
+
+. Update the FreeType release notes on SourceForge.
+
+. Copy the reference files (generated by `make dist') to
+
+ freetype.freedesktop.org:/srv/freetype.freedesktop.org/www/freetype2/docs/reference
+
+ and
+
+ shell.sf.net:/home/groups/f/fr/freetype/htdocs/freetype2/docs/reference
+
+ TODO: Create FreeType home page CVS on savannah.nongnu.org and
+ update it accordingly.
+
+ Write script to automatically do this.
+
+ Mirror FreeType's savannah home page everywhere.
+
+. Update
+
+ freetype.freedesktop.org:/srv/freetype.freedesktop.org/www/index2.html
+
+ and copy it to
+
+ shell.sf.net:/home/groups/f/fr/freetype/htdocs/index2.html
+
+. Announce new release on freetype-announce@nongnu.org and to relevant
+ newsgroups.
+
+----------------------------------------------------------------------
+
+Copyright 2003, 2005, 2006, 2007 by
+David Turner, Robert Wilhelm, and Werner Lemberg.
+
+This file is part of the FreeType project, and may only be used,
+modified, and distributed under the terms of the FreeType project
+license, LICENSE.TXT. By continuing to use, modify, or distribute
+this file you indicate that you have read the license and understand
+and accept it fully.
+
+
+--- end of release ---
diff --git a/src/3rdparty/freetype/include/freetype/config/ftconfig.h b/src/3rdparty/freetype/include/freetype/config/ftconfig.h
new file mode 100644
index 0000000..09b2cf9
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/config/ftconfig.h
@@ -0,0 +1,415 @@
+/***************************************************************************/
+/* */
+/* ftconfig.h */
+/* */
+/* ANSI-specific configuration file (specification only). */
+/* */
+/* Copyright 1996-2001, 2002, 2003, 2004, 2006, 2007 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* This header file contains a number of macro definitions that are used */
+ /* by the rest of the engine. Most of the macros here are automatically */
+ /* determined at compile time, and you should not need to change it to */
+ /* port FreeType, except to compile the library with a non-ANSI */
+ /* compiler. */
+ /* */
+ /* Note however that if some specific modifications are needed, we */
+ /* advise you to place a modified copy in your build directory. */
+ /* */
+ /* The build directory is usually `freetype/builds/<system>', and */
+ /* contains system-specific files that are always included first when */
+ /* building the library. */
+ /* */
+ /* This ANSI version should stay in `include/freetype/config'. */
+ /* */
+ /*************************************************************************/
+
+
+#ifndef __FTCONFIG_H__
+#define __FTCONFIG_H__
+
+#include <ft2build.h>
+#include FT_CONFIG_OPTIONS_H
+#include FT_CONFIG_STANDARD_LIBRARY_H
+
+FT_BEGIN_HEADER
+
+
+ /*************************************************************************/
+ /* */
+ /* PLATFORM-SPECIFIC CONFIGURATION MACROS */
+ /* */
+ /* These macros can be toggled to suit a specific system. The current */
+ /* ones are defaults used to compile FreeType in an ANSI C environment */
+ /* (16bit compilers are also supported). Copy this file to your own */
+ /* `freetype/builds/<system>' directory, and edit it to port the engine. */
+ /* */
+ /*************************************************************************/
+
+
+ /* There are systems (like the Texas Instruments 'C54x) where a `char' */
+ /* has 16 bits. ANSI C says that sizeof(char) is always 1. Since an */
+ /* `int' has 16 bits also for this system, sizeof(int) gives 1 which */
+ /* is probably unexpected. */
+ /* */
+ /* `CHAR_BIT' (defined in limits.h) gives the number of bits in a */
+ /* `char' type. */
+
+#ifndef FT_CHAR_BIT
+#define FT_CHAR_BIT CHAR_BIT
+#endif
+
+
+ /* The size of an `int' type. */
+#if FT_UINT_MAX == 0xFFFFUL
+#define FT_SIZEOF_INT (16 / FT_CHAR_BIT)
+#elif FT_UINT_MAX == 0xFFFFFFFFUL
+#define FT_SIZEOF_INT (32 / FT_CHAR_BIT)
+#elif FT_UINT_MAX > 0xFFFFFFFFUL && FT_UINT_MAX == 0xFFFFFFFFFFFFFFFFUL
+#define FT_SIZEOF_INT (64 / FT_CHAR_BIT)
+#else
+#error "Unsupported size of `int' type!"
+#endif
+
+ /* The size of a `long' type. A five-byte `long' (as used e.g. on the */
+ /* DM642) is recognized but avoided. */
+#if FT_ULONG_MAX == 0xFFFFFFFFUL
+#define FT_SIZEOF_LONG (32 / FT_CHAR_BIT)
+#elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFUL
+#define FT_SIZEOF_LONG (32 / FT_CHAR_BIT)
+#elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFFFFFFFUL
+#define FT_SIZEOF_LONG (64 / FT_CHAR_BIT)
+#else
+#error "Unsupported size of `long' type!"
+#endif
+
+
+ /* Preferred alignment of data */
+#define FT_ALIGNMENT 8
+
+
+ /* FT_UNUSED is a macro used to indicate that a given parameter is not */
+ /* used -- this is only used to get rid of unpleasant compiler warnings */
+#ifndef FT_UNUSED
+#define FT_UNUSED( arg ) ( (arg) = (arg) )
+#endif
+
+
+ /*************************************************************************/
+ /* */
+ /* AUTOMATIC CONFIGURATION MACROS */
+ /* */
+ /* These macros are computed from the ones defined above. Don't touch */
+ /* their definition, unless you know precisely what you are doing. No */
+ /* porter should need to mess with them. */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* Mac support */
+ /* */
+ /* This is the only necessary change, so it is defined here instead */
+ /* providing a new configuration file. */
+ /* */
+#if ( defined( __APPLE__ ) && !defined( DARWIN_NO_CARBON ) ) || \
+ ( defined( __MWERKS__ ) && defined( macintosh ) )
+ /* no Carbon frameworks for 64bit 10.4.x */
+#include "AvailabilityMacros.h"
+#if defined( __LP64__ ) && \
+ ( MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 )
+#define DARWIN_NO_CARBON 1
+#else
+#define FT_MACINTOSH 1
+#endif
+#endif
+
+
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* basic_types */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_Int16 */
+ /* */
+ /* <Description> */
+ /* A typedef for a 16bit signed integer type. */
+ /* */
+ typedef signed short FT_Int16;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_UInt16 */
+ /* */
+ /* <Description> */
+ /* A typedef for a 16bit unsigned integer type. */
+ /* */
+ typedef unsigned short FT_UInt16;
+
+ /* */
+
+
+ /* this #if 0 ... #endif clause is for documentation purposes */
+#if 0
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_Int32 */
+ /* */
+ /* <Description> */
+ /* A typedef for a 32bit signed integer type. The size depends on */
+ /* the configuration. */
+ /* */
+ typedef signed XXX FT_Int32;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_UInt32 */
+ /* */
+ /* A typedef for a 32bit unsigned integer type. The size depends on */
+ /* the configuration. */
+ /* */
+ typedef unsigned XXX FT_UInt32;
+
+ /* */
+
+#endif
+
+#if FT_SIZEOF_INT == (32 / FT_CHAR_BIT)
+
+ typedef signed int FT_Int32;
+ typedef unsigned int FT_UInt32;
+
+#elif FT_SIZEOF_LONG == (32 / FT_CHAR_BIT)
+
+ typedef signed long FT_Int32;
+ typedef unsigned long FT_UInt32;
+
+#else
+#error "no 32bit type found -- please check your configuration files"
+#endif
+
+ /* look up an integer type that is at least 32 bits */
+#if FT_SIZEOF_INT >= (32 / FT_CHAR_BIT)
+
+ typedef int FT_Fast;
+ typedef unsigned int FT_UFast;
+
+#elif FT_SIZEOF_LONG >= (32 / FT_CHAR_BIT)
+
+ typedef long FT_Fast;
+ typedef unsigned long FT_UFast;
+
+#endif
+
+
+ /* determine whether we have a 64-bit int type for platforms without */
+ /* Autoconf */
+#if FT_SIZEOF_LONG == (64 / FT_CHAR_BIT)
+
+ /* FT_LONG64 must be defined if a 64-bit type is available */
+#define FT_LONG64
+#define FT_INT64 long
+
+#elif defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */
+
+ /* this compiler provides the __int64 type */
+#define FT_LONG64
+#define FT_INT64 __int64
+
+#elif defined( __BORLANDC__ ) /* Borland C++ */
+
+ /* XXXX: We should probably check the value of __BORLANDC__ in order */
+ /* to test the compiler version. */
+
+ /* this compiler provides the __int64 type */
+#define FT_LONG64
+#define FT_INT64 __int64
+
+#elif defined( __WATCOMC__ ) /* Watcom C++ */
+
+ /* Watcom doesn't provide 64-bit data types */
+
+#elif defined( __MWERKS__ ) /* Metrowerks CodeWarrior */
+
+#define FT_LONG64
+#define FT_INT64 long long int
+
+#elif defined( __GNUC__ )
+
+ /* GCC provides the `long long' type */
+#define FT_LONG64
+#define FT_INT64 long long int
+
+#endif /* FT_SIZEOF_LONG == (64 / FT_CHAR_BIT) */
+
+
+#define FT_BEGIN_STMNT do {
+#define FT_END_STMNT } while ( 0 )
+#define FT_DUMMY_STMNT FT_BEGIN_STMNT FT_END_STMNT
+
+
+ /*************************************************************************/
+ /* */
+ /* A 64-bit data type will create compilation problems if you compile */
+ /* in strict ANSI mode. To avoid them, we disable their use if */
+ /* __STDC__ is defined. You can however ignore this rule by */
+ /* defining the FT_CONFIG_OPTION_FORCE_INT64 configuration macro. */
+ /* */
+#if defined( FT_LONG64 ) && !defined( FT_CONFIG_OPTION_FORCE_INT64 )
+
+#ifdef __STDC__
+
+ /* undefine the 64-bit macros in strict ANSI compilation mode */
+#undef FT_LONG64
+#undef FT_INT64
+
+#endif /* __STDC__ */
+
+#endif /* FT_LONG64 && !FT_CONFIG_OPTION_FORCE_INT64 */
+
+
+#ifdef FT_MAKE_OPTION_SINGLE_OBJECT
+
+#define FT_LOCAL( x ) static x
+#define FT_LOCAL_DEF( x ) static x
+
+#else
+
+#ifdef __cplusplus
+#define FT_LOCAL( x ) extern "C" x
+#define FT_LOCAL_DEF( x ) extern "C" x
+#else
+#define FT_LOCAL( x ) extern x
+#define FT_LOCAL_DEF( x ) x
+#endif
+
+#endif /* FT_MAKE_OPTION_SINGLE_OBJECT */
+
+
+#ifndef FT_BASE
+
+#ifdef __cplusplus
+#define FT_BASE( x ) extern "C" x
+#else
+#define FT_BASE( x ) extern x
+#endif
+
+#endif /* !FT_BASE */
+
+
+#ifndef FT_BASE_DEF
+
+#ifdef __cplusplus
+#define FT_BASE_DEF( x ) x
+#else
+#define FT_BASE_DEF( x ) x
+#endif
+
+#endif /* !FT_BASE_DEF */
+
+
+#ifndef FT_EXPORT
+
+#ifdef __cplusplus
+#define FT_EXPORT( x ) extern "C" x
+#else
+#define FT_EXPORT( x ) extern x
+#endif
+
+#endif /* !FT_EXPORT */
+
+
+#ifndef FT_EXPORT_DEF
+
+#ifdef __cplusplus
+#define FT_EXPORT_DEF( x ) extern "C" x
+#else
+#define FT_EXPORT_DEF( x ) extern x
+#endif
+
+#endif /* !FT_EXPORT_DEF */
+
+
+#ifndef FT_EXPORT_VAR
+
+#ifdef __cplusplus
+#define FT_EXPORT_VAR( x ) extern "C" x
+#else
+#define FT_EXPORT_VAR( x ) extern x
+#endif
+
+#endif /* !FT_EXPORT_VAR */
+
+ /* The following macros are needed to compile the library with a */
+ /* C++ compiler and with 16bit compilers. */
+ /* */
+
+ /* This is special. Within C++, you must specify `extern "C"' for */
+ /* functions which are used via function pointers, and you also */
+ /* must do that for structures which contain function pointers to */
+ /* assure C linkage -- it's not possible to have (local) anonymous */
+ /* functions which are accessed by (global) function pointers. */
+ /* */
+ /* */
+ /* FT_CALLBACK_DEF is used to _define_ a callback function. */
+ /* */
+ /* FT_CALLBACK_TABLE is used to _declare_ a constant variable that */
+ /* contains pointers to callback functions. */
+ /* */
+ /* FT_CALLBACK_TABLE_DEF is used to _define_ a constant variable */
+ /* that contains pointers to callback functions. */
+ /* */
+ /* */
+ /* Some 16bit compilers have to redefine these macros to insert */
+ /* the infamous `_cdecl' or `__fastcall' declarations. */
+ /* */
+#ifndef FT_CALLBACK_DEF
+#ifdef __cplusplus
+#define FT_CALLBACK_DEF( x ) extern "C" x
+#else
+#define FT_CALLBACK_DEF( x ) static x
+#endif
+#endif /* FT_CALLBACK_DEF */
+
+#ifndef FT_CALLBACK_TABLE
+#ifdef __cplusplus
+#define FT_CALLBACK_TABLE extern "C"
+#define FT_CALLBACK_TABLE_DEF extern "C"
+#else
+#define FT_CALLBACK_TABLE extern
+#define FT_CALLBACK_TABLE_DEF /* nothing */
+#endif
+#endif /* FT_CALLBACK_TABLE */
+
+
+FT_END_HEADER
+
+
+#endif /* __FTCONFIG_H__ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/include/freetype/config/ftheader.h b/src/3rdparty/freetype/include/freetype/config/ftheader.h
new file mode 100644
index 0000000..a130d38
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/config/ftheader.h
@@ -0,0 +1,768 @@
+/***************************************************************************/
+/* */
+/* ftheader.h */
+/* */
+/* Build macros of the FreeType 2 library. */
+/* */
+/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+#ifndef __FT_HEADER_H__
+#define __FT_HEADER_H__
+
+
+ /*@***********************************************************************/
+ /* */
+ /* <Macro> */
+ /* FT_BEGIN_HEADER */
+ /* */
+ /* <Description> */
+ /* This macro is used in association with @FT_END_HEADER in header */
+ /* files to ensure that the declarations within are properly */
+ /* encapsulated in an `extern "C" { .. }' block when included from a */
+ /* C++ compiler. */
+ /* */
+#ifdef __cplusplus
+#define FT_BEGIN_HEADER extern "C" {
+#else
+#define FT_BEGIN_HEADER /* nothing */
+#endif
+
+
+ /*@***********************************************************************/
+ /* */
+ /* <Macro> */
+ /* FT_END_HEADER */
+ /* */
+ /* <Description> */
+ /* This macro is used in association with @FT_BEGIN_HEADER in header */
+ /* files to ensure that the declarations within are properly */
+ /* encapsulated in an `extern "C" { .. }' block when included from a */
+ /* C++ compiler. */
+ /* */
+#ifdef __cplusplus
+#define FT_END_HEADER }
+#else
+#define FT_END_HEADER /* nothing */
+#endif
+
+
+ /*************************************************************************/
+ /* */
+ /* Aliases for the FreeType 2 public and configuration files. */
+ /* */
+ /*************************************************************************/
+
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* header_file_macros */
+ /* */
+ /* <Title> */
+ /* Header File Macros */
+ /* */
+ /* <Abstract> */
+ /* Macro definitions used to #include specific header files. */
+ /* */
+ /* <Description> */
+ /* The following macros are defined to the name of specific */
+ /* FreeType 2 header files. They can be used directly in #include */
+ /* statements as in: */
+ /* */
+ /* { */
+ /* #include FT_FREETYPE_H */
+ /* #include FT_MULTIPLE_MASTERS_H */
+ /* #include FT_GLYPH_H */
+ /* } */
+ /* */
+ /* There are several reasons why we are now using macros to name */
+ /* public header files. The first one is that such macros are not */
+ /* limited to the infamous 8.3 naming rule required by DOS (and */
+ /* `FT_MULTIPLE_MASTERS_H' is a lot more meaningful than `ftmm.h'). */
+ /* */
+ /* The second reason is that it allows for more flexibility in the */
+ /* way FreeType 2 is installed on a given system. */
+ /* */
+ /*************************************************************************/
+
+
+ /* configuration files */
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_CONFIG_CONFIG_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing
+ * FreeType 2 configuration data.
+ *
+ */
+#ifndef FT_CONFIG_CONFIG_H
+#define FT_CONFIG_CONFIG_H <freetype/config/ftconfig.h>
+#endif
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_CONFIG_STANDARD_LIBRARY_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing
+ * FreeType 2 interface to the standard C library functions.
+ *
+ */
+#ifndef FT_CONFIG_STANDARD_LIBRARY_H
+#define FT_CONFIG_STANDARD_LIBRARY_H <freetype/config/ftstdlib.h>
+#endif
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_CONFIG_OPTIONS_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing
+ * FreeType 2 project-specific configuration options.
+ *
+ */
+#ifndef FT_CONFIG_OPTIONS_H
+#define FT_CONFIG_OPTIONS_H <freetype/config/ftoption.h>
+#endif
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_CONFIG_MODULES_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * list of FreeType 2 modules that are statically linked to new library
+ * instances in @FT_Init_FreeType.
+ *
+ */
+#ifndef FT_CONFIG_MODULES_H
+#define FT_CONFIG_MODULES_H <freetype/config/ftmodule.h>
+#endif
+
+ /* */
+
+ /* public headers */
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_FREETYPE_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * base FreeType 2 API.
+ *
+ */
+#define FT_FREETYPE_H <freetype/freetype.h>
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_ERRORS_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * list of FreeType 2 error codes (and messages).
+ *
+ * It is included by @FT_FREETYPE_H.
+ *
+ */
+#define FT_ERRORS_H <freetype/fterrors.h>
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_MODULE_ERRORS_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * list of FreeType 2 module error offsets (and messages).
+ *
+ */
+#define FT_MODULE_ERRORS_H <freetype/ftmoderr.h>
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_SYSTEM_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * FreeType 2 interface to low-level operations (i.e., memory management
+ * and stream i/o).
+ *
+ * It is included by @FT_FREETYPE_H.
+ *
+ */
+#define FT_SYSTEM_H <freetype/ftsystem.h>
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_IMAGE_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing type
+ * definitions related to glyph images (i.e., bitmaps, outlines,
+ * scan-converter parameters).
+ *
+ * It is included by @FT_FREETYPE_H.
+ *
+ */
+#define FT_IMAGE_H <freetype/ftimage.h>
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_TYPES_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * basic data types defined by FreeType 2.
+ *
+ * It is included by @FT_FREETYPE_H.
+ *
+ */
+#define FT_TYPES_H <freetype/fttypes.h>
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_LIST_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * list management API of FreeType 2.
+ *
+ * (Most applications will never need to include this file.)
+ *
+ */
+#define FT_LIST_H <freetype/ftlist.h>
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_OUTLINE_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * scalable outline management API of FreeType 2.
+ *
+ */
+#define FT_OUTLINE_H <freetype/ftoutln.h>
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_SIZES_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * API which manages multiple @FT_Size objects per face.
+ *
+ */
+#define FT_SIZES_H <freetype/ftsizes.h>
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_MODULE_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * module management API of FreeType 2.
+ *
+ */
+#define FT_MODULE_H <freetype/ftmodapi.h>
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_RENDER_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * renderer module management API of FreeType 2.
+ *
+ */
+#define FT_RENDER_H <freetype/ftrender.h>
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_TYPE1_TABLES_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * types and API specific to the Type 1 format.
+ *
+ */
+#define FT_TYPE1_TABLES_H <freetype/t1tables.h>
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_TRUETYPE_IDS_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * enumeration values which identify name strings, languages, encodings,
+ * etc. This file really contains a _large_ set of constant macro
+ * definitions, taken from the TrueType and OpenType specifications.
+ *
+ */
+#define FT_TRUETYPE_IDS_H <freetype/ttnameid.h>
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_TRUETYPE_TABLES_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * types and API specific to the TrueType (as well as OpenType) format.
+ *
+ */
+#define FT_TRUETYPE_TABLES_H <freetype/tttables.h>
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_TRUETYPE_TAGS_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * definitions of TrueType four-byte `tags' which identify blocks in
+ * SFNT-based font formats (i.e., TrueType and OpenType).
+ *
+ */
+#define FT_TRUETYPE_TAGS_H <freetype/tttags.h>
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_BDF_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * definitions of an API which accesses BDF-specific strings from a
+ * face.
+ *
+ */
+#define FT_BDF_H <freetype/ftbdf.h>
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_CID_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * definitions of an API which access CID font information from a
+ * face.
+ *
+ */
+#define FT_CID_H <freetype/ftcid.h>
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_GZIP_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * definitions of an API which supports gzip-compressed files.
+ *
+ */
+#define FT_GZIP_H <freetype/ftgzip.h>
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_LZW_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * definitions of an API which supports LZW-compressed files.
+ *
+ */
+#define FT_LZW_H <freetype/ftlzw.h>
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_WINFONTS_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * definitions of an API which supports Windows FNT files.
+ *
+ */
+#define FT_WINFONTS_H <freetype/ftwinfnt.h>
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_GLYPH_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * API of the optional glyph management component.
+ *
+ */
+#define FT_GLYPH_H <freetype/ftglyph.h>
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_BITMAP_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * API of the optional bitmap conversion component.
+ *
+ */
+#define FT_BITMAP_H <freetype/ftbitmap.h>
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_BBOX_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * API of the optional exact bounding box computation routines.
+ *
+ */
+#define FT_BBOX_H <freetype/ftbbox.h>
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_CACHE_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * API of the optional FreeType 2 cache sub-system.
+ *
+ */
+#define FT_CACHE_H <freetype/ftcache.h>
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_CACHE_IMAGE_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * `glyph image' API of the FreeType 2 cache sub-system.
+ *
+ * It is used to define a cache for @FT_Glyph elements. You can also
+ * use the API defined in @FT_CACHE_SMALL_BITMAPS_H if you only need to
+ * store small glyph bitmaps, as it will use less memory.
+ *
+ * This macro is deprecated. Simply include @FT_CACHE_H to have all
+ * glyph image-related cache declarations.
+ *
+ */
+#define FT_CACHE_IMAGE_H FT_CACHE_H
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_CACHE_SMALL_BITMAPS_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * `small bitmaps' API of the FreeType 2 cache sub-system.
+ *
+ * It is used to define a cache for small glyph bitmaps in a relatively
+ * memory-efficient way. You can also use the API defined in
+ * @FT_CACHE_IMAGE_H if you want to cache arbitrary glyph images,
+ * including scalable outlines.
+ *
+ * This macro is deprecated. Simply include @FT_CACHE_H to have all
+ * small bitmaps-related cache declarations.
+ *
+ */
+#define FT_CACHE_SMALL_BITMAPS_H FT_CACHE_H
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_CACHE_CHARMAP_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * `charmap' API of the FreeType 2 cache sub-system.
+ *
+ * This macro is deprecated. Simply include @FT_CACHE_H to have all
+ * charmap-based cache declarations.
+ *
+ */
+#define FT_CACHE_CHARMAP_H FT_CACHE_H
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_MAC_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * Macintosh-specific FreeType 2 API. The latter is used to access
+ * fonts embedded in resource forks.
+ *
+ * This header file must be explicitly included by client applications
+ * compiled on the Mac (note that the base API still works though).
+ *
+ */
+#define FT_MAC_H <freetype/ftmac.h>
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_MULTIPLE_MASTERS_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * optional multiple-masters management API of FreeType 2.
+ *
+ */
+#define FT_MULTIPLE_MASTERS_H <freetype/ftmm.h>
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_SFNT_NAMES_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * optional FreeType 2 API which accesses embedded `name' strings in
+ * SFNT-based font formats (i.e., TrueType and OpenType).
+ *
+ */
+#define FT_SFNT_NAMES_H <freetype/ftsnames.h>
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_OPENTYPE_VALIDATE_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * optional FreeType 2 API which validates OpenType tables (BASE, GDEF,
+ * GPOS, GSUB, JSTF).
+ *
+ */
+#define FT_OPENTYPE_VALIDATE_H <freetype/ftotval.h>
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_GX_VALIDATE_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * optional FreeType 2 API which validates TrueTypeGX/AAT tables (feat,
+ * mort, morx, bsln, just, kern, opbd, trak, prop).
+ *
+ */
+#define FT_GX_VALIDATE_H <freetype/ftgxval.h>
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_PFR_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * FreeType 2 API which accesses PFR-specific data.
+ *
+ */
+#define FT_PFR_H <freetype/ftpfr.h>
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_STROKER_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * FreeType 2 API which provides functions to stroke outline paths.
+ */
+#define FT_STROKER_H <freetype/ftstroke.h>
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_SYNTHESIS_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * FreeType 2 API which performs artificial obliquing and emboldening.
+ */
+#define FT_SYNTHESIS_H <freetype/ftsynth.h>
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_XFREE86_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * FreeType 2 API which provides functions specific to the XFree86 and
+ * X.Org X11 servers.
+ */
+#define FT_XFREE86_H <freetype/ftxf86.h>
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_TRIGONOMETRY_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * FreeType 2 API which performs trigonometric computations (e.g.,
+ * cosines and arc tangents).
+ */
+#define FT_TRIGONOMETRY_H <freetype/fttrigon.h>
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_LCD_FILTER_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * FreeType 2 API which performs color filtering for subpixel rendering.
+ */
+#define FT_LCD_FILTER_H <freetype/ftlcdfil.h>
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_UNPATENTED_HINTING_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * FreeType 2 API which performs color filtering for subpixel rendering.
+ */
+#define FT_UNPATENTED_HINTING_H <freetype/ttunpat.h>
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_INCREMENTAL_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * FreeType 2 API which performs color filtering for subpixel rendering.
+ */
+#define FT_INCREMENTAL_H <freetype/ftincrem.h>
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_GASP_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * FreeType 2 API which returns entries from the TrueType GASP table.
+ */
+#define FT_GASP_H <freetype/ftgasp.h>
+
+
+ /* */
+
+#define FT_ERROR_DEFINITIONS_H <freetype/fterrdef.h>
+
+
+ /* The internals of the cache sub-system are no longer exposed. We */
+ /* default to FT_CACHE_H at the moment just in case, but we know of */
+ /* no rogue client that uses them. */
+ /* */
+#define FT_CACHE_MANAGER_H <freetype/ftcache.h>
+#define FT_CACHE_INTERNAL_MRU_H <freetype/ftcache.h>
+#define FT_CACHE_INTERNAL_MANAGER_H <freetype/ftcache.h>
+#define FT_CACHE_INTERNAL_CACHE_H <freetype/ftcache.h>
+#define FT_CACHE_INTERNAL_GLYPH_H <freetype/ftcache.h>
+#define FT_CACHE_INTERNAL_IMAGE_H <freetype/ftcache.h>
+#define FT_CACHE_INTERNAL_SBITS_H <freetype/ftcache.h>
+
+
+#define FT_INCREMENTAL_H <freetype/ftincrem.h>
+
+#define FT_TRUETYPE_UNPATENTED_H <freetype/ttunpat.h>
+
+
+ /*
+ * Include internal headers definitions from <freetype/internal/...>
+ * only when building the library.
+ */
+#ifdef FT2_BUILD_LIBRARY
+#define FT_INTERNAL_INTERNAL_H <freetype/internal/internal.h>
+#include FT_INTERNAL_INTERNAL_H
+#endif /* FT2_BUILD_LIBRARY */
+
+
+#endif /* __FT2_BUILD_H__ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/include/freetype/config/ftmodule.h b/src/3rdparty/freetype/include/freetype/config/ftmodule.h
new file mode 100644
index 0000000..d92b0ee
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/config/ftmodule.h
@@ -0,0 +1,32 @@
+/*
+ * This file registers the FreeType modules compiled into the library.
+ *
+ * If you use GNU make, this file IS NOT USED! Instead, it is created in
+ * the objects directory (normally `<topdir>/objs/') based on information
+ * from `<topdir>/modules.cfg'.
+ *
+ * Please read `docs/INSTALL.ANY' and `docs/CUSTOMIZE' how to compile
+ * FreeType without GNU make.
+ *
+ */
+
+FT_USE_MODULE(autofit_module_class)
+FT_USE_MODULE(tt_driver_class)
+FT_USE_MODULE(t1_driver_class)
+FT_USE_MODULE(cff_driver_class)
+FT_USE_MODULE(t1cid_driver_class)
+FT_USE_MODULE(pfr_driver_class)
+FT_USE_MODULE(t42_driver_class)
+FT_USE_MODULE(winfnt_driver_class)
+FT_USE_MODULE(pcf_driver_class)
+FT_USE_MODULE(psaux_module_class)
+FT_USE_MODULE(psnames_module_class)
+FT_USE_MODULE(pshinter_module_class)
+FT_USE_MODULE(ft_raster1_renderer_class)
+FT_USE_MODULE(sfnt_module_class)
+FT_USE_MODULE(ft_smooth_renderer_class)
+FT_USE_MODULE(ft_smooth_lcd_renderer_class)
+FT_USE_MODULE(ft_smooth_lcdv_renderer_class)
+FT_USE_MODULE(bdf_driver_class)
+
+/* EOF */
diff --git a/src/3rdparty/freetype/include/freetype/config/ftoption.h b/src/3rdparty/freetype/include/freetype/config/ftoption.h
new file mode 100644
index 0000000..a2d61f9
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/config/ftoption.h
@@ -0,0 +1,671 @@
+/***************************************************************************/
+/* */
+/* ftoption.h */
+/* */
+/* User-selectable configuration macros (specification only). */
+/* */
+/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef __FTOPTION_H__
+#define __FTOPTION_H__
+
+
+#include <ft2build.h>
+
+
+FT_BEGIN_HEADER
+
+ /*************************************************************************/
+ /* */
+ /* USER-SELECTABLE CONFIGURATION MACROS */
+ /* */
+ /* This file contains the default configuration macro definitions for */
+ /* a standard build of the FreeType library. There are three ways to */
+ /* use this file to build project-specific versions of the library: */
+ /* */
+ /* - You can modify this file by hand, but this is not recommended in */
+ /* cases where you would like to build several versions of the */
+ /* library from a single source directory. */
+ /* */
+ /* - You can put a copy of this file in your build directory, more */
+ /* precisely in `$BUILD/freetype/config/ftoption.h', where `$BUILD' */
+ /* is the name of a directory that is included _before_ the FreeType */
+ /* include path during compilation. */
+ /* */
+ /* The default FreeType Makefiles and Jamfiles use the build */
+ /* directory `builds/<system>' by default, but you can easily change */
+ /* that for your own projects. */
+ /* */
+ /* - Copy the file <ft2build.h> to `$BUILD/ft2build.h' and modify it */
+ /* slightly to pre-define the macro FT_CONFIG_OPTIONS_H used to */
+ /* locate this file during the build. For example, */
+ /* */
+ /* #define FT_CONFIG_OPTIONS_H <myftoptions.h> */
+ /* #include <freetype/config/ftheader.h> */
+ /* */
+ /* will use `$BUILD/myftoptions.h' instead of this file for macro */
+ /* definitions. */
+ /* */
+ /* Note also that you can similarly pre-define the macro */
+ /* FT_CONFIG_MODULES_H used to locate the file listing of the modules */
+ /* that are statically linked to the library at compile time. By */
+ /* default, this file is <freetype/config/ftmodule.h>. */
+ /* */
+ /* We highly recommend using the third method whenever possible. */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /**** ****/
+ /**** G E N E R A L F R E E T Y P E 2 C O N F I G U R A T I O N ****/
+ /**** ****/
+ /*************************************************************************/
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* Uncomment the line below if you want to activate sub-pixel rendering */
+ /* (a.k.a. LCD rendering, or ClearType) in this build of the library. */
+ /* */
+ /* Note that this feature is covered by several Microsoft patents */
+ /* and should not be activated in any default build of the library. */
+ /* */
+ /* This macro has no impact on the FreeType API, only on its */
+ /* _implementation_. For example, using FT_RENDER_MODE_LCD when calling */
+ /* FT_Render_Glyph still generates a bitmap that is 3 times larger than */
+ /* the original size; the difference will be that each triplet of */
+ /* subpixels has R=G=B. */
+ /* */
+ /* This is done to allow FreeType clients to run unmodified, forcing */
+ /* them to display normal gray-level anti-aliased glyphs. */
+ /* */
+/* #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
+
+
+ /*************************************************************************/
+ /* */
+ /* Many compilers provide a non-ANSI 64-bit data type that can be used */
+ /* by FreeType to speed up some computations. However, this will create */
+ /* some problems when compiling the library in strict ANSI mode. */
+ /* */
+ /* For this reason, the use of 64-bit integers is normally disabled when */
+ /* the __STDC__ macro is defined. You can however disable this by */
+ /* defining the macro FT_CONFIG_OPTION_FORCE_INT64 here. */
+ /* */
+ /* For most compilers, this will only create compilation warnings when */
+ /* building the library. */
+ /* */
+ /* ObNote: The compiler-specific 64-bit integers are detected in the */
+ /* file `ftconfig.h' either statically or through the */
+ /* `configure' script on supported platforms. */
+ /* */
+#undef FT_CONFIG_OPTION_FORCE_INT64
+
+
+ /*************************************************************************/
+ /* */
+ /* LZW-compressed file support. */
+ /* */
+ /* FreeType now handles font files that have been compressed with the */
+ /* `compress' program. This is mostly used to parse many of the PCF */
+ /* files that come with various X11 distributions. The implementation */
+ /* uses NetBSD's `zopen' to partially uncompress the file on the fly */
+ /* (see src/lzw/ftgzip.c). */
+ /* */
+ /* Define this macro if you want to enable this `feature'. */
+ /* */
+#define FT_CONFIG_OPTION_USE_LZW
+
+
+ /*************************************************************************/
+ /* */
+ /* Gzip-compressed file support. */
+ /* */
+ /* FreeType now handles font files that have been compressed with the */
+ /* `gzip' program. This is mostly used to parse many of the PCF files */
+ /* that come with XFree86. The implementation uses `zlib' to */
+ /* partially uncompress the file on the fly (see src/gzip/ftgzip.c). */
+ /* */
+ /* Define this macro if you want to enable this `feature'. See also */
+ /* the macro FT_CONFIG_OPTION_SYSTEM_ZLIB below. */
+ /* */
+#define FT_CONFIG_OPTION_USE_ZLIB
+
+
+ /*************************************************************************/
+ /* */
+ /* ZLib library selection */
+ /* */
+ /* This macro is only used when FT_CONFIG_OPTION_USE_ZLIB is defined. */
+ /* It allows FreeType's `ftgzip' component to link to the system's */
+ /* installation of the ZLib library. This is useful on systems like */
+ /* Unix or VMS where it generally is already available. */
+ /* */
+ /* If you let it undefined, the component will use its own copy */
+ /* of the zlib sources instead. These have been modified to be */
+ /* included directly within the component and *not* export external */
+ /* function names. This allows you to link any program with FreeType */
+ /* _and_ ZLib without linking conflicts. */
+ /* */
+ /* Do not #undef this macro here since the build system might define */
+ /* it for certain configurations only. */
+ /* */
+/* #define FT_CONFIG_OPTION_SYSTEM_ZLIB */
+
+
+ /*************************************************************************/
+ /* */
+ /* DLL export compilation */
+ /* */
+ /* When compiling FreeType as a DLL, some systems/compilers need a */
+ /* special keyword in front OR after the return type of function */
+ /* declarations. */
+ /* */
+ /* Two macros are used within the FreeType source code to define */
+ /* exported library functions: FT_EXPORT and FT_EXPORT_DEF. */
+ /* */
+ /* FT_EXPORT( return_type ) */
+ /* */
+ /* is used in a function declaration, as in */
+ /* */
+ /* FT_EXPORT( FT_Error ) */
+ /* FT_Init_FreeType( FT_Library* alibrary ); */
+ /* */
+ /* */
+ /* FT_EXPORT_DEF( return_type ) */
+ /* */
+ /* is used in a function definition, as in */
+ /* */
+ /* FT_EXPORT_DEF( FT_Error ) */
+ /* FT_Init_FreeType( FT_Library* alibrary ) */
+ /* { */
+ /* ... some code ... */
+ /* return FT_Err_Ok; */
+ /* } */
+ /* */
+ /* You can provide your own implementation of FT_EXPORT and */
+ /* FT_EXPORT_DEF here if you want. If you leave them undefined, they */
+ /* will be later automatically defined as `extern return_type' to */
+ /* allow normal compilation. */
+ /* */
+ /* Do not #undef these macros here since the build system might define */
+ /* them for certain configurations only. */
+ /* */
+/* #define FT_EXPORT(x) extern x */
+/* #define FT_EXPORT_DEF(x) x */
+
+
+ /*************************************************************************/
+ /* */
+ /* Glyph Postscript Names handling */
+ /* */
+ /* By default, FreeType 2 is compiled with the `PSNames' module. This */
+ /* module is in charge of converting a glyph name string into a */
+ /* Unicode value, or return a Macintosh standard glyph name for the */
+ /* use with the TrueType `post' table. */
+ /* */
+ /* Undefine this macro if you do not want `PSNames' compiled in your */
+ /* build of FreeType. This has the following effects: */
+ /* */
+ /* - The TrueType driver will provide its own set of glyph names, */
+ /* if you build it to support postscript names in the TrueType */
+ /* `post' table. */
+ /* */
+ /* - The Type 1 driver will not be able to synthetize a Unicode */
+ /* charmap out of the glyphs found in the fonts. */
+ /* */
+ /* You would normally undefine this configuration macro when building */
+ /* a version of FreeType that doesn't contain a Type 1 or CFF driver. */
+ /* */
+#define FT_CONFIG_OPTION_POSTSCRIPT_NAMES
+
+
+ /*************************************************************************/
+ /* */
+ /* Postscript Names to Unicode Values support */
+ /* */
+ /* By default, FreeType 2 is built with the `PSNames' module compiled */
+ /* in. Among other things, the module is used to convert a glyph name */
+ /* into a Unicode value. This is especially useful in order to */
+ /* synthetize on the fly a Unicode charmap from the CFF/Type 1 driver */
+ /* through a big table named the `Adobe Glyph List' (AGL). */
+ /* */
+ /* Undefine this macro if you do not want the Adobe Glyph List */
+ /* compiled in your `PSNames' module. The Type 1 driver will not be */
+ /* able to synthetize a Unicode charmap out of the glyphs found in the */
+ /* fonts. */
+ /* */
+#define FT_CONFIG_OPTION_ADOBE_GLYPH_LIST
+
+
+ /*************************************************************************/
+ /* */
+ /* Support for Mac fonts */
+ /* */
+ /* Define this macro if you want support for outline fonts in Mac */
+ /* format (mac dfont, mac resource, macbinary containing a mac */
+ /* resource) on non-Mac platforms. */
+ /* */
+ /* Note that the `FOND' resource isn't checked. */
+ /* */
+#define FT_CONFIG_OPTION_MAC_FONTS
+
+
+ /*************************************************************************/
+ /* */
+ /* Guessing methods to access embedded resource forks */
+ /* */
+ /* Enable extra Mac fonts support on non-Mac platforms (e.g. */
+ /* GNU/Linux). */
+ /* */
+ /* Resource forks which include fonts data are stored sometimes in */
+ /* locations which users or developers don't expected. In some cases, */
+ /* resource forks start with some offset from the head of a file. In */
+ /* other cases, the actual resource fork is stored in file different */
+ /* from what the user specifies. If this option is activated, */
+ /* FreeType tries to guess whether such offsets or different file */
+ /* names must be used. */
+ /* */
+ /* Note that normal, direct access of resource forks is controlled via */
+ /* the FT_CONFIG_OPTION_MAC_FONTS option. */
+ /* */
+#ifdef FT_CONFIG_OPTION_MAC_FONTS
+#define FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK
+#endif
+
+
+ /*************************************************************************/
+ /* */
+ /* Allow the use of FT_Incremental_Interface to load typefaces that */
+ /* contain no glyph data, but supply it via a callback function. */
+ /* This allows FreeType to be used with the PostScript language, using */
+ /* the GhostScript interpreter. */
+ /* */
+/* #define FT_CONFIG_OPTION_INCREMENTAL */
+
+
+ /*************************************************************************/
+ /* */
+ /* The size in bytes of the render pool used by the scan-line converter */
+ /* to do all of its work. */
+ /* */
+ /* This must be greater than 4KByte if you use FreeType to rasterize */
+ /* glyphs; otherwise, you may set it to zero to avoid unnecessary */
+ /* allocation of the render pool. */
+ /* */
+#define FT_RENDER_POOL_SIZE 16384L
+
+
+ /*************************************************************************/
+ /* */
+ /* FT_MAX_MODULES */
+ /* */
+ /* The maximum number of modules that can be registered in a single */
+ /* FreeType library object. 32 is the default. */
+ /* */
+#define FT_MAX_MODULES 32
+
+
+ /*************************************************************************/
+ /* */
+ /* Debug level */
+ /* */
+ /* FreeType can be compiled in debug or trace mode. In debug mode, */
+ /* errors are reported through the `ftdebug' component. In trace */
+ /* mode, additional messages are sent to the standard output during */
+ /* execution. */
+ /* */
+ /* Define FT_DEBUG_LEVEL_ERROR to build the library in debug mode. */
+ /* Define FT_DEBUG_LEVEL_TRACE to build it in trace mode. */
+ /* */
+ /* Don't define any of these macros to compile in `release' mode! */
+ /* */
+ /* Do not #undef these macros here since the build system might define */
+ /* them for certain configurations only. */
+ /* */
+/* #define FT_DEBUG_LEVEL_ERROR */
+/* #define FT_DEBUG_LEVEL_TRACE */
+
+
+ /*************************************************************************/
+ /* */
+ /* Memory Debugging */
+ /* */
+ /* FreeType now comes with an integrated memory debugger that is */
+ /* capable of detecting simple errors like memory leaks or double */
+ /* deletes. To compile it within your build of the library, you */
+ /* should define FT_DEBUG_MEMORY here. */
+ /* */
+ /* Note that the memory debugger is only activated at runtime when */
+ /* when the _environment_ variable `FT2_DEBUG_MEMORY' is defined also! */
+ /* */
+ /* Do not #undef this macro here since the build system might define */
+ /* it for certain configurations only. */
+ /* */
+/* #define FT_DEBUG_MEMORY */
+
+
+ /*************************************************************************/
+ /* */
+ /* Module errors */
+ /* */
+ /* If this macro is set (which is _not_ the default), the higher byte */
+ /* of an error code gives the module in which the error has occurred, */
+ /* while the lower byte is the real error code. */
+ /* */
+ /* Setting this macro makes sense for debugging purposes only, since */
+ /* it would break source compatibility of certain programs that use */
+ /* FreeType 2. */
+ /* */
+ /* More details can be found in the files ftmoderr.h and fterrors.h. */
+ /* */
+#undef FT_CONFIG_OPTION_USE_MODULE_ERRORS
+
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /**** ****/
+ /**** S F N T D R I V E R C O N F I G U R A T I O N ****/
+ /**** ****/
+ /*************************************************************************/
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* Define TT_CONFIG_OPTION_EMBEDDED_BITMAPS if you want to support */
+ /* embedded bitmaps in all formats using the SFNT module (namely */
+ /* TrueType & OpenType). */
+ /* */
+#define TT_CONFIG_OPTION_EMBEDDED_BITMAPS
+
+
+ /*************************************************************************/
+ /* */
+ /* Define TT_CONFIG_OPTION_POSTSCRIPT_NAMES if you want to be able to */
+ /* load and enumerate the glyph Postscript names in a TrueType or */
+ /* OpenType file. */
+ /* */
+ /* Note that when you do not compile the `PSNames' module by undefining */
+ /* the above FT_CONFIG_OPTION_POSTSCRIPT_NAMES, the `sfnt' module will */
+ /* contain additional code used to read the PS Names table from a font. */
+ /* */
+ /* (By default, the module uses `PSNames' to extract glyph names.) */
+ /* */
+#define TT_CONFIG_OPTION_POSTSCRIPT_NAMES
+
+
+ /*************************************************************************/
+ /* */
+ /* Define TT_CONFIG_OPTION_SFNT_NAMES if your applications need to */
+ /* access the internal name table in a SFNT-based format like TrueType */
+ /* or OpenType. The name table contains various strings used to */
+ /* describe the font, like family name, copyright, version, etc. It */
+ /* does not contain any glyph name though. */
+ /* */
+ /* Accessing SFNT names is done through the functions declared in */
+ /* `freetype/ftnames.h'. */
+ /* */
+#define TT_CONFIG_OPTION_SFNT_NAMES
+
+
+ /*************************************************************************/
+ /* */
+ /* TrueType CMap support */
+ /* */
+ /* Here you can fine-tune which TrueType CMap table format shall be */
+ /* supported. */
+#define TT_CONFIG_CMAP_FORMAT_0
+#define TT_CONFIG_CMAP_FORMAT_2
+#define TT_CONFIG_CMAP_FORMAT_4
+#define TT_CONFIG_CMAP_FORMAT_6
+#define TT_CONFIG_CMAP_FORMAT_8
+#define TT_CONFIG_CMAP_FORMAT_10
+#define TT_CONFIG_CMAP_FORMAT_12
+#define TT_CONFIG_CMAP_FORMAT_14
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /**** ****/
+ /**** T R U E T Y P E D R I V E R C O N F I G U R A T I O N ****/
+ /**** ****/
+ /*************************************************************************/
+ /*************************************************************************/
+
+ /*************************************************************************/
+ /* */
+ /* Define TT_CONFIG_OPTION_BYTECODE_INTERPRETER if you want to compile */
+ /* a bytecode interpreter in the TrueType driver. Note that there are */
+ /* important patent issues related to the use of the interpreter. */
+ /* */
+ /* By undefining this, you will only compile the code necessary to load */
+ /* TrueType glyphs without hinting. */
+ /* */
+ /* Do not #undef this macro here, since the build system might */
+ /* define it for certain configurations only. */
+ /* */
+/* #define TT_CONFIG_OPTION_BYTECODE_INTERPRETER */
+
+
+ /*************************************************************************/
+ /* */
+ /* If you define TT_CONFIG_OPTION_UNPATENTED_HINTING, a special version */
+ /* of the TrueType bytecode interpreter is used that doesn't implement */
+ /* any of the patented opcodes and algorithms. Note that the */
+ /* the TT_CONFIG_OPTION_UNPATENTED_HINTING macro is *ignored* if you */
+ /* define TT_CONFIG_OPTION_BYTECODE_INTERPRETER; with other words, */
+ /* either define TT_CONFIG_OPTION_BYTECODE_INTERPRETER or */
+ /* TT_CONFIG_OPTION_UNPATENTED_HINTING but not both at the same time. */
+ /* */
+ /* This macro is only useful for a small number of font files (mostly */
+ /* for Asian scripts) that require bytecode interpretation to properly */
+ /* load glyphs. For all other fonts, this produces unpleasant results, */
+ /* thus the unpatented interpreter is never used to load glyphs from */
+ /* TrueType fonts unless one of the following two options is used. */
+ /* */
+ /* - The unpatented interpreter is explicitly activated by the user */
+ /* through the FT_PARAM_TAG_UNPATENTED_HINTING parameter tag */
+ /* when opening the FT_Face. */
+ /* */
+ /* - FreeType detects that the FT_Face corresponds to one of the */
+ /* `trick' fonts (e.g., `Mingliu') it knows about. The font engine */
+ /* contains a hard-coded list of font names and other matching */
+ /* parameters (see function `tt_face_init' in file */
+ /* `src/truetype/ttobjs.c'). */
+ /* */
+ /* Here a sample code snippet for using FT_PARAM_TAG_UNPATENTED_HINTING. */
+ /* */
+ /* { */
+ /* FT_Parameter parameter; */
+ /* FT_Open_Args open_args; */
+ /* */
+ /* */
+ /* parameter.tag = FT_PARAM_TAG_UNPATENTED_HINTING; */
+ /* */
+ /* open_args.flags = FT_OPEN_PATHNAME | FT_OPEN_PARAMS; */
+ /* open_args.pathname = my_font_pathname; */
+ /* open_args.num_params = 1; */
+ /* open_args.params = &parameter; */
+ /* */
+ /* error = FT_Open_Face( library, &open_args, index, &face ); */
+ /* ... */
+ /* } */
+ /* */
+#define TT_CONFIG_OPTION_UNPATENTED_HINTING
+
+
+ /*************************************************************************/
+ /* */
+ /* Define TT_CONFIG_OPTION_INTERPRETER_SWITCH to compile the TrueType */
+ /* bytecode interpreter with a huge switch statement, rather than a call */
+ /* table. This results in smaller and faster code for a number of */
+ /* architectures. */
+ /* */
+ /* Note however that on some compiler/processor combinations, undefining */
+ /* this macro will generate faster, though larger, code. */
+ /* */
+#define TT_CONFIG_OPTION_INTERPRETER_SWITCH
+
+
+ /*************************************************************************/
+ /* */
+ /* Define TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED to compile the */
+ /* TrueType glyph loader to use Apple's definition of how to handle */
+ /* component offsets in composite glyphs. */
+ /* */
+ /* Apple and MS disagree on the default behavior of component offsets */
+ /* in composites. Apple says that they should be scaled by the scaling */
+ /* factors in the transformation matrix (roughly, it's more complex) */
+ /* while MS says they should not. OpenType defines two bits in the */
+ /* composite flags array which can be used to disambiguate, but old */
+ /* fonts will not have them. */
+ /* */
+ /* http://partners.adobe.com/asn/developer/opentype/glyf.html */
+ /* http://fonts.apple.com/TTRefMan/RM06/Chap6glyf.html */
+ /* */
+#undef TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED
+
+
+ /*************************************************************************/
+ /* */
+ /* Define TT_CONFIG_OPTION_GX_VAR_SUPPORT if you want to include */
+ /* support for Apple's distortable font technology (fvar, gvar, cvar, */
+ /* and avar tables). This has many similarities to Type 1 Multiple */
+ /* Masters support. */
+ /* */
+#define TT_CONFIG_OPTION_GX_VAR_SUPPORT
+
+
+ /*************************************************************************/
+ /* */
+ /* Define TT_CONFIG_OPTION_BDF if you want to include support for */
+ /* an embedded `BDF ' table within SFNT-based bitmap formats. */
+ /* */
+#define TT_CONFIG_OPTION_BDF
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /**** ****/
+ /**** T Y P E 1 D R I V E R C O N F I G U R A T I O N ****/
+ /**** ****/
+ /*************************************************************************/
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* T1_MAX_DICT_DEPTH is the maximal depth of nest dictionaries and */
+ /* arrays in the Type 1 stream (see t1load.c). A minimum of 4 is */
+ /* required. */
+ /* */
+#define T1_MAX_DICT_DEPTH 5
+
+
+ /*************************************************************************/
+ /* */
+ /* T1_MAX_SUBRS_CALLS details the maximum number of nested sub-routine */
+ /* calls during glyph loading. */
+ /* */
+#define T1_MAX_SUBRS_CALLS 16
+
+
+ /*************************************************************************/
+ /* */
+ /* T1_MAX_CHARSTRING_OPERANDS is the charstring stack's capacity. A */
+ /* minimum of 16 is required. */
+ /* */
+ /* The Chinese font MingTiEG-Medium (CNS 11643 character set) needs 256. */
+ /* */
+#define T1_MAX_CHARSTRINGS_OPERANDS 256
+
+
+ /*************************************************************************/
+ /* */
+ /* Define this configuration macro if you want to prevent the */
+ /* compilation of `t1afm', which is in charge of reading Type 1 AFM */
+ /* files into an existing face. Note that if set, the T1 driver will be */
+ /* unable to produce kerning distances. */
+ /* */
+#undef T1_CONFIG_OPTION_NO_AFM
+
+
+ /*************************************************************************/
+ /* */
+ /* Define this configuration macro if you want to prevent the */
+ /* compilation of the Multiple Masters font support in the Type 1 */
+ /* driver. */
+ /* */
+#undef T1_CONFIG_OPTION_NO_MM_SUPPORT
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /**** ****/
+ /**** A U T O F I T M O D U L E C O N F I G U R A T I O N ****/
+ /**** ****/
+ /*************************************************************************/
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* Compile autofit module with CJK (Chinese, Japanese, Korean) script */
+ /* support. */
+ /* */
+#define AF_CONFIG_OPTION_CJK
+
+ /*************************************************************************/
+ /* */
+ /* Compile autofit module with Indic script support. */
+ /* */
+#define AF_CONFIG_OPTION_INDIC
+
+ /* */
+
+
+ /*
+ * Define this variable if you want to keep the layout of internal
+ * structures that was used prior to FreeType 2.2. This also compiles in
+ * a few obsolete functions to avoid linking problems on typical Unix
+ * distributions.
+ *
+ * For embedded systems or building a new distribution from scratch, it
+ * is recommended to disable the macro since it reduces the library's code
+ * size and activates a few memory-saving optimizations as well.
+ */
+#define FT_CONFIG_OPTION_OLD_INTERNALS
+
+
+ /*
+ * This variable is defined if either unpatented or native TrueType
+ * hinting is requested by the definitions above.
+ */
+#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
+#define TT_USE_BYTECODE_INTERPRETER
+#elif defined TT_CONFIG_OPTION_UNPATENTED_HINTING
+#define TT_USE_BYTECODE_INTERPRETER
+#endif
+
+FT_END_HEADER
+
+
+#endif /* __FTOPTION_H__ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/include/freetype/config/ftstdlib.h b/src/3rdparty/freetype/include/freetype/config/ftstdlib.h
new file mode 100644
index 0000000..f923f3e
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/config/ftstdlib.h
@@ -0,0 +1,180 @@
+/***************************************************************************/
+/* */
+/* ftstdlib.h */
+/* */
+/* ANSI-specific library and header configuration file (specification */
+/* only). */
+/* */
+/* Copyright 2002, 2003, 2004, 2005, 2006, 2007 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* This file is used to group all #includes to the ANSI C library that */
+ /* FreeType normally requires. It also defines macros to rename the */
+ /* standard functions within the FreeType source code. */
+ /* */
+ /* Load a file which defines __FTSTDLIB_H__ before this one to override */
+ /* it. */
+ /* */
+ /*************************************************************************/
+
+
+#ifndef __FTSTDLIB_H__
+#define __FTSTDLIB_H__
+
+
+#include <stddef.h>
+
+#define ft_ptrdiff_t ptrdiff_t
+
+
+ /**********************************************************************/
+ /* */
+ /* integer limits */
+ /* */
+ /* UINT_MAX and ULONG_MAX are used to automatically compute the size */
+ /* of `int' and `long' in bytes at compile-time. So far, this works */
+ /* for all platforms the library has been tested on. */
+ /* */
+ /* Note that on the extremely rare platforms that do not provide */
+ /* integer types that are _exactly_ 16 and 32 bits wide (e.g. some */
+ /* old Crays where `int' is 36 bits), we do not make any guarantee */
+ /* about the correct behaviour of FT2 with all fonts. */
+ /* */
+ /* In these case, `ftconfig.h' will refuse to compile anyway with a */
+ /* message like `couldn't find 32-bit type' or something similar. */
+ /* */
+ /* IMPORTANT NOTE: We do not define aliases for heap management and */
+ /* i/o routines (i.e. malloc/free/fopen/fread/...) */
+ /* since these functions should all be encapsulated */
+ /* by platform-specific implementations of */
+ /* `ftsystem.c'. */
+ /* */
+ /**********************************************************************/
+
+
+#include <limits.h>
+
+#define FT_CHAR_BIT CHAR_BIT
+#define FT_INT_MAX INT_MAX
+#define FT_UINT_MAX UINT_MAX
+#define FT_ULONG_MAX ULONG_MAX
+
+
+ /**********************************************************************/
+ /* */
+ /* character and string processing */
+ /* */
+ /**********************************************************************/
+
+
+#include <string.h>
+
+#define ft_memchr memchr
+#define ft_memcmp memcmp
+#define ft_memcpy memcpy
+#define ft_memmove memmove
+#define ft_memset memset
+#define ft_strcat strcat
+#define ft_strcmp strcmp
+#define ft_strcpy strcpy
+#define ft_strlen strlen
+#define ft_strncmp strncmp
+#define ft_strncpy strncpy
+#define ft_strrchr strrchr
+#define ft_strstr strstr
+
+
+ /**********************************************************************/
+ /* */
+ /* file handling */
+ /* */
+ /**********************************************************************/
+
+
+#include <stdio.h>
+
+#define FT_FILE FILE
+#define ft_fclose fclose
+#define ft_fopen fopen
+#define ft_fread fread
+#define ft_fseek fseek
+#define ft_ftell ftell
+#define ft_sprintf sprintf
+
+
+ /**********************************************************************/
+ /* */
+ /* sorting */
+ /* */
+ /**********************************************************************/
+
+
+#include <stdlib.h>
+
+#define ft_qsort qsort
+
+#define ft_exit exit /* only used to exit from unhandled exceptions */
+
+
+ /**********************************************************************/
+ /* */
+ /* memory allocation */
+ /* */
+ /**********************************************************************/
+
+
+#define ft_scalloc calloc
+#define ft_sfree free
+#define ft_smalloc malloc
+#define ft_srealloc realloc
+
+
+ /**********************************************************************/
+ /* */
+ /* miscellaneous */
+ /* */
+ /**********************************************************************/
+
+
+#define ft_atol atol
+#define ft_labs labs
+
+
+ /**********************************************************************/
+ /* */
+ /* execution control */
+ /* */
+ /**********************************************************************/
+
+
+#include <setjmp.h>
+
+#define ft_jmp_buf jmp_buf /* note: this cannot be a typedef since */
+ /* jmp_buf is defined as a macro */
+ /* on certain platforms */
+
+#define ft_longjmp longjmp
+#define ft_setjmp( b ) setjmp( *(jmp_buf*) &(b) ) /* same thing here */
+
+
+ /* the following is only used for debugging purposes, i.e., if */
+ /* FT_DEBUG_LEVEL_ERROR or FT_DEBUG_LEVEL_TRACE are defined */
+
+#include <stdarg.h>
+
+
+#endif /* __FTSTDLIB_H__ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/include/freetype/freetype.h b/src/3rdparty/freetype/include/freetype/freetype.h
new file mode 100644
index 0000000..32d5319
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/freetype.h
@@ -0,0 +1,3706 @@
+/***************************************************************************/
+/* */
+/* freetype.h */
+/* */
+/* FreeType high-level API and common types (specification only). */
+/* */
+/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef FT_FREETYPE_H
+#error "`ft2build.h' hasn't been included yet!"
+#error "Please always use macros to include FreeType header files."
+#error "Example:"
+#error " #include <ft2build.h>"
+#error " #include FT_FREETYPE_H"
+#endif
+
+
+ /*************************************************************************/
+ /* */
+ /* The `raster' component duplicates some of the declarations in */
+ /* freetype.h for stand-alone use if _FREETYPE_ isn't defined. */
+ /* */
+ /*************************************************************************/
+
+
+#ifndef __FREETYPE_H__
+#define __FREETYPE_H__
+
+
+#include <ft2build.h>
+#include FT_CONFIG_CONFIG_H
+#include FT_ERRORS_H
+#include FT_TYPES_H
+
+
+FT_BEGIN_HEADER
+
+
+
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* user_allocation */
+ /* */
+ /* <Title> */
+ /* User allocation */
+ /* */
+ /* <Abstract> */
+ /* How client applications should allocate FreeType data structures. */
+ /* */
+ /* <Description> */
+ /* FreeType assumes that structures allocated by the user and passed */
+ /* as arguments are zeroed out except for the actual data. With */
+ /* other words, it is recommended to use `calloc' (or variants of it) */
+ /* instead of `malloc' for allocation. */
+ /* */
+ /*************************************************************************/
+
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /* */
+ /* B A S I C T Y P E S */
+ /* */
+ /*************************************************************************/
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* base_interface */
+ /* */
+ /* <Title> */
+ /* Base Interface */
+ /* */
+ /* <Abstract> */
+ /* The FreeType 2 base font interface. */
+ /* */
+ /* <Description> */
+ /* This section describes the public high-level API of FreeType 2. */
+ /* */
+ /* <Order> */
+ /* FT_Library */
+ /* FT_Face */
+ /* FT_Size */
+ /* FT_GlyphSlot */
+ /* FT_CharMap */
+ /* FT_Encoding */
+ /* */
+ /* FT_FaceRec */
+ /* */
+ /* FT_FACE_FLAG_SCALABLE */
+ /* FT_FACE_FLAG_FIXED_SIZES */
+ /* FT_FACE_FLAG_FIXED_WIDTH */
+ /* FT_FACE_FLAG_HORIZONTAL */
+ /* FT_FACE_FLAG_VERTICAL */
+ /* FT_FACE_FLAG_SFNT */
+ /* FT_FACE_FLAG_KERNING */
+ /* FT_FACE_FLAG_MULTIPLE_MASTERS */
+ /* FT_FACE_FLAG_GLYPH_NAMES */
+ /* FT_FACE_FLAG_EXTERNAL_STREAM */
+ /* FT_FACE_FLAG_FAST_GLYPHS */
+ /* FT_FACE_FLAG_HINTER */
+ /* */
+ /* FT_STYLE_FLAG_BOLD */
+ /* FT_STYLE_FLAG_ITALIC */
+ /* */
+ /* FT_SizeRec */
+ /* FT_Size_Metrics */
+ /* */
+ /* FT_GlyphSlotRec */
+ /* FT_Glyph_Metrics */
+ /* FT_SubGlyph */
+ /* */
+ /* FT_Bitmap_Size */
+ /* */
+ /* FT_Init_FreeType */
+ /* FT_Done_FreeType */
+ /* */
+ /* FT_New_Face */
+ /* FT_Done_Face */
+ /* FT_New_Memory_Face */
+ /* FT_Open_Face */
+ /* FT_Open_Args */
+ /* FT_Parameter */
+ /* FT_Attach_File */
+ /* FT_Attach_Stream */
+ /* */
+ /* FT_Set_Char_Size */
+ /* FT_Set_Pixel_Sizes */
+ /* FT_Request_Size */
+ /* FT_Select_Size */
+ /* FT_Size_Request_Type */
+ /* FT_Size_Request */
+ /* FT_Set_Transform */
+ /* FT_Load_Glyph */
+ /* FT_Get_Char_Index */
+ /* FT_Get_Name_Index */
+ /* FT_Load_Char */
+ /* */
+ /* FT_OPEN_MEMORY */
+ /* FT_OPEN_STREAM */
+ /* FT_OPEN_PATHNAME */
+ /* FT_OPEN_DRIVER */
+ /* FT_OPEN_PARAMS */
+ /* */
+ /* FT_LOAD_DEFAULT */
+ /* FT_LOAD_RENDER */
+ /* FT_LOAD_MONOCHROME */
+ /* FT_LOAD_LINEAR_DESIGN */
+ /* FT_LOAD_NO_SCALE */
+ /* FT_LOAD_NO_HINTING */
+ /* FT_LOAD_NO_BITMAP */
+ /* FT_LOAD_CROP_BITMAP */
+ /* */
+ /* FT_LOAD_VERTICAL_LAYOUT */
+ /* FT_LOAD_IGNORE_TRANSFORM */
+ /* FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH */
+ /* FT_LOAD_FORCE_AUTOHINT */
+ /* FT_LOAD_NO_RECURSE */
+ /* FT_LOAD_PEDANTIC */
+ /* */
+ /* FT_LOAD_TARGET_NORMAL */
+ /* FT_LOAD_TARGET_LIGHT */
+ /* FT_LOAD_TARGET_MONO */
+ /* FT_LOAD_TARGET_LCD */
+ /* FT_LOAD_TARGET_LCD_V */
+ /* */
+ /* FT_Render_Glyph */
+ /* FT_Render_Mode */
+ /* FT_Get_Kerning */
+ /* FT_Kerning_Mode */
+ /* FT_Get_Track_Kerning */
+ /* FT_Get_Glyph_Name */
+ /* FT_Get_Postscript_Name */
+ /* */
+ /* FT_CharMapRec */
+ /* FT_Select_Charmap */
+ /* FT_Set_Charmap */
+ /* FT_Get_Charmap_Index */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_Glyph_Metrics */
+ /* */
+ /* <Description> */
+ /* A structure used to model the metrics of a single glyph. The */
+ /* values are expressed in 26.6 fractional pixel format; if the flag */
+ /* @FT_LOAD_NO_SCALE has been used while loading the glyph, values */
+ /* are expressed in font units instead. */
+ /* */
+ /* <Fields> */
+ /* width :: */
+ /* The glyph's width. */
+ /* */
+ /* height :: */
+ /* The glyph's height. */
+ /* */
+ /* horiBearingX :: */
+ /* Left side bearing for horizontal layout. */
+ /* */
+ /* horiBearingY :: */
+ /* Top side bearing for horizontal layout. */
+ /* */
+ /* horiAdvance :: */
+ /* Advance width for horizontal layout. */
+ /* */
+ /* vertBearingX :: */
+ /* Left side bearing for vertical layout. */
+ /* */
+ /* vertBearingY :: */
+ /* Top side bearing for vertical layout. */
+ /* */
+ /* vertAdvance :: */
+ /* Advance height for vertical layout. */
+ /* */
+ typedef struct FT_Glyph_Metrics_
+ {
+ FT_Pos width;
+ FT_Pos height;
+
+ FT_Pos horiBearingX;
+ FT_Pos horiBearingY;
+ FT_Pos horiAdvance;
+
+ FT_Pos vertBearingX;
+ FT_Pos vertBearingY;
+ FT_Pos vertAdvance;
+
+ } FT_Glyph_Metrics;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_Bitmap_Size */
+ /* */
+ /* <Description> */
+ /* This structure models the metrics of a bitmap strike (i.e., a set */
+ /* of glyphs for a given point size and resolution) in a bitmap font. */
+ /* It is used for the `available_sizes' field of @FT_Face. */
+ /* */
+ /* <Fields> */
+ /* height :: The vertical distance, in pixels, between two */
+ /* consecutive baselines. It is always positive. */
+ /* */
+ /* width :: The average width, in pixels, of all glyphs in the */
+ /* strike. */
+ /* */
+ /* size :: The nominal size of the strike in 26.6 fractional */
+ /* points. This field is not very useful. */
+ /* */
+ /* x_ppem :: The horizontal ppem (nominal width) in 26.6 fractional */
+ /* pixels. */
+ /* */
+ /* y_ppem :: The vertical ppem (nominal height) in 26.6 fractional */
+ /* pixels. */
+ /* */
+ /* <Note> */
+ /* Windows FNT: */
+ /* The nominal size given in a FNT font is not reliable. Thus when */
+ /* the driver finds it incorrect, it sets `size' to some calculated */
+ /* values and sets `x_ppem' and `y_ppem' to the pixel width and */
+ /* height given in the font, respectively. */
+ /* */
+ /* TrueType embedded bitmaps: */
+ /* `size', `width', and `height' values are not contained in the */
+ /* bitmap strike itself. They are computed from the global font */
+ /* parameters. */
+ /* */
+ typedef struct FT_Bitmap_Size_
+ {
+ FT_Short height;
+ FT_Short width;
+
+ FT_Pos size;
+
+ FT_Pos x_ppem;
+ FT_Pos y_ppem;
+
+ } FT_Bitmap_Size;
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /* */
+ /* O B J E C T C L A S S E S */
+ /* */
+ /*************************************************************************/
+ /*************************************************************************/
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_Library */
+ /* */
+ /* <Description> */
+ /* A handle to a FreeType library instance. Each `library' is */
+ /* completely independent from the others; it is the `root' of a set */
+ /* of objects like fonts, faces, sizes, etc. */
+ /* */
+ /* It also embeds a memory manager (see @FT_Memory), as well as a */
+ /* scan-line converter object (see @FT_Raster). */
+ /* */
+ /* For multi-threading applications each thread should have its own */
+ /* FT_Library object. */
+ /* */
+ /* <Note> */
+ /* Library objects are normally created by @FT_Init_FreeType, and */
+ /* destroyed with @FT_Done_FreeType. */
+ /* */
+ typedef struct FT_LibraryRec_ *FT_Library;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_Module */
+ /* */
+ /* <Description> */
+ /* A handle to a given FreeType module object. Each module can be a */
+ /* font driver, a renderer, or anything else that provides services */
+ /* to the formers. */
+ /* */
+ typedef struct FT_ModuleRec_* FT_Module;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_Driver */
+ /* */
+ /* <Description> */
+ /* A handle to a given FreeType font driver object. Each font driver */
+ /* is a special module capable of creating faces from font files. */
+ /* */
+ typedef struct FT_DriverRec_* FT_Driver;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_Renderer */
+ /* */
+ /* <Description> */
+ /* A handle to a given FreeType renderer. A renderer is a special */
+ /* module in charge of converting a glyph image to a bitmap, when */
+ /* necessary. Each renderer supports a given glyph image format, and */
+ /* one or more target surface depths. */
+ /* */
+ typedef struct FT_RendererRec_* FT_Renderer;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_Face */
+ /* */
+ /* <Description> */
+ /* A handle to a given typographic face object. A face object models */
+ /* a given typeface, in a given style. */
+ /* */
+ /* <Note> */
+ /* Each face object also owns a single @FT_GlyphSlot object, as well */
+ /* as one or more @FT_Size objects. */
+ /* */
+ /* Use @FT_New_Face or @FT_Open_Face to create a new face object from */
+ /* a given filepathname or a custom input stream. */
+ /* */
+ /* Use @FT_Done_Face to destroy it (along with its slot and sizes). */
+ /* */
+ /* <Also> */
+ /* The @FT_FaceRec details the publicly accessible fields of a given */
+ /* face object. */
+ /* */
+ typedef struct FT_FaceRec_* FT_Face;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_Size */
+ /* */
+ /* <Description> */
+ /* A handle to an object used to model a face scaled to a given */
+ /* character size. */
+ /* */
+ /* <Note> */
+ /* Each @FT_Face has an _active_ @FT_Size object that is used by */
+ /* functions like @FT_Load_Glyph to determine the scaling */
+ /* transformation which is used to load and hint glyphs and metrics. */
+ /* */
+ /* You can use @FT_Set_Char_Size, @FT_Set_Pixel_Sizes, */
+ /* @FT_Request_Size or even @FT_Select_Size to change the content */
+ /* (i.e., the scaling values) of the active @FT_Size. */
+ /* */
+ /* You can use @FT_New_Size to create additional size objects for a */
+ /* given @FT_Face, but they won't be used by other functions until */
+ /* you activate it through @FT_Activate_Size. Only one size can be */
+ /* activated at any given time per face. */
+ /* */
+ /* <Also> */
+ /* The @FT_SizeRec structure details the publicly accessible fields */
+ /* of a given size object. */
+ /* */
+ typedef struct FT_SizeRec_* FT_Size;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_GlyphSlot */
+ /* */
+ /* <Description> */
+ /* A handle to a given `glyph slot'. A slot is a container where it */
+ /* is possible to load any one of the glyphs contained in its parent */
+ /* face. */
+ /* */
+ /* In other words, each time you call @FT_Load_Glyph or */
+ /* @FT_Load_Char, the slot's content is erased by the new glyph data, */
+ /* i.e., the glyph's metrics, its image (bitmap or outline), and */
+ /* other control information. */
+ /* */
+ /* <Also> */
+ /* @FT_GlyphSlotRec details the publicly accessible glyph fields. */
+ /* */
+ typedef struct FT_GlyphSlotRec_* FT_GlyphSlot;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_CharMap */
+ /* */
+ /* <Description> */
+ /* A handle to a given character map. A charmap is used to translate */
+ /* character codes in a given encoding into glyph indexes for its */
+ /* parent's face. Some font formats may provide several charmaps per */
+ /* font. */
+ /* */
+ /* Each face object owns zero or more charmaps, but only one of them */
+ /* can be `active' and used by @FT_Get_Char_Index or @FT_Load_Char. */
+ /* */
+ /* The list of available charmaps in a face is available through the */
+ /* `face->num_charmaps' and `face->charmaps' fields of @FT_FaceRec. */
+ /* */
+ /* The currently active charmap is available as `face->charmap'. */
+ /* You should call @FT_Set_Charmap to change it. */
+ /* */
+ /* <Note> */
+ /* When a new face is created (either through @FT_New_Face or */
+ /* @FT_Open_Face), the library looks for a Unicode charmap within */
+ /* the list and automatically activates it. */
+ /* */
+ /* <Also> */
+ /* The @FT_CharMapRec details the publicly accessible fields of a */
+ /* given character map. */
+ /* */
+ typedef struct FT_CharMapRec_* FT_CharMap;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Macro> */
+ /* FT_ENC_TAG */
+ /* */
+ /* <Description> */
+ /* This macro converts four-letter tags into an unsigned long. It is */
+ /* used to define `encoding' identifiers (see @FT_Encoding). */
+ /* */
+ /* <Note> */
+ /* Since many 16bit compilers don't like 32bit enumerations, you */
+ /* should redefine this macro in case of problems to something like */
+ /* this: */
+ /* */
+ /* { */
+ /* #define FT_ENC_TAG( value, a, b, c, d ) value */
+ /* } */
+ /* */
+ /* to get a simple enumeration without assigning special numbers. */
+ /* */
+
+#ifndef FT_ENC_TAG
+#define FT_ENC_TAG( value, a, b, c, d ) \
+ value = ( ( (FT_UInt32)(a) << 24 ) | \
+ ( (FT_UInt32)(b) << 16 ) | \
+ ( (FT_UInt32)(c) << 8 ) | \
+ (FT_UInt32)(d) )
+
+#endif /* FT_ENC_TAG */
+
+
+ /*************************************************************************/
+ /* */
+ /* <Enum> */
+ /* FT_Encoding */
+ /* */
+ /* <Description> */
+ /* An enumeration used to specify character sets supported by */
+ /* charmaps. Used in the @FT_Select_Charmap API function. */
+ /* */
+ /* <Note> */
+ /* Despite the name, this enumeration lists specific character */
+ /* repertories (i.e., charsets), and not text encoding methods (e.g., */
+ /* UTF-8, UTF-16, GB2312_EUC, etc.). */
+ /* */
+ /* Because of 32-bit charcodes defined in Unicode (i.e., surrogates), */
+ /* all character codes must be expressed as FT_Longs. */
+ /* */
+ /* Other encodings might be defined in the future. */
+ /* */
+ /* <Values> */
+ /* FT_ENCODING_NONE :: */
+ /* The encoding value 0 is reserved. */
+ /* */
+ /* FT_ENCODING_UNICODE :: */
+ /* Corresponds to the Unicode character set. This value covers */
+ /* all versions of the Unicode repertoire, including ASCII and */
+ /* Latin-1. Most fonts include a Unicode charmap, but not all */
+ /* of them. */
+ /* */
+ /* FT_ENCODING_MS_SYMBOL :: */
+ /* Corresponds to the Microsoft Symbol encoding, used to encode */
+ /* mathematical symbols in the 32..255 character code range. For */
+ /* more information, see `http://www.ceviz.net/symbol.htm'. */
+ /* */
+ /* FT_ENCODING_SJIS :: */
+ /* Corresponds to Japanese SJIS encoding. More info at */
+ /* at `http://langsupport.japanreference.com/encoding.shtml'. */
+ /* See note on multi-byte encodings below. */
+ /* */
+ /* FT_ENCODING_GB2312 :: */
+ /* Corresponds to an encoding system for Simplified Chinese as used */
+ /* used in mainland China. */
+ /* */
+ /* FT_ENCODING_BIG5 :: */
+ /* Corresponds to an encoding system for Traditional Chinese as used */
+ /* in Taiwan and Hong Kong. */
+ /* */
+ /* FT_ENCODING_WANSUNG :: */
+ /* Corresponds to the Korean encoding system known as Wansung. */
+ /* For more information see */
+ /* `http://www.microsoft.com/typography/unicode/949.txt'. */
+ /* */
+ /* FT_ENCODING_JOHAB :: */
+ /* The Korean standard character set (KS C-5601-1992), which */
+ /* corresponds to MS Windows code page 1361. This character set */
+ /* includes all possible Hangeul character combinations. */
+ /* */
+ /* FT_ENCODING_ADOBE_LATIN_1 :: */
+ /* Corresponds to a Latin-1 encoding as defined in a Type 1 */
+ /* Postscript font. It is limited to 256 character codes. */
+ /* */
+ /* FT_ENCODING_ADOBE_STANDARD :: */
+ /* Corresponds to the Adobe Standard encoding, as found in Type 1, */
+ /* CFF, and OpenType/CFF fonts. It is limited to 256 character */
+ /* codes. */
+ /* */
+ /* FT_ENCODING_ADOBE_EXPERT :: */
+ /* Corresponds to the Adobe Expert encoding, as found in Type 1, */
+ /* CFF, and OpenType/CFF fonts. It is limited to 256 character */
+ /* codes. */
+ /* */
+ /* FT_ENCODING_ADOBE_CUSTOM :: */
+ /* Corresponds to a custom encoding, as found in Type 1, CFF, and */
+ /* OpenType/CFF fonts. It is limited to 256 character codes. */
+ /* */
+ /* FT_ENCODING_APPLE_ROMAN :: */
+ /* Corresponds to the 8-bit Apple roman encoding. Many TrueType and */
+ /* OpenType fonts contain a charmap for this encoding, since older */
+ /* versions of Mac OS are able to use it. */
+ /* */
+ /* FT_ENCODING_OLD_LATIN_2 :: */
+ /* This value is deprecated and was never used nor reported by */
+ /* FreeType. Don't use or test for it. */
+ /* */
+ /* FT_ENCODING_MS_SJIS :: */
+ /* Same as FT_ENCODING_SJIS. Deprecated. */
+ /* */
+ /* FT_ENCODING_MS_GB2312 :: */
+ /* Same as FT_ENCODING_GB2312. Deprecated. */
+ /* */
+ /* FT_ENCODING_MS_BIG5 :: */
+ /* Same as FT_ENCODING_BIG5. Deprecated. */
+ /* */
+ /* FT_ENCODING_MS_WANSUNG :: */
+ /* Same as FT_ENCODING_WANSUNG. Deprecated. */
+ /* */
+ /* FT_ENCODING_MS_JOHAB :: */
+ /* Same as FT_ENCODING_JOHAB. Deprecated. */
+ /* */
+ /* <Note> */
+ /* By default, FreeType automatically synthetizes a Unicode charmap */
+ /* for Postscript fonts, using their glyph names dictionaries. */
+ /* However, it also reports the encodings defined explicitly in the */
+ /* font file, for the cases when they are needed, with the Adobe */
+ /* values as well. */
+ /* */
+ /* FT_ENCODING_NONE is set by the BDF and PCF drivers if the charmap */
+ /* is neither Unicode nor ISO-8859-1 (otherwise it is set to */
+ /* FT_ENCODING_UNICODE). Use @FT_Get_BDF_Charset_ID to find out which */
+ /* encoding is really present. If, for example, the `cs_registry' */
+ /* field is `KOI8' and the `cs_encoding' field is `R', the font is */
+ /* encoded in KOI8-R. */
+ /* */
+ /* FT_ENCODING_NONE is always set (with a single exception) by the */
+ /* winfonts driver. Use @FT_Get_WinFNT_Header and examine the */
+ /* `charset' field of the @FT_WinFNT_HeaderRec structure to find out */
+ /* which encoding is really present. For example, */
+ /* @FT_WinFNT_ID_CP1251 (204) means Windows code page 1251 (for */
+ /* Russian). */
+ /* */
+ /* FT_ENCODING_NONE is set if `platform_id' is @TT_PLATFORM_MACINTOSH */
+ /* and `encoding_id' is not @TT_MAC_ID_ROMAN (otherwise it is set to */
+ /* FT_ENCODING_APPLE_ROMAN). */
+ /* */
+ /* If `platform_id' is @TT_PLATFORM_MACINTOSH, use the function c */
+ /* @FT_Get_CMap_Language_ID to query the Mac language ID which may be */
+ /* needed to be able to distinguish Apple encoding variants. See */
+ /* */
+ /* http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/README.TXT */
+ /* */
+ /* to get an idea how to do that. Basically, if the language ID is 0, */
+ /* don't use it, otherwise subtract 1 from the language ID. Then */
+ /* examine `encoding_id'. If, for example, `encoding_id' is */
+ /* @TT_MAC_ID_ROMAN and the language ID (minus 1) is */
+ /* `TT_MAC_LANGID_GREEK', it is the Greek encoding, not Roman. */
+ /* @TT_MAC_ID_ARABIC with `TT_MAC_LANGID_FARSI' means the Farsi */
+ /* variant the Arabic encoding. */
+ /* */
+ typedef enum FT_Encoding_
+ {
+ FT_ENC_TAG( FT_ENCODING_NONE, 0, 0, 0, 0 ),
+
+ FT_ENC_TAG( FT_ENCODING_MS_SYMBOL, 's', 'y', 'm', 'b' ),
+ FT_ENC_TAG( FT_ENCODING_UNICODE, 'u', 'n', 'i', 'c' ),
+
+ FT_ENC_TAG( FT_ENCODING_SJIS, 's', 'j', 'i', 's' ),
+ FT_ENC_TAG( FT_ENCODING_GB2312, 'g', 'b', ' ', ' ' ),
+ FT_ENC_TAG( FT_ENCODING_BIG5, 'b', 'i', 'g', '5' ),
+ FT_ENC_TAG( FT_ENCODING_WANSUNG, 'w', 'a', 'n', 's' ),
+ FT_ENC_TAG( FT_ENCODING_JOHAB, 'j', 'o', 'h', 'a' ),
+
+ /* for backwards compatibility */
+ FT_ENCODING_MS_SJIS = FT_ENCODING_SJIS,
+ FT_ENCODING_MS_GB2312 = FT_ENCODING_GB2312,
+ FT_ENCODING_MS_BIG5 = FT_ENCODING_BIG5,
+ FT_ENCODING_MS_WANSUNG = FT_ENCODING_WANSUNG,
+ FT_ENCODING_MS_JOHAB = FT_ENCODING_JOHAB,
+
+ FT_ENC_TAG( FT_ENCODING_ADOBE_STANDARD, 'A', 'D', 'O', 'B' ),
+ FT_ENC_TAG( FT_ENCODING_ADOBE_EXPERT, 'A', 'D', 'B', 'E' ),
+ FT_ENC_TAG( FT_ENCODING_ADOBE_CUSTOM, 'A', 'D', 'B', 'C' ),
+ FT_ENC_TAG( FT_ENCODING_ADOBE_LATIN_1, 'l', 'a', 't', '1' ),
+
+ FT_ENC_TAG( FT_ENCODING_OLD_LATIN_2, 'l', 'a', 't', '2' ),
+
+ FT_ENC_TAG( FT_ENCODING_APPLE_ROMAN, 'a', 'r', 'm', 'n' )
+
+ } FT_Encoding;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Enum> */
+ /* ft_encoding_xxx */
+ /* */
+ /* <Description> */
+ /* These constants are deprecated; use the corresponding @FT_Encoding */
+ /* values instead. */
+ /* */
+#define ft_encoding_none FT_ENCODING_NONE
+#define ft_encoding_unicode FT_ENCODING_UNICODE
+#define ft_encoding_symbol FT_ENCODING_MS_SYMBOL
+#define ft_encoding_latin_1 FT_ENCODING_ADOBE_LATIN_1
+#define ft_encoding_latin_2 FT_ENCODING_OLD_LATIN_2
+#define ft_encoding_sjis FT_ENCODING_SJIS
+#define ft_encoding_gb2312 FT_ENCODING_GB2312
+#define ft_encoding_big5 FT_ENCODING_BIG5
+#define ft_encoding_wansung FT_ENCODING_WANSUNG
+#define ft_encoding_johab FT_ENCODING_JOHAB
+
+#define ft_encoding_adobe_standard FT_ENCODING_ADOBE_STANDARD
+#define ft_encoding_adobe_expert FT_ENCODING_ADOBE_EXPERT
+#define ft_encoding_adobe_custom FT_ENCODING_ADOBE_CUSTOM
+#define ft_encoding_apple_roman FT_ENCODING_APPLE_ROMAN
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_CharMapRec */
+ /* */
+ /* <Description> */
+ /* The base charmap structure. */
+ /* */
+ /* <Fields> */
+ /* face :: A handle to the parent face object. */
+ /* */
+ /* encoding :: An @FT_Encoding tag identifying the charmap. Use */
+ /* this with @FT_Select_Charmap. */
+ /* */
+ /* platform_id :: An ID number describing the platform for the */
+ /* following encoding ID. This comes directly from */
+ /* the TrueType specification and should be emulated */
+ /* for other formats. */
+ /* */
+ /* encoding_id :: A platform specific encoding number. This also */
+ /* comes from the TrueType specification and should be */
+ /* emulated similarly. */
+ /* */
+ typedef struct FT_CharMapRec_
+ {
+ FT_Face face;
+ FT_Encoding encoding;
+ FT_UShort platform_id;
+ FT_UShort encoding_id;
+
+ } FT_CharMapRec;
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /* */
+ /* B A S E O B J E C T C L A S S E S */
+ /* */
+ /*************************************************************************/
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_Face_Internal */
+ /* */
+ /* <Description> */
+ /* An opaque handle to an `FT_Face_InternalRec' structure, used to */
+ /* model private data of a given @FT_Face object. */
+ /* */
+ /* This structure might change between releases of FreeType 2 and is */
+ /* not generally available to client applications. */
+ /* */
+ typedef struct FT_Face_InternalRec_* FT_Face_Internal;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_FaceRec */
+ /* */
+ /* <Description> */
+ /* FreeType root face class structure. A face object models a */
+ /* typeface in a font file. */
+ /* */
+ /* <Fields> */
+ /* num_faces :: The number of faces in the font file. Some */
+ /* font formats can have multiple faces in */
+ /* a font file. */
+ /* */
+ /* face_index :: The index of the face in the font file. It */
+ /* is set to 0 if there is only one face in */
+ /* the font file. */
+ /* */
+ /* face_flags :: A set of bit flags that give important */
+ /* information about the face; see */
+ /* @FT_FACE_FLAG_XXX for the details. */
+ /* */
+ /* style_flags :: A set of bit flags indicating the style of */
+ /* the face; see @FT_STYLE_FLAG_XXX for the */
+ /* details. */
+ /* */
+ /* num_glyphs :: The number of glyphs in the face. If the */
+ /* face is scalable and has sbits (see */
+ /* `num_fixed_sizes'), it is set to the number */
+ /* of outline glyphs. */
+ /* */
+ /* family_name :: The face's family name. This is an ASCII */
+ /* string, usually in English, which describes */
+ /* the typeface's family (like `Times New */
+ /* Roman', `Bodoni', `Garamond', etc). This */
+ /* is a least common denominator used to list */
+ /* fonts. Some formats (TrueType & OpenType) */
+ /* provide localized and Unicode versions of */
+ /* this string. Applications should use the */
+ /* format specific interface to access them. */
+ /* Can be NULL (e.g., in fonts embedded in a */
+ /* PDF file). */
+ /* */
+ /* style_name :: The face's style name. This is an ASCII */
+ /* string, usually in English, which describes */
+ /* the typeface's style (like `Italic', */
+ /* `Bold', `Condensed', etc). Not all font */
+ /* formats provide a style name, so this field */
+ /* is optional, and can be set to NULL. As */
+ /* for `family_name', some formats provide */
+ /* localized and Unicode versions of this */
+ /* string. Applications should use the format */
+ /* specific interface to access them. */
+ /* */
+ /* num_fixed_sizes :: The number of bitmap strikes in the face. */
+ /* Even if the face is scalable, there might */
+ /* still be bitmap strikes, which are called */
+ /* `sbits' in that case. */
+ /* */
+ /* available_sizes :: An array of @FT_Bitmap_Size for all bitmap */
+ /* strikes in the face. It is set to NULL if */
+ /* there is no bitmap strike. */
+ /* */
+ /* num_charmaps :: The number of charmaps in the face. */
+ /* */
+ /* charmaps :: An array of the charmaps of the face. */
+ /* */
+ /* generic :: A field reserved for client uses. See the */
+ /* @FT_Generic type description. */
+ /* */
+ /* bbox :: The font bounding box. Coordinates are */
+ /* expressed in font units (see */
+ /* `units_per_EM'). The box is large enough */
+ /* to contain any glyph from the font. Thus, */
+ /* `bbox.yMax' can be seen as the `maximal */
+ /* ascender', and `bbox.yMin' as the `minimal */
+ /* descender'. Only relevant for scalable */
+ /* formats. */
+ /* */
+ /* units_per_EM :: The number of font units per EM square for */
+ /* this face. This is typically 2048 for */
+ /* TrueType fonts, and 1000 for Type 1 fonts. */
+ /* Only relevant for scalable formats. */
+ /* */
+ /* ascender :: The typographic ascender of the face, */
+ /* expressed in font units. For font formats */
+ /* not having this information, it is set to */
+ /* `bbox.yMax'. Only relevant for scalable */
+ /* formats. */
+ /* */
+ /* descender :: The typographic descender of the face, */
+ /* expressed in font units. For font formats */
+ /* not having this information, it is set to */
+ /* `bbox.yMin'. Note that this field is */
+ /* usually negative. Only relevant for */
+ /* scalable formats. */
+ /* */
+ /* height :: The height is the vertical distance */
+ /* between two consecutive baselines, */
+ /* expressed in font units. It is always */
+ /* positive. Only relevant for scalable */
+ /* formats. */
+ /* */
+ /* max_advance_width :: The maximal advance width, in font units, */
+ /* for all glyphs in this face. This can be */
+ /* used to make word wrapping computations */
+ /* faster. Only relevant for scalable */
+ /* formats. */
+ /* */
+ /* max_advance_height :: The maximal advance height, in font units, */
+ /* for all glyphs in this face. This is only */
+ /* relevant for vertical layouts, and is set */
+ /* to `height' for fonts that do not provide */
+ /* vertical metrics. Only relevant for */
+ /* scalable formats. */
+ /* */
+ /* underline_position :: The position, in font units, of the */
+ /* underline line for this face. It's the */
+ /* center of the underlining stem. Only */
+ /* relevant for scalable formats. */
+ /* */
+ /* underline_thickness :: The thickness, in font units, of the */
+ /* underline for this face. Only relevant for */
+ /* scalable formats. */
+ /* */
+ /* glyph :: The face's associated glyph slot(s). */
+ /* */
+ /* size :: The current active size for this face. */
+ /* */
+ /* charmap :: The current active charmap for this face. */
+ /* */
+ /* <Note> */
+ /* Fields may be changed after a call to @FT_Attach_File or */
+ /* @FT_Attach_Stream. */
+ /* */
+ typedef struct FT_FaceRec_
+ {
+ FT_Long num_faces;
+ FT_Long face_index;
+
+ FT_Long face_flags;
+ FT_Long style_flags;
+
+ FT_Long num_glyphs;
+
+ FT_String* family_name;
+ FT_String* style_name;
+
+ FT_Int num_fixed_sizes;
+ FT_Bitmap_Size* available_sizes;
+
+ FT_Int num_charmaps;
+ FT_CharMap* charmaps;
+
+ FT_Generic generic;
+
+ /*# The following member variables (down to `underline_thickness') */
+ /*# are only relevant to scalable outlines; cf. @FT_Bitmap_Size */
+ /*# for bitmap fonts. */
+ FT_BBox bbox;
+
+ FT_UShort units_per_EM;
+ FT_Short ascender;
+ FT_Short descender;
+ FT_Short height;
+
+ FT_Short max_advance_width;
+ FT_Short max_advance_height;
+
+ FT_Short underline_position;
+ FT_Short underline_thickness;
+
+ FT_GlyphSlot glyph;
+ FT_Size size;
+ FT_CharMap charmap;
+
+ /*@private begin */
+
+ FT_Driver driver;
+ FT_Memory memory;
+ FT_Stream stream;
+
+ FT_ListRec sizes_list;
+
+ FT_Generic autohint;
+ void* extensions;
+
+ FT_Face_Internal internal;
+
+ /*@private end */
+
+ } FT_FaceRec;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Enum> */
+ /* FT_FACE_FLAG_XXX */
+ /* */
+ /* <Description> */
+ /* A list of bit flags used in the `face_flags' field of the */
+ /* @FT_FaceRec structure. They inform client applications of */
+ /* properties of the corresponding face. */
+ /* */
+ /* <Values> */
+ /* FT_FACE_FLAG_SCALABLE :: */
+ /* Indicates that the face contains outline glyphs. This doesn't */
+ /* prevent bitmap strikes, i.e., a face can have both this and */
+ /* and @FT_FACE_FLAG_FIXED_SIZES set. */
+ /* */
+ /* FT_FACE_FLAG_FIXED_SIZES :: */
+ /* Indicates that the face contains bitmap strikes. See also the */
+ /* `num_fixed_sizes' and `available_sizes' fields of @FT_FaceRec. */
+ /* */
+ /* FT_FACE_FLAG_FIXED_WIDTH :: */
+ /* Indicates that the face contains fixed-width characters (like */
+ /* Courier, Lucido, MonoType, etc.). */
+ /* */
+ /* FT_FACE_FLAG_SFNT :: */
+ /* Indicates that the face uses the `sfnt' storage scheme. For */
+ /* now, this means TrueType and OpenType. */
+ /* */
+ /* FT_FACE_FLAG_HORIZONTAL :: */
+ /* Indicates that the face contains horizontal glyph metrics. This */
+ /* should be set for all common formats. */
+ /* */
+ /* FT_FACE_FLAG_VERTICAL :: */
+ /* Indicates that the face contains vertical glyph metrics. This */
+ /* is only available in some formats, not all of them. */
+ /* */
+ /* FT_FACE_FLAG_KERNING :: */
+ /* Indicates that the face contains kerning information. If set, */
+ /* the kerning distance can be retrieved through the function */
+ /* @FT_Get_Kerning. Otherwise the function always return the */
+ /* vector (0,0). Note that FreeType doesn't handle kerning data */
+ /* from the `GPOS' table (as present in some OpenType fonts). */
+ /* */
+ /* FT_FACE_FLAG_FAST_GLYPHS :: */
+ /* THIS FLAG IS DEPRECATED. DO NOT USE OR TEST IT. */
+ /* */
+ /* FT_FACE_FLAG_MULTIPLE_MASTERS :: */
+ /* Indicates that the font contains multiple masters and is capable */
+ /* of interpolating between them. See the multiple-masters */
+ /* specific API for details. */
+ /* */
+ /* FT_FACE_FLAG_GLYPH_NAMES :: */
+ /* Indicates that the font contains glyph names that can be */
+ /* retrieved through @FT_Get_Glyph_Name. Note that some TrueType */
+ /* fonts contain broken glyph name tables. Use the function */
+ /* @FT_Has_PS_Glyph_Names when needed. */
+ /* */
+ /* FT_FACE_FLAG_EXTERNAL_STREAM :: */
+ /* Used internally by FreeType to indicate that a face's stream was */
+ /* provided by the client application and should not be destroyed */
+ /* when @FT_Done_Face is called. Don't read or test this flag. */
+ /* */
+ /* FT_FACE_FLAG_HINTER :: */
+ /* Set if the font driver has a hinting machine of its own. For */
+ /* example, with TrueType fonts, it makes sense to use data from */
+ /* the SFNT `gasp' table only if the native TrueType hinting engine */
+ /* (with the bytecode interpreter) is available and active. */
+ /* */
+ /* FT_FACE_FLAG_CID_KEYED :: */
+ /* Set if the font is CID-keyed. In that case, the font is not */
+ /* accessed by glyph indices but by CID values. For subsetted */
+ /* CID-keyed fonts this has the consequence that not all index */
+ /* values are a valid argument to FT_Load_Glyph. Only the CID */
+ /* values for which corresponding glyphs in the subsetted font */
+ /* exist make FT_Load_Glyph return successfully; in all other cases */
+ /* you get an `FT_Err_Invalid_Argument' error. */
+ /* */
+#define FT_FACE_FLAG_SCALABLE ( 1L << 0 )
+#define FT_FACE_FLAG_FIXED_SIZES ( 1L << 1 )
+#define FT_FACE_FLAG_FIXED_WIDTH ( 1L << 2 )
+#define FT_FACE_FLAG_SFNT ( 1L << 3 )
+#define FT_FACE_FLAG_HORIZONTAL ( 1L << 4 )
+#define FT_FACE_FLAG_VERTICAL ( 1L << 5 )
+#define FT_FACE_FLAG_KERNING ( 1L << 6 )
+#define FT_FACE_FLAG_FAST_GLYPHS ( 1L << 7 )
+#define FT_FACE_FLAG_MULTIPLE_MASTERS ( 1L << 8 )
+#define FT_FACE_FLAG_GLYPH_NAMES ( 1L << 9 )
+#define FT_FACE_FLAG_EXTERNAL_STREAM ( 1L << 10 )
+#define FT_FACE_FLAG_HINTER ( 1L << 11 )
+#define FT_FACE_FLAG_CID_KEYED ( 1L << 12 )
+
+ /* */
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_HAS_HORIZONTAL( face )
+ *
+ * @description:
+ * A macro that returns true whenever a face object contains
+ * horizontal metrics (this is true for all font formats though).
+ *
+ * @also:
+ * @FT_HAS_VERTICAL can be used to check for vertical metrics.
+ *
+ */
+#define FT_HAS_HORIZONTAL( face ) \
+ ( face->face_flags & FT_FACE_FLAG_HORIZONTAL )
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_HAS_VERTICAL( face )
+ *
+ * @description:
+ * A macro that returns true whenever a face object contains vertical
+ * metrics.
+ *
+ */
+#define FT_HAS_VERTICAL( face ) \
+ ( face->face_flags & FT_FACE_FLAG_VERTICAL )
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_HAS_KERNING( face )
+ *
+ * @description:
+ * A macro that returns true whenever a face object contains kerning
+ * data that can be accessed with @FT_Get_Kerning.
+ *
+ */
+#define FT_HAS_KERNING( face ) \
+ ( face->face_flags & FT_FACE_FLAG_KERNING )
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_IS_SCALABLE( face )
+ *
+ * @description:
+ * A macro that returns true whenever a face object contains a scalable
+ * font face (true for TrueType, Type 1, Type 42, CID, OpenType/CFF,
+ * and PFR font formats.
+ *
+ */
+#define FT_IS_SCALABLE( face ) \
+ ( face->face_flags & FT_FACE_FLAG_SCALABLE )
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_IS_SFNT( face )
+ *
+ * @description:
+ * A macro that returns true whenever a face object contains a font
+ * whose format is based on the SFNT storage scheme. This usually
+ * means: TrueType fonts, OpenType fonts, as well as SFNT-based embedded
+ * bitmap fonts.
+ *
+ * If this macro is true, all functions defined in @FT_SFNT_NAMES_H and
+ * @FT_TRUETYPE_TABLES_H are available.
+ *
+ */
+#define FT_IS_SFNT( face ) \
+ ( face->face_flags & FT_FACE_FLAG_SFNT )
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_IS_FIXED_WIDTH( face )
+ *
+ * @description:
+ * A macro that returns true whenever a face object contains a font face
+ * that contains fixed-width (or `monospace', `fixed-pitch', etc.)
+ * glyphs.
+ *
+ */
+#define FT_IS_FIXED_WIDTH( face ) \
+ ( face->face_flags & FT_FACE_FLAG_FIXED_WIDTH )
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_HAS_FIXED_SIZES( face )
+ *
+ * @description:
+ * A macro that returns true whenever a face object contains some
+ * embedded bitmaps. See the `available_sizes' field of the
+ * @FT_FaceRec structure.
+ *
+ */
+#define FT_HAS_FIXED_SIZES( face ) \
+ ( face->face_flags & FT_FACE_FLAG_FIXED_SIZES )
+
+ /* */
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_HAS_FAST_GLYPHS( face )
+ *
+ * @description:
+ * Deprecated.
+ *
+ */
+#define FT_HAS_FAST_GLYPHS( face ) 0
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_HAS_GLYPH_NAMES( face )
+ *
+ * @description:
+ * A macro that returns true whenever a face object contains some glyph
+ * names that can be accessed through @FT_Get_Glyph_Name.
+ *
+ */
+#define FT_HAS_GLYPH_NAMES( face ) \
+ ( face->face_flags & FT_FACE_FLAG_GLYPH_NAMES )
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_HAS_MULTIPLE_MASTERS( face )
+ *
+ * @description:
+ * A macro that returns true whenever a face object contains some
+ * multiple masters. The functions provided by @FT_MULTIPLE_MASTERS_H
+ * are then available to choose the exact design you want.
+ *
+ */
+#define FT_HAS_MULTIPLE_MASTERS( face ) \
+ ( face->face_flags & FT_FACE_FLAG_MULTIPLE_MASTERS )
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_IS_CID_KEYED( face )
+ *
+ * @description:
+ * A macro that returns true whenever a face object contains a CID-keyed
+ * font. See the discussion of @FT_FACE_FLAG_CID_KEYED for more
+ * details.
+ *
+ * If this macro is true, all functions defined in @FT_CID_H are
+ * available.
+ *
+ */
+#define FT_IS_CID_KEYED( face ) \
+ ( face->face_flags & FT_FACE_FLAG_CID_KEYED )
+
+
+ /*************************************************************************/
+ /* */
+ /* <Constant> */
+ /* FT_STYLE_FLAG_XXX */
+ /* */
+ /* <Description> */
+ /* A list of bit-flags used to indicate the style of a given face. */
+ /* These are used in the `style_flags' field of @FT_FaceRec. */
+ /* */
+ /* <Values> */
+ /* FT_STYLE_FLAG_ITALIC :: */
+ /* Indicates that a given face style is italic or oblique. */
+ /* */
+ /* FT_STYLE_FLAG_BOLD :: */
+ /* Indicates that a given face is bold. */
+ /* */
+ /* <Note> */
+ /* The style information as provided by FreeType is very basic. More */
+ /* details are beyond the scope and should be done on a higher level */
+ /* (for example, by analyzing various fields of the `OS/2' table in */
+ /* SFNT based fonts). */
+ /* */
+#define FT_STYLE_FLAG_ITALIC ( 1 << 0 )
+#define FT_STYLE_FLAG_BOLD ( 1 << 1 )
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_Size_Internal */
+ /* */
+ /* <Description> */
+ /* An opaque handle to an `FT_Size_InternalRec' structure, used to */
+ /* model private data of a given @FT_Size object. */
+ /* */
+ typedef struct FT_Size_InternalRec_* FT_Size_Internal;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_Size_Metrics */
+ /* */
+ /* <Description> */
+ /* The size metrics structure gives the metrics of a size object. */
+ /* */
+ /* <Fields> */
+ /* x_ppem :: The width of the scaled EM square in pixels, hence */
+ /* the term `ppem' (pixels per EM). It is also */
+ /* referred to as `nominal width'. */
+ /* */
+ /* y_ppem :: The height of the scaled EM square in pixels, */
+ /* hence the term `ppem' (pixels per EM). It is also */
+ /* referred to as `nominal height'. */
+ /* */
+ /* x_scale :: A 16.16 fractional scaling value used to convert */
+ /* horizontal metrics from font units to 26.6 */
+ /* fractional pixels. Only relevant for scalable */
+ /* font formats. */
+ /* */
+ /* y_scale :: A 16.16 fractional scaling value used to convert */
+ /* vertical metrics from font units to 26.6 */
+ /* fractional pixels. Only relevant for scalable */
+ /* font formats. */
+ /* */
+ /* ascender :: The ascender in 26.6 fractional pixels. See */
+ /* @FT_FaceRec for the details. */
+ /* */
+ /* descender :: The descender in 26.6 fractional pixels. See */
+ /* @FT_FaceRec for the details. */
+ /* */
+ /* height :: The height in 26.6 fractional pixels. See */
+ /* @FT_FaceRec for the details. */
+ /* */
+ /* max_advance :: The maximal advance width in 26.6 fractional */
+ /* pixels. See @FT_FaceRec for the details. */
+ /* */
+ /* <Note> */
+ /* The scaling values, if relevant, are determined first during a */
+ /* size changing operation. The remaining fields are then set by the */
+ /* driver. For scalable formats, they are usually set to scaled */
+ /* values of the corresponding fields in @FT_FaceRec. */
+ /* */
+ /* Note that due to glyph hinting, these values might not be exact */
+ /* for certain fonts. Thus they must be treated as unreliable */
+ /* with an error margin of at least one pixel! */
+ /* */
+ /* Indeed, the only way to get the exact metrics is to render _all_ */
+ /* glyphs. As this would be a definite performance hit, it is up to */
+ /* client applications to perform such computations. */
+ /* */
+ /* The FT_Size_Metrics structure is valid for bitmap fonts also. */
+ /* */
+ typedef struct FT_Size_Metrics_
+ {
+ FT_UShort x_ppem; /* horizontal pixels per EM */
+ FT_UShort y_ppem; /* vertical pixels per EM */
+
+ FT_Fixed x_scale; /* scaling values used to convert font */
+ FT_Fixed y_scale; /* units to 26.6 fractional pixels */
+
+ FT_Pos ascender; /* ascender in 26.6 frac. pixels */
+ FT_Pos descender; /* descender in 26.6 frac. pixels */
+ FT_Pos height; /* text height in 26.6 frac. pixels */
+ FT_Pos max_advance; /* max horizontal advance, in 26.6 pixels */
+
+ } FT_Size_Metrics;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_SizeRec */
+ /* */
+ /* <Description> */
+ /* FreeType root size class structure. A size object models a face */
+ /* object at a given size. */
+ /* */
+ /* <Fields> */
+ /* face :: Handle to the parent face object. */
+ /* */
+ /* generic :: A typeless pointer, which is unused by the FreeType */
+ /* library or any of its drivers. It can be used by */
+ /* client applications to link their own data to each size */
+ /* object. */
+ /* */
+ /* metrics :: Metrics for this size object. This field is read-only. */
+ /* */
+ typedef struct FT_SizeRec_
+ {
+ FT_Face face; /* parent face object */
+ FT_Generic generic; /* generic pointer for client uses */
+ FT_Size_Metrics metrics; /* size metrics */
+ FT_Size_Internal internal;
+
+ } FT_SizeRec;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_SubGlyph */
+ /* */
+ /* <Description> */
+ /* The subglyph structure is an internal object used to describe */
+ /* subglyphs (for example, in the case of composites). */
+ /* */
+ /* <Note> */
+ /* The subglyph implementation is not part of the high-level API, */
+ /* hence the forward structure declaration. */
+ /* */
+ /* You can however retrieve subglyph information with */
+ /* @FT_Get_SubGlyph_Info. */
+ /* */
+ typedef struct FT_SubGlyphRec_* FT_SubGlyph;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_Slot_Internal */
+ /* */
+ /* <Description> */
+ /* An opaque handle to an `FT_Slot_InternalRec' structure, used to */
+ /* model private data of a given @FT_GlyphSlot object. */
+ /* */
+ typedef struct FT_Slot_InternalRec_* FT_Slot_Internal;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_GlyphSlotRec */
+ /* */
+ /* <Description> */
+ /* FreeType root glyph slot class structure. A glyph slot is a */
+ /* container where individual glyphs can be loaded, be they in */
+ /* outline or bitmap format. */
+ /* */
+ /* <Fields> */
+ /* library :: A handle to the FreeType library instance */
+ /* this slot belongs to. */
+ /* */
+ /* face :: A handle to the parent face object. */
+ /* */
+ /* next :: In some cases (like some font tools), several */
+ /* glyph slots per face object can be a good */
+ /* thing. As this is rare, the glyph slots are */
+ /* listed through a direct, single-linked list */
+ /* using its `next' field. */
+ /* */
+ /* generic :: A typeless pointer which is unused by the */
+ /* FreeType library or any of its drivers. It */
+ /* can be used by client applications to link */
+ /* their own data to each glyph slot object. */
+ /* */
+ /* metrics :: The metrics of the last loaded glyph in the */
+ /* slot. The returned values depend on the last */
+ /* load flags (see the @FT_Load_Glyph API */
+ /* function) and can be expressed either in 26.6 */
+ /* fractional pixels or font units. */
+ /* */
+ /* Note that even when the glyph image is */
+ /* transformed, the metrics are not. */
+ /* */
+ /* linearHoriAdvance :: The advance width of the unhinted glyph. */
+ /* Its value is expressed in 16.16 fractional */
+ /* pixels, unless @FT_LOAD_LINEAR_DESIGN is set */
+ /* when loading the glyph. This field can be */
+ /* important to perform correct WYSIWYG layout. */
+ /* Only relevant for outline glyphs. */
+ /* */
+ /* linearVertAdvance :: The advance height of the unhinted glyph. */
+ /* Its value is expressed in 16.16 fractional */
+ /* pixels, unless @FT_LOAD_LINEAR_DESIGN is set */
+ /* when loading the glyph. This field can be */
+ /* important to perform correct WYSIWYG layout. */
+ /* Only relevant for outline glyphs. */
+ /* */
+ /* advance :: This is the transformed advance width for the */
+ /* glyph. */
+ /* */
+ /* format :: This field indicates the format of the image */
+ /* contained in the glyph slot. Typically */
+ /* @FT_GLYPH_FORMAT_BITMAP, */
+ /* @FT_GLYPH_FORMAT_OUTLINE, or */
+ /* @FT_GLYPH_FORMAT_COMPOSITE, but others are */
+ /* possible. */
+ /* */
+ /* bitmap :: This field is used as a bitmap descriptor */
+ /* when the slot format is */
+ /* @FT_GLYPH_FORMAT_BITMAP. Note that the */
+ /* address and content of the bitmap buffer can */
+ /* change between calls of @FT_Load_Glyph and a */
+ /* few other functions. */
+ /* */
+ /* bitmap_left :: This is the bitmap's left bearing expressed */
+ /* in integer pixels. Of course, this is only */
+ /* valid if the format is */
+ /* @FT_GLYPH_FORMAT_BITMAP. */
+ /* */
+ /* bitmap_top :: This is the bitmap's top bearing expressed in */
+ /* integer pixels. Remember that this is the */
+ /* distance from the baseline to the top-most */
+ /* glyph scanline, upwards y-coordinates being */
+ /* *positive*. */
+ /* */
+ /* outline :: The outline descriptor for the current glyph */
+ /* image if its format is */
+ /* @FT_GLYPH_FORMAT_OUTLINE. Once a glyph is */
+ /* loaded, `outline' can be transformed, */
+ /* distorted, embolded, etc. However, it must */
+ /* not be freed. */
+ /* */
+ /* num_subglyphs :: The number of subglyphs in a composite glyph. */
+ /* This field is only valid for the composite */
+ /* glyph format that should normally only be */
+ /* loaded with the @FT_LOAD_NO_RECURSE flag. */
+ /* For now this is internal to FreeType. */
+ /* */
+ /* subglyphs :: An array of subglyph descriptors for */
+ /* composite glyphs. There are `num_subglyphs' */
+ /* elements in there. Currently internal to */
+ /* FreeType. */
+ /* */
+ /* control_data :: Certain font drivers can also return the */
+ /* control data for a given glyph image (e.g. */
+ /* TrueType bytecode, Type 1 charstrings, etc.). */
+ /* This field is a pointer to such data. */
+ /* */
+ /* control_len :: This is the length in bytes of the control */
+ /* data. */
+ /* */
+ /* other :: Really wicked formats can use this pointer to */
+ /* present their own glyph image to client */
+ /* applications. Note that the application */
+ /* needs to know about the image format. */
+ /* */
+ /* lsb_delta :: The difference between hinted and unhinted */
+ /* left side bearing while autohinting is */
+ /* active. Zero otherwise. */
+ /* */
+ /* rsb_delta :: The difference between hinted and unhinted */
+ /* right side bearing while autohinting is */
+ /* active. Zero otherwise. */
+ /* */
+ /* <Note> */
+ /* If @FT_Load_Glyph is called with default flags (see */
+ /* @FT_LOAD_DEFAULT) the glyph image is loaded in the glyph slot in */
+ /* its native format (e.g., an outline glyph for TrueType and Type 1 */
+ /* formats). */
+ /* */
+ /* This image can later be converted into a bitmap by calling */
+ /* @FT_Render_Glyph. This function finds the current renderer for */
+ /* the native image's format then invokes it. */
+ /* */
+ /* The renderer is in charge of transforming the native image through */
+ /* the slot's face transformation fields, then convert it into a */
+ /* bitmap that is returned in `slot->bitmap'. */
+ /* */
+ /* Note that `slot->bitmap_left' and `slot->bitmap_top' are also used */
+ /* to specify the position of the bitmap relative to the current pen */
+ /* position (e.g., coordinates (0,0) on the baseline). Of course, */
+ /* `slot->format' is also changed to @FT_GLYPH_FORMAT_BITMAP. */
+ /* */
+ /* <Note> */
+ /* Here a small pseudo code fragment which shows how to use */
+ /* `lsb_delta' and `rsb_delta': */
+ /* */
+ /* { */
+ /* FT_Pos origin_x = 0; */
+ /* FT_Pos prev_rsb_delta = 0; */
+ /* */
+ /* */
+ /* for all glyphs do */
+ /* <compute kern between current and previous glyph and add it to */
+ /* `origin_x'> */
+ /* */
+ /* <load glyph with `FT_Load_Glyph'> */
+ /* */
+ /* if ( prev_rsb_delta - face->glyph->lsb_delta >= 32 ) */
+ /* origin_x -= 64; */
+ /* else if ( prev_rsb_delta - face->glyph->lsb_delta < -32 ) */
+ /* origin_x += 64; */
+ /* */
+ /* prev_rsb_delta = face->glyph->rsb_delta; */
+ /* */
+ /* <save glyph image, or render glyph, or ...> */
+ /* */
+ /* origin_x += face->glyph->advance.x; */
+ /* endfor */
+ /* } */
+ /* */
+ typedef struct FT_GlyphSlotRec_
+ {
+ FT_Library library;
+ FT_Face face;
+ FT_GlyphSlot next;
+ FT_UInt reserved; /* retained for binary compatibility */
+ FT_Generic generic;
+
+ FT_Glyph_Metrics metrics;
+ FT_Fixed linearHoriAdvance;
+ FT_Fixed linearVertAdvance;
+ FT_Vector advance;
+
+ FT_Glyph_Format format;
+
+ FT_Bitmap bitmap;
+ FT_Int bitmap_left;
+ FT_Int bitmap_top;
+
+ FT_Outline outline;
+
+ FT_UInt num_subglyphs;
+ FT_SubGlyph subglyphs;
+
+ void* control_data;
+ long control_len;
+
+ FT_Pos lsb_delta;
+ FT_Pos rsb_delta;
+
+ void* other;
+
+ FT_Slot_Internal internal;
+
+ } FT_GlyphSlotRec;
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /* */
+ /* F U N C T I O N S */
+ /* */
+ /*************************************************************************/
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Init_FreeType */
+ /* */
+ /* <Description> */
+ /* Initialize a new FreeType library object. The set of modules */
+ /* that are registered by this function is determined at build time. */
+ /* */
+ /* <Output> */
+ /* alibrary :: A handle to a new library object. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Init_FreeType( FT_Library *alibrary );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Done_FreeType */
+ /* */
+ /* <Description> */
+ /* Destroy a given FreeType library object and all of its children, */
+ /* including resources, drivers, faces, sizes, etc. */
+ /* */
+ /* <Input> */
+ /* library :: A handle to the target library object. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Done_FreeType( FT_Library library );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Enum> */
+ /* FT_OPEN_XXX */
+ /* */
+ /* <Description> */
+ /* A list of bit-field constants used within the `flags' field of the */
+ /* @FT_Open_Args structure. */
+ /* */
+ /* <Values> */
+ /* FT_OPEN_MEMORY :: This is a memory-based stream. */
+ /* */
+ /* FT_OPEN_STREAM :: Copy the stream from the `stream' field. */
+ /* */
+ /* FT_OPEN_PATHNAME :: Create a new input stream from a C */
+ /* path name. */
+ /* */
+ /* FT_OPEN_DRIVER :: Use the `driver' field. */
+ /* */
+ /* FT_OPEN_PARAMS :: Use the `num_params' and `params' fields. */
+ /* */
+ /* ft_open_memory :: Deprecated; use @FT_OPEN_MEMORY instead. */
+ /* */
+ /* ft_open_stream :: Deprecated; use @FT_OPEN_STREAM instead. */
+ /* */
+ /* ft_open_pathname :: Deprecated; use @FT_OPEN_PATHNAME instead. */
+ /* */
+ /* ft_open_driver :: Deprecated; use @FT_OPEN_DRIVER instead. */
+ /* */
+ /* ft_open_params :: Deprecated; use @FT_OPEN_PARAMS instead. */
+ /* */
+ /* <Note> */
+ /* The `FT_OPEN_MEMORY', `FT_OPEN_STREAM', and `FT_OPEN_PATHNAME' */
+ /* flags are mutually exclusive. */
+ /* */
+#define FT_OPEN_MEMORY 0x1
+#define FT_OPEN_STREAM 0x2
+#define FT_OPEN_PATHNAME 0x4
+#define FT_OPEN_DRIVER 0x8
+#define FT_OPEN_PARAMS 0x10
+
+#define ft_open_memory FT_OPEN_MEMORY /* deprecated */
+#define ft_open_stream FT_OPEN_STREAM /* deprecated */
+#define ft_open_pathname FT_OPEN_PATHNAME /* deprecated */
+#define ft_open_driver FT_OPEN_DRIVER /* deprecated */
+#define ft_open_params FT_OPEN_PARAMS /* deprecated */
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_Parameter */
+ /* */
+ /* <Description> */
+ /* A simple structure used to pass more or less generic parameters */
+ /* to @FT_Open_Face. */
+ /* */
+ /* <Fields> */
+ /* tag :: A four-byte identification tag. */
+ /* */
+ /* data :: A pointer to the parameter data. */
+ /* */
+ /* <Note> */
+ /* The ID and function of parameters are driver-specific. */
+ /* */
+ typedef struct FT_Parameter_
+ {
+ FT_ULong tag;
+ FT_Pointer data;
+
+ } FT_Parameter;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_Open_Args */
+ /* */
+ /* <Description> */
+ /* A structure used to indicate how to open a new font file or */
+ /* stream. A pointer to such a structure can be used as a parameter */
+ /* for the functions @FT_Open_Face and @FT_Attach_Stream. */
+ /* */
+ /* <Fields> */
+ /* flags :: A set of bit flags indicating how to use the */
+ /* structure. */
+ /* */
+ /* memory_base :: The first byte of the file in memory. */
+ /* */
+ /* memory_size :: The size in bytes of the file in memory. */
+ /* */
+ /* pathname :: A pointer to an 8-bit file pathname. */
+ /* */
+ /* stream :: A handle to a source stream object. */
+ /* */
+ /* driver :: This field is exclusively used by @FT_Open_Face; */
+ /* it simply specifies the font driver to use to open */
+ /* the face. If set to 0, FreeType tries to load the */
+ /* face with each one of the drivers in its list. */
+ /* */
+ /* num_params :: The number of extra parameters. */
+ /* */
+ /* params :: Extra parameters passed to the font driver when */
+ /* opening a new face. */
+ /* */
+ /* <Note> */
+ /* The stream type is determined by the contents of `flags' which */
+ /* are tested in the following order by @FT_Open_Face: */
+ /* */
+ /* If the `FT_OPEN_MEMORY' bit is set, assume that this is a */
+ /* memory file of `memory_size' bytes, located at `memory_address'. */
+ /* The data are are not copied, and the client is responsible for */
+ /* releasing and destroying them _after_ the corresponding call to */
+ /* @FT_Done_Face. */
+ /* */
+ /* Otherwise, if the `FT_OPEN_STREAM' bit is set, assume that a */
+ /* custom input stream `stream' is used. */
+ /* */
+ /* Otherwise, if the `FT_OPEN_PATHNAME' bit is set, assume that this */
+ /* is a normal file and use `pathname' to open it. */
+ /* */
+ /* If the `FT_OPEN_DRIVER' bit is set, @FT_Open_Face only tries to */
+ /* open the file with the driver whose handler is in `driver'. */
+ /* */
+ /* If the `FT_OPEN_PARAMS' bit is set, the parameters given by */
+ /* `num_params' and `params' is used. They are ignored otherwise. */
+ /* */
+ /* Ideally, both the `pathname' and `params' fields should be tagged */
+ /* as `const'; this is missing for API backwards compatibility. With */
+ /* other words, applications should treat them as read-only. */
+ /* */
+ typedef struct FT_Open_Args_
+ {
+ FT_UInt flags;
+ const FT_Byte* memory_base;
+ FT_Long memory_size;
+ FT_String* pathname;
+ FT_Stream stream;
+ FT_Module driver;
+ FT_Int num_params;
+ FT_Parameter* params;
+
+ } FT_Open_Args;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_New_Face */
+ /* */
+ /* <Description> */
+ /* This function calls @FT_Open_Face to open a font by its pathname. */
+ /* */
+ /* <InOut> */
+ /* library :: A handle to the library resource. */
+ /* */
+ /* <Input> */
+ /* pathname :: A path to the font file. */
+ /* */
+ /* face_index :: The index of the face within the font. The first */
+ /* face has index 0. */
+ /* */
+ /* <Output> */
+ /* aface :: A handle to a new face object. If `face_index' is */
+ /* greater than or equal to zero, it must be non-NULL. */
+ /* See @FT_Open_Face for more details. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_New_Face( FT_Library library,
+ const char* filepathname,
+ FT_Long face_index,
+ FT_Face *aface );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_New_Memory_Face */
+ /* */
+ /* <Description> */
+ /* This function calls @FT_Open_Face to open a font which has been */
+ /* loaded into memory. */
+ /* */
+ /* <InOut> */
+ /* library :: A handle to the library resource. */
+ /* */
+ /* <Input> */
+ /* file_base :: A pointer to the beginning of the font data. */
+ /* */
+ /* file_size :: The size of the memory chunk used by the font data. */
+ /* */
+ /* face_index :: The index of the face within the font. The first */
+ /* face has index 0. */
+ /* */
+ /* <Output> */
+ /* aface :: A handle to a new face object. If `face_index' is */
+ /* greater than or equal to zero, it must be non-NULL. */
+ /* See @FT_Open_Face for more details. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ /* <Note> */
+ /* You must not deallocate the memory before calling @FT_Done_Face. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_New_Memory_Face( FT_Library library,
+ const FT_Byte* file_base,
+ FT_Long file_size,
+ FT_Long face_index,
+ FT_Face *aface );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Open_Face */
+ /* */
+ /* <Description> */
+ /* Create a face object from a given resource described by */
+ /* @FT_Open_Args. */
+ /* */
+ /* <InOut> */
+ /* library :: A handle to the library resource. */
+ /* */
+ /* <Input> */
+ /* args :: A pointer to an `FT_Open_Args' structure which must */
+ /* be filled by the caller. */
+ /* */
+ /* face_index :: The index of the face within the font. The first */
+ /* face has index 0. */
+ /* */
+ /* <Output> */
+ /* aface :: A handle to a new face object. If `face_index' is */
+ /* greater than or equal to zero, it must be non-NULL. */
+ /* See note below. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ /* <Note> */
+ /* Unlike FreeType 1.x, this function automatically creates a glyph */
+ /* slot for the face object which can be accessed directly through */
+ /* `face->glyph'. */
+ /* */
+ /* FT_Open_Face can be used to quickly check whether the font */
+ /* format of a given font resource is supported by FreeType. If the */
+ /* `face_index' field is negative, the function's return value is 0 */
+ /* if the font format is recognized, or non-zero otherwise; */
+ /* the function returns a more or less empty face handle in `*aface' */
+ /* (if `aface' isn't NULL). The only useful field in this special */
+ /* case is `face->num_faces' which gives the number of faces within */
+ /* the font file. After examination, the returned @FT_Face structure */
+ /* should be deallocated with a call to @FT_Done_Face. */
+ /* */
+ /* Each new face object created with this function also owns a */
+ /* default @FT_Size object, accessible as `face->size'. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Open_Face( FT_Library library,
+ const FT_Open_Args* args,
+ FT_Long face_index,
+ FT_Face *aface );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Attach_File */
+ /* */
+ /* <Description> */
+ /* This function calls @FT_Attach_Stream to attach a file. */
+ /* */
+ /* <InOut> */
+ /* face :: The target face object. */
+ /* */
+ /* <Input> */
+ /* filepathname :: The pathname. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Attach_File( FT_Face face,
+ const char* filepathname );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Attach_Stream */
+ /* */
+ /* <Description> */
+ /* `Attach' data to a face object. Normally, this is used to read */
+ /* additional information for the face object. For example, you can */
+ /* attach an AFM file that comes with a Type 1 font to get the */
+ /* kerning values and other metrics. */
+ /* */
+ /* <InOut> */
+ /* face :: The target face object. */
+ /* */
+ /* <Input> */
+ /* parameters :: A pointer to @FT_Open_Args which must be filled by */
+ /* the caller. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ /* <Note> */
+ /* The meaning of the `attach' (i.e., what really happens when the */
+ /* new file is read) is not fixed by FreeType itself. It really */
+ /* depends on the font format (and thus the font driver). */
+ /* */
+ /* Client applications are expected to know what they are doing */
+ /* when invoking this function. Most drivers simply do not implement */
+ /* file attachments. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Attach_Stream( FT_Face face,
+ FT_Open_Args* parameters );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Done_Face */
+ /* */
+ /* <Description> */
+ /* Discard a given face object, as well as all of its child slots and */
+ /* sizes. */
+ /* */
+ /* <Input> */
+ /* face :: A handle to a target face object. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Done_Face( FT_Face face );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Select_Size */
+ /* */
+ /* <Description> */
+ /* Select a bitmap strike. */
+ /* */
+ /* <InOut> */
+ /* face :: A handle to a target face object. */
+ /* */
+ /* <Input> */
+ /* strike_index :: The index of the bitmap strike in the */
+ /* `available_sizes' field of @FT_FaceRec structure. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Select_Size( FT_Face face,
+ FT_Int strike_index );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Enum> */
+ /* FT_Size_Request_Type */
+ /* */
+ /* <Description> */
+ /* An enumeration type that lists the supported size request types. */
+ /* */
+ /* <Values> */
+ /* FT_SIZE_REQUEST_TYPE_NOMINAL :: */
+ /* The nominal size. The `units_per_EM' field of @FT_FaceRec is */
+ /* used to determine both scaling values. */
+ /* */
+ /* FT_SIZE_REQUEST_TYPE_REAL_DIM :: */
+ /* The real dimension. The sum of the the `Ascender' and (minus */
+ /* of) the `Descender' fields of @FT_FaceRec are used to determine */
+ /* both scaling values. */
+ /* */
+ /* FT_SIZE_REQUEST_TYPE_BBOX :: */
+ /* The font bounding box. The width and height of the `bbox' field */
+ /* of @FT_FaceRec are used to determine the horizontal and vertical */
+ /* scaling value, respectively. */
+ /* */
+ /* FT_SIZE_REQUEST_TYPE_CELL :: */
+ /* The `max_advance_width' field of @FT_FaceRec is used to */
+ /* determine the horizontal scaling value; the vertical scaling */
+ /* value is determined the same way as */
+ /* @FT_SIZE_REQUEST_TYPE_REAL_DIM does. Finally, both scaling */
+ /* values are set to the smaller one. This type is useful if you */
+ /* want to specify the font size for, say, a window of a given */
+ /* dimension and 80x24 cells. */
+ /* */
+ /* FT_SIZE_REQUEST_TYPE_SCALES :: */
+ /* Specify the scaling values directly. */
+ /* */
+ /* <Note> */
+ /* The above descriptions only apply to scalable formats. For bitmap */
+ /* formats, the behaviour is up to the driver. */
+ /* */
+ /* See the note section of @FT_Size_Metrics if you wonder how size */
+ /* requesting relates to scaling values. */
+ /* */
+ typedef enum FT_Size_Request_Type_
+ {
+ FT_SIZE_REQUEST_TYPE_NOMINAL,
+ FT_SIZE_REQUEST_TYPE_REAL_DIM,
+ FT_SIZE_REQUEST_TYPE_BBOX,
+ FT_SIZE_REQUEST_TYPE_CELL,
+ FT_SIZE_REQUEST_TYPE_SCALES,
+
+ FT_SIZE_REQUEST_TYPE_MAX
+
+ } FT_Size_Request_Type;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_Size_RequestRec */
+ /* */
+ /* <Description> */
+ /* A structure used to model a size request. */
+ /* */
+ /* <Fields> */
+ /* type :: See @FT_Size_Request_Type. */
+ /* */
+ /* width :: The desired width. */
+ /* */
+ /* height :: The desired height. */
+ /* */
+ /* horiResolution :: The horizontal resolution. If set to zero, */
+ /* `width' is treated as a 26.6 fractional pixel */
+ /* value. */
+ /* */
+ /* vertResolution :: The vertical resolution. If set to zero, */
+ /* `height' is treated as a 26.6 fractional pixel */
+ /* value. */
+ /* */
+ /* <Note> */
+ /* If `width' is zero, then the horizontal scaling value is set */
+ /* equal to the vertical scaling value, and vice versa. */
+ /* */
+ typedef struct FT_Size_RequestRec_
+ {
+ FT_Size_Request_Type type;
+ FT_Long width;
+ FT_Long height;
+ FT_UInt horiResolution;
+ FT_UInt vertResolution;
+
+ } FT_Size_RequestRec;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_Size_Request */
+ /* */
+ /* <Description> */
+ /* A handle to a size request structure. */
+ /* */
+ typedef struct FT_Size_RequestRec_ *FT_Size_Request;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Request_Size */
+ /* */
+ /* <Description> */
+ /* Resize the scale of the active @FT_Size object in a face. */
+ /* */
+ /* <InOut> */
+ /* face :: A handle to a target face object. */
+ /* */
+ /* <Input> */
+ /* req :: A pointer to a @FT_Size_RequestRec. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ /* <Note> */
+ /* Although drivers may select the bitmap strike matching the */
+ /* request, you should not rely on this if you intend to select a */
+ /* particular bitmap strike. Use @FT_Select_Size instead in that */
+ /* case. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Request_Size( FT_Face face,
+ FT_Size_Request req );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Set_Char_Size */
+ /* */
+ /* <Description> */
+ /* This function calls @FT_Request_Size to request the nominal size */
+ /* (in points). */
+ /* */
+ /* <InOut> */
+ /* face :: A handle to a target face object. */
+ /* */
+ /* <Input> */
+ /* char_width :: The nominal width, in 26.6 fractional points. */
+ /* */
+ /* char_height :: The nominal height, in 26.6 fractional points. */
+ /* */
+ /* horz_resolution :: The horizontal resolution in dpi. */
+ /* */
+ /* vert_resolution :: The vertical resolution in dpi. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ /* <Note> */
+ /* If either the character width or height is zero, it is set equal */
+ /* to the other value. */
+ /* */
+ /* If either the horizontal or vertical resolution is zero, it is set */
+ /* equal to the other value. */
+ /* */
+ /* A character width or height smaller than 1pt is set to 1pt; if */
+ /* both resolution values are zero, they are set to 72dpi. */
+ /* */
+
+ FT_EXPORT( FT_Error )
+ FT_Set_Char_Size( FT_Face face,
+ FT_F26Dot6 char_width,
+ FT_F26Dot6 char_height,
+ FT_UInt horz_resolution,
+ FT_UInt vert_resolution );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Set_Pixel_Sizes */
+ /* */
+ /* <Description> */
+ /* This function calls @FT_Request_Size to request the nominal size */
+ /* (in pixels). */
+ /* */
+ /* <InOut> */
+ /* face :: A handle to the target face object. */
+ /* */
+ /* <Input> */
+ /* pixel_width :: The nominal width, in pixels. */
+ /* */
+ /* pixel_height :: The nominal height, in pixels. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Set_Pixel_Sizes( FT_Face face,
+ FT_UInt pixel_width,
+ FT_UInt pixel_height );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Load_Glyph */
+ /* */
+ /* <Description> */
+ /* A function used to load a single glyph into the glyph slot of a */
+ /* face object. */
+ /* */
+ /* <InOut> */
+ /* face :: A handle to the target face object where the glyph */
+ /* is loaded. */
+ /* */
+ /* <Input> */
+ /* glyph_index :: The index of the glyph in the font file. For */
+ /* CID-keyed fonts (either in PS or in CFF format) */
+ /* this argument specifies the CID value. */
+ /* */
+ /* load_flags :: A flag indicating what to load for this glyph. The */
+ /* @FT_LOAD_XXX constants can be used to control the */
+ /* glyph loading process (e.g., whether the outline */
+ /* should be scaled, whether to load bitmaps or not, */
+ /* whether to hint the outline, etc). */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ /* <Note> */
+ /* The loaded glyph may be transformed. See @FT_Set_Transform for */
+ /* the details. */
+ /* */
+ /* For subsetted CID-keyed fonts, `FT_Err_Invalid_Argument' is */
+ /* returned for invalid CID values (this is, for CID values which */
+ /* don't have a corresponding glyph in the font). See the discussion */
+ /* of the @FT_FACE_FLAG_CID_KEYED flag for more details. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Load_Glyph( FT_Face face,
+ FT_UInt glyph_index,
+ FT_Int32 load_flags );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Load_Char */
+ /* */
+ /* <Description> */
+ /* A function used to load a single glyph into the glyph slot of a */
+ /* face object, according to its character code. */
+ /* */
+ /* <InOut> */
+ /* face :: A handle to a target face object where the glyph */
+ /* is loaded. */
+ /* */
+ /* <Input> */
+ /* char_code :: The glyph's character code, according to the */
+ /* current charmap used in the face. */
+ /* */
+ /* load_flags :: A flag indicating what to load for this glyph. The */
+ /* @FT_LOAD_XXX constants can be used to control the */
+ /* glyph loading process (e.g., whether the outline */
+ /* should be scaled, whether to load bitmaps or not, */
+ /* whether to hint the outline, etc). */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ /* <Note> */
+ /* This function simply calls @FT_Get_Char_Index and @FT_Load_Glyph. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Load_Char( FT_Face face,
+ FT_ULong char_code,
+ FT_Int32 load_flags );
+
+
+ /*************************************************************************
+ *
+ * @enum:
+ * FT_LOAD_XXX
+ *
+ * @description:
+ * A list of bit-field constants used with @FT_Load_Glyph to indicate
+ * what kind of operations to perform during glyph loading.
+ *
+ * @values:
+ * FT_LOAD_DEFAULT ::
+ * Corresponding to 0, this value is used as the default glyph load
+ * operation. In this case, the following happens:
+ *
+ * 1. FreeType looks for a bitmap for the glyph corresponding to the
+ * face's current size. If one is found, the function returns.
+ * The bitmap data can be accessed from the glyph slot (see note
+ * below).
+ *
+ * 2. If no embedded bitmap is searched or found, FreeType looks for a
+ * scalable outline. If one is found, it is loaded from the font
+ * file, scaled to device pixels, then `hinted' to the pixel grid
+ * in order to optimize it. The outline data can be accessed from
+ * the glyph slot (see note below).
+ *
+ * Note that by default, the glyph loader doesn't render outlines into
+ * bitmaps. The following flags are used to modify this default
+ * behaviour to more specific and useful cases.
+ *
+ * FT_LOAD_NO_SCALE ::
+ * Don't scale the outline glyph loaded, but keep it in font units.
+ *
+ * This flag implies @FT_LOAD_NO_HINTING and @FT_LOAD_NO_BITMAP, and
+ * unsets @FT_LOAD_RENDER.
+ *
+ * FT_LOAD_NO_HINTING ::
+ * Disable hinting. This generally generates `blurrier' bitmap glyph
+ * when the glyph is rendered in any of the anti-aliased modes. See
+ * also the note below.
+ *
+ * This flag is implied by @FT_LOAD_NO_SCALE.
+ *
+ * FT_LOAD_RENDER ::
+ * Call @FT_Render_Glyph after the glyph is loaded. By default, the
+ * glyph is rendered in @FT_RENDER_MODE_NORMAL mode. This can be
+ * overridden by @FT_LOAD_TARGET_XXX or @FT_LOAD_MONOCHROME.
+ *
+ * This flag is unset by @FT_LOAD_NO_SCALE.
+ *
+ * FT_LOAD_NO_BITMAP ::
+ * Ignore bitmap strikes when loading. Bitmap-only fonts ignore this
+ * flag.
+ *
+ * @FT_LOAD_NO_SCALE always sets this flag.
+ *
+ * FT_LOAD_VERTICAL_LAYOUT ::
+ * Load the glyph for vertical text layout. _Don't_ use it as it is
+ * problematic currently.
+ *
+ * FT_LOAD_FORCE_AUTOHINT ::
+ * Indicates that the auto-hinter is preferred over the font's native
+ * hinter. See also the note below.
+ *
+ * FT_LOAD_CROP_BITMAP ::
+ * Indicates that the font driver should crop the loaded bitmap glyph
+ * (i.e., remove all space around its black bits). Not all drivers
+ * implement this.
+ *
+ * FT_LOAD_PEDANTIC ::
+ * Indicates that the font driver should perform pedantic verifications
+ * during glyph loading. This is mostly used to detect broken glyphs
+ * in fonts. By default, FreeType tries to handle broken fonts also.
+ *
+ * FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH ::
+ * Indicates that the font driver should ignore the global advance
+ * width defined in the font. By default, that value is used as the
+ * advance width for all glyphs when the face has
+ * @FT_FACE_FLAG_FIXED_WIDTH set.
+ *
+ * This flag exists for historical reasons (to support buggy CJK
+ * fonts).
+ *
+ * FT_LOAD_NO_RECURSE ::
+ * This flag is only used internally. It merely indicates that the
+ * font driver should not load composite glyphs recursively. Instead,
+ * it should set the `num_subglyph' and `subglyphs' values of the
+ * glyph slot accordingly, and set `glyph->format' to
+ * @FT_GLYPH_FORMAT_COMPOSITE.
+ *
+ * The description of sub-glyphs is not available to client
+ * applications for now.
+ *
+ * This flag implies @FT_LOAD_NO_SCALE and @FT_LOAD_IGNORE_TRANSFORM.
+ *
+ * FT_LOAD_IGNORE_TRANSFORM ::
+ * Indicates that the transform matrix set by @FT_Set_Transform should
+ * be ignored.
+ *
+ * FT_LOAD_MONOCHROME ::
+ * This flag is used with @FT_LOAD_RENDER to indicate that you want to
+ * render an outline glyph to a 1-bit monochrome bitmap glyph, with
+ * 8 pixels packed into each byte of the bitmap data.
+ *
+ * Note that this has no effect on the hinting algorithm used. You
+ * should use @FT_LOAD_TARGET_MONO instead so that the
+ * monochrome-optimized hinting algorithm is used.
+ *
+ * FT_LOAD_LINEAR_DESIGN ::
+ * Indicates that the `linearHoriAdvance' and `linearVertAdvance'
+ * fields of @FT_GlyphSlotRec should be kept in font units. See
+ * @FT_GlyphSlotRec for details.
+ *
+ * FT_LOAD_NO_AUTOHINT ::
+ * Disable auto-hinter. See also the note below.
+ *
+ * @note:
+ * By default, hinting is enabled and the font's native hinter (see
+ * @FT_FACE_FLAG_HINTER) is preferred over the auto-hinter. You can
+ * disable hinting by setting @FT_LOAD_NO_HINTING or change the
+ * precedence by setting @FT_LOAD_FORCE_AUTOHINT. You can also set
+ * @FT_LOAD_NO_AUTOHINT in case you don't want the auto-hinter to be
+ * used at all.
+ *
+ * Besides deciding which hinter to use, you can also decide which
+ * hinting algorithm to use. See @FT_LOAD_TARGET_XXX for details.
+ */
+#define FT_LOAD_DEFAULT 0x0
+#define FT_LOAD_NO_SCALE 0x1
+#define FT_LOAD_NO_HINTING 0x2
+#define FT_LOAD_RENDER 0x4
+#define FT_LOAD_NO_BITMAP 0x8
+#define FT_LOAD_VERTICAL_LAYOUT 0x10
+#define FT_LOAD_FORCE_AUTOHINT 0x20
+#define FT_LOAD_CROP_BITMAP 0x40
+#define FT_LOAD_PEDANTIC 0x80
+#define FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH 0x200
+#define FT_LOAD_NO_RECURSE 0x400
+#define FT_LOAD_IGNORE_TRANSFORM 0x800
+#define FT_LOAD_MONOCHROME 0x1000
+#define FT_LOAD_LINEAR_DESIGN 0x2000
+#define FT_LOAD_SBITS_ONLY 0x4000 /* temporary hack! */
+#define FT_LOAD_NO_AUTOHINT 0x8000U
+
+ /* */
+
+
+ /**************************************************************************
+ *
+ * @enum:
+ * FT_LOAD_TARGET_XXX
+ *
+ * @description:
+ * A list of values that are used to select a specific hinting algorithm
+ * to use by the hinter. You should OR one of these values to your
+ * `load_flags' when calling @FT_Load_Glyph.
+ *
+ * Note that font's native hinters may ignore the hinting algorithm you
+ * have specified (e.g., the TrueType bytecode interpreter). You can set
+ * @FT_LOAD_FORCE_AUTOHINT to ensure that the auto-hinter is used.
+ *
+ * Also note that @FT_LOAD_TARGET_LIGHT is an exception, in that it
+ * always implies @FT_LOAD_FORCE_AUTOHINT.
+ *
+ * @values:
+ * FT_LOAD_TARGET_NORMAL ::
+ * This corresponds to the default hinting algorithm, optimized for
+ * standard gray-level rendering. For monochrome output, use
+ * @FT_LOAD_TARGET_MONO instead.
+ *
+ * FT_LOAD_TARGET_LIGHT ::
+ * A lighter hinting algorithm for non-monochrome modes. Many
+ * generated glyphs are more fuzzy but better resemble its original
+ * shape. A bit like rendering on Mac OS X.
+ *
+ * As a special exception, this target implies @FT_LOAD_FORCE_AUTOHINT.
+ *
+ * FT_LOAD_TARGET_MONO ::
+ * Strong hinting algorithm that should only be used for monochrome
+ * output. The result is probably unpleasant if the glyph is rendered
+ * in non-monochrome modes.
+ *
+ * FT_LOAD_TARGET_LCD ::
+ * A variant of @FT_LOAD_TARGET_NORMAL optimized for horizontally
+ * decimated LCD displays.
+ *
+ * FT_LOAD_TARGET_LCD_V ::
+ * A variant of @FT_LOAD_TARGET_NORMAL optimized for vertically
+ * decimated LCD displays.
+ *
+ * @note:
+ * You should use only _one_ of the FT_LOAD_TARGET_XXX values in your
+ * `load_flags'. They can't be ORed.
+ *
+ * If @FT_LOAD_RENDER is also set, the glyph is rendered in the
+ * corresponding mode (i.e., the mode which matches the used algorithm
+ * best) unless @FT_LOAD_MONOCHROME is set.
+ *
+ * You can use a hinting algorithm that doesn't correspond to the same
+ * rendering mode. As an example, it is possible to use the `light'
+ * hinting algorithm and have the results rendered in horizontal LCD
+ * pixel mode, with code like
+ *
+ * {
+ * FT_Load_Glyph( face, glyph_index,
+ * load_flags | FT_LOAD_TARGET_LIGHT );
+ *
+ * FT_Render_Glyph( face->glyph, FT_RENDER_MODE_LCD );
+ * }
+ */
+
+#define FT_LOAD_TARGET_( x ) ( (FT_Int32)( (x) & 15 ) << 16 )
+
+#define FT_LOAD_TARGET_NORMAL FT_LOAD_TARGET_( FT_RENDER_MODE_NORMAL )
+#define FT_LOAD_TARGET_LIGHT FT_LOAD_TARGET_( FT_RENDER_MODE_LIGHT )
+#define FT_LOAD_TARGET_MONO FT_LOAD_TARGET_( FT_RENDER_MODE_MONO )
+#define FT_LOAD_TARGET_LCD FT_LOAD_TARGET_( FT_RENDER_MODE_LCD )
+#define FT_LOAD_TARGET_LCD_V FT_LOAD_TARGET_( FT_RENDER_MODE_LCD_V )
+
+
+ /**************************************************************************
+ *
+ * @macro:
+ * FT_LOAD_TARGET_MODE
+ *
+ * @description:
+ * Return the @FT_Render_Mode corresponding to a given
+ * @FT_LOAD_TARGET_XXX value.
+ *
+ */
+
+#define FT_LOAD_TARGET_MODE( x ) ( (FT_Render_Mode)( ( (x) >> 16 ) & 15 ) )
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Set_Transform */
+ /* */
+ /* <Description> */
+ /* A function used to set the transformation that is applied to glyph */
+ /* images when they are loaded into a glyph slot through */
+ /* @FT_Load_Glyph. */
+ /* */
+ /* <InOut> */
+ /* face :: A handle to the source face object. */
+ /* */
+ /* <Input> */
+ /* matrix :: A pointer to the transformation's 2x2 matrix. Use 0 for */
+ /* the identity matrix. */
+ /* delta :: A pointer to the translation vector. Use 0 for the null */
+ /* vector. */
+ /* */
+ /* <Note> */
+ /* The transformation is only applied to scalable image formats after */
+ /* the glyph has been loaded. It means that hinting is unaltered by */
+ /* the transformation and is performed on the character size given in */
+ /* the last call to @FT_Set_Char_Size or @FT_Set_Pixel_Sizes. */
+ /* */
+ /* Note that this also transforms the `face.glyph.advance' field, but */
+ /* *not* the values in `face.glyph.metrics'. */
+ /* */
+ FT_EXPORT( void )
+ FT_Set_Transform( FT_Face face,
+ FT_Matrix* matrix,
+ FT_Vector* delta );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Enum> */
+ /* FT_Render_Mode */
+ /* */
+ /* <Description> */
+ /* An enumeration type that lists the render modes supported by */
+ /* FreeType 2. Each mode corresponds to a specific type of scanline */
+ /* conversion performed on the outline. */
+ /* */
+ /* For bitmap fonts the `bitmap->pixel_mode' field in the */
+ /* @FT_GlyphSlotRec structure gives the format of the returned */
+ /* bitmap. */
+ /* */
+ /* <Values> */
+ /* FT_RENDER_MODE_NORMAL :: */
+ /* This is the default render mode; it corresponds to 8-bit */
+ /* anti-aliased bitmaps, using 256 levels of opacity. */
+ /* */
+ /* FT_RENDER_MODE_LIGHT :: */
+ /* This is equivalent to @FT_RENDER_MODE_NORMAL. It is only */
+ /* defined as a separate value because render modes are also used */
+ /* indirectly to define hinting algorithm selectors. See */
+ /* @FT_LOAD_TARGET_XXX for details. */
+ /* */
+ /* FT_RENDER_MODE_MONO :: */
+ /* This mode corresponds to 1-bit bitmaps. */
+ /* */
+ /* FT_RENDER_MODE_LCD :: */
+ /* This mode corresponds to horizontal RGB and BGR sub-pixel */
+ /* displays, like LCD-screens. It produces 8-bit bitmaps that are */
+ /* 3 times the width of the original glyph outline in pixels, and */
+ /* which use the @FT_PIXEL_MODE_LCD mode. */
+ /* */
+ /* FT_RENDER_MODE_LCD_V :: */
+ /* This mode corresponds to vertical RGB and BGR sub-pixel displays */
+ /* (like PDA screens, rotated LCD displays, etc.). It produces */
+ /* 8-bit bitmaps that are 3 times the height of the original */
+ /* glyph outline in pixels and use the @FT_PIXEL_MODE_LCD_V mode. */
+ /* */
+ /* <Note> */
+ /* The LCD-optimized glyph bitmaps produced by FT_Render_Glyph can be */
+ /* filtered to reduce color-fringes by using @FT_Library_SetLcdFilter */
+ /* (not active in the default builds). It is up to the caller to */
+ /* either call @FT_Library_SetLcdFilter (if available) or do the */
+ /* filtering itself. */
+ /* */
+ typedef enum FT_Render_Mode_
+ {
+ FT_RENDER_MODE_NORMAL = 0,
+ FT_RENDER_MODE_LIGHT,
+ FT_RENDER_MODE_MONO,
+ FT_RENDER_MODE_LCD,
+ FT_RENDER_MODE_LCD_V,
+
+ FT_RENDER_MODE_MAX
+
+ } FT_Render_Mode;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Enum> */
+ /* ft_render_mode_xxx */
+ /* */
+ /* <Description> */
+ /* These constants are deprecated. Use the corresponding */
+ /* @FT_Render_Mode values instead. */
+ /* */
+ /* <Values> */
+ /* ft_render_mode_normal :: see @FT_RENDER_MODE_NORMAL */
+ /* ft_render_mode_mono :: see @FT_RENDER_MODE_MONO */
+ /* */
+#define ft_render_mode_normal FT_RENDER_MODE_NORMAL
+#define ft_render_mode_mono FT_RENDER_MODE_MONO
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Render_Glyph */
+ /* */
+ /* <Description> */
+ /* Convert a given glyph image to a bitmap. It does so by inspecting */
+ /* the glyph image format, finding the relevant renderer, and */
+ /* invoking it. */
+ /* */
+ /* <InOut> */
+ /* slot :: A handle to the glyph slot containing the image to */
+ /* convert. */
+ /* */
+ /* <Input> */
+ /* render_mode :: This is the render mode used to render the glyph */
+ /* image into a bitmap. See @FT_Render_Mode for a */
+ /* list of possible values. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Render_Glyph( FT_GlyphSlot slot,
+ FT_Render_Mode render_mode );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Enum> */
+ /* FT_Kerning_Mode */
+ /* */
+ /* <Description> */
+ /* An enumeration used to specify which kerning values to return in */
+ /* @FT_Get_Kerning. */
+ /* */
+ /* <Values> */
+ /* FT_KERNING_DEFAULT :: Return scaled and grid-fitted kerning */
+ /* distances (value is 0). */
+ /* */
+ /* FT_KERNING_UNFITTED :: Return scaled but un-grid-fitted kerning */
+ /* distances. */
+ /* */
+ /* FT_KERNING_UNSCALED :: Return the kerning vector in original font */
+ /* units. */
+ /* */
+ typedef enum FT_Kerning_Mode_
+ {
+ FT_KERNING_DEFAULT = 0,
+ FT_KERNING_UNFITTED,
+ FT_KERNING_UNSCALED
+
+ } FT_Kerning_Mode;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Const> */
+ /* ft_kerning_default */
+ /* */
+ /* <Description> */
+ /* This constant is deprecated. Please use @FT_KERNING_DEFAULT */
+ /* instead. */
+ /* */
+#define ft_kerning_default FT_KERNING_DEFAULT
+
+
+ /*************************************************************************/
+ /* */
+ /* <Const> */
+ /* ft_kerning_unfitted */
+ /* */
+ /* <Description> */
+ /* This constant is deprecated. Please use @FT_KERNING_UNFITTED */
+ /* instead. */
+ /* */
+#define ft_kerning_unfitted FT_KERNING_UNFITTED
+
+
+ /*************************************************************************/
+ /* */
+ /* <Const> */
+ /* ft_kerning_unscaled */
+ /* */
+ /* <Description> */
+ /* This constant is deprecated. Please use @FT_KERNING_UNSCALED */
+ /* instead. */
+ /* */
+#define ft_kerning_unscaled FT_KERNING_UNSCALED
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Get_Kerning */
+ /* */
+ /* <Description> */
+ /* Return the kerning vector between two glyphs of a same face. */
+ /* */
+ /* <Input> */
+ /* face :: A handle to a source face object. */
+ /* */
+ /* left_glyph :: The index of the left glyph in the kern pair. */
+ /* */
+ /* right_glyph :: The index of the right glyph in the kern pair. */
+ /* */
+ /* kern_mode :: See @FT_Kerning_Mode for more information. */
+ /* Determines the scale and dimension of the returned */
+ /* kerning vector. */
+ /* */
+ /* <Output> */
+ /* akerning :: The kerning vector. This is either in font units */
+ /* or in pixels (26.6 format) for scalable formats, */
+ /* and in pixels for fixed-sizes formats. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ /* <Note> */
+ /* Only horizontal layouts (left-to-right & right-to-left) are */
+ /* supported by this method. Other layouts, or more sophisticated */
+ /* kernings, are out of the scope of this API function -- they can be */
+ /* implemented through format-specific interfaces. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Get_Kerning( FT_Face face,
+ FT_UInt left_glyph,
+ FT_UInt right_glyph,
+ FT_UInt kern_mode,
+ FT_Vector *akerning );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Get_Track_Kerning */
+ /* */
+ /* <Description> */
+ /* Return the track kerning for a given face object at a given size. */
+ /* */
+ /* <Input> */
+ /* face :: A handle to a source face object. */
+ /* */
+ /* point_size :: The point size in 16.16 fractional points. */
+ /* */
+ /* degree :: The degree of tightness. */
+ /* */
+ /* <Output> */
+ /* akerning :: The kerning in 16.16 fractional points. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Get_Track_Kerning( FT_Face face,
+ FT_Fixed point_size,
+ FT_Int degree,
+ FT_Fixed* akerning );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Get_Glyph_Name */
+ /* */
+ /* <Description> */
+ /* Retrieve the ASCII name of a given glyph in a face. This only */
+ /* works for those faces where @FT_HAS_GLYPH_NAMES(face) returns 1. */
+ /* */
+ /* <Input> */
+ /* face :: A handle to a source face object. */
+ /* */
+ /* glyph_index :: The glyph index. */
+ /* */
+ /* buffer_max :: The maximal number of bytes available in the */
+ /* buffer. */
+ /* */
+ /* <Output> */
+ /* buffer :: A pointer to a target buffer where the name is */
+ /* copied to. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ /* <Note> */
+ /* An error is returned if the face doesn't provide glyph names or if */
+ /* the glyph index is invalid. In all cases of failure, the first */
+ /* byte of `buffer' is set to 0 to indicate an empty name. */
+ /* */
+ /* The glyph name is truncated to fit within the buffer if it is too */
+ /* long. The returned string is always zero-terminated. */
+ /* */
+ /* This function is not compiled within the library if the config */
+ /* macro `FT_CONFIG_OPTION_NO_GLYPH_NAMES' is defined in */
+ /* `include/freetype/config/ftoptions.h'. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Get_Glyph_Name( FT_Face face,
+ FT_UInt glyph_index,
+ FT_Pointer buffer,
+ FT_UInt buffer_max );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Get_Postscript_Name */
+ /* */
+ /* <Description> */
+ /* Retrieve the ASCII Postscript name of a given face, if available. */
+ /* This only works with Postscript and TrueType fonts. */
+ /* */
+ /* <Input> */
+ /* face :: A handle to the source face object. */
+ /* */
+ /* <Return> */
+ /* A pointer to the face's Postscript name. NULL if unavailable. */
+ /* */
+ /* <Note> */
+ /* The returned pointer is owned by the face and is destroyed with */
+ /* it. */
+ /* */
+ FT_EXPORT( const char* )
+ FT_Get_Postscript_Name( FT_Face face );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Select_Charmap */
+ /* */
+ /* <Description> */
+ /* Select a given charmap by its encoding tag (as listed in */
+ /* `freetype.h'). */
+ /* */
+ /* <InOut> */
+ /* face :: A handle to the source face object. */
+ /* */
+ /* <Input> */
+ /* encoding :: A handle to the selected encoding. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ /* <Note> */
+ /* This function returns an error if no charmap in the face */
+ /* corresponds to the encoding queried here. */
+ /* */
+ /* Because many fonts contain more than a single cmap for Unicode */
+ /* encoding, this function has some special code to select the one */
+ /* which covers Unicode best (`best' in the sense that a UCS-4 cmap */
+ /* is preferred to a UCS-2 cmap). It is thus preferable to */
+ /* @FT_Set_Charmap in this case. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Select_Charmap( FT_Face face,
+ FT_Encoding encoding );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Set_Charmap */
+ /* */
+ /* <Description> */
+ /* Select a given charmap for character code to glyph index mapping. */
+ /* */
+ /* <InOut> */
+ /* face :: A handle to the source face object. */
+ /* */
+ /* <Input> */
+ /* charmap :: A handle to the selected charmap. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ /* <Note> */
+ /* This function returns an error if the charmap is not part of */
+ /* the face (i.e., if it is not listed in the `face->charmaps' */
+ /* table). */
+ /* */
+ /* It also fails if a type 14 charmap is selected. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Set_Charmap( FT_Face face,
+ FT_CharMap charmap );
+
+
+ /*************************************************************************
+ *
+ * @function:
+ * FT_Get_Charmap_Index
+ *
+ * @description:
+ * Retrieve index of a given charmap.
+ *
+ * @input:
+ * charmap ::
+ * A handle to a charmap.
+ *
+ * @return:
+ * The index into the array of character maps within the face to which
+ * `charmap' belongs.
+ *
+ */
+ FT_EXPORT( FT_Int )
+ FT_Get_Charmap_Index( FT_CharMap charmap );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Get_Char_Index */
+ /* */
+ /* <Description> */
+ /* Return the glyph index of a given character code. This function */
+ /* uses a charmap object to do the mapping. */
+ /* */
+ /* <Input> */
+ /* face :: A handle to the source face object. */
+ /* */
+ /* charcode :: The character code. */
+ /* */
+ /* <Return> */
+ /* The glyph index. 0 means `undefined character code'. */
+ /* */
+ /* <Note> */
+ /* If you use FreeType to manipulate the contents of font files */
+ /* directly, be aware that the glyph index returned by this function */
+ /* doesn't always correspond to the internal indices used within */
+ /* the file. This is done to ensure that value 0 always corresponds */
+ /* to the `missing glyph'. */
+ /* */
+ FT_EXPORT( FT_UInt )
+ FT_Get_Char_Index( FT_Face face,
+ FT_ULong charcode );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Get_First_Char */
+ /* */
+ /* <Description> */
+ /* This function is used to return the first character code in the */
+ /* current charmap of a given face. It also returns the */
+ /* corresponding glyph index. */
+ /* */
+ /* <Input> */
+ /* face :: A handle to the source face object. */
+ /* */
+ /* <Output> */
+ /* agindex :: Glyph index of first character code. 0 if charmap is */
+ /* empty. */
+ /* */
+ /* <Return> */
+ /* The charmap's first character code. */
+ /* */
+ /* <Note> */
+ /* You should use this function with @FT_Get_Next_Char to be able to */
+ /* parse all character codes available in a given charmap. The code */
+ /* should look like this: */
+ /* */
+ /* { */
+ /* FT_ULong charcode; */
+ /* FT_UInt gindex; */
+ /* */
+ /* */
+ /* charcode = FT_Get_First_Char( face, &gindex ); */
+ /* while ( gindex != 0 ) */
+ /* { */
+ /* ... do something with (charcode,gindex) pair ... */
+ /* */
+ /* charcode = FT_Get_Next_Char( face, charcode, &gindex ); */
+ /* } */
+ /* } */
+ /* */
+ /* Note that `*agindex' is set to 0 if the charmap is empty. The */
+ /* result itself can be 0 in two cases: if the charmap is empty or */
+ /* when the value 0 is the first valid character code. */
+ /* */
+ FT_EXPORT( FT_ULong )
+ FT_Get_First_Char( FT_Face face,
+ FT_UInt *agindex );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Get_Next_Char */
+ /* */
+ /* <Description> */
+ /* This function is used to return the next character code in the */
+ /* current charmap of a given face following the value `char_code', */
+ /* as well as the corresponding glyph index. */
+ /* */
+ /* <Input> */
+ /* face :: A handle to the source face object. */
+ /* char_code :: The starting character code. */
+ /* */
+ /* <Output> */
+ /* agindex :: Glyph index of first character code. 0 if charmap */
+ /* is empty. */
+ /* */
+ /* <Return> */
+ /* The charmap's next character code. */
+ /* */
+ /* <Note> */
+ /* You should use this function with @FT_Get_First_Char to walk */
+ /* over all character codes available in a given charmap. See the */
+ /* note for this function for a simple code example. */
+ /* */
+ /* Note that `*agindex' is set to 0 when there are no more codes in */
+ /* the charmap. */
+ /* */
+ FT_EXPORT( FT_ULong )
+ FT_Get_Next_Char( FT_Face face,
+ FT_ULong char_code,
+ FT_UInt *agindex );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Get_Name_Index */
+ /* */
+ /* <Description> */
+ /* Return the glyph index of a given glyph name. This function uses */
+ /* driver specific objects to do the translation. */
+ /* */
+ /* <Input> */
+ /* face :: A handle to the source face object. */
+ /* */
+ /* glyph_name :: The glyph name. */
+ /* */
+ /* <Return> */
+ /* The glyph index. 0 means `undefined character code'. */
+ /* */
+ FT_EXPORT( FT_UInt )
+ FT_Get_Name_Index( FT_Face face,
+ FT_String* glyph_name );
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_SUBGLYPH_FLAG_XXX
+ *
+ * @description:
+ * A list of constants used to describe subglyphs. Please refer to the
+ * TrueType specification for the meaning of the various flags.
+ *
+ * @values:
+ * FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS ::
+ * FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES ::
+ * FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID ::
+ * FT_SUBGLYPH_FLAG_SCALE ::
+ * FT_SUBGLYPH_FLAG_XY_SCALE ::
+ * FT_SUBGLYPH_FLAG_2X2 ::
+ * FT_SUBGLYPH_FLAG_USE_MY_METRICS ::
+ *
+ */
+#define FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS 1
+#define FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES 2
+#define FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID 4
+#define FT_SUBGLYPH_FLAG_SCALE 8
+#define FT_SUBGLYPH_FLAG_XY_SCALE 0x40
+#define FT_SUBGLYPH_FLAG_2X2 0x80
+#define FT_SUBGLYPH_FLAG_USE_MY_METRICS 0x200
+
+
+ /*************************************************************************
+ *
+ * @func:
+ * FT_Get_SubGlyph_Info
+ *
+ * @description:
+ * Retrieve a description of a given subglyph. Only use it if
+ * `glyph->format' is @FT_GLYPH_FORMAT_COMPOSITE, or an error is
+ * returned.
+ *
+ * @input:
+ * glyph ::
+ * The source glyph slot.
+ *
+ * sub_index ::
+ * The index of subglyph. Must be less than `glyph->num_subglyphs'.
+ *
+ * @output:
+ * p_index ::
+ * The glyph index of the subglyph.
+ *
+ * p_flags ::
+ * The subglyph flags, see @FT_SUBGLYPH_FLAG_XXX.
+ *
+ * p_arg1 ::
+ * The subglyph's first argument (if any).
+ *
+ * p_arg2 ::
+ * The subglyph's second argument (if any).
+ *
+ * p_transform ::
+ * The subglyph transformation (if any).
+ *
+ * @return:
+ * FreeType error code. 0 means success.
+ *
+ * @note:
+ * The values of `*p_arg1', `*p_arg2', and `*p_transform' must be
+ * interpreted depending on the flags returned in `*p_flags'. See the
+ * TrueType specification for details.
+ *
+ */
+ FT_EXPORT( FT_Error )
+ FT_Get_SubGlyph_Info( FT_GlyphSlot glyph,
+ FT_UInt sub_index,
+ FT_Int *p_index,
+ FT_UInt *p_flags,
+ FT_Int *p_arg1,
+ FT_Int *p_arg2,
+ FT_Matrix *p_transform );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* glyph_variants */
+ /* */
+ /* <Title> */
+ /* Glyph Variants */
+ /* */
+ /* <Abstract> */
+ /* The FreeType 2 interface to Unicode Ideographic Variation */
+ /* Sequences (IVS), using the SFNT cmap format 14. */
+ /* */
+ /* <Description> */
+ /* Many CJK characters have variant forms. They are a sort of grey */
+ /* area somewhere between being totally irrelevant and semantically */
+ /* distinct; for this reason, the Unicode consortium decided to */
+ /* introduce Ideographic Variation Sequences (IVS), consisting of a */
+ /* Unicode base character and one of 240 variant selectors */
+ /* (U+E0100-U+E01EF), instead of further extending the already huge */
+ /* code range for CJK characters. */
+ /* */
+ /* An IVS is registered and unique; for further details please refer */
+ /* to Unicode Technical Report #37, the Ideographic Variation */
+ /* Database. To date (October 2007), the character with the most */
+ /* variants is U+908A, having 8 such IVS. */
+ /* */
+ /* Adobe and MS decided to support IVS with a new cmap subtable */
+ /* (format 14). It is an odd subtable because it is not a mapping of */
+ /* input code points to glyphs, but contains lists of all variants */
+ /* supported by the font. */
+ /* */
+ /* A variant may be either `default' or `non-default'. A default */
+ /* variant is the one you will get for that code point if you look it */
+ /* up in the standard Unicode cmap. A non-default variant is a */
+ /* different glyph. */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Face_GetCharVariantIndex */
+ /* */
+ /* <Description> */
+ /* Return the glyph index of a given character code as modified by */
+ /* the variation selector. */
+ /* */
+ /* <Input> */
+ /* face :: */
+ /* A handle to the source face object. */
+ /* */
+ /* charcode :: */
+ /* The character code point in Unicode. */
+ /* */
+ /* variantSelector :: */
+ /* The Unicode code point of the variation selector. */
+ /* */
+ /* <Return> */
+ /* The glyph index. 0 means either `undefined character code', or */
+ /* `undefined selector code', or `no variation selector cmap */
+ /* subtable', or `current CharMap is not Unicode'. */
+ /* */
+ /* <Note> */
+ /* If you use FreeType to manipulate the contents of font files */
+ /* directly, be aware that the glyph index returned by this function */
+ /* doesn't always correspond to the internal indices used within */
+ /* the file. This is done to ensure that value 0 always corresponds */
+ /* to the `missing glyph'. */
+ /* */
+ /* This function is only meaningful if */
+ /* a) the font has a variation selector cmap sub table, */
+ /* and */
+ /* b) the current charmap has a Unicode encoding. */
+ /* */
+ /* <Since> */
+ /* 2.3.6 */
+ /* */
+ FT_EXPORT( FT_UInt )
+ FT_Face_GetCharVariantIndex( FT_Face face,
+ FT_ULong charcode,
+ FT_ULong variantSelector );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Face_GetCharVariantIsDefault */
+ /* */
+ /* <Description> */
+ /* Check whether this variant of this Unicode character is the one to */
+ /* be found in the `cmap'. */
+ /* */
+ /* <Input> */
+ /* face :: */
+ /* A handle to the source face object. */
+ /* */
+ /* charcode :: */
+ /* The character codepoint in Unicode. */
+ /* */
+ /* variantSelector :: */
+ /* The Unicode codepoint of the variation selector. */
+ /* */
+ /* <Return> */
+ /* 1 if found in the standard (Unicode) cmap, 0 if found in the */
+ /* variation selector cmap, or -1 if it is not a variant. */
+ /* */
+ /* <Note> */
+ /* This function is only meaningful if the font has a variation */
+ /* selector cmap subtable. */
+ /* */
+ /* <Since> */
+ /* 2.3.6 */
+ /* */
+ FT_EXPORT( FT_Int )
+ FT_Face_GetCharVariantIsDefault( FT_Face face,
+ FT_ULong charcode,
+ FT_ULong variantSelector );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Face_GetVariantSelectors */
+ /* */
+ /* <Description> */
+ /* Return a zero-terminated list of Unicode variant selectors found */
+ /* in the font. */
+ /* */
+ /* <Input> */
+ /* face :: */
+ /* A handle to the source face object. */
+ /* */
+ /* <Return> */
+ /* A pointer to an array of selector code points, or NULL if there is */
+ /* no valid variant selector cmap subtable. */
+ /* */
+ /* <Note> */
+ /* The last item in the array is 0; the array is owned by the */
+ /* @FT_Face object but can be overwritten or released on the next */
+ /* call to a FreeType function. */
+ /* */
+ /* <Since> */
+ /* 2.3.6 */
+ /* */
+ FT_EXPORT( FT_UInt32* )
+ FT_Face_GetVariantSelectors( FT_Face face );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Face_GetVariantsOfChar */
+ /* */
+ /* <Description> */
+ /* Return a zero-terminated list of Unicode variant selectors found */
+ /* for the specified character code. */
+ /* */
+ /* <Input> */
+ /* face :: */
+ /* A handle to the source face object. */
+ /* */
+ /* charcode :: */
+ /* The character codepoint in Unicode. */
+ /* */
+ /* <Return> */
+ /* A pointer to an array of variant selector code points which are */
+ /* active for the given character, or NULL if the corresponding list */
+ /* is empty. */
+ /* */
+ /* <Note> */
+ /* The last item in the array is 0; the array is owned by the */
+ /* @FT_Face object but can be overwritten or released on the next */
+ /* call to a FreeType function. */
+ /* */
+ /* <Since> */
+ /* 2.3.6 */
+ /* */
+ FT_EXPORT( FT_UInt32* )
+ FT_Face_GetVariantsOfChar( FT_Face face,
+ FT_ULong charcode );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Face_GetCharsOfVariant */
+ /* */
+ /* <Description> */
+ /* Return a zero-terminated list of Unicode character codes found for */
+ /* the specified variant selector. */
+ /* */
+ /* <Input> */
+ /* face :: */
+ /* A handle to the source face object. */
+ /* */
+ /* variantSelector :: */
+ /* The variant selector code point in Unicode. */
+ /* */
+ /* <Return> */
+ /* A list of all the code points which are specified by this selector */
+ /* (both default and non-default codes are returned) or NULL if there */
+ /* is no valid cmap or the variant selector is invalid. */
+ /* */
+ /* <Note> */
+ /* The last item in the array is 0; the array is owned by the */
+ /* @FT_Face object but can be overwritten or released on the next */
+ /* call to a FreeType function. */
+ /* */
+ /* <Since> */
+ /* 2.3.6 */
+ /* */
+ FT_EXPORT( FT_UInt32* )
+ FT_Face_GetCharsOfVariant( FT_Face face,
+ FT_ULong variantSelector );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* computations */
+ /* */
+ /* <Title> */
+ /* Computations */
+ /* */
+ /* <Abstract> */
+ /* Crunching fixed numbers and vectors. */
+ /* */
+ /* <Description> */
+ /* This section contains various functions used to perform */
+ /* computations on 16.16 fixed-float numbers or 2d vectors. */
+ /* */
+ /* <Order> */
+ /* FT_MulDiv */
+ /* FT_MulFix */
+ /* FT_DivFix */
+ /* FT_RoundFix */
+ /* FT_CeilFix */
+ /* FT_FloorFix */
+ /* FT_Vector_Transform */
+ /* FT_Matrix_Multiply */
+ /* FT_Matrix_Invert */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_MulDiv */
+ /* */
+ /* <Description> */
+ /* A very simple function used to perform the computation `(a*b)/c' */
+ /* with maximal accuracy (it uses a 64-bit intermediate integer */
+ /* whenever necessary). */
+ /* */
+ /* This function isn't necessarily as fast as some processor specific */
+ /* operations, but is at least completely portable. */
+ /* */
+ /* <Input> */
+ /* a :: The first multiplier. */
+ /* b :: The second multiplier. */
+ /* c :: The divisor. */
+ /* */
+ /* <Return> */
+ /* The result of `(a*b)/c'. This function never traps when trying to */
+ /* divide by zero; it simply returns `MaxInt' or `MinInt' depending */
+ /* on the signs of `a' and `b'. */
+ /* */
+ FT_EXPORT( FT_Long )
+ FT_MulDiv( FT_Long a,
+ FT_Long b,
+ FT_Long c );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_MulFix */
+ /* */
+ /* <Description> */
+ /* A very simple function used to perform the computation */
+ /* `(a*b)/0x10000' with maximal accuracy. Most of the time this is */
+ /* used to multiply a given value by a 16.16 fixed float factor. */
+ /* */
+ /* <Input> */
+ /* a :: The first multiplier. */
+ /* b :: The second multiplier. Use a 16.16 factor here whenever */
+ /* possible (see note below). */
+ /* */
+ /* <Return> */
+ /* The result of `(a*b)/0x10000'. */
+ /* */
+ /* <Note> */
+ /* This function has been optimized for the case where the absolute */
+ /* value of `a' is less than 2048, and `b' is a 16.16 scaling factor. */
+ /* As this happens mainly when scaling from notional units to */
+ /* fractional pixels in FreeType, it resulted in noticeable speed */
+ /* improvements between versions 2.x and 1.x. */
+ /* */
+ /* As a conclusion, always try to place a 16.16 factor as the */
+ /* _second_ argument of this function; this can make a great */
+ /* difference. */
+ /* */
+ FT_EXPORT( FT_Long )
+ FT_MulFix( FT_Long a,
+ FT_Long b );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_DivFix */
+ /* */
+ /* <Description> */
+ /* A very simple function used to perform the computation */
+ /* `(a*0x10000)/b' with maximal accuracy. Most of the time, this is */
+ /* used to divide a given value by a 16.16 fixed float factor. */
+ /* */
+ /* <Input> */
+ /* a :: The first multiplier. */
+ /* b :: The second multiplier. Use a 16.16 factor here whenever */
+ /* possible (see note below). */
+ /* */
+ /* <Return> */
+ /* The result of `(a*0x10000)/b'. */
+ /* */
+ /* <Note> */
+ /* The optimization for FT_DivFix() is simple: If (a << 16) fits in */
+ /* 32 bits, then the division is computed directly. Otherwise, we */
+ /* use a specialized version of @FT_MulDiv. */
+ /* */
+ FT_EXPORT( FT_Long )
+ FT_DivFix( FT_Long a,
+ FT_Long b );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_RoundFix */
+ /* */
+ /* <Description> */
+ /* A very simple function used to round a 16.16 fixed number. */
+ /* */
+ /* <Input> */
+ /* a :: The number to be rounded. */
+ /* */
+ /* <Return> */
+ /* The result of `(a + 0x8000) & -0x10000'. */
+ /* */
+ FT_EXPORT( FT_Fixed )
+ FT_RoundFix( FT_Fixed a );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_CeilFix */
+ /* */
+ /* <Description> */
+ /* A very simple function used to compute the ceiling function of a */
+ /* 16.16 fixed number. */
+ /* */
+ /* <Input> */
+ /* a :: The number for which the ceiling function is to be computed. */
+ /* */
+ /* <Return> */
+ /* The result of `(a + 0x10000 - 1) & -0x10000'. */
+ /* */
+ FT_EXPORT( FT_Fixed )
+ FT_CeilFix( FT_Fixed a );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_FloorFix */
+ /* */
+ /* <Description> */
+ /* A very simple function used to compute the floor function of a */
+ /* 16.16 fixed number. */
+ /* */
+ /* <Input> */
+ /* a :: The number for which the floor function is to be computed. */
+ /* */
+ /* <Return> */
+ /* The result of `a & -0x10000'. */
+ /* */
+ FT_EXPORT( FT_Fixed )
+ FT_FloorFix( FT_Fixed a );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Vector_Transform */
+ /* */
+ /* <Description> */
+ /* Transform a single vector through a 2x2 matrix. */
+ /* */
+ /* <InOut> */
+ /* vector :: The target vector to transform. */
+ /* */
+ /* <Input> */
+ /* matrix :: A pointer to the source 2x2 matrix. */
+ /* */
+ /* <Note> */
+ /* The result is undefined if either `vector' or `matrix' is invalid. */
+ /* */
+ FT_EXPORT( void )
+ FT_Vector_Transform( FT_Vector* vec,
+ const FT_Matrix* matrix );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* version */
+ /* */
+ /* <Title> */
+ /* FreeType Version */
+ /* */
+ /* <Abstract> */
+ /* Functions and macros related to FreeType versions. */
+ /* */
+ /* <Description> */
+ /* Note that those functions and macros are of limited use because */
+ /* even a new release of FreeType with only documentation changes */
+ /* increases the version number. */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************
+ *
+ * @enum:
+ * FREETYPE_XXX
+ *
+ * @description:
+ * These three macros identify the FreeType source code version.
+ * Use @FT_Library_Version to access them at runtime.
+ *
+ * @values:
+ * FREETYPE_MAJOR :: The major version number.
+ * FREETYPE_MINOR :: The minor version number.
+ * FREETYPE_PATCH :: The patch level.
+ *
+ * @note:
+ * The version number of FreeType if built as a dynamic link library
+ * with the `libtool' package is _not_ controlled by these three
+ * macros.
+ */
+#define FREETYPE_MAJOR 2
+#define FREETYPE_MINOR 3
+#define FREETYPE_PATCH 6
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Library_Version */
+ /* */
+ /* <Description> */
+ /* Return the version of the FreeType library being used. This is */
+ /* useful when dynamically linking to the library, since one cannot */
+ /* use the macros @FREETYPE_MAJOR, @FREETYPE_MINOR, and */
+ /* @FREETYPE_PATCH. */
+ /* */
+ /* <Input> */
+ /* library :: A source library handle. */
+ /* */
+ /* <Output> */
+ /* amajor :: The major version number. */
+ /* */
+ /* aminor :: The minor version number. */
+ /* */
+ /* apatch :: The patch version number. */
+ /* */
+ /* <Note> */
+ /* The reason why this function takes a `library' argument is because */
+ /* certain programs implement library initialization in a custom way */
+ /* that doesn't use @FT_Init_FreeType. */
+ /* */
+ /* In such cases, the library version might not be available before */
+ /* the library object has been created. */
+ /* */
+ FT_EXPORT( void )
+ FT_Library_Version( FT_Library library,
+ FT_Int *amajor,
+ FT_Int *aminor,
+ FT_Int *apatch );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Face_CheckTrueTypePatents */
+ /* */
+ /* <Description> */
+ /* Parse all bytecode instructions of a TrueType font file to check */
+ /* whether any of the patented opcodes are used. This is only useful */
+ /* if you want to be able to use the unpatented hinter with */
+ /* fonts that do *not* use these opcodes. */
+ /* */
+ /* Note that this function parses *all* glyph instructions in the */
+ /* font file, which may be slow. */
+ /* */
+ /* <Input> */
+ /* face :: A face handle. */
+ /* */
+ /* <Return> */
+ /* 1 if this is a TrueType font that uses one of the patented */
+ /* opcodes, 0 otherwise. */
+ /* */
+ /* <Since> */
+ /* 2.3.5 */
+ /* */
+ FT_EXPORT( FT_Bool )
+ FT_Face_CheckTrueTypePatents( FT_Face face );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Face_SetUnpatentedHinting */
+ /* */
+ /* <Description> */
+ /* Enable or disable the unpatented hinter for a given face. */
+ /* Only enable it if you have determined that the face doesn't */
+ /* use any patented opcodes (see @FT_Face_CheckTrueTypePatents). */
+ /* */
+ /* <Input> */
+ /* face :: A face handle. */
+ /* */
+ /* value :: New boolean setting. */
+ /* */
+ /* <Return> */
+ /* The old setting value. This will always be false if this is not */
+ /* a SFNT font, or if the unpatented hinter is not compiled in this */
+ /* instance of the library. */
+ /* */
+ /* <Since> */
+ /* 2.3.5 */
+ /* */
+ FT_EXPORT( FT_Bool )
+ FT_Face_SetUnpatentedHinting( FT_Face face,
+ FT_Bool value );
+
+ /* */
+
+
+FT_END_HEADER
+
+#endif /* __FREETYPE_H__ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/include/freetype/ftbbox.h b/src/3rdparty/freetype/include/freetype/ftbbox.h
new file mode 100644
index 0000000..b11d316
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/ftbbox.h
@@ -0,0 +1,94 @@
+/***************************************************************************/
+/* */
+/* ftbbox.h */
+/* */
+/* FreeType exact bbox computation (specification). */
+/* */
+/* Copyright 1996-2001, 2003, 2007 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* This component has a _single_ role: to compute exact outline bounding */
+ /* boxes. */
+ /* */
+ /* It is separated from the rest of the engine for various technical */
+ /* reasons. It may well be integrated in `ftoutln' later. */
+ /* */
+ /*************************************************************************/
+
+
+#ifndef __FTBBOX_H__
+#define __FTBBOX_H__
+
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* outline_processing */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Outline_Get_BBox */
+ /* */
+ /* <Description> */
+ /* Computes the exact bounding box of an outline. This is slower */
+ /* than computing the control box. However, it uses an advanced */
+ /* algorithm which returns _very_ quickly when the two boxes */
+ /* coincide. Otherwise, the outline Bezier arcs are traversed to */
+ /* extract their extrema. */
+ /* */
+ /* <Input> */
+ /* outline :: A pointer to the source outline. */
+ /* */
+ /* <Output> */
+ /* abbox :: The outline's exact bounding box. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Outline_Get_BBox( FT_Outline* outline,
+ FT_BBox *abbox );
+
+
+ /* */
+
+
+FT_END_HEADER
+
+#endif /* __FTBBOX_H__ */
+
+
+/* END */
+
+
+/* Local Variables: */
+/* coding: utf-8 */
+/* End: */
diff --git a/src/3rdparty/freetype/include/freetype/ftbdf.h b/src/3rdparty/freetype/include/freetype/ftbdf.h
new file mode 100644
index 0000000..9555694
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/ftbdf.h
@@ -0,0 +1,200 @@
+/***************************************************************************/
+/* */
+/* ftbdf.h */
+/* */
+/* FreeType API for accessing BDF-specific strings (specification). */
+/* */
+/* Copyright 2002, 2003, 2004, 2006 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef __FTBDF_H__
+#define __FTBDF_H__
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* bdf_fonts */
+ /* */
+ /* <Title> */
+ /* BDF Files */
+ /* */
+ /* <Abstract> */
+ /* BDF specific API. */
+ /* */
+ /* <Description> */
+ /* This section contains the declaration of BDF specific functions. */
+ /* */
+ /*************************************************************************/
+
+
+ /**********************************************************************
+ *
+ * @enum:
+ * FT_PropertyType
+ *
+ * @description:
+ * A list of BDF property types.
+ *
+ * @values:
+ * BDF_PROPERTY_TYPE_NONE ::
+ * Value 0 is used to indicate a missing property.
+ *
+ * BDF_PROPERTY_TYPE_ATOM ::
+ * Property is a string atom.
+ *
+ * BDF_PROPERTY_TYPE_INTEGER ::
+ * Property is a 32-bit signed integer.
+ *
+ * BDF_PROPERTY_TYPE_CARDINAL ::
+ * Property is a 32-bit unsigned integer.
+ */
+ typedef enum BDF_PropertyType_
+ {
+ BDF_PROPERTY_TYPE_NONE = 0,
+ BDF_PROPERTY_TYPE_ATOM = 1,
+ BDF_PROPERTY_TYPE_INTEGER = 2,
+ BDF_PROPERTY_TYPE_CARDINAL = 3
+
+ } BDF_PropertyType;
+
+
+ /**********************************************************************
+ *
+ * @type:
+ * BDF_Property
+ *
+ * @description:
+ * A handle to a @BDF_PropertyRec structure to model a given
+ * BDF/PCF property.
+ */
+ typedef struct BDF_PropertyRec_* BDF_Property;
+
+
+ /**********************************************************************
+ *
+ * @struct:
+ * BDF_PropertyRec
+ *
+ * @description:
+ * This structure models a given BDF/PCF property.
+ *
+ * @fields:
+ * type ::
+ * The property type.
+ *
+ * u.atom ::
+ * The atom string, if type is @BDF_PROPERTY_TYPE_ATOM.
+ *
+ * u.integer ::
+ * A signed integer, if type is @BDF_PROPERTY_TYPE_INTEGER.
+ *
+ * u.cardinal ::
+ * An unsigned integer, if type is @BDF_PROPERTY_TYPE_CARDINAL.
+ */
+ typedef struct BDF_PropertyRec_
+ {
+ BDF_PropertyType type;
+ union {
+ const char* atom;
+ FT_Int32 integer;
+ FT_UInt32 cardinal;
+
+ } u;
+
+ } BDF_PropertyRec;
+
+
+ /**********************************************************************
+ *
+ * @function:
+ * FT_Get_BDF_Charset_ID
+ *
+ * @description:
+ * Retrieves a BDF font character set identity, according to
+ * the BDF specification.
+ *
+ * @input:
+ * face ::
+ * A handle to the input face.
+ *
+ * @output:
+ * acharset_encoding ::
+ * Charset encoding, as a C string, owned by the face.
+ *
+ * acharset_registry ::
+ * Charset registry, as a C string, owned by the face.
+ *
+ * @return:
+ * FreeType error code. 0 means success.
+ *
+ * @note:
+ * This function only works with BDF faces, returning an error otherwise.
+ */
+ FT_EXPORT( FT_Error )
+ FT_Get_BDF_Charset_ID( FT_Face face,
+ const char* *acharset_encoding,
+ const char* *acharset_registry );
+
+
+ /**********************************************************************
+ *
+ * @function:
+ * FT_Get_BDF_Property
+ *
+ * @description:
+ * Retrieves a BDF property from a BDF or PCF font file.
+ *
+ * @input:
+ * face :: A handle to the input face.
+ *
+ * name :: The property name.
+ *
+ * @output:
+ * aproperty :: The property.
+ *
+ * @return:
+ * FreeType error code. 0 means success.
+ *
+ * @note:
+ * This function works with BDF _and_ PCF fonts. It returns an error
+ * otherwise. It also returns an error if the property is not in the
+ * font.
+ *
+ * In case of error, `aproperty->type' is always set to
+ * @BDF_PROPERTY_TYPE_NONE.
+ */
+ FT_EXPORT( FT_Error )
+ FT_Get_BDF_Property( FT_Face face,
+ const char* prop_name,
+ BDF_PropertyRec *aproperty );
+
+ /* */
+
+FT_END_HEADER
+
+#endif /* __FTBDF_H__ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/include/freetype/ftbitmap.h b/src/3rdparty/freetype/include/freetype/ftbitmap.h
new file mode 100644
index 0000000..337d888
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/ftbitmap.h
@@ -0,0 +1,206 @@
+/***************************************************************************/
+/* */
+/* ftbitmap.h */
+/* */
+/* FreeType utility functions for converting 1bpp, 2bpp, 4bpp, and 8bpp */
+/* bitmaps into 8bpp format (specification). */
+/* */
+/* Copyright 2004, 2005, 2006 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef __FTBITMAP_H__
+#define __FTBITMAP_H__
+
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* bitmap_handling */
+ /* */
+ /* <Title> */
+ /* Bitmap Handling */
+ /* */
+ /* <Abstract> */
+ /* Handling FT_Bitmap objects. */
+ /* */
+ /* <Description> */
+ /* This section contains functions for converting FT_Bitmap objects. */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Bitmap_New */
+ /* */
+ /* <Description> */
+ /* Initialize a pointer to an @FT_Bitmap structure. */
+ /* */
+ /* <InOut> */
+ /* abitmap :: A pointer to the bitmap structure. */
+ /* */
+ FT_EXPORT( void )
+ FT_Bitmap_New( FT_Bitmap *abitmap );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Bitmap_Copy */
+ /* */
+ /* <Description> */
+ /* Copies an bitmap into another one. */
+ /* */
+ /* <Input> */
+ /* library :: A handle to a library object. */
+ /* */
+ /* source :: A handle to the source bitmap. */
+ /* */
+ /* <Output> */
+ /* target :: A handle to the target bitmap. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Bitmap_Copy( FT_Library library,
+ const FT_Bitmap *source,
+ FT_Bitmap *target);
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Bitmap_Embolden */
+ /* */
+ /* <Description> */
+ /* Embolden a bitmap. The new bitmap will be about `xStrength' */
+ /* pixels wider and `yStrength' pixels higher. The left and bottom */
+ /* borders are kept unchanged. */
+ /* */
+ /* <Input> */
+ /* library :: A handle to a library object. */
+ /* */
+ /* xStrength :: How strong the glyph is emboldened horizontally. */
+ /* Expressed in 26.6 pixel format. */
+ /* */
+ /* yStrength :: How strong the glyph is emboldened vertically. */
+ /* Expressed in 26.6 pixel format. */
+ /* */
+ /* <InOut> */
+ /* bitmap :: A handle to the target bitmap. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ /* <Note> */
+ /* The current implementation restricts `xStrength' to be less than */
+ /* or equal to 8 if bitmap is of pixel_mode @FT_PIXEL_MODE_MONO. */
+ /* */
+ /* If you want to embolden the bitmap owned by a @FT_GlyphSlotRec, */
+ /* you should call `FT_GlyphSlot_Own_Bitmap' on the slot first. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Bitmap_Embolden( FT_Library library,
+ FT_Bitmap* bitmap,
+ FT_Pos xStrength,
+ FT_Pos yStrength );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Bitmap_Convert */
+ /* */
+ /* <Description> */
+ /* Convert a bitmap object with depth 1bpp, 2bpp, 4bpp, or 8bpp to a */
+ /* bitmap object with depth 8bpp, making the number of used bytes per */
+ /* line (a.k.a. the `pitch') a multiple of `alignment'. */
+ /* */
+ /* <Input> */
+ /* library :: A handle to a library object. */
+ /* */
+ /* source :: The source bitmap. */
+ /* */
+ /* alignment :: The pitch of the bitmap is a multiple of this */
+ /* parameter. Common values are 1, 2, or 4. */
+ /* */
+ /* <Output> */
+ /* target :: The target bitmap. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ /* <Note> */
+ /* It is possible to call @FT_Bitmap_Convert multiple times without */
+ /* calling @FT_Bitmap_Done (the memory is simply reallocated). */
+ /* */
+ /* Use @FT_Bitmap_Done to finally remove the bitmap object. */
+ /* */
+ /* The `library' argument is taken to have access to FreeType's */
+ /* memory handling functions. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Bitmap_Convert( FT_Library library,
+ const FT_Bitmap *source,
+ FT_Bitmap *target,
+ FT_Int alignment );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Bitmap_Done */
+ /* */
+ /* <Description> */
+ /* Destroy a bitmap object created with @FT_Bitmap_New. */
+ /* */
+ /* <Input> */
+ /* library :: A handle to a library object. */
+ /* */
+ /* bitmap :: The bitmap object to be freed. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ /* <Note> */
+ /* The `library' argument is taken to have access to FreeType's */
+ /* memory handling functions. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Bitmap_Done( FT_Library library,
+ FT_Bitmap *bitmap );
+
+
+ /* */
+
+
+FT_END_HEADER
+
+#endif /* __FTBITMAP_H__ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/include/freetype/ftcache.h b/src/3rdparty/freetype/include/freetype/ftcache.h
new file mode 100644
index 0000000..805df78
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/ftcache.h
@@ -0,0 +1,1121 @@
+/***************************************************************************/
+/* */
+/* ftcache.h */
+/* */
+/* FreeType Cache subsystem (specification). */
+/* */
+/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef __FTCACHE_H__
+#define __FTCACHE_H__
+
+
+#include <ft2build.h>
+#include FT_GLYPH_H
+
+
+FT_BEGIN_HEADER
+
+
+ /*************************************************************************
+ *
+ * <Section>
+ * cache_subsystem
+ *
+ * <Title>
+ * Cache Sub-System
+ *
+ * <Abstract>
+ * How to cache face, size, and glyph data with FreeType 2.
+ *
+ * <Description>
+ * This section describes the FreeType 2 cache sub-system, which is used
+ * to limit the number of concurrently opened @FT_Face and @FT_Size
+ * objects, as well as caching information like character maps and glyph
+ * images while limiting their maximum memory usage.
+ *
+ * Note that all types and functions begin with the `FTC_' prefix.
+ *
+ * The cache is highly portable and thus doesn't know anything about the
+ * fonts installed on your system, or how to access them. This implies
+ * the following scheme:
+ *
+ * First, available or installed font faces are uniquely identified by
+ * @FTC_FaceID values, provided to the cache by the client. Note that
+ * the cache only stores and compares these values, and doesn't try to
+ * interpret them in any way.
+ *
+ * Second, the cache calls, only when needed, a client-provided function
+ * to convert a @FTC_FaceID into a new @FT_Face object. The latter is
+ * then completely managed by the cache, including its termination
+ * through @FT_Done_Face.
+ *
+ * Clients are free to map face IDs to anything else. The most simple
+ * usage is to associate them to a (pathname,face_index) pair that is
+ * used to call @FT_New_Face. However, more complex schemes are also
+ * possible.
+ *
+ * Note that for the cache to work correctly, the face ID values must be
+ * *persistent*, which means that the contents they point to should not
+ * change at runtime, or that their value should not become invalid.
+ *
+ * If this is unavoidable (e.g., when a font is uninstalled at runtime),
+ * you should call @FTC_Manager_RemoveFaceID as soon as possible, to let
+ * the cache get rid of any references to the old @FTC_FaceID it may
+ * keep internally. Failure to do so will lead to incorrect behaviour
+ * or even crashes.
+ *
+ * To use the cache, start with calling @FTC_Manager_New to create a new
+ * @FTC_Manager object, which models a single cache instance. You can
+ * then look up @FT_Face and @FT_Size objects with
+ * @FTC_Manager_LookupFace and @FTC_Manager_LookupSize, respectively.
+ *
+ * If you want to use the charmap caching, call @FTC_CMapCache_New, then
+ * later use @FTC_CMapCache_Lookup to perform the equivalent of
+ * @FT_Get_Char_Index, only much faster.
+ *
+ * If you want to use the @FT_Glyph caching, call @FTC_ImageCache, then
+ * later use @FTC_ImageCache_Lookup to retrieve the corresponding
+ * @FT_Glyph objects from the cache.
+ *
+ * If you need lots of small bitmaps, it is much more memory efficient
+ * to call @FTC_SBitCache_New followed by @FTC_SBitCache_Lookup. This
+ * returns @FTC_SBitRec structures, which are used to store small
+ * bitmaps directly. (A small bitmap is one whose metrics and
+ * dimensions all fit into 8-bit integers).
+ *
+ * We hope to also provide a kerning cache in the near future.
+ *
+ *
+ * <Order>
+ * FTC_Manager
+ * FTC_FaceID
+ * FTC_Face_Requester
+ *
+ * FTC_Manager_New
+ * FTC_Manager_Reset
+ * FTC_Manager_Done
+ * FTC_Manager_LookupFace
+ * FTC_Manager_LookupSize
+ * FTC_Manager_RemoveFaceID
+ *
+ * FTC_Node
+ * FTC_Node_Unref
+ *
+ * FTC_ImageCache
+ * FTC_ImageCache_New
+ * FTC_ImageCache_Lookup
+ *
+ * FTC_SBit
+ * FTC_SBitCache
+ * FTC_SBitCache_New
+ * FTC_SBitCache_Lookup
+ *
+ * FTC_CMapCache
+ * FTC_CMapCache_New
+ * FTC_CMapCache_Lookup
+ *
+ *************************************************************************/
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /*************************************************************************/
+ /***** *****/
+ /***** BASIC TYPE DEFINITIONS *****/
+ /***** *****/
+ /*************************************************************************/
+ /*************************************************************************/
+ /*************************************************************************/
+
+
+ /*************************************************************************
+ *
+ * @type: FTC_FaceID
+ *
+ * @description:
+ * An opaque pointer type that is used to identity face objects. The
+ * contents of such objects is application-dependent.
+ *
+ * These pointers are typically used to point to a user-defined
+ * structure containing a font file path, and face index.
+ *
+ * @note:
+ * Never use NULL as a valid @FTC_FaceID.
+ *
+ * Face IDs are passed by the client to the cache manager, which calls,
+ * when needed, the @FTC_Face_Requester to translate them into new
+ * @FT_Face objects.
+ *
+ * If the content of a given face ID changes at runtime, or if the value
+ * becomes invalid (e.g., when uninstalling a font), you should
+ * immediately call @FTC_Manager_RemoveFaceID before any other cache
+ * function.
+ *
+ * Failure to do so will result in incorrect behaviour or even
+ * memory leaks and crashes.
+ */
+ typedef FT_Pointer FTC_FaceID;
+
+
+ /************************************************************************
+ *
+ * @functype:
+ * FTC_Face_Requester
+ *
+ * @description:
+ * A callback function provided by client applications. It is used by
+ * the cache manager to translate a given @FTC_FaceID into a new valid
+ * @FT_Face object, on demand.
+ *
+ * <Input>
+ * face_id ::
+ * The face ID to resolve.
+ *
+ * library ::
+ * A handle to a FreeType library object.
+ *
+ * req_data ::
+ * Application-provided request data (see note below).
+ *
+ * <Output>
+ * aface ::
+ * A new @FT_Face handle.
+ *
+ * <Return>
+ * FreeType error code. 0 means success.
+ *
+ * <Note>
+ * The third parameter `req_data' is the same as the one passed by the
+ * client when @FTC_Manager_New is called.
+ *
+ * The face requester should not perform funny things on the returned
+ * face object, like creating a new @FT_Size for it, or setting a
+ * transformation through @FT_Set_Transform!
+ */
+ typedef FT_Error
+ (*FTC_Face_Requester)( FTC_FaceID face_id,
+ FT_Library library,
+ FT_Pointer request_data,
+ FT_Face* aface );
+
+ /* */
+
+#define FT_POINTER_TO_ULONG( p ) ( (FT_ULong)(FT_Pointer)(p) )
+
+#define FTC_FACE_ID_HASH( i ) \
+ ((FT_UInt32)(( FT_POINTER_TO_ULONG( i ) >> 3 ) ^ \
+ ( FT_POINTER_TO_ULONG( i ) << 7 ) ) )
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /*************************************************************************/
+ /***** *****/
+ /***** CACHE MANAGER OBJECT *****/
+ /***** *****/
+ /*************************************************************************/
+ /*************************************************************************/
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FTC_Manager */
+ /* */
+ /* <Description> */
+ /* This object corresponds to one instance of the cache-subsystem. */
+ /* It is used to cache one or more @FT_Face objects, along with */
+ /* corresponding @FT_Size objects. */
+ /* */
+ /* The manager intentionally limits the total number of opened */
+ /* @FT_Face and @FT_Size objects to control memory usage. See the */
+ /* `max_faces' and `max_sizes' parameters of @FTC_Manager_New. */
+ /* */
+ /* The manager is also used to cache `nodes' of various types while */
+ /* limiting their total memory usage. */
+ /* */
+ /* All limitations are enforced by keeping lists of managed objects */
+ /* in most-recently-used order, and flushing old nodes to make room */
+ /* for new ones. */
+ /* */
+ typedef struct FTC_ManagerRec_* FTC_Manager;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FTC_Node */
+ /* */
+ /* <Description> */
+ /* An opaque handle to a cache node object. Each cache node is */
+ /* reference-counted. A node with a count of 0 might be flushed */
+ /* out of a full cache whenever a lookup request is performed. */
+ /* */
+ /* If you lookup nodes, you have the ability to `acquire' them, i.e., */
+ /* to increment their reference count. This will prevent the node */
+ /* from being flushed out of the cache until you explicitly `release' */
+ /* it (see @FTC_Node_Unref). */
+ /* */
+ /* See also @FTC_SBitCache_Lookup and @FTC_ImageCache_Lookup. */
+ /* */
+ typedef struct FTC_NodeRec_* FTC_Node;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FTC_Manager_New */
+ /* */
+ /* <Description> */
+ /* Creates a new cache manager. */
+ /* */
+ /* <Input> */
+ /* library :: The parent FreeType library handle to use. */
+ /* */
+ /* max_faces :: Maximum number of opened @FT_Face objects managed by */
+ /* this cache instance. Use 0 for defaults. */
+ /* */
+ /* max_sizes :: Maximum number of opened @FT_Size objects managed by */
+ /* this cache instance. Use 0 for defaults. */
+ /* */
+ /* max_bytes :: Maximum number of bytes to use for cached data nodes. */
+ /* Use 0 for defaults. Note that this value does not */
+ /* account for managed @FT_Face and @FT_Size objects. */
+ /* */
+ /* requester :: An application-provided callback used to translate */
+ /* face IDs into real @FT_Face objects. */
+ /* */
+ /* req_data :: A generic pointer that is passed to the requester */
+ /* each time it is called (see @FTC_Face_Requester). */
+ /* */
+ /* <Output> */
+ /* amanager :: A handle to a new manager object. 0 in case of */
+ /* failure. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FTC_Manager_New( FT_Library library,
+ FT_UInt max_faces,
+ FT_UInt max_sizes,
+ FT_ULong max_bytes,
+ FTC_Face_Requester requester,
+ FT_Pointer req_data,
+ FTC_Manager *amanager );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FTC_Manager_Reset */
+ /* */
+ /* <Description> */
+ /* Empties a given cache manager. This simply gets rid of all the */
+ /* currently cached @FT_Face and @FT_Size objects within the manager. */
+ /* */
+ /* <InOut> */
+ /* manager :: A handle to the manager. */
+ /* */
+ FT_EXPORT( void )
+ FTC_Manager_Reset( FTC_Manager manager );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FTC_Manager_Done */
+ /* */
+ /* <Description> */
+ /* Destroys a given manager after emptying it. */
+ /* */
+ /* <Input> */
+ /* manager :: A handle to the target cache manager object. */
+ /* */
+ FT_EXPORT( void )
+ FTC_Manager_Done( FTC_Manager manager );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FTC_Manager_LookupFace */
+ /* */
+ /* <Description> */
+ /* Retrieves the @FT_Face object that corresponds to a given face ID */
+ /* through a cache manager. */
+ /* */
+ /* <Input> */
+ /* manager :: A handle to the cache manager. */
+ /* */
+ /* face_id :: The ID of the face object. */
+ /* */
+ /* <Output> */
+ /* aface :: A handle to the face object. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ /* <Note> */
+ /* The returned @FT_Face object is always owned by the manager. You */
+ /* should never try to discard it yourself. */
+ /* */
+ /* The @FT_Face object doesn't necessarily have a current size object */
+ /* (i.e., face->size can be 0). If you need a specific `font size', */
+ /* use @FTC_Manager_LookupSize instead. */
+ /* */
+ /* Never change the face's transformation matrix (i.e., never call */
+ /* the @FT_Set_Transform function) on a returned face! If you need */
+ /* to transform glyphs, do it yourself after glyph loading. */
+ /* */
+ /* When you perform a lookup, out-of-memory errors are detected */
+ /* _within_ the lookup and force incremental flushes of the cache */
+ /* until enough memory is released for the lookup to succeed. */
+ /* */
+ /* If a lookup fails with `FT_Err_Out_Of_Memory' the cache has */
+ /* already been completely flushed, and still no memory was available */
+ /* for the operation. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FTC_Manager_LookupFace( FTC_Manager manager,
+ FTC_FaceID face_id,
+ FT_Face *aface );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FTC_ScalerRec */
+ /* */
+ /* <Description> */
+ /* A structure used to describe a given character size in either */
+ /* pixels or points to the cache manager. See */
+ /* @FTC_Manager_LookupSize. */
+ /* */
+ /* <Fields> */
+ /* face_id :: The source face ID. */
+ /* */
+ /* width :: The character width. */
+ /* */
+ /* height :: The character height. */
+ /* */
+ /* pixel :: A Boolean. If 1, the `width' and `height' fields are */
+ /* interpreted as integer pixel character sizes. */
+ /* Otherwise, they are expressed as 1/64th of points. */
+ /* */
+ /* x_res :: Only used when `pixel' is value 0 to indicate the */
+ /* horizontal resolution in dpi. */
+ /* */
+ /* y_res :: Only used when `pixel' is value 0 to indicate the */
+ /* vertical resolution in dpi. */
+ /* */
+ /* <Note> */
+ /* This type is mainly used to retrieve @FT_Size objects through the */
+ /* cache manager. */
+ /* */
+ typedef struct FTC_ScalerRec_
+ {
+ FTC_FaceID face_id;
+ FT_UInt width;
+ FT_UInt height;
+ FT_Int pixel;
+ FT_UInt x_res;
+ FT_UInt y_res;
+
+ } FTC_ScalerRec;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FTC_Scaler */
+ /* */
+ /* <Description> */
+ /* A handle to an @FTC_ScalerRec structure. */
+ /* */
+ typedef struct FTC_ScalerRec_* FTC_Scaler;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FTC_Manager_LookupSize */
+ /* */
+ /* <Description> */
+ /* Retrieve the @FT_Size object that corresponds to a given */
+ /* @FTC_ScalerRec pointer through a cache manager. */
+ /* */
+ /* <Input> */
+ /* manager :: A handle to the cache manager. */
+ /* */
+ /* scaler :: A scaler handle. */
+ /* */
+ /* <Output> */
+ /* asize :: A handle to the size object. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ /* <Note> */
+ /* The returned @FT_Size object is always owned by the manager. You */
+ /* should never try to discard it by yourself. */
+ /* */
+ /* You can access the parent @FT_Face object simply as `size->face' */
+ /* if you need it. Note that this object is also owned by the */
+ /* manager. */
+ /* */
+ /* <Note> */
+ /* When you perform a lookup, out-of-memory errors are detected */
+ /* _within_ the lookup and force incremental flushes of the cache */
+ /* until enough memory is released for the lookup to succeed. */
+ /* */
+ /* If a lookup fails with `FT_Err_Out_Of_Memory' the cache has */
+ /* already been completely flushed, and still no memory is available */
+ /* for the operation. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FTC_Manager_LookupSize( FTC_Manager manager,
+ FTC_Scaler scaler,
+ FT_Size *asize );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FTC_Node_Unref */
+ /* */
+ /* <Description> */
+ /* Decrement a cache node's internal reference count. When the count */
+ /* reaches 0, it is not destroyed but becomes eligible for subsequent */
+ /* cache flushes. */
+ /* */
+ /* <Input> */
+ /* node :: The cache node handle. */
+ /* */
+ /* manager :: The cache manager handle. */
+ /* */
+ FT_EXPORT( void )
+ FTC_Node_Unref( FTC_Node node,
+ FTC_Manager manager );
+
+
+ /*************************************************************************
+ *
+ * @function:
+ * FTC_Manager_RemoveFaceID
+ *
+ * @description:
+ * A special function used to indicate to the cache manager that
+ * a given @FTC_FaceID is no longer valid, either because its
+ * content changed, or because it was deallocated or uninstalled.
+ *
+ * @input:
+ * manager ::
+ * The cache manager handle.
+ *
+ * face_id ::
+ * The @FTC_FaceID to be removed.
+ *
+ * @note:
+ * This function flushes all nodes from the cache corresponding to this
+ * `face_id', with the exception of nodes with a non-null reference
+ * count.
+ *
+ * Such nodes are however modified internally so as to never appear
+ * in later lookups with the same `face_id' value, and to be immediately
+ * destroyed when released by all their users.
+ *
+ */
+ FT_EXPORT( void )
+ FTC_Manager_RemoveFaceID( FTC_Manager manager,
+ FTC_FaceID face_id );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* cache_subsystem */
+ /* */
+ /*************************************************************************/
+
+ /*************************************************************************
+ *
+ * @type:
+ * FTC_CMapCache
+ *
+ * @description:
+ * An opaque handle used to model a charmap cache. This cache is to
+ * hold character codes -> glyph indices mappings.
+ *
+ */
+ typedef struct FTC_CMapCacheRec_* FTC_CMapCache;
+
+
+ /*************************************************************************
+ *
+ * @function:
+ * FTC_CMapCache_New
+ *
+ * @description:
+ * Create a new charmap cache.
+ *
+ * @input:
+ * manager ::
+ * A handle to the cache manager.
+ *
+ * @output:
+ * acache ::
+ * A new cache handle. NULL in case of error.
+ *
+ * @return:
+ * FreeType error code. 0 means success.
+ *
+ * @note:
+ * Like all other caches, this one will be destroyed with the cache
+ * manager.
+ *
+ */
+ FT_EXPORT( FT_Error )
+ FTC_CMapCache_New( FTC_Manager manager,
+ FTC_CMapCache *acache );
+
+
+ /************************************************************************
+ *
+ * @function:
+ * FTC_CMapCache_Lookup
+ *
+ * @description:
+ * Translate a character code into a glyph index, using the charmap
+ * cache.
+ *
+ * @input:
+ * cache ::
+ * A charmap cache handle.
+ *
+ * face_id ::
+ * The source face ID.
+ *
+ * cmap_index ::
+ * The index of the charmap in the source face.
+ *
+ * char_code ::
+ * The character code (in the corresponding charmap).
+ *
+ * @return:
+ * Glyph index. 0 means `no glyph'.
+ *
+ */
+ FT_EXPORT( FT_UInt )
+ FTC_CMapCache_Lookup( FTC_CMapCache cache,
+ FTC_FaceID face_id,
+ FT_Int cmap_index,
+ FT_UInt32 char_code );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* cache_subsystem */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /*************************************************************************/
+ /***** *****/
+ /***** IMAGE CACHE OBJECT *****/
+ /***** *****/
+ /*************************************************************************/
+ /*************************************************************************/
+ /*************************************************************************/
+
+
+ /*************************************************************************
+ *
+ * @struct:
+ * FTC_ImageTypeRec
+ *
+ * @description:
+ * A structure used to model the type of images in a glyph cache.
+ *
+ * @fields:
+ * face_id ::
+ * The face ID.
+ *
+ * width ::
+ * The width in pixels.
+ *
+ * height ::
+ * The height in pixels.
+ *
+ * flags ::
+ * The load flags, as in @FT_Load_Glyph.
+ *
+ */
+ typedef struct FTC_ImageTypeRec_
+ {
+ FTC_FaceID face_id;
+ FT_Int width;
+ FT_Int height;
+ FT_Int32 flags;
+
+ } FTC_ImageTypeRec;
+
+
+ /*************************************************************************
+ *
+ * @type:
+ * FTC_ImageType
+ *
+ * @description:
+ * A handle to an @FTC_ImageTypeRec structure.
+ *
+ */
+ typedef struct FTC_ImageTypeRec_* FTC_ImageType;
+
+
+ /* */
+
+
+#define FTC_IMAGE_TYPE_COMPARE( d1, d2 ) \
+ ( (d1)->face_id == (d2)->face_id && \
+ (d1)->width == (d2)->width && \
+ (d1)->flags == (d2)->flags )
+
+#define FTC_IMAGE_TYPE_HASH( d ) \
+ (FT_UFast)( FTC_FACE_ID_HASH( (d)->face_id ) ^ \
+ ( (d)->width << 8 ) ^ (d)->height ^ \
+ ( (d)->flags << 4 ) )
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FTC_ImageCache */
+ /* */
+ /* <Description> */
+ /* A handle to an glyph image cache object. They are designed to */
+ /* hold many distinct glyph images while not exceeding a certain */
+ /* memory threshold. */
+ /* */
+ typedef struct FTC_ImageCacheRec_* FTC_ImageCache;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FTC_ImageCache_New */
+ /* */
+ /* <Description> */
+ /* Creates a new glyph image cache. */
+ /* */
+ /* <Input> */
+ /* manager :: The parent manager for the image cache. */
+ /* */
+ /* <Output> */
+ /* acache :: A handle to the new glyph image cache object. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FTC_ImageCache_New( FTC_Manager manager,
+ FTC_ImageCache *acache );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FTC_ImageCache_Lookup */
+ /* */
+ /* <Description> */
+ /* Retrieves a given glyph image from a glyph image cache. */
+ /* */
+ /* <Input> */
+ /* cache :: A handle to the source glyph image cache. */
+ /* */
+ /* type :: A pointer to a glyph image type descriptor. */
+ /* */
+ /* gindex :: The glyph index to retrieve. */
+ /* */
+ /* <Output> */
+ /* aglyph :: The corresponding @FT_Glyph object. 0 in case of */
+ /* failure. */
+ /* */
+ /* anode :: Used to return the address of of the corresponding cache */
+ /* node after incrementing its reference count (see note */
+ /* below). */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ /* <Note> */
+ /* The returned glyph is owned and managed by the glyph image cache. */
+ /* Never try to transform or discard it manually! You can however */
+ /* create a copy with @FT_Glyph_Copy and modify the new one. */
+ /* */
+ /* If `anode' is _not_ NULL, it receives the address of the cache */
+ /* node containing the glyph image, after increasing its reference */
+ /* count. This ensures that the node (as well as the @FT_Glyph) will */
+ /* always be kept in the cache until you call @FTC_Node_Unref to */
+ /* `release' it. */
+ /* */
+ /* If `anode' is NULL, the cache node is left unchanged, which means */
+ /* that the @FT_Glyph could be flushed out of the cache on the next */
+ /* call to one of the caching sub-system APIs. Don't assume that it */
+ /* is persistent! */
+ /* */
+ FT_EXPORT( FT_Error )
+ FTC_ImageCache_Lookup( FTC_ImageCache cache,
+ FTC_ImageType type,
+ FT_UInt gindex,
+ FT_Glyph *aglyph,
+ FTC_Node *anode );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FTC_ImageCache_LookupScaler */
+ /* */
+ /* <Description> */
+ /* A variant of @FTC_ImageCache_Lookup that uses an @FTC_ScalerRec */
+ /* to specify the face ID and its size. */
+ /* */
+ /* <Input> */
+ /* cache :: A handle to the source glyph image cache. */
+ /* */
+ /* scaler :: A pointer to a scaler descriptor. */
+ /* */
+ /* load_flags :: The corresponding load flags. */
+ /* */
+ /* gindex :: The glyph index to retrieve. */
+ /* */
+ /* <Output> */
+ /* aglyph :: The corresponding @FT_Glyph object. 0 in case of */
+ /* failure. */
+ /* */
+ /* anode :: Used to return the address of of the corresponding */
+ /* cache node after incrementing its reference count */
+ /* (see note below). */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ /* <Note> */
+ /* The returned glyph is owned and managed by the glyph image cache. */
+ /* Never try to transform or discard it manually! You can however */
+ /* create a copy with @FT_Glyph_Copy and modify the new one. */
+ /* */
+ /* If `anode' is _not_ NULL, it receives the address of the cache */
+ /* node containing the glyph image, after increasing its reference */
+ /* count. This ensures that the node (as well as the @FT_Glyph) will */
+ /* always be kept in the cache until you call @FTC_Node_Unref to */
+ /* `release' it. */
+ /* */
+ /* If `anode' is NULL, the cache node is left unchanged, which means */
+ /* that the @FT_Glyph could be flushed out of the cache on the next */
+ /* call to one of the caching sub-system APIs. Don't assume that it */
+ /* is persistent! */
+ /* */
+ FT_EXPORT( FT_Error )
+ FTC_ImageCache_LookupScaler( FTC_ImageCache cache,
+ FTC_Scaler scaler,
+ FT_ULong load_flags,
+ FT_UInt gindex,
+ FT_Glyph *aglyph,
+ FTC_Node *anode );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FTC_SBit */
+ /* */
+ /* <Description> */
+ /* A handle to a small bitmap descriptor. See the @FTC_SBitRec */
+ /* structure for details. */
+ /* */
+ typedef struct FTC_SBitRec_* FTC_SBit;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FTC_SBitRec */
+ /* */
+ /* <Description> */
+ /* A very compact structure used to describe a small glyph bitmap. */
+ /* */
+ /* <Fields> */
+ /* width :: The bitmap width in pixels. */
+ /* */
+ /* height :: The bitmap height in pixels. */
+ /* */
+ /* left :: The horizontal distance from the pen position to the */
+ /* left bitmap border (a.k.a. `left side bearing', or */
+ /* `lsb'). */
+ /* */
+ /* top :: The vertical distance from the pen position (on the */
+ /* baseline) to the upper bitmap border (a.k.a. `top */
+ /* side bearing'). The distance is positive for upwards */
+ /* Y coordinates. */
+ /* */
+ /* format :: The format of the glyph bitmap (monochrome or gray). */
+ /* */
+ /* max_grays :: Maximum gray level value (in the range 1 to 255). */
+ /* */
+ /* pitch :: The number of bytes per bitmap line. May be positive */
+ /* or negative. */
+ /* */
+ /* xadvance :: The horizontal advance width in pixels. */
+ /* */
+ /* yadvance :: The vertical advance height in pixels. */
+ /* */
+ /* buffer :: A pointer to the bitmap pixels. */
+ /* */
+ typedef struct FTC_SBitRec_
+ {
+ FT_Byte width;
+ FT_Byte height;
+ FT_Char left;
+ FT_Char top;
+
+ FT_Byte format;
+ FT_Byte max_grays;
+ FT_Short pitch;
+ FT_Char xadvance;
+ FT_Char yadvance;
+
+ FT_Byte* buffer;
+
+ } FTC_SBitRec;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FTC_SBitCache */
+ /* */
+ /* <Description> */
+ /* A handle to a small bitmap cache. These are special cache objects */
+ /* used to store small glyph bitmaps (and anti-aliased pixmaps) in a */
+ /* much more efficient way than the traditional glyph image cache */
+ /* implemented by @FTC_ImageCache. */
+ /* */
+ typedef struct FTC_SBitCacheRec_* FTC_SBitCache;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FTC_SBitCache_New */
+ /* */
+ /* <Description> */
+ /* Creates a new cache to store small glyph bitmaps. */
+ /* */
+ /* <Input> */
+ /* manager :: A handle to the source cache manager. */
+ /* */
+ /* <Output> */
+ /* acache :: A handle to the new sbit cache. NULL in case of error. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FTC_SBitCache_New( FTC_Manager manager,
+ FTC_SBitCache *acache );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FTC_SBitCache_Lookup */
+ /* */
+ /* <Description> */
+ /* Looks up a given small glyph bitmap in a given sbit cache and */
+ /* `lock' it to prevent its flushing from the cache until needed. */
+ /* */
+ /* <Input> */
+ /* cache :: A handle to the source sbit cache. */
+ /* */
+ /* type :: A pointer to the glyph image type descriptor. */
+ /* */
+ /* gindex :: The glyph index. */
+ /* */
+ /* <Output> */
+ /* sbit :: A handle to a small bitmap descriptor. */
+ /* */
+ /* anode :: Used to return the address of of the corresponding cache */
+ /* node after incrementing its reference count (see note */
+ /* below). */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ /* <Note> */
+ /* The small bitmap descriptor and its bit buffer are owned by the */
+ /* cache and should never be freed by the application. They might */
+ /* as well disappear from memory on the next cache lookup, so don't */
+ /* treat them as persistent data. */
+ /* */
+ /* The descriptor's `buffer' field is set to 0 to indicate a missing */
+ /* glyph bitmap. */
+ /* */
+ /* If `anode' is _not_ NULL, it receives the address of the cache */
+ /* node containing the bitmap, after increasing its reference count. */
+ /* This ensures that the node (as well as the image) will always be */
+ /* kept in the cache until you call @FTC_Node_Unref to `release' it. */
+ /* */
+ /* If `anode' is NULL, the cache node is left unchanged, which means */
+ /* that the bitmap could be flushed out of the cache on the next */
+ /* call to one of the caching sub-system APIs. Don't assume that it */
+ /* is persistent! */
+ /* */
+ FT_EXPORT( FT_Error )
+ FTC_SBitCache_Lookup( FTC_SBitCache cache,
+ FTC_ImageType type,
+ FT_UInt gindex,
+ FTC_SBit *sbit,
+ FTC_Node *anode );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FTC_SBitCache_LookupScaler */
+ /* */
+ /* <Description> */
+ /* A variant of @FTC_SBitCache_Lookup that uses an @FTC_ScalerRec */
+ /* to specify the face ID and its size. */
+ /* */
+ /* <Input> */
+ /* cache :: A handle to the source sbit cache. */
+ /* */
+ /* scaler :: A pointer to the scaler descriptor. */
+ /* */
+ /* load_flags :: The corresponding load flags. */
+ /* */
+ /* gindex :: The glyph index. */
+ /* */
+ /* <Output> */
+ /* sbit :: A handle to a small bitmap descriptor. */
+ /* */
+ /* anode :: Used to return the address of of the corresponding */
+ /* cache node after incrementing its reference count */
+ /* (see note below). */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ /* <Note> */
+ /* The small bitmap descriptor and its bit buffer are owned by the */
+ /* cache and should never be freed by the application. They might */
+ /* as well disappear from memory on the next cache lookup, so don't */
+ /* treat them as persistent data. */
+ /* */
+ /* The descriptor's `buffer' field is set to 0 to indicate a missing */
+ /* glyph bitmap. */
+ /* */
+ /* If `anode' is _not_ NULL, it receives the address of the cache */
+ /* node containing the bitmap, after increasing its reference count. */
+ /* This ensures that the node (as well as the image) will always be */
+ /* kept in the cache until you call @FTC_Node_Unref to `release' it. */
+ /* */
+ /* If `anode' is NULL, the cache node is left unchanged, which means */
+ /* that the bitmap could be flushed out of the cache on the next */
+ /* call to one of the caching sub-system APIs. Don't assume that it */
+ /* is persistent! */
+ /* */
+ FT_EXPORT( FT_Error )
+ FTC_SBitCache_LookupScaler( FTC_SBitCache cache,
+ FTC_Scaler scaler,
+ FT_ULong load_flags,
+ FT_UInt gindex,
+ FTC_SBit *sbit,
+ FTC_Node *anode );
+
+
+ /* */
+
+#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
+
+ /*@***********************************************************************/
+ /* */
+ /* <Struct> */
+ /* FTC_FontRec */
+ /* */
+ /* <Description> */
+ /* A simple structure used to describe a given `font' to the cache */
+ /* manager. Note that a `font' is the combination of a given face */
+ /* with a given character size. */
+ /* */
+ /* <Fields> */
+ /* face_id :: The ID of the face to use. */
+ /* */
+ /* pix_width :: The character width in integer pixels. */
+ /* */
+ /* pix_height :: The character height in integer pixels. */
+ /* */
+ typedef struct FTC_FontRec_
+ {
+ FTC_FaceID face_id;
+ FT_UShort pix_width;
+ FT_UShort pix_height;
+
+ } FTC_FontRec;
+
+
+ /* */
+
+
+#define FTC_FONT_COMPARE( f1, f2 ) \
+ ( (f1)->face_id == (f2)->face_id && \
+ (f1)->pix_width == (f2)->pix_width && \
+ (f1)->pix_height == (f2)->pix_height )
+
+#define FTC_FONT_HASH( f ) \
+ (FT_UInt32)( FTC_FACE_ID_HASH((f)->face_id) ^ \
+ ((f)->pix_width << 8) ^ \
+ ((f)->pix_height) )
+
+ typedef FTC_FontRec* FTC_Font;
+
+
+ FT_EXPORT( FT_Error )
+ FTC_Manager_Lookup_Face( FTC_Manager manager,
+ FTC_FaceID face_id,
+ FT_Face *aface );
+
+ FT_EXPORT( FT_Error )
+ FTC_Manager_Lookup_Size( FTC_Manager manager,
+ FTC_Font font,
+ FT_Face *aface,
+ FT_Size *asize );
+
+#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
+
+
+ /* */
+
+FT_END_HEADER
+
+#endif /* __FTCACHE_H__ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/include/freetype/ftchapters.h b/src/3rdparty/freetype/include/freetype/ftchapters.h
new file mode 100644
index 0000000..4c61824
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/ftchapters.h
@@ -0,0 +1,102 @@
+/***************************************************************************/
+/* */
+/* This file defines the structure of the FreeType reference. */
+/* It is used by the python script which generates the HTML files. */
+/* */
+/***************************************************************************/
+
+
+/***************************************************************************/
+/* */
+/* <Chapter> */
+/* general_remarks */
+/* */
+/* <Title> */
+/* General Remarks */
+/* */
+/* <Sections> */
+/* user_allocation */
+/* */
+/***************************************************************************/
+
+
+/***************************************************************************/
+/* */
+/* <Chapter> */
+/* core_api */
+/* */
+/* <Title> */
+/* Core API */
+/* */
+/* <Sections> */
+/* version */
+/* basic_types */
+/* base_interface */
+/* glyph_variants */
+/* glyph_management */
+/* mac_specific */
+/* sizes_management */
+/* header_file_macros */
+/* */
+/***************************************************************************/
+
+
+/***************************************************************************/
+/* */
+/* <Chapter> */
+/* format_specific */
+/* */
+/* <Title> */
+/* Format-Specific API */
+/* */
+/* <Sections> */
+/* multiple_masters */
+/* truetype_tables */
+/* type1_tables */
+/* sfnt_names */
+/* bdf_fonts */
+/* cid_fonts */
+/* pfr_fonts */
+/* winfnt_fonts */
+/* font_formats */
+/* gasp_table */
+/* */
+/***************************************************************************/
+
+
+/***************************************************************************/
+/* */
+/* <Chapter> */
+/* cache_subsystem */
+/* */
+/* <Title> */
+/* Cache Sub-System */
+/* */
+/* <Sections> */
+/* cache_subsystem */
+/* */
+/***************************************************************************/
+
+
+/***************************************************************************/
+/* */
+/* <Chapter> */
+/* support_api */
+/* */
+/* <Title> */
+/* Support API */
+/* */
+/* <Sections> */
+/* computations */
+/* list_processing */
+/* outline_processing */
+/* bitmap_handling */
+/* raster */
+/* glyph_stroker */
+/* system_interface */
+/* module_management */
+/* gzip */
+/* lzw */
+/* lcd_filtering */
+/* */
+/***************************************************************************/
diff --git a/src/3rdparty/freetype/include/freetype/ftcid.h b/src/3rdparty/freetype/include/freetype/ftcid.h
new file mode 100644
index 0000000..f0387f0
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/ftcid.h
@@ -0,0 +1,98 @@
+/***************************************************************************/
+/* */
+/* ftcid.h */
+/* */
+/* FreeType API for accessing CID font information (specification). */
+/* */
+/* Copyright 2007 by Dereg Clegg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef __FTCID_H__
+#define __FTCID_H__
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* cid_fonts */
+ /* */
+ /* <Title> */
+ /* CID Fonts */
+ /* */
+ /* <Abstract> */
+ /* CID-keyed font specific API. */
+ /* */
+ /* <Description> */
+ /* This section contains the declaration of CID-keyed font specific */
+ /* functions. */
+ /* */
+ /*************************************************************************/
+
+
+ /**********************************************************************
+ *
+ * @function:
+ * FT_Get_CID_Registry_Ordering_Supplement
+ *
+ * @description:
+ * Retrieve the Registry/Ordering/Supplement triple (also known as the
+ * "R/O/S") from a CID-keyed font.
+ *
+ * @input:
+ * face ::
+ * A handle to the input face.
+ *
+ * @output:
+ * registry ::
+ * The registry, as a C string, owned by the face.
+ *
+ * ordering ::
+ * The ordering, as a C string, owned by the face.
+ *
+ * supplement ::
+ * The supplement.
+ *
+ * @return:
+ * FreeType error code. 0 means success.
+ *
+ * @note:
+ * This function only works with CID faces, returning an error
+ * otherwise.
+ *
+ * @since:
+ * 2.3.6
+ */
+ FT_EXPORT( FT_Error )
+ FT_Get_CID_Registry_Ordering_Supplement( FT_Face face,
+ const char* *registry,
+ const char* *ordering,
+ FT_Int *supplement);
+
+ /* */
+
+FT_END_HEADER
+
+#endif /* __FTCID_H__ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/include/freetype/fterrdef.h b/src/3rdparty/freetype/include/freetype/fterrdef.h
new file mode 100644
index 0000000..d7ad256
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/fterrdef.h
@@ -0,0 +1,239 @@
+/***************************************************************************/
+/* */
+/* fterrdef.h */
+/* */
+/* FreeType error codes (specification). */
+/* */
+/* Copyright 2002, 2004, 2006, 2007 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+ /*******************************************************************/
+ /*******************************************************************/
+ /***** *****/
+ /***** LIST OF ERROR CODES/MESSAGES *****/
+ /***** *****/
+ /*******************************************************************/
+ /*******************************************************************/
+
+
+ /* You need to define both FT_ERRORDEF_ and FT_NOERRORDEF_ before */
+ /* including this file. */
+
+
+ /* generic errors */
+
+ FT_NOERRORDEF_( Ok, 0x00, \
+ "no error" )
+
+ FT_ERRORDEF_( Cannot_Open_Resource, 0x01, \
+ "cannot open resource" )
+ FT_ERRORDEF_( Unknown_File_Format, 0x02, \
+ "unknown file format" )
+ FT_ERRORDEF_( Invalid_File_Format, 0x03, \
+ "broken file" )
+ FT_ERRORDEF_( Invalid_Version, 0x04, \
+ "invalid FreeType version" )
+ FT_ERRORDEF_( Lower_Module_Version, 0x05, \
+ "module version is too low" )
+ FT_ERRORDEF_( Invalid_Argument, 0x06, \
+ "invalid argument" )
+ FT_ERRORDEF_( Unimplemented_Feature, 0x07, \
+ "unimplemented feature" )
+ FT_ERRORDEF_( Invalid_Table, 0x08, \
+ "broken table" )
+ FT_ERRORDEF_( Invalid_Offset, 0x09, \
+ "broken offset within table" )
+ FT_ERRORDEF_( Array_Too_Large, 0x0A, \
+ "array allocation size too large" )
+
+ /* glyph/character errors */
+
+ FT_ERRORDEF_( Invalid_Glyph_Index, 0x10, \
+ "invalid glyph index" )
+ FT_ERRORDEF_( Invalid_Character_Code, 0x11, \
+ "invalid character code" )
+ FT_ERRORDEF_( Invalid_Glyph_Format, 0x12, \
+ "unsupported glyph image format" )
+ FT_ERRORDEF_( Cannot_Render_Glyph, 0x13, \
+ "cannot render this glyph format" )
+ FT_ERRORDEF_( Invalid_Outline, 0x14, \
+ "invalid outline" )
+ FT_ERRORDEF_( Invalid_Composite, 0x15, \
+ "invalid composite glyph" )
+ FT_ERRORDEF_( Too_Many_Hints, 0x16, \
+ "too many hints" )
+ FT_ERRORDEF_( Invalid_Pixel_Size, 0x17, \
+ "invalid pixel size" )
+
+ /* handle errors */
+
+ FT_ERRORDEF_( Invalid_Handle, 0x20, \
+ "invalid object handle" )
+ FT_ERRORDEF_( Invalid_Library_Handle, 0x21, \
+ "invalid library handle" )
+ FT_ERRORDEF_( Invalid_Driver_Handle, 0x22, \
+ "invalid module handle" )
+ FT_ERRORDEF_( Invalid_Face_Handle, 0x23, \
+ "invalid face handle" )
+ FT_ERRORDEF_( Invalid_Size_Handle, 0x24, \
+ "invalid size handle" )
+ FT_ERRORDEF_( Invalid_Slot_Handle, 0x25, \
+ "invalid glyph slot handle" )
+ FT_ERRORDEF_( Invalid_CharMap_Handle, 0x26, \
+ "invalid charmap handle" )
+ FT_ERRORDEF_( Invalid_Cache_Handle, 0x27, \
+ "invalid cache manager handle" )
+ FT_ERRORDEF_( Invalid_Stream_Handle, 0x28, \
+ "invalid stream handle" )
+
+ /* driver errors */
+
+ FT_ERRORDEF_( Too_Many_Drivers, 0x30, \
+ "too many modules" )
+ FT_ERRORDEF_( Too_Many_Extensions, 0x31, \
+ "too many extensions" )
+
+ /* memory errors */
+
+ FT_ERRORDEF_( Out_Of_Memory, 0x40, \
+ "out of memory" )
+ FT_ERRORDEF_( Unlisted_Object, 0x41, \
+ "unlisted object" )
+
+ /* stream errors */
+
+ FT_ERRORDEF_( Cannot_Open_Stream, 0x51, \
+ "cannot open stream" )
+ FT_ERRORDEF_( Invalid_Stream_Seek, 0x52, \
+ "invalid stream seek" )
+ FT_ERRORDEF_( Invalid_Stream_Skip, 0x53, \
+ "invalid stream skip" )
+ FT_ERRORDEF_( Invalid_Stream_Read, 0x54, \
+ "invalid stream read" )
+ FT_ERRORDEF_( Invalid_Stream_Operation, 0x55, \
+ "invalid stream operation" )
+ FT_ERRORDEF_( Invalid_Frame_Operation, 0x56, \
+ "invalid frame operation" )
+ FT_ERRORDEF_( Nested_Frame_Access, 0x57, \
+ "nested frame access" )
+ FT_ERRORDEF_( Invalid_Frame_Read, 0x58, \
+ "invalid frame read" )
+
+ /* raster errors */
+
+ FT_ERRORDEF_( Raster_Uninitialized, 0x60, \
+ "raster uninitialized" )
+ FT_ERRORDEF_( Raster_Corrupted, 0x61, \
+ "raster corrupted" )
+ FT_ERRORDEF_( Raster_Overflow, 0x62, \
+ "raster overflow" )
+ FT_ERRORDEF_( Raster_Negative_Height, 0x63, \
+ "negative height while rastering" )
+
+ /* cache errors */
+
+ FT_ERRORDEF_( Too_Many_Caches, 0x70, \
+ "too many registered caches" )
+
+ /* TrueType and SFNT errors */
+
+ FT_ERRORDEF_( Invalid_Opcode, 0x80, \
+ "invalid opcode" )
+ FT_ERRORDEF_( Too_Few_Arguments, 0x81, \
+ "too few arguments" )
+ FT_ERRORDEF_( Stack_Overflow, 0x82, \
+ "stack overflow" )
+ FT_ERRORDEF_( Code_Overflow, 0x83, \
+ "code overflow" )
+ FT_ERRORDEF_( Bad_Argument, 0x84, \
+ "bad argument" )
+ FT_ERRORDEF_( Divide_By_Zero, 0x85, \
+ "division by zero" )
+ FT_ERRORDEF_( Invalid_Reference, 0x86, \
+ "invalid reference" )
+ FT_ERRORDEF_( Debug_OpCode, 0x87, \
+ "found debug opcode" )
+ FT_ERRORDEF_( ENDF_In_Exec_Stream, 0x88, \
+ "found ENDF opcode in execution stream" )
+ FT_ERRORDEF_( Nested_DEFS, 0x89, \
+ "nested DEFS" )
+ FT_ERRORDEF_( Invalid_CodeRange, 0x8A, \
+ "invalid code range" )
+ FT_ERRORDEF_( Execution_Too_Long, 0x8B, \
+ "execution context too long" )
+ FT_ERRORDEF_( Too_Many_Function_Defs, 0x8C, \
+ "too many function definitions" )
+ FT_ERRORDEF_( Too_Many_Instruction_Defs, 0x8D, \
+ "too many instruction definitions" )
+ FT_ERRORDEF_( Table_Missing, 0x8E, \
+ "SFNT font table missing" )
+ FT_ERRORDEF_( Horiz_Header_Missing, 0x8F, \
+ "horizontal header (hhea) table missing" )
+ FT_ERRORDEF_( Locations_Missing, 0x90, \
+ "locations (loca) table missing" )
+ FT_ERRORDEF_( Name_Table_Missing, 0x91, \
+ "name table missing" )
+ FT_ERRORDEF_( CMap_Table_Missing, 0x92, \
+ "character map (cmap) table missing" )
+ FT_ERRORDEF_( Hmtx_Table_Missing, 0x93, \
+ "horizontal metrics (hmtx) table missing" )
+ FT_ERRORDEF_( Post_Table_Missing, 0x94, \
+ "PostScript (post) table missing" )
+ FT_ERRORDEF_( Invalid_Horiz_Metrics, 0x95, \
+ "invalid horizontal metrics" )
+ FT_ERRORDEF_( Invalid_CharMap_Format, 0x96, \
+ "invalid character map (cmap) format" )
+ FT_ERRORDEF_( Invalid_PPem, 0x97, \
+ "invalid ppem value" )
+ FT_ERRORDEF_( Invalid_Vert_Metrics, 0x98, \
+ "invalid vertical metrics" )
+ FT_ERRORDEF_( Could_Not_Find_Context, 0x99, \
+ "could not find context" )
+ FT_ERRORDEF_( Invalid_Post_Table_Format, 0x9A, \
+ "invalid PostScript (post) table format" )
+ FT_ERRORDEF_( Invalid_Post_Table, 0x9B, \
+ "invalid PostScript (post) table" )
+
+ /* CFF, CID, and Type 1 errors */
+
+ FT_ERRORDEF_( Syntax_Error, 0xA0, \
+ "opcode syntax error" )
+ FT_ERRORDEF_( Stack_Underflow, 0xA1, \
+ "argument stack underflow" )
+ FT_ERRORDEF_( Ignore, 0xA2, \
+ "ignore" )
+
+ /* BDF errors */
+
+ FT_ERRORDEF_( Missing_Startfont_Field, 0xB0, \
+ "`STARTFONT' field missing" )
+ FT_ERRORDEF_( Missing_Font_Field, 0xB1, \
+ "`FONT' field missing" )
+ FT_ERRORDEF_( Missing_Size_Field, 0xB2, \
+ "`SIZE' field missing" )
+ FT_ERRORDEF_( Missing_Chars_Field, 0xB3, \
+ "`CHARS' field missing" )
+ FT_ERRORDEF_( Missing_Startchar_Field, 0xB4, \
+ "`STARTCHAR' field missing" )
+ FT_ERRORDEF_( Missing_Encoding_Field, 0xB5, \
+ "`ENCODING' field missing" )
+ FT_ERRORDEF_( Missing_Bbx_Field, 0xB6, \
+ "`BBX' field missing" )
+ FT_ERRORDEF_( Bbx_Too_Big, 0xB7, \
+ "`BBX' too big" )
+ FT_ERRORDEF_( Corrupted_Font_Header, 0xB8, \
+ "Font header corrupted or missing fields" )
+ FT_ERRORDEF_( Corrupted_Font_Glyphs, 0xB9, \
+ "Font glyphs corrupted or missing fields" )
+
+
+/* END */
diff --git a/src/3rdparty/freetype/include/freetype/fterrors.h b/src/3rdparty/freetype/include/freetype/fterrors.h
new file mode 100644
index 0000000..6600dad
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/fterrors.h
@@ -0,0 +1,206 @@
+/***************************************************************************/
+/* */
+/* fterrors.h */
+/* */
+/* FreeType error code handling (specification). */
+/* */
+/* Copyright 1996-2001, 2002, 2004, 2007 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* This special header file is used to define the handling of FT2 */
+ /* enumeration constants. It can also be used to generate error message */
+ /* strings with a small macro trick explained below. */
+ /* */
+ /* I - Error Formats */
+ /* ----------------- */
+ /* */
+ /* The configuration macro FT_CONFIG_OPTION_USE_MODULE_ERRORS can be */
+ /* defined in ftoption.h in order to make the higher byte indicate */
+ /* the module where the error has happened (this is not compatible */
+ /* with standard builds of FreeType 2). You can then use the macro */
+ /* FT_ERROR_BASE macro to extract the generic error code from an */
+ /* FT_Error value. */
+ /* */
+ /* */
+ /* II - Error Message strings */
+ /* -------------------------- */
+ /* */
+ /* The error definitions below are made through special macros that */
+ /* allow client applications to build a table of error message strings */
+ /* if they need it. The strings are not included in a normal build of */
+ /* FreeType 2 to save space (most client applications do not use */
+ /* them). */
+ /* */
+ /* To do so, you have to define the following macros before including */
+ /* this file: */
+ /* */
+ /* FT_ERROR_START_LIST :: */
+ /* This macro is called before anything else to define the start of */
+ /* the error list. It is followed by several FT_ERROR_DEF calls */
+ /* (see below). */
+ /* */
+ /* FT_ERROR_DEF( e, v, s ) :: */
+ /* This macro is called to define one single error. */
+ /* `e' is the error code identifier (e.g. FT_Err_Invalid_Argument). */
+ /* `v' is the error numerical value. */
+ /* `s' is the corresponding error string. */
+ /* */
+ /* FT_ERROR_END_LIST :: */
+ /* This macro ends the list. */
+ /* */
+ /* Additionally, you have to undefine __FTERRORS_H__ before #including */
+ /* this file. */
+ /* */
+ /* Here is a simple example: */
+ /* */
+ /* { */
+ /* #undef __FTERRORS_H__ */
+ /* #define FT_ERRORDEF( e, v, s ) { e, s }, */
+ /* #define FT_ERROR_START_LIST { */
+ /* #define FT_ERROR_END_LIST { 0, 0 } }; */
+ /* */
+ /* const struct */
+ /* { */
+ /* int err_code; */
+ /* const char* err_msg; */
+ /* } ft_errors[] = */
+ /* */
+ /* #include FT_ERRORS_H */
+ /* } */
+ /* */
+ /*************************************************************************/
+
+
+#ifndef __FTERRORS_H__
+#define __FTERRORS_H__
+
+
+ /* include module base error codes */
+#include FT_MODULE_ERRORS_H
+
+
+ /*******************************************************************/
+ /*******************************************************************/
+ /***** *****/
+ /***** SETUP MACROS *****/
+ /***** *****/
+ /*******************************************************************/
+ /*******************************************************************/
+
+
+#undef FT_NEED_EXTERN_C
+
+#undef FT_ERR_XCAT
+#undef FT_ERR_CAT
+
+#define FT_ERR_XCAT( x, y ) x ## y
+#define FT_ERR_CAT( x, y ) FT_ERR_XCAT( x, y )
+
+
+ /* FT_ERR_PREFIX is used as a prefix for error identifiers. */
+ /* By default, we use `FT_Err_'. */
+ /* */
+#ifndef FT_ERR_PREFIX
+#define FT_ERR_PREFIX FT_Err_
+#endif
+
+
+ /* FT_ERR_BASE is used as the base for module-specific errors. */
+ /* */
+#ifdef FT_CONFIG_OPTION_USE_MODULE_ERRORS
+
+#ifndef FT_ERR_BASE
+#define FT_ERR_BASE FT_Mod_Err_Base
+#endif
+
+#else
+
+#undef FT_ERR_BASE
+#define FT_ERR_BASE 0
+
+#endif /* FT_CONFIG_OPTION_USE_MODULE_ERRORS */
+
+
+ /* If FT_ERRORDEF is not defined, we need to define a simple */
+ /* enumeration type. */
+ /* */
+#ifndef FT_ERRORDEF
+
+#define FT_ERRORDEF( e, v, s ) e = v,
+#define FT_ERROR_START_LIST enum {
+#define FT_ERROR_END_LIST FT_ERR_CAT( FT_ERR_PREFIX, Max ) };
+
+#ifdef __cplusplus
+#define FT_NEED_EXTERN_C
+ extern "C" {
+#endif
+
+#endif /* !FT_ERRORDEF */
+
+
+ /* this macro is used to define an error */
+#define FT_ERRORDEF_( e, v, s ) \
+ FT_ERRORDEF( FT_ERR_CAT( FT_ERR_PREFIX, e ), v + FT_ERR_BASE, s )
+
+ /* this is only used for <module>_Err_Ok, which must be 0! */
+#define FT_NOERRORDEF_( e, v, s ) \
+ FT_ERRORDEF( FT_ERR_CAT( FT_ERR_PREFIX, e ), v, s )
+
+
+#ifdef FT_ERROR_START_LIST
+ FT_ERROR_START_LIST
+#endif
+
+
+ /* now include the error codes */
+#include FT_ERROR_DEFINITIONS_H
+
+
+#ifdef FT_ERROR_END_LIST
+ FT_ERROR_END_LIST
+#endif
+
+
+ /*******************************************************************/
+ /*******************************************************************/
+ /***** *****/
+ /***** SIMPLE CLEANUP *****/
+ /***** *****/
+ /*******************************************************************/
+ /*******************************************************************/
+
+#ifdef FT_NEED_EXTERN_C
+ }
+#endif
+
+#undef FT_ERROR_START_LIST
+#undef FT_ERROR_END_LIST
+
+#undef FT_ERRORDEF
+#undef FT_ERRORDEF_
+#undef FT_NOERRORDEF_
+
+#undef FT_NEED_EXTERN_C
+#undef FT_ERR_CONCAT
+#undef FT_ERR_BASE
+
+ /* FT_KEEP_ERR_PREFIX is needed for ftvalid.h */
+#ifndef FT_KEEP_ERR_PREFIX
+#undef FT_ERR_PREFIX
+#endif
+
+#endif /* __FTERRORS_H__ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/include/freetype/ftgasp.h b/src/3rdparty/freetype/include/freetype/ftgasp.h
new file mode 100644
index 0000000..2692c31
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/ftgasp.h
@@ -0,0 +1,113 @@
+/***************************************************************************/
+/* */
+/* ftgasp.h */
+/* */
+/* Access of TrueType's `gasp' table (specification). */
+/* */
+/* Copyright 2007, 2008 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef _FT_GASP_H_
+#define _FT_GASP_H_
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+
+ /***************************************************************************
+ *
+ * @section:
+ * gasp_table
+ *
+ * @title:
+ * Gasp Table
+ *
+ * @abstract:
+ * Retrieving TrueType `gasp' table entries
+ *
+ * @description:
+ * The function @FT_Get_Gasp can be used to query a TrueType or OpenType
+ * font for specific entries in their `gasp' table, if any. This is
+ * mainly useful when implementing native TrueType hinting with the
+ * bytecode interpreter to duplicate the Windows text rendering results.
+ */
+
+ /*************************************************************************
+ *
+ * @enum:
+ * FT_GASP_XXX
+ *
+ * @description:
+ * A list of values and/or bit-flags returned by the @FT_Get_Gasp
+ * function.
+ *
+ * @values:
+ * FT_GASP_NO_TABLE ::
+ * This special value means that there is no GASP table in this face.
+ * It is up to the client to decide what to do.
+ *
+ * FT_GASP_DO_GRIDFIT ::
+ * Grid-fitting and hinting should be performed at the specified ppem.
+ * This *really* means TrueType bytecode interpretation.
+ *
+ * FT_GASP_DO_GRAY ::
+ * Anti-aliased rendering should be performed at the specified ppem.
+ *
+ * FT_GASP_SYMMETRIC_SMOOTHING ::
+ * Smoothing along multiple axes must be used with ClearType.
+ *
+ * FT_GASP_SYMMETRIC_GRIDFIT ::
+ * Grid-fitting must be used with ClearType's symmetric smoothing.
+ *
+ * @note:
+ * `ClearType' is Microsoft's implementation of LCD rendering, partly
+ * protected by patents.
+ *
+ * @since:
+ * 2.3.0
+ */
+#define FT_GASP_NO_TABLE -1
+#define FT_GASP_DO_GRIDFIT 0x01
+#define FT_GASP_DO_GRAY 0x02
+#define FT_GASP_SYMMETRIC_SMOOTHING 0x08
+#define FT_GASP_SYMMETRIC_GRIDFIT 0x10
+
+
+ /*************************************************************************
+ *
+ * @func:
+ * FT_Get_Gasp
+ *
+ * @description:
+ * Read the `gasp' table from a TrueType or OpenType font file and
+ * return the entry corresponding to a given character pixel size.
+ *
+ * @input:
+ * face :: The source face handle.
+ * ppem :: The vertical character pixel size.
+ *
+ * @return:
+ * Bit flags (see @FT_GASP_XXX), or @FT_GASP_NO_TABLE if there is no
+ * `gasp' table in the face.
+ *
+ * @since:
+ * 2.3.0
+ */
+ FT_EXPORT( FT_Int )
+ FT_Get_Gasp( FT_Face face,
+ FT_UInt ppem );
+
+/* */
+
+#endif /* _FT_GASP_H_ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/include/freetype/ftglyph.h b/src/3rdparty/freetype/include/freetype/ftglyph.h
new file mode 100644
index 0000000..35574ca
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/ftglyph.h
@@ -0,0 +1,575 @@
+/***************************************************************************/
+/* */
+/* ftglyph.h */
+/* */
+/* FreeType convenience functions to handle glyphs (specification). */
+/* */
+/* Copyright 1996-2001, 2002, 2003, 2006 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* This file contains the definition of several convenience functions */
+ /* that can be used by client applications to easily retrieve glyph */
+ /* bitmaps and outlines from a given face. */
+ /* */
+ /* These functions should be optional if you are writing a font server */
+ /* or text layout engine on top of FreeType. However, they are pretty */
+ /* handy for many other simple uses of the library. */
+ /* */
+ /*************************************************************************/
+
+
+#ifndef __FTGLYPH_H__
+#define __FTGLYPH_H__
+
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* glyph_management */
+ /* */
+ /* <Title> */
+ /* Glyph Management */
+ /* */
+ /* <Abstract> */
+ /* Generic interface to manage individual glyph data. */
+ /* */
+ /* <Description> */
+ /* This section contains definitions used to manage glyph data */
+ /* through generic FT_Glyph objects. Each of them can contain a */
+ /* bitmap, a vector outline, or even images in other formats. */
+ /* */
+ /*************************************************************************/
+
+
+ /* forward declaration to a private type */
+ typedef struct FT_Glyph_Class_ FT_Glyph_Class;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_Glyph */
+ /* */
+ /* <Description> */
+ /* Handle to an object used to model generic glyph images. It is a */
+ /* pointer to the @FT_GlyphRec structure and can contain a glyph */
+ /* bitmap or pointer. */
+ /* */
+ /* <Note> */
+ /* Glyph objects are not owned by the library. You must thus release */
+ /* them manually (through @FT_Done_Glyph) _before_ calling */
+ /* @FT_Done_FreeType. */
+ /* */
+ typedef struct FT_GlyphRec_* FT_Glyph;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_GlyphRec */
+ /* */
+ /* <Description> */
+ /* The root glyph structure contains a given glyph image plus its */
+ /* advance width in 16.16 fixed float format. */
+ /* */
+ /* <Fields> */
+ /* library :: A handle to the FreeType library object. */
+ /* */
+ /* clazz :: A pointer to the glyph's class. Private. */
+ /* */
+ /* format :: The format of the glyph's image. */
+ /* */
+ /* advance :: A 16.16 vector that gives the glyph's advance width. */
+ /* */
+ typedef struct FT_GlyphRec_
+ {
+ FT_Library library;
+ const FT_Glyph_Class* clazz;
+ FT_Glyph_Format format;
+ FT_Vector advance;
+
+ } FT_GlyphRec;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_BitmapGlyph */
+ /* */
+ /* <Description> */
+ /* A handle to an object used to model a bitmap glyph image. This is */
+ /* a sub-class of @FT_Glyph, and a pointer to @FT_BitmapGlyphRec. */
+ /* */
+ typedef struct FT_BitmapGlyphRec_* FT_BitmapGlyph;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_BitmapGlyphRec */
+ /* */
+ /* <Description> */
+ /* A structure used for bitmap glyph images. This really is a */
+ /* `sub-class' of @FT_GlyphRec. */
+ /* */
+ /* <Fields> */
+ /* root :: The root @FT_Glyph fields. */
+ /* */
+ /* left :: The left-side bearing, i.e., the horizontal distance */
+ /* from the current pen position to the left border of the */
+ /* glyph bitmap. */
+ /* */
+ /* top :: The top-side bearing, i.e., the vertical distance from */
+ /* the current pen position to the top border of the glyph */
+ /* bitmap. This distance is positive for upwards-y! */
+ /* */
+ /* bitmap :: A descriptor for the bitmap. */
+ /* */
+ /* <Note> */
+ /* You can typecast an @FT_Glyph to @FT_BitmapGlyph if you have */
+ /* `glyph->format == FT_GLYPH_FORMAT_BITMAP'. This lets you access */
+ /* the bitmap's contents easily. */
+ /* */
+ /* The corresponding pixel buffer is always owned by @FT_BitmapGlyph */
+ /* and is thus created and destroyed with it. */
+ /* */
+ typedef struct FT_BitmapGlyphRec_
+ {
+ FT_GlyphRec root;
+ FT_Int left;
+ FT_Int top;
+ FT_Bitmap bitmap;
+
+ } FT_BitmapGlyphRec;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_OutlineGlyph */
+ /* */
+ /* <Description> */
+ /* A handle to an object used to model an outline glyph image. This */
+ /* is a sub-class of @FT_Glyph, and a pointer to @FT_OutlineGlyphRec. */
+ /* */
+ typedef struct FT_OutlineGlyphRec_* FT_OutlineGlyph;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_OutlineGlyphRec */
+ /* */
+ /* <Description> */
+ /* A structure used for outline (vectorial) glyph images. This */
+ /* really is a `sub-class' of @FT_GlyphRec. */
+ /* */
+ /* <Fields> */
+ /* root :: The root @FT_Glyph fields. */
+ /* */
+ /* outline :: A descriptor for the outline. */
+ /* */
+ /* <Note> */
+ /* You can typecast a @FT_Glyph to @FT_OutlineGlyph if you have */
+ /* `glyph->format == FT_GLYPH_FORMAT_OUTLINE'. This lets you access */
+ /* the outline's content easily. */
+ /* */
+ /* As the outline is extracted from a glyph slot, its coordinates are */
+ /* expressed normally in 26.6 pixels, unless the flag */
+ /* @FT_LOAD_NO_SCALE was used in @FT_Load_Glyph() or @FT_Load_Char(). */
+ /* */
+ /* The outline's tables are always owned by the object and are */
+ /* destroyed with it. */
+ /* */
+ typedef struct FT_OutlineGlyphRec_
+ {
+ FT_GlyphRec root;
+ FT_Outline outline;
+
+ } FT_OutlineGlyphRec;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Get_Glyph */
+ /* */
+ /* <Description> */
+ /* A function used to extract a glyph image from a slot. */
+ /* */
+ /* <Input> */
+ /* slot :: A handle to the source glyph slot. */
+ /* */
+ /* <Output> */
+ /* aglyph :: A handle to the glyph object. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Get_Glyph( FT_GlyphSlot slot,
+ FT_Glyph *aglyph );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Glyph_Copy */
+ /* */
+ /* <Description> */
+ /* A function used to copy a glyph image. Note that the created */
+ /* @FT_Glyph object must be released with @FT_Done_Glyph. */
+ /* */
+ /* <Input> */
+ /* source :: A handle to the source glyph object. */
+ /* */
+ /* <Output> */
+ /* target :: A handle to the target glyph object. 0 in case of */
+ /* error. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Glyph_Copy( FT_Glyph source,
+ FT_Glyph *target );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Glyph_Transform */
+ /* */
+ /* <Description> */
+ /* Transforms a glyph image if its format is scalable. */
+ /* */
+ /* <InOut> */
+ /* glyph :: A handle to the target glyph object. */
+ /* */
+ /* <Input> */
+ /* matrix :: A pointer to a 2x2 matrix to apply. */
+ /* */
+ /* delta :: A pointer to a 2d vector to apply. Coordinates are */
+ /* expressed in 1/64th of a pixel. */
+ /* */
+ /* <Return> */
+ /* FreeType error code (if not 0, the glyph format is not scalable). */
+ /* */
+ /* <Note> */
+ /* The 2x2 transformation matrix is also applied to the glyph's */
+ /* advance vector. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Glyph_Transform( FT_Glyph glyph,
+ FT_Matrix* matrix,
+ FT_Vector* delta );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Enum> */
+ /* FT_Glyph_BBox_Mode */
+ /* */
+ /* <Description> */
+ /* The mode how the values of @FT_Glyph_Get_CBox are returned. */
+ /* */
+ /* <Values> */
+ /* FT_GLYPH_BBOX_UNSCALED :: */
+ /* Return unscaled font units. */
+ /* */
+ /* FT_GLYPH_BBOX_SUBPIXELS :: */
+ /* Return unfitted 26.6 coordinates. */
+ /* */
+ /* FT_GLYPH_BBOX_GRIDFIT :: */
+ /* Return grid-fitted 26.6 coordinates. */
+ /* */
+ /* FT_GLYPH_BBOX_TRUNCATE :: */
+ /* Return coordinates in integer pixels. */
+ /* */
+ /* FT_GLYPH_BBOX_PIXELS :: */
+ /* Return grid-fitted pixel coordinates. */
+ /* */
+ typedef enum FT_Glyph_BBox_Mode_
+ {
+ FT_GLYPH_BBOX_UNSCALED = 0,
+ FT_GLYPH_BBOX_SUBPIXELS = 0,
+ FT_GLYPH_BBOX_GRIDFIT = 1,
+ FT_GLYPH_BBOX_TRUNCATE = 2,
+ FT_GLYPH_BBOX_PIXELS = 3
+
+ } FT_Glyph_BBox_Mode;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Enum> */
+ /* ft_glyph_bbox_xxx */
+ /* */
+ /* <Description> */
+ /* These constants are deprecated. Use the corresponding */
+ /* @FT_Glyph_BBox_Mode values instead. */
+ /* */
+ /* <Values> */
+ /* ft_glyph_bbox_unscaled :: See @FT_GLYPH_BBOX_UNSCALED. */
+ /* ft_glyph_bbox_subpixels :: See @FT_GLYPH_BBOX_SUBPIXELS. */
+ /* ft_glyph_bbox_gridfit :: See @FT_GLYPH_BBOX_GRIDFIT. */
+ /* ft_glyph_bbox_truncate :: See @FT_GLYPH_BBOX_TRUNCATE. */
+ /* ft_glyph_bbox_pixels :: See @FT_GLYPH_BBOX_PIXELS. */
+ /* */
+#define ft_glyph_bbox_unscaled FT_GLYPH_BBOX_UNSCALED
+#define ft_glyph_bbox_subpixels FT_GLYPH_BBOX_SUBPIXELS
+#define ft_glyph_bbox_gridfit FT_GLYPH_BBOX_GRIDFIT
+#define ft_glyph_bbox_truncate FT_GLYPH_BBOX_TRUNCATE
+#define ft_glyph_bbox_pixels FT_GLYPH_BBOX_PIXELS
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Glyph_Get_CBox */
+ /* */
+ /* <Description> */
+ /* Return a glyph's `control box'. The control box encloses all the */
+ /* outline's points, including Bezier control points. Though it */
+ /* coincides with the exact bounding box for most glyphs, it can be */
+ /* slightly larger in some situations (like when rotating an outline */
+ /* which contains Bezier outside arcs). */
+ /* */
+ /* Computing the control box is very fast, while getting the bounding */
+ /* box can take much more time as it needs to walk over all segments */
+ /* and arcs in the outline. To get the latter, you can use the */
+ /* `ftbbox' component which is dedicated to this single task. */
+ /* */
+ /* <Input> */
+ /* glyph :: A handle to the source glyph object. */
+ /* */
+ /* mode :: The mode which indicates how to interpret the returned */
+ /* bounding box values. */
+ /* */
+ /* <Output> */
+ /* acbox :: The glyph coordinate bounding box. Coordinates are */
+ /* expressed in 1/64th of pixels if it is grid-fitted. */
+ /* */
+ /* <Note> */
+ /* Coordinates are relative to the glyph origin, using the Y-upwards */
+ /* convention. */
+ /* */
+ /* If the glyph has been loaded with @FT_LOAD_NO_SCALE, `bbox_mode' */
+ /* must be set to @FT_GLYPH_BBOX_UNSCALED to get unscaled font */
+ /* units in 26.6 pixel format. The value @FT_GLYPH_BBOX_SUBPIXELS */
+ /* is another name for this constant. */
+ /* */
+ /* Note that the maximum coordinates are exclusive, which means that */
+ /* one can compute the width and height of the glyph image (be it in */
+ /* integer or 26.6 pixels) as: */
+ /* */
+ /* { */
+ /* width = bbox.xMax - bbox.xMin; */
+ /* height = bbox.yMax - bbox.yMin; */
+ /* } */
+ /* */
+ /* Note also that for 26.6 coordinates, if `bbox_mode' is set to */
+ /* @FT_GLYPH_BBOX_GRIDFIT, the coordinates will also be grid-fitted, */
+ /* which corresponds to: */
+ /* */
+ /* { */
+ /* bbox.xMin = FLOOR(bbox.xMin); */
+ /* bbox.yMin = FLOOR(bbox.yMin); */
+ /* bbox.xMax = CEILING(bbox.xMax); */
+ /* bbox.yMax = CEILING(bbox.yMax); */
+ /* } */
+ /* */
+ /* To get the bbox in pixel coordinates, set `bbox_mode' to */
+ /* @FT_GLYPH_BBOX_TRUNCATE. */
+ /* */
+ /* To get the bbox in grid-fitted pixel coordinates, set `bbox_mode' */
+ /* to @FT_GLYPH_BBOX_PIXELS. */
+ /* */
+ FT_EXPORT( void )
+ FT_Glyph_Get_CBox( FT_Glyph glyph,
+ FT_UInt bbox_mode,
+ FT_BBox *acbox );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Glyph_To_Bitmap */
+ /* */
+ /* <Description> */
+ /* Converts a given glyph object to a bitmap glyph object. */
+ /* */
+ /* <InOut> */
+ /* the_glyph :: A pointer to a handle to the target glyph. */
+ /* */
+ /* <Input> */
+ /* render_mode :: An enumeration that describe how the data is */
+ /* rendered. */
+ /* */
+ /* origin :: A pointer to a vector used to translate the glyph */
+ /* image before rendering. Can be 0 (if no */
+ /* translation). The origin is expressed in */
+ /* 26.6 pixels. */
+ /* */
+ /* destroy :: A boolean that indicates that the original glyph */
+ /* image should be destroyed by this function. It is */
+ /* never destroyed in case of error. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ /* <Note> */
+ /* The glyph image is translated with the `origin' vector before */
+ /* rendering. */
+ /* */
+ /* The first parameter is a pointer to an @FT_Glyph handle, that will */
+ /* be replaced by this function. Typically, you would use (omitting */
+ /* error handling): */
+ /* */
+ /* */
+ /* { */
+ /* FT_Glyph glyph; */
+ /* FT_BitmapGlyph glyph_bitmap; */
+ /* */
+ /* */
+ /* // load glyph */
+ /* error = FT_Load_Char( face, glyph_index, FT_LOAD_DEFAUT ); */
+ /* */
+ /* // extract glyph image */
+ /* error = FT_Get_Glyph( face->glyph, &glyph ); */
+ /* */
+ /* // convert to a bitmap (default render mode + destroy old) */
+ /* if ( glyph->format != FT_GLYPH_FORMAT_BITMAP ) */
+ /* { */
+ /* error = FT_Glyph_To_Bitmap( &glyph, FT_RENDER_MODE_DEFAULT, */
+ /* 0, 1 ); */
+ /* if ( error ) // glyph unchanged */
+ /* ... */
+ /* } */
+ /* */
+ /* // access bitmap content by typecasting */
+ /* glyph_bitmap = (FT_BitmapGlyph)glyph; */
+ /* */
+ /* // do funny stuff with it, like blitting/drawing */
+ /* ... */
+ /* */
+ /* // discard glyph image (bitmap or not) */
+ /* FT_Done_Glyph( glyph ); */
+ /* } */
+ /* */
+ /* */
+ /* This function does nothing if the glyph format isn't scalable. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Glyph_To_Bitmap( FT_Glyph* the_glyph,
+ FT_Render_Mode render_mode,
+ FT_Vector* origin,
+ FT_Bool destroy );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Done_Glyph */
+ /* */
+ /* <Description> */
+ /* Destroys a given glyph. */
+ /* */
+ /* <Input> */
+ /* glyph :: A handle to the target glyph object. */
+ /* */
+ FT_EXPORT( void )
+ FT_Done_Glyph( FT_Glyph glyph );
+
+ /* */
+
+
+ /* other helpful functions */
+
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* computations */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Matrix_Multiply */
+ /* */
+ /* <Description> */
+ /* Performs the matrix operation `b = a*b'. */
+ /* */
+ /* <Input> */
+ /* a :: A pointer to matrix `a'. */
+ /* */
+ /* <InOut> */
+ /* b :: A pointer to matrix `b'. */
+ /* */
+ /* <Note> */
+ /* The result is undefined if either `a' or `b' is zero. */
+ /* */
+ FT_EXPORT( void )
+ FT_Matrix_Multiply( const FT_Matrix* a,
+ FT_Matrix* b );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Matrix_Invert */
+ /* */
+ /* <Description> */
+ /* Inverts a 2x2 matrix. Returns an error if it can't be inverted. */
+ /* */
+ /* <InOut> */
+ /* matrix :: A pointer to the target matrix. Remains untouched in */
+ /* case of error. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Matrix_Invert( FT_Matrix* matrix );
+
+
+ /* */
+
+
+FT_END_HEADER
+
+#endif /* __FTGLYPH_H__ */
+
+
+/* END */
+
+
+/* Local Variables: */
+/* coding: utf-8 */
+/* End: */
diff --git a/src/3rdparty/freetype/include/freetype/ftgxval.h b/src/3rdparty/freetype/include/freetype/ftgxval.h
new file mode 100644
index 0000000..c7ea861
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/ftgxval.h
@@ -0,0 +1,358 @@
+/***************************************************************************/
+/* */
+/* ftgxval.h */
+/* */
+/* FreeType API for validating TrueTypeGX/AAT tables (specification). */
+/* */
+/* Copyright 2004, 2005, 2006 by */
+/* Masatake YAMATO, Redhat K.K, */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+/***************************************************************************/
+/* */
+/* gxvalid is derived from both gxlayout module and otvalid module. */
+/* Development of gxlayout is supported by the Information-technology */
+/* Promotion Agency(IPA), Japan. */
+/* */
+/***************************************************************************/
+
+
+#ifndef __FTGXVAL_H__
+#define __FTGXVAL_H__
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* gx_validation */
+ /* */
+ /* <Title> */
+ /* TrueTypeGX/AAT Validation */
+ /* */
+ /* <Abstract> */
+ /* An API to validate TrueTypeGX/AAT tables. */
+ /* */
+ /* <Description> */
+ /* This section contains the declaration of functions to validate */
+ /* some TrueTypeGX tables (feat, mort, morx, bsln, just, kern, opbd, */
+ /* trak, prop, lcar). */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* */
+ /* Warning: Use FT_VALIDATE_XXX to validate a table. */
+ /* Following definitions are for gxvalid developers. */
+ /* */
+ /* */
+ /*************************************************************************/
+
+#define FT_VALIDATE_feat_INDEX 0
+#define FT_VALIDATE_mort_INDEX 1
+#define FT_VALIDATE_morx_INDEX 2
+#define FT_VALIDATE_bsln_INDEX 3
+#define FT_VALIDATE_just_INDEX 4
+#define FT_VALIDATE_kern_INDEX 5
+#define FT_VALIDATE_opbd_INDEX 6
+#define FT_VALIDATE_trak_INDEX 7
+#define FT_VALIDATE_prop_INDEX 8
+#define FT_VALIDATE_lcar_INDEX 9
+#define FT_VALIDATE_GX_LAST_INDEX FT_VALIDATE_lcar_INDEX
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_VALIDATE_GX_LENGTH
+ *
+ * @description:
+ * The number of tables checked in this module. Use it as a parameter
+ * for the `table-length' argument of function @FT_TrueTypeGX_Validate.
+ */
+#define FT_VALIDATE_GX_LENGTH (FT_VALIDATE_GX_LAST_INDEX + 1)
+
+ /* */
+
+ /* Up to 0x1000 is used by otvalid.
+ Ox2xxx is reserved for feature OT extension. */
+#define FT_VALIDATE_GX_START 0x4000
+#define FT_VALIDATE_GX_BITFIELD( tag ) \
+ ( FT_VALIDATE_GX_START << FT_VALIDATE_##tag##_INDEX )
+
+
+ /**********************************************************************
+ *
+ * @enum:
+ * FT_VALIDATE_GXXXX
+ *
+ * @description:
+ * A list of bit-field constants used with @FT_TrueTypeGX_Validate to
+ * indicate which TrueTypeGX/AAT Type tables should be validated.
+ *
+ * @values:
+ * FT_VALIDATE_feat ::
+ * Validate `feat' table.
+ *
+ * FT_VALIDATE_mort ::
+ * Validate `mort' table.
+ *
+ * FT_VALIDATE_morx ::
+ * Validate `morx' table.
+ *
+ * FT_VALIDATE_bsln ::
+ * Validate `bsln' table.
+ *
+ * FT_VALIDATE_just ::
+ * Validate `just' table.
+ *
+ * FT_VALIDATE_kern ::
+ * Validate `kern' table.
+ *
+ * FT_VALIDATE_opbd ::
+ * Validate `opbd' table.
+ *
+ * FT_VALIDATE_trak ::
+ * Validate `trak' table.
+ *
+ * FT_VALIDATE_prop ::
+ * Validate `prop' table.
+ *
+ * FT_VALIDATE_lcar ::
+ * Validate `lcar' table.
+ *
+ * FT_VALIDATE_GX ::
+ * Validate all TrueTypeGX tables (feat, mort, morx, bsln, just, kern,
+ * opbd, trak, prop and lcar).
+ *
+ */
+
+#define FT_VALIDATE_feat FT_VALIDATE_GX_BITFIELD( feat )
+#define FT_VALIDATE_mort FT_VALIDATE_GX_BITFIELD( mort )
+#define FT_VALIDATE_morx FT_VALIDATE_GX_BITFIELD( morx )
+#define FT_VALIDATE_bsln FT_VALIDATE_GX_BITFIELD( bsln )
+#define FT_VALIDATE_just FT_VALIDATE_GX_BITFIELD( just )
+#define FT_VALIDATE_kern FT_VALIDATE_GX_BITFIELD( kern )
+#define FT_VALIDATE_opbd FT_VALIDATE_GX_BITFIELD( opbd )
+#define FT_VALIDATE_trak FT_VALIDATE_GX_BITFIELD( trak )
+#define FT_VALIDATE_prop FT_VALIDATE_GX_BITFIELD( prop )
+#define FT_VALIDATE_lcar FT_VALIDATE_GX_BITFIELD( lcar )
+
+#define FT_VALIDATE_GX ( FT_VALIDATE_feat | \
+ FT_VALIDATE_mort | \
+ FT_VALIDATE_morx | \
+ FT_VALIDATE_bsln | \
+ FT_VALIDATE_just | \
+ FT_VALIDATE_kern | \
+ FT_VALIDATE_opbd | \
+ FT_VALIDATE_trak | \
+ FT_VALIDATE_prop | \
+ FT_VALIDATE_lcar )
+
+
+ /* */
+
+ /**********************************************************************
+ *
+ * @function:
+ * FT_TrueTypeGX_Validate
+ *
+ * @description:
+ * Validate various TrueTypeGX tables to assure that all offsets and
+ * indices are valid. The idea is that a higher-level library which
+ * actually does the text layout can access those tables without
+ * error checking (which can be quite time consuming).
+ *
+ * @input:
+ * face ::
+ * A handle to the input face.
+ *
+ * validation_flags ::
+ * A bit field which specifies the tables to be validated. See
+ * @FT_VALIDATE_GXXXX for possible values.
+ *
+ * table_length ::
+ * The size of the `tables' array. Normally, @FT_VALIDATE_GX_LENGTH
+ * should be passed.
+ *
+ * @output:
+ * tables ::
+ * The array where all validated sfnt tables are stored.
+ * The array itself must be allocated by a client.
+ *
+ * @return:
+ * FreeType error code. 0 means success.
+ *
+ * @note:
+ * This function only works with TrueTypeGX fonts, returning an error
+ * otherwise.
+ *
+ * After use, the application should deallocate the buffers pointed to by
+ * each `tables' element, by calling @FT_TrueTypeGX_Free. A NULL value
+ * indicates that the table either doesn't exist in the font, the
+ * application hasn't asked for validation, or the validator doesn't have
+ * the ability to validate the sfnt table.
+ */
+ FT_EXPORT( FT_Error )
+ FT_TrueTypeGX_Validate( FT_Face face,
+ FT_UInt validation_flags,
+ FT_Bytes tables[FT_VALIDATE_GX_LENGTH],
+ FT_UInt table_length );
+
+
+ /* */
+
+ /**********************************************************************
+ *
+ * @function:
+ * FT_TrueTypeGX_Free
+ *
+ * @description:
+ * Free the buffer allocated by TrueTypeGX validator.
+ *
+ * @input:
+ * face ::
+ * A handle to the input face.
+ *
+ * table ::
+ * The pointer to the buffer allocated by
+ * @FT_TrueTypeGX_Validate.
+ *
+ * @note:
+ * This function must be used to free the buffer allocated by
+ * @FT_TrueTypeGX_Validate only.
+ */
+ FT_EXPORT( void )
+ FT_TrueTypeGX_Free( FT_Face face,
+ FT_Bytes table );
+
+
+ /* */
+
+ /**********************************************************************
+ *
+ * @enum:
+ * FT_VALIDATE_CKERNXXX
+ *
+ * @description:
+ * A list of bit-field constants used with @FT_ClassicKern_Validate
+ * to indicate the classic kern dialect or dialects. If the selected
+ * type doesn't fit, @FT_ClassicKern_Validate regards the table as
+ * invalid.
+ *
+ * @values:
+ * FT_VALIDATE_MS ::
+ * Handle the `kern' table as a classic Microsoft kern table.
+ *
+ * FT_VALIDATE_APPLE ::
+ * Handle the `kern' table as a classic Apple kern table.
+ *
+ * FT_VALIDATE_CKERN ::
+ * Handle the `kern' as either classic Apple or Microsoft kern table.
+ */
+#define FT_VALIDATE_MS ( FT_VALIDATE_GX_START << 0 )
+#define FT_VALIDATE_APPLE ( FT_VALIDATE_GX_START << 1 )
+
+#define FT_VALIDATE_CKERN ( FT_VALIDATE_MS | FT_VALIDATE_APPLE )
+
+
+ /* */
+
+ /**********************************************************************
+ *
+ * @function:
+ * FT_ClassicKern_Validate
+ *
+ * @description:
+ * Validate classic (16bit format) kern table to assure that the offsets
+ * and indices are valid. The idea is that a higher-level library which
+ * actually does the text layout can access those tables without error
+ * checking (which can be quite time consuming).
+ *
+ * The `kern' table validator in @FT_TrueTypeGX_Validate deals with both
+ * the new 32bit format and the classic 16bit format, while
+ * FT_ClassicKern_Validate only supports the classic 16bit format.
+ *
+ * @input:
+ * face ::
+ * A handle to the input face.
+ *
+ * validation_flags ::
+ * A bit field which specifies the dialect to be validated. See
+ * @FT_VALIDATE_CKERNXXX for possible values.
+ *
+ * @output:
+ * ckern_table ::
+ * A pointer to the kern table.
+ *
+ * @return:
+ * FreeType error code. 0 means success.
+ *
+ * @note:
+ * After use, the application should deallocate the buffers pointed to by
+ * `ckern_table', by calling @FT_ClassicKern_Free. A NULL value
+ * indicates that the table doesn't exist in the font.
+ */
+ FT_EXPORT( FT_Error )
+ FT_ClassicKern_Validate( FT_Face face,
+ FT_UInt validation_flags,
+ FT_Bytes *ckern_table );
+
+
+ /* */
+
+ /**********************************************************************
+ *
+ * @function:
+ * FT_ClassicKern_Free
+ *
+ * @description:
+ * Free the buffer allocated by classic Kern validator.
+ *
+ * @input:
+ * face ::
+ * A handle to the input face.
+ *
+ * table ::
+ * The pointer to the buffer that is allocated by
+ * @FT_ClassicKern_Validate.
+ *
+ * @note:
+ * This function must be used to free the buffer allocated by
+ * @FT_ClassicKern_Validate only.
+ */
+ FT_EXPORT( void )
+ FT_ClassicKern_Free( FT_Face face,
+ FT_Bytes table );
+
+
+ /* */
+
+
+FT_END_HEADER
+
+#endif /* __FTGXVAL_H__ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/include/freetype/ftgzip.h b/src/3rdparty/freetype/include/freetype/ftgzip.h
new file mode 100644
index 0000000..9893437
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/ftgzip.h
@@ -0,0 +1,102 @@
+/***************************************************************************/
+/* */
+/* ftgzip.h */
+/* */
+/* Gzip-compressed stream support. */
+/* */
+/* Copyright 2002, 2003, 2004, 2006 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef __FTGZIP_H__
+#define __FTGZIP_H__
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* gzip */
+ /* */
+ /* <Title> */
+ /* GZIP Streams */
+ /* */
+ /* <Abstract> */
+ /* Using gzip-compressed font files. */
+ /* */
+ /* <Description> */
+ /* This section contains the declaration of Gzip-specific functions. */
+ /* */
+ /*************************************************************************/
+
+
+ /************************************************************************
+ *
+ * @function:
+ * FT_Stream_OpenGzip
+ *
+ * @description:
+ * Open a new stream to parse gzip-compressed font files. This is
+ * mainly used to support the compressed `*.pcf.gz' fonts that come
+ * with XFree86.
+ *
+ * @input:
+ * stream ::
+ * The target embedding stream.
+ *
+ * source ::
+ * The source stream.
+ *
+ * @return:
+ * FreeType error code. 0 means success.
+ *
+ * @note:
+ * The source stream must be opened _before_ calling this function.
+ *
+ * Calling the internal function `FT_Stream_Close' on the new stream will
+ * *not* call `FT_Stream_Close' on the source stream. None of the stream
+ * objects will be released to the heap.
+ *
+ * The stream implementation is very basic and resets the decompression
+ * process each time seeking backwards is needed within the stream.
+ *
+ * In certain builds of the library, gzip compression recognition is
+ * automatically handled when calling @FT_New_Face or @FT_Open_Face.
+ * This means that if no font driver is capable of handling the raw
+ * compressed file, the library will try to open a gzipped stream from
+ * it and re-open the face with it.
+ *
+ * This function may return `FT_Err_Unimplemented_Feature' if your build
+ * of FreeType was not compiled with zlib support.
+ */
+ FT_EXPORT( FT_Error )
+ FT_Stream_OpenGzip( FT_Stream stream,
+ FT_Stream source );
+
+ /* */
+
+
+FT_END_HEADER
+
+#endif /* __FTGZIP_H__ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/include/freetype/ftimage.h b/src/3rdparty/freetype/include/freetype/ftimage.h
new file mode 100644
index 0000000..ccfda37
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/ftimage.h
@@ -0,0 +1,1246 @@
+/***************************************************************************/
+/* */
+/* ftimage.h */
+/* */
+/* FreeType glyph image formats and default raster interface */
+/* (specification). */
+/* */
+/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+ /*************************************************************************/
+ /* */
+ /* Note: A `raster' is simply a scan-line converter, used to render */
+ /* FT_Outlines into FT_Bitmaps. */
+ /* */
+ /*************************************************************************/
+
+
+#ifndef __FTIMAGE_H__
+#define __FTIMAGE_H__
+
+
+ /* _STANDALONE_ is from ftgrays.c */
+#ifndef _STANDALONE_
+#include <ft2build.h>
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* basic_types */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_Pos */
+ /* */
+ /* <Description> */
+ /* The type FT_Pos is a 32-bit integer used to store vectorial */
+ /* coordinates. Depending on the context, these can represent */
+ /* distances in integer font units, or 16,16, or 26.6 fixed float */
+ /* pixel coordinates. */
+ /* */
+ typedef signed long FT_Pos;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_Vector */
+ /* */
+ /* <Description> */
+ /* A simple structure used to store a 2D vector; coordinates are of */
+ /* the FT_Pos type. */
+ /* */
+ /* <Fields> */
+ /* x :: The horizontal coordinate. */
+ /* y :: The vertical coordinate. */
+ /* */
+ typedef struct FT_Vector_
+ {
+ FT_Pos x;
+ FT_Pos y;
+
+ } FT_Vector;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_BBox */
+ /* */
+ /* <Description> */
+ /* A structure used to hold an outline's bounding box, i.e., the */
+ /* coordinates of its extrema in the horizontal and vertical */
+ /* directions. */
+ /* */
+ /* <Fields> */
+ /* xMin :: The horizontal minimum (left-most). */
+ /* */
+ /* yMin :: The vertical minimum (bottom-most). */
+ /* */
+ /* xMax :: The horizontal maximum (right-most). */
+ /* */
+ /* yMax :: The vertical maximum (top-most). */
+ /* */
+ typedef struct FT_BBox_
+ {
+ FT_Pos xMin, yMin;
+ FT_Pos xMax, yMax;
+
+ } FT_BBox;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Enum> */
+ /* FT_Pixel_Mode */
+ /* */
+ /* <Description> */
+ /* An enumeration type used to describe the format of pixels in a */
+ /* given bitmap. Note that additional formats may be added in the */
+ /* future. */
+ /* */
+ /* <Values> */
+ /* FT_PIXEL_MODE_NONE :: */
+ /* Value 0 is reserved. */
+ /* */
+ /* FT_PIXEL_MODE_MONO :: */
+ /* A monochrome bitmap, using 1 bit per pixel. Note that pixels */
+ /* are stored in most-significant order (MSB), which means that */
+ /* the left-most pixel in a byte has value 128. */
+ /* */
+ /* FT_PIXEL_MODE_GRAY :: */
+ /* An 8-bit bitmap, generally used to represent anti-aliased glyph */
+ /* images. Each pixel is stored in one byte. Note that the number */
+ /* of value `gray' levels is stored in the `num_bytes' field of */
+ /* the @FT_Bitmap structure (it generally is 256). */
+ /* */
+ /* FT_PIXEL_MODE_GRAY2 :: */
+ /* A 2-bit/pixel bitmap, used to represent embedded anti-aliased */
+ /* bitmaps in font files according to the OpenType specification. */
+ /* We haven't found a single font using this format, however. */
+ /* */
+ /* FT_PIXEL_MODE_GRAY4 :: */
+ /* A 4-bit/pixel bitmap, used to represent embedded anti-aliased */
+ /* bitmaps in font files according to the OpenType specification. */
+ /* We haven't found a single font using this format, however. */
+ /* */
+ /* FT_PIXEL_MODE_LCD :: */
+ /* An 8-bit bitmap, used to represent RGB or BGR decimated glyph */
+ /* images used for display on LCD displays; the bitmap is three */
+ /* times wider than the original glyph image. See also */
+ /* @FT_RENDER_MODE_LCD. */
+ /* */
+ /* FT_PIXEL_MODE_LCD_V :: */
+ /* An 8-bit bitmap, used to represent RGB or BGR decimated glyph */
+ /* images used for display on rotated LCD displays; the bitmap */
+ /* is three times taller than the original glyph image. See also */
+ /* @FT_RENDER_MODE_LCD_V. */
+ /* */
+ typedef enum FT_Pixel_Mode_
+ {
+ FT_PIXEL_MODE_NONE = 0,
+ FT_PIXEL_MODE_MONO,
+ FT_PIXEL_MODE_GRAY,
+ FT_PIXEL_MODE_GRAY2,
+ FT_PIXEL_MODE_GRAY4,
+ FT_PIXEL_MODE_LCD,
+ FT_PIXEL_MODE_LCD_V,
+
+ FT_PIXEL_MODE_MAX /* do not remove */
+
+ } FT_Pixel_Mode;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Enum> */
+ /* ft_pixel_mode_xxx */
+ /* */
+ /* <Description> */
+ /* A list of deprecated constants. Use the corresponding */
+ /* @FT_Pixel_Mode values instead. */
+ /* */
+ /* <Values> */
+ /* ft_pixel_mode_none :: See @FT_PIXEL_MODE_NONE. */
+ /* ft_pixel_mode_mono :: See @FT_PIXEL_MODE_MONO. */
+ /* ft_pixel_mode_grays :: See @FT_PIXEL_MODE_GRAY. */
+ /* ft_pixel_mode_pal2 :: See @FT_PIXEL_MODE_GRAY2. */
+ /* ft_pixel_mode_pal4 :: See @FT_PIXEL_MODE_GRAY4. */
+ /* */
+#define ft_pixel_mode_none FT_PIXEL_MODE_NONE
+#define ft_pixel_mode_mono FT_PIXEL_MODE_MONO
+#define ft_pixel_mode_grays FT_PIXEL_MODE_GRAY
+#define ft_pixel_mode_pal2 FT_PIXEL_MODE_GRAY2
+#define ft_pixel_mode_pal4 FT_PIXEL_MODE_GRAY4
+
+ /* */
+
+#if 0
+
+ /*************************************************************************/
+ /* */
+ /* <Enum> */
+ /* FT_Palette_Mode */
+ /* */
+ /* <Description> */
+ /* THIS TYPE IS DEPRECATED. DO NOT USE IT! */
+ /* */
+ /* An enumeration type to describe the format of a bitmap palette, */
+ /* used with ft_pixel_mode_pal4 and ft_pixel_mode_pal8. */
+ /* */
+ /* <Values> */
+ /* ft_palette_mode_rgb :: The palette is an array of 3-bytes RGB */
+ /* records. */
+ /* */
+ /* ft_palette_mode_rgba :: The palette is an array of 4-bytes RGBA */
+ /* records. */
+ /* */
+ /* <Note> */
+ /* As ft_pixel_mode_pal2, pal4 and pal8 are currently unused by */
+ /* FreeType, these types are not handled by the library itself. */
+ /* */
+ typedef enum FT_Palette_Mode_
+ {
+ ft_palette_mode_rgb = 0,
+ ft_palette_mode_rgba,
+
+ ft_palette_mode_max /* do not remove */
+
+ } FT_Palette_Mode;
+
+ /* */
+
+#endif
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_Bitmap */
+ /* */
+ /* <Description> */
+ /* A structure used to describe a bitmap or pixmap to the raster. */
+ /* Note that we now manage pixmaps of various depths through the */
+ /* `pixel_mode' field. */
+ /* */
+ /* <Fields> */
+ /* rows :: The number of bitmap rows. */
+ /* */
+ /* width :: The number of pixels in bitmap row. */
+ /* */
+ /* pitch :: The pitch's absolute value is the number of bytes */
+ /* taken by one bitmap row, including padding. */
+ /* However, the pitch is positive when the bitmap has */
+ /* a `down' flow, and negative when it has an `up' */
+ /* flow. In all cases, the pitch is an offset to add */
+ /* to a bitmap pointer in order to go down one row. */
+ /* */
+ /* buffer :: A typeless pointer to the bitmap buffer. This */
+ /* value should be aligned on 32-bit boundaries in */
+ /* most cases. */
+ /* */
+ /* num_grays :: This field is only used with */
+ /* @FT_PIXEL_MODE_GRAY; it gives the number of gray */
+ /* levels used in the bitmap. */
+ /* */
+ /* pixel_mode :: The pixel mode, i.e., how pixel bits are stored. */
+ /* See @FT_Pixel_Mode for possible values. */
+ /* */
+ /* palette_mode :: This field is intended for paletted pixel modes; */
+ /* it indicates how the palette is stored. Not */
+ /* used currently. */
+ /* */
+ /* palette :: A typeless pointer to the bitmap palette; this */
+ /* field is intended for paletted pixel modes. Not */
+ /* used currently. */
+ /* */
+ /* <Note> */
+ /* For now, the only pixel modes supported by FreeType are mono and */
+ /* grays. However, drivers might be added in the future to support */
+ /* more `colorful' options. */
+ /* */
+ typedef struct FT_Bitmap_
+ {
+ int rows;
+ int width;
+ int pitch;
+ unsigned char* buffer;
+ short num_grays;
+ char pixel_mode;
+ char palette_mode;
+ void* palette;
+
+ } FT_Bitmap;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* outline_processing */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_Outline */
+ /* */
+ /* <Description> */
+ /* This structure is used to describe an outline to the scan-line */
+ /* converter. */
+ /* */
+ /* <Fields> */
+ /* n_contours :: The number of contours in the outline. */
+ /* */
+ /* n_points :: The number of points in the outline. */
+ /* */
+ /* points :: A pointer to an array of `n_points' @FT_Vector */
+ /* elements, giving the outline's point coordinates. */
+ /* */
+ /* tags :: A pointer to an array of `n_points' chars, giving */
+ /* each outline point's type. If bit 0 is unset, the */
+ /* point is `off' the curve, i.e., a Bezier control */
+ /* point, while it is `on' when set. */
+ /* */
+ /* Bit 1 is meaningful for `off' points only. If set, */
+ /* it indicates a third-order Bezier arc control point; */
+ /* and a second-order control point if unset. */
+ /* */
+ /* contours :: An array of `n_contours' shorts, giving the end */
+ /* point of each contour within the outline. For */
+ /* example, the first contour is defined by the points */
+ /* `0' to `contours[0]', the second one is defined by */
+ /* the points `contours[0]+1' to `contours[1]', etc. */
+ /* */
+ /* flags :: A set of bit flags used to characterize the outline */
+ /* and give hints to the scan-converter and hinter on */
+ /* how to convert/grid-fit it. See @FT_OUTLINE_FLAGS. */
+ /* */
+ typedef struct FT_Outline_
+ {
+ short n_contours; /* number of contours in glyph */
+ short n_points; /* number of points in the glyph */
+
+ FT_Vector* points; /* the outline's points */
+ char* tags; /* the points flags */
+ short* contours; /* the contour end points */
+
+ int flags; /* outline masks */
+
+ } FT_Outline;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Enum> */
+ /* FT_OUTLINE_FLAGS */
+ /* */
+ /* <Description> */
+ /* A list of bit-field constants use for the flags in an outline's */
+ /* `flags' field. */
+ /* */
+ /* <Values> */
+ /* FT_OUTLINE_NONE :: Value 0 is reserved. */
+ /* */
+ /* FT_OUTLINE_OWNER :: If set, this flag indicates that the */
+ /* outline's field arrays (i.e., */
+ /* `points', `flags' & `contours') are */
+ /* `owned' by the outline object, and */
+ /* should thus be freed when it is */
+ /* destroyed. */
+ /* */
+ /* FT_OUTLINE_EVEN_ODD_FILL :: By default, outlines are filled using */
+ /* the non-zero winding rule. If set to */
+ /* 1, the outline will be filled using */
+ /* the even-odd fill rule (only works */
+ /* with the smooth raster). */
+ /* */
+ /* FT_OUTLINE_REVERSE_FILL :: By default, outside contours of an */
+ /* outline are oriented in clock-wise */
+ /* direction, as defined in the TrueType */
+ /* specification. This flag is set if */
+ /* the outline uses the opposite */
+ /* direction (typically for Type 1 */
+ /* fonts). This flag is ignored by the */
+ /* scan-converter. */
+ /* */
+ /* FT_OUTLINE_IGNORE_DROPOUTS :: By default, the scan converter will */
+ /* try to detect drop-outs in an outline */
+ /* and correct the glyph bitmap to */
+ /* ensure consistent shape continuity. */
+ /* If set, this flag hints the scan-line */
+ /* converter to ignore such cases. */
+ /* */
+ /* FT_OUTLINE_HIGH_PRECISION :: This flag indicates that the */
+ /* scan-line converter should try to */
+ /* convert this outline to bitmaps with */
+ /* the highest possible quality. It is */
+ /* typically set for small character */
+ /* sizes. Note that this is only a */
+ /* hint, that might be completely */
+ /* ignored by a given scan-converter. */
+ /* */
+ /* FT_OUTLINE_SINGLE_PASS :: This flag is set to force a given */
+ /* scan-converter to only use a single */
+ /* pass over the outline to render a */
+ /* bitmap glyph image. Normally, it is */
+ /* set for very large character sizes. */
+ /* It is only a hint, that might be */
+ /* completely ignored by a given */
+ /* scan-converter. */
+ /* */
+#define FT_OUTLINE_NONE 0x0
+#define FT_OUTLINE_OWNER 0x1
+#define FT_OUTLINE_EVEN_ODD_FILL 0x2
+#define FT_OUTLINE_REVERSE_FILL 0x4
+#define FT_OUTLINE_IGNORE_DROPOUTS 0x8
+
+#define FT_OUTLINE_HIGH_PRECISION 0x100
+#define FT_OUTLINE_SINGLE_PASS 0x200
+
+
+ /*************************************************************************
+ *
+ * @enum:
+ * ft_outline_flags
+ *
+ * @description:
+ * These constants are deprecated. Please use the corresponding
+ * @FT_OUTLINE_FLAGS values.
+ *
+ * @values:
+ * ft_outline_none :: See @FT_OUTLINE_NONE.
+ * ft_outline_owner :: See @FT_OUTLINE_OWNER.
+ * ft_outline_even_odd_fill :: See @FT_OUTLINE_EVEN_ODD_FILL.
+ * ft_outline_reverse_fill :: See @FT_OUTLINE_REVERSE_FILL.
+ * ft_outline_ignore_dropouts :: See @FT_OUTLINE_IGNORE_DROPOUTS.
+ * ft_outline_high_precision :: See @FT_OUTLINE_HIGH_PRECISION.
+ * ft_outline_single_pass :: See @FT_OUTLINE_SINGLE_PASS.
+ */
+#define ft_outline_none FT_OUTLINE_NONE
+#define ft_outline_owner FT_OUTLINE_OWNER
+#define ft_outline_even_odd_fill FT_OUTLINE_EVEN_ODD_FILL
+#define ft_outline_reverse_fill FT_OUTLINE_REVERSE_FILL
+#define ft_outline_ignore_dropouts FT_OUTLINE_IGNORE_DROPOUTS
+#define ft_outline_high_precision FT_OUTLINE_HIGH_PRECISION
+#define ft_outline_single_pass FT_OUTLINE_SINGLE_PASS
+
+ /* */
+
+#define FT_CURVE_TAG( flag ) ( flag & 3 )
+
+#define FT_CURVE_TAG_ON 1
+#define FT_CURVE_TAG_CONIC 0
+#define FT_CURVE_TAG_CUBIC 2
+
+#define FT_CURVE_TAG_TOUCH_X 8 /* reserved for the TrueType hinter */
+#define FT_CURVE_TAG_TOUCH_Y 16 /* reserved for the TrueType hinter */
+
+#define FT_CURVE_TAG_TOUCH_BOTH ( FT_CURVE_TAG_TOUCH_X | \
+ FT_CURVE_TAG_TOUCH_Y )
+
+#define FT_Curve_Tag_On FT_CURVE_TAG_ON
+#define FT_Curve_Tag_Conic FT_CURVE_TAG_CONIC
+#define FT_Curve_Tag_Cubic FT_CURVE_TAG_CUBIC
+#define FT_Curve_Tag_Touch_X FT_CURVE_TAG_TOUCH_X
+#define FT_Curve_Tag_Touch_Y FT_CURVE_TAG_TOUCH_Y
+
+
+ /*************************************************************************/
+ /* */
+ /* <FuncType> */
+ /* FT_Outline_MoveToFunc */
+ /* */
+ /* <Description> */
+ /* A function pointer type used to describe the signature of a `move */
+ /* to' function during outline walking/decomposition. */
+ /* */
+ /* A `move to' is emitted to start a new contour in an outline. */
+ /* */
+ /* <Input> */
+ /* to :: A pointer to the target point of the `move to'. */
+ /* */
+ /* user :: A typeless pointer which is passed from the caller of the */
+ /* decomposition function. */
+ /* */
+ /* <Return> */
+ /* Error code. 0 means success. */
+ /* */
+ typedef int
+ (*FT_Outline_MoveToFunc)( const FT_Vector* to,
+ void* user );
+
+#define FT_Outline_MoveTo_Func FT_Outline_MoveToFunc
+
+
+ /*************************************************************************/
+ /* */
+ /* <FuncType> */
+ /* FT_Outline_LineToFunc */
+ /* */
+ /* <Description> */
+ /* A function pointer type used to describe the signature of a `line */
+ /* to' function during outline walking/decomposition. */
+ /* */
+ /* A `line to' is emitted to indicate a segment in the outline. */
+ /* */
+ /* <Input> */
+ /* to :: A pointer to the target point of the `line to'. */
+ /* */
+ /* user :: A typeless pointer which is passed from the caller of the */
+ /* decomposition function. */
+ /* */
+ /* <Return> */
+ /* Error code. 0 means success. */
+ /* */
+ typedef int
+ (*FT_Outline_LineToFunc)( const FT_Vector* to,
+ void* user );
+
+#define FT_Outline_LineTo_Func FT_Outline_LineToFunc
+
+
+ /*************************************************************************/
+ /* */
+ /* <FuncType> */
+ /* FT_Outline_ConicToFunc */
+ /* */
+ /* <Description> */
+ /* A function pointer type use to describe the signature of a `conic */
+ /* to' function during outline walking/decomposition. */
+ /* */
+ /* A `conic to' is emitted to indicate a second-order Bezier arc in */
+ /* the outline. */
+ /* */
+ /* <Input> */
+ /* control :: An intermediate control point between the last position */
+ /* and the new target in `to'. */
+ /* */
+ /* to :: A pointer to the target end point of the conic arc. */
+ /* */
+ /* user :: A typeless pointer which is passed from the caller of */
+ /* the decomposition function. */
+ /* */
+ /* <Return> */
+ /* Error code. 0 means success. */
+ /* */
+ typedef int
+ (*FT_Outline_ConicToFunc)( const FT_Vector* control,
+ const FT_Vector* to,
+ void* user );
+
+#define FT_Outline_ConicTo_Func FT_Outline_ConicToFunc
+
+
+ /*************************************************************************/
+ /* */
+ /* <FuncType> */
+ /* FT_Outline_CubicToFunc */
+ /* */
+ /* <Description> */
+ /* A function pointer type used to describe the signature of a `cubic */
+ /* to' function during outline walking/decomposition. */
+ /* */
+ /* A `cubic to' is emitted to indicate a third-order Bezier arc. */
+ /* */
+ /* <Input> */
+ /* control1 :: A pointer to the first Bezier control point. */
+ /* */
+ /* control2 :: A pointer to the second Bezier control point. */
+ /* */
+ /* to :: A pointer to the target end point. */
+ /* */
+ /* user :: A typeless pointer which is passed from the caller of */
+ /* the decomposition function. */
+ /* */
+ /* <Return> */
+ /* Error code. 0 means success. */
+ /* */
+ typedef int
+ (*FT_Outline_CubicToFunc)( const FT_Vector* control1,
+ const FT_Vector* control2,
+ const FT_Vector* to,
+ void* user );
+
+#define FT_Outline_CubicTo_Func FT_Outline_CubicToFunc
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_Outline_Funcs */
+ /* */
+ /* <Description> */
+ /* A structure to hold various function pointers used during outline */
+ /* decomposition in order to emit segments, conic, and cubic Beziers, */
+ /* as well as `move to' and `close to' operations. */
+ /* */
+ /* <Fields> */
+ /* move_to :: The `move to' emitter. */
+ /* */
+ /* line_to :: The segment emitter. */
+ /* */
+ /* conic_to :: The second-order Bezier arc emitter. */
+ /* */
+ /* cubic_to :: The third-order Bezier arc emitter. */
+ /* */
+ /* shift :: The shift that is applied to coordinates before they */
+ /* are sent to the emitter. */
+ /* */
+ /* delta :: The delta that is applied to coordinates before they */
+ /* are sent to the emitter, but after the shift. */
+ /* */
+ /* <Note> */
+ /* The point coordinates sent to the emitters are the transformed */
+ /* version of the original coordinates (this is important for high */
+ /* accuracy during scan-conversion). The transformation is simple: */
+ /* */
+ /* { */
+ /* x' = (x << shift) - delta */
+ /* y' = (x << shift) - delta */
+ /* } */
+ /* */
+ /* Set the value of `shift' and `delta' to 0 to get the original */
+ /* point coordinates. */
+ /* */
+ typedef struct FT_Outline_Funcs_
+ {
+ FT_Outline_MoveToFunc move_to;
+ FT_Outline_LineToFunc line_to;
+ FT_Outline_ConicToFunc conic_to;
+ FT_Outline_CubicToFunc cubic_to;
+
+ int shift;
+ FT_Pos delta;
+
+ } FT_Outline_Funcs;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* basic_types */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* <Macro> */
+ /* FT_IMAGE_TAG */
+ /* */
+ /* <Description> */
+ /* This macro converts four-letter tags to an unsigned long type. */
+ /* */
+ /* <Note> */
+ /* Since many 16bit compilers don't like 32bit enumerations, you */
+ /* should redefine this macro in case of problems to something like */
+ /* this: */
+ /* */
+ /* { */
+ /* #define FT_IMAGE_TAG( value, _x1, _x2, _x3, _x4 ) value */
+ /* } */
+ /* */
+ /* to get a simple enumeration without assigning special numbers. */
+ /* */
+#ifndef FT_IMAGE_TAG
+#define FT_IMAGE_TAG( value, _x1, _x2, _x3, _x4 ) \
+ value = ( ( (unsigned long)_x1 << 24 ) | \
+ ( (unsigned long)_x2 << 16 ) | \
+ ( (unsigned long)_x3 << 8 ) | \
+ (unsigned long)_x4 )
+#endif /* FT_IMAGE_TAG */
+
+
+ /*************************************************************************/
+ /* */
+ /* <Enum> */
+ /* FT_Glyph_Format */
+ /* */
+ /* <Description> */
+ /* An enumeration type used to describe the format of a given glyph */
+ /* image. Note that this version of FreeType only supports two image */
+ /* formats, even though future font drivers will be able to register */
+ /* their own format. */
+ /* */
+ /* <Values> */
+ /* FT_GLYPH_FORMAT_NONE :: */
+ /* The value 0 is reserved. */
+ /* */
+ /* FT_GLYPH_FORMAT_COMPOSITE :: */
+ /* The glyph image is a composite of several other images. This */
+ /* format is _only_ used with @FT_LOAD_NO_RECURSE, and is used to */
+ /* report compound glyphs (like accented characters). */
+ /* */
+ /* FT_GLYPH_FORMAT_BITMAP :: */
+ /* The glyph image is a bitmap, and can be described as an */
+ /* @FT_Bitmap. You generally need to access the `bitmap' field of */
+ /* the @FT_GlyphSlotRec structure to read it. */
+ /* */
+ /* FT_GLYPH_FORMAT_OUTLINE :: */
+ /* The glyph image is a vectorial outline made of line segments */
+ /* and Bezier arcs; it can be described as an @FT_Outline; you */
+ /* generally want to access the `outline' field of the */
+ /* @FT_GlyphSlotRec structure to read it. */
+ /* */
+ /* FT_GLYPH_FORMAT_PLOTTER :: */
+ /* The glyph image is a vectorial path with no inside and outside */
+ /* contours. Some Type 1 fonts, like those in the Hershey family, */
+ /* contain glyphs in this format. These are described as */
+ /* @FT_Outline, but FreeType isn't currently capable of rendering */
+ /* them correctly. */
+ /* */
+ typedef enum FT_Glyph_Format_
+ {
+ FT_IMAGE_TAG( FT_GLYPH_FORMAT_NONE, 0, 0, 0, 0 ),
+
+ FT_IMAGE_TAG( FT_GLYPH_FORMAT_COMPOSITE, 'c', 'o', 'm', 'p' ),
+ FT_IMAGE_TAG( FT_GLYPH_FORMAT_BITMAP, 'b', 'i', 't', 's' ),
+ FT_IMAGE_TAG( FT_GLYPH_FORMAT_OUTLINE, 'o', 'u', 't', 'l' ),
+ FT_IMAGE_TAG( FT_GLYPH_FORMAT_PLOTTER, 'p', 'l', 'o', 't' )
+
+ } FT_Glyph_Format;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Enum> */
+ /* ft_glyph_format_xxx */
+ /* */
+ /* <Description> */
+ /* A list of deprecated constants. Use the corresponding */
+ /* @FT_Glyph_Format values instead. */
+ /* */
+ /* <Values> */
+ /* ft_glyph_format_none :: See @FT_GLYPH_FORMAT_NONE. */
+ /* ft_glyph_format_composite :: See @FT_GLYPH_FORMAT_COMPOSITE. */
+ /* ft_glyph_format_bitmap :: See @FT_GLYPH_FORMAT_BITMAP. */
+ /* ft_glyph_format_outline :: See @FT_GLYPH_FORMAT_OUTLINE. */
+ /* ft_glyph_format_plotter :: See @FT_GLYPH_FORMAT_PLOTTER. */
+ /* */
+#define ft_glyph_format_none FT_GLYPH_FORMAT_NONE
+#define ft_glyph_format_composite FT_GLYPH_FORMAT_COMPOSITE
+#define ft_glyph_format_bitmap FT_GLYPH_FORMAT_BITMAP
+#define ft_glyph_format_outline FT_GLYPH_FORMAT_OUTLINE
+#define ft_glyph_format_plotter FT_GLYPH_FORMAT_PLOTTER
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /*************************************************************************/
+ /***** *****/
+ /***** R A S T E R D E F I N I T I O N S *****/
+ /***** *****/
+ /*************************************************************************/
+ /*************************************************************************/
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* A raster is a scan converter, in charge of rendering an outline into */
+ /* a a bitmap. This section contains the public API for rasters. */
+ /* */
+ /* Note that in FreeType 2, all rasters are now encapsulated within */
+ /* specific modules called `renderers'. See `freetype/ftrender.h' for */
+ /* more details on renderers. */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* raster */
+ /* */
+ /* <Title> */
+ /* Scanline Converter */
+ /* */
+ /* <Abstract> */
+ /* How vectorial outlines are converted into bitmaps and pixmaps. */
+ /* */
+ /* <Description> */
+ /* This section contains technical definitions. */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_Raster */
+ /* */
+ /* <Description> */
+ /* A handle (pointer) to a raster object. Each object can be used */
+ /* independently to convert an outline into a bitmap or pixmap. */
+ /* */
+ typedef struct FT_RasterRec_* FT_Raster;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_Span */
+ /* */
+ /* <Description> */
+ /* A structure used to model a single span of gray (or black) pixels */
+ /* when rendering a monochrome or anti-aliased bitmap. */
+ /* */
+ /* <Fields> */
+ /* x :: The span's horizontal start position. */
+ /* */
+ /* len :: The span's length in pixels. */
+ /* */
+ /* coverage :: The span color/coverage, ranging from 0 (background) */
+ /* to 255 (foreground). Only used for anti-aliased */
+ /* rendering. */
+ /* */
+ /* <Note> */
+ /* This structure is used by the span drawing callback type named */
+ /* @FT_SpanFunc which takes the y-coordinate of the span as a */
+ /* a parameter. */
+ /* */
+ /* The coverage value is always between 0 and 255. */
+ /* */
+ typedef struct FT_Span_
+ {
+ short x;
+ unsigned short len;
+ unsigned char coverage;
+
+ } FT_Span;
+
+
+ /*************************************************************************/
+ /* */
+ /* <FuncType> */
+ /* FT_SpanFunc */
+ /* */
+ /* <Description> */
+ /* A function used as a call-back by the anti-aliased renderer in */
+ /* order to let client applications draw themselves the gray pixel */
+ /* spans on each scan line. */
+ /* */
+ /* <Input> */
+ /* y :: The scanline's y-coordinate. */
+ /* */
+ /* count :: The number of spans to draw on this scanline. */
+ /* */
+ /* spans :: A table of `count' spans to draw on the scanline. */
+ /* */
+ /* user :: User-supplied data that is passed to the callback. */
+ /* */
+ /* <Note> */
+ /* This callback allows client applications to directly render the */
+ /* gray spans of the anti-aliased bitmap to any kind of surfaces. */
+ /* */
+ /* This can be used to write anti-aliased outlines directly to a */
+ /* given background bitmap, and even perform translucency. */
+ /* */
+ /* Note that the `count' field cannot be greater than a fixed value */
+ /* defined by the `FT_MAX_GRAY_SPANS' configuration macro in */
+ /* `ftoption.h'. By default, this value is set to 32, which means */
+ /* that if there are more than 32 spans on a given scanline, the */
+ /* callback is called several times with the same `y' parameter in */
+ /* order to draw all callbacks. */
+ /* */
+ /* Otherwise, the callback is only called once per scan-line, and */
+ /* only for those scanlines that do have `gray' pixels on them. */
+ /* */
+ typedef void
+ (*FT_SpanFunc)( int y,
+ int count,
+ const FT_Span* spans,
+ void* user );
+
+#define FT_Raster_Span_Func FT_SpanFunc
+
+
+ /*************************************************************************/
+ /* */
+ /* <FuncType> */
+ /* FT_Raster_BitTest_Func */
+ /* */
+ /* <Description> */
+ /* THIS TYPE IS DEPRECATED. DO NOT USE IT. */
+ /* */
+ /* A function used as a call-back by the monochrome scan-converter */
+ /* to test whether a given target pixel is already set to the drawing */
+ /* `color'. These tests are crucial to implement drop-out control */
+ /* per-se the TrueType spec. */
+ /* */
+ /* <Input> */
+ /* y :: The pixel's y-coordinate. */
+ /* */
+ /* x :: The pixel's x-coordinate. */
+ /* */
+ /* user :: User-supplied data that is passed to the callback. */
+ /* */
+ /* <Return> */
+ /* 1 if the pixel is `set', 0 otherwise. */
+ /* */
+ typedef int
+ (*FT_Raster_BitTest_Func)( int y,
+ int x,
+ void* user );
+
+
+ /*************************************************************************/
+ /* */
+ /* <FuncType> */
+ /* FT_Raster_BitSet_Func */
+ /* */
+ /* <Description> */
+ /* THIS TYPE IS DEPRECATED. DO NOT USE IT. */
+ /* */
+ /* A function used as a call-back by the monochrome scan-converter */
+ /* to set an individual target pixel. This is crucial to implement */
+ /* drop-out control according to the TrueType specification. */
+ /* */
+ /* <Input> */
+ /* y :: The pixel's y-coordinate. */
+ /* */
+ /* x :: The pixel's x-coordinate. */
+ /* */
+ /* user :: User-supplied data that is passed to the callback. */
+ /* */
+ /* <Return> */
+ /* 1 if the pixel is `set', 0 otherwise. */
+ /* */
+ typedef void
+ (*FT_Raster_BitSet_Func)( int y,
+ int x,
+ void* user );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Enum> */
+ /* FT_RASTER_FLAG_XXX */
+ /* */
+ /* <Description> */
+ /* A list of bit flag constants as used in the `flags' field of a */
+ /* @FT_Raster_Params structure. */
+ /* */
+ /* <Values> */
+ /* FT_RASTER_FLAG_DEFAULT :: This value is 0. */
+ /* */
+ /* FT_RASTER_FLAG_AA :: This flag is set to indicate that an */
+ /* anti-aliased glyph image should be */
+ /* generated. Otherwise, it will be */
+ /* monochrome (1-bit). */
+ /* */
+ /* FT_RASTER_FLAG_DIRECT :: This flag is set to indicate direct */
+ /* rendering. In this mode, client */
+ /* applications must provide their own span */
+ /* callback. This lets them directly */
+ /* draw or compose over an existing bitmap. */
+ /* If this bit is not set, the target */
+ /* pixmap's buffer _must_ be zeroed before */
+ /* rendering. */
+ /* */
+ /* Note that for now, direct rendering is */
+ /* only possible with anti-aliased glyphs. */
+ /* */
+ /* FT_RASTER_FLAG_CLIP :: This flag is only used in direct */
+ /* rendering mode. If set, the output will */
+ /* be clipped to a box specified in the */
+ /* `clip_box' field of the */
+ /* @FT_Raster_Params structure. */
+ /* */
+ /* Note that by default, the glyph bitmap */
+ /* is clipped to the target pixmap, except */
+ /* in direct rendering mode where all spans */
+ /* are generated if no clipping box is set. */
+ /* */
+#define FT_RASTER_FLAG_DEFAULT 0x0
+#define FT_RASTER_FLAG_AA 0x1
+#define FT_RASTER_FLAG_DIRECT 0x2
+#define FT_RASTER_FLAG_CLIP 0x4
+
+ /* deprecated */
+#define ft_raster_flag_default FT_RASTER_FLAG_DEFAULT
+#define ft_raster_flag_aa FT_RASTER_FLAG_AA
+#define ft_raster_flag_direct FT_RASTER_FLAG_DIRECT
+#define ft_raster_flag_clip FT_RASTER_FLAG_CLIP
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_Raster_Params */
+ /* */
+ /* <Description> */
+ /* A structure to hold the arguments used by a raster's render */
+ /* function. */
+ /* */
+ /* <Fields> */
+ /* target :: The target bitmap. */
+ /* */
+ /* source :: A pointer to the source glyph image (e.g., an */
+ /* @FT_Outline). */
+ /* */
+ /* flags :: The rendering flags. */
+ /* */
+ /* gray_spans :: The gray span drawing callback. */
+ /* */
+ /* black_spans :: The black span drawing callback. */
+ /* */
+ /* bit_test :: The bit test callback. UNIMPLEMENTED! */
+ /* */
+ /* bit_set :: The bit set callback. UNIMPLEMENTED! */
+ /* */
+ /* user :: User-supplied data that is passed to each drawing */
+ /* callback. */
+ /* */
+ /* clip_box :: An optional clipping box. It is only used in */
+ /* direct rendering mode. Note that coordinates here */
+ /* should be expressed in _integer_ pixels (and not in */
+ /* 26.6 fixed-point units). */
+ /* */
+ /* <Note> */
+ /* An anti-aliased glyph bitmap is drawn if the @FT_RASTER_FLAG_AA */
+ /* bit flag is set in the `flags' field, otherwise a monochrome */
+ /* bitmap is generated. */
+ /* */
+ /* If the @FT_RASTER_FLAG_DIRECT bit flag is set in `flags', the */
+ /* raster will call the `gray_spans' callback to draw gray pixel */
+ /* spans, in the case of an aa glyph bitmap, it will call */
+ /* `black_spans', and `bit_test' and `bit_set' in the case of a */
+ /* monochrome bitmap. This allows direct composition over a */
+ /* pre-existing bitmap through user-provided callbacks to perform the */
+ /* span drawing/composition. */
+ /* */
+ /* Note that the `bit_test' and `bit_set' callbacks are required when */
+ /* rendering a monochrome bitmap, as they are crucial to implement */
+ /* correct drop-out control as defined in the TrueType specification. */
+ /* */
+ typedef struct FT_Raster_Params_
+ {
+ const FT_Bitmap* target;
+ const void* source;
+ int flags;
+ FT_SpanFunc gray_spans;
+ FT_SpanFunc black_spans;
+ FT_Raster_BitTest_Func bit_test; /* doesn't work! */
+ FT_Raster_BitSet_Func bit_set; /* doesn't work! */
+ void* user;
+ FT_BBox clip_box;
+
+ } FT_Raster_Params;
+
+
+ /*************************************************************************/
+ /* */
+ /* <FuncType> */
+ /* FT_Raster_NewFunc */
+ /* */
+ /* <Description> */
+ /* A function used to create a new raster object. */
+ /* */
+ /* <Input> */
+ /* memory :: A handle to the memory allocator. */
+ /* */
+ /* <Output> */
+ /* raster :: A handle to the new raster object. */
+ /* */
+ /* <Return> */
+ /* Error code. 0 means success. */
+ /* */
+ /* <Note> */
+ /* The `memory' parameter is a typeless pointer in order to avoid */
+ /* un-wanted dependencies on the rest of the FreeType code. In */
+ /* practice, it is an @FT_Memory object, i.e., a handle to the */
+ /* standard FreeType memory allocator. However, this field can be */
+ /* completely ignored by a given raster implementation. */
+ /* */
+ typedef int
+ (*FT_Raster_NewFunc)( void* memory,
+ FT_Raster* raster );
+
+#define FT_Raster_New_Func FT_Raster_NewFunc
+
+
+ /*************************************************************************/
+ /* */
+ /* <FuncType> */
+ /* FT_Raster_DoneFunc */
+ /* */
+ /* <Description> */
+ /* A function used to destroy a given raster object. */
+ /* */
+ /* <Input> */
+ /* raster :: A handle to the raster object. */
+ /* */
+ typedef void
+ (*FT_Raster_DoneFunc)( FT_Raster raster );
+
+#define FT_Raster_Done_Func FT_Raster_DoneFunc
+
+
+ /*************************************************************************/
+ /* */
+ /* <FuncType> */
+ /* FT_Raster_ResetFunc */
+ /* */
+ /* <Description> */
+ /* FreeType provides an area of memory called the `render pool', */
+ /* available to all registered rasters. This pool can be freely used */
+ /* during a given scan-conversion but is shared by all rasters. Its */
+ /* content is thus transient. */
+ /* */
+ /* This function is called each time the render pool changes, or just */
+ /* after a new raster object is created. */
+ /* */
+ /* <Input> */
+ /* raster :: A handle to the new raster object. */
+ /* */
+ /* pool_base :: The address in memory of the render pool. */
+ /* */
+ /* pool_size :: The size in bytes of the render pool. */
+ /* */
+ /* <Note> */
+ /* Rasters can ignore the render pool and rely on dynamic memory */
+ /* allocation if they want to (a handle to the memory allocator is */
+ /* passed to the raster constructor). However, this is not */
+ /* recommended for efficiency purposes. */
+ /* */
+ typedef void
+ (*FT_Raster_ResetFunc)( FT_Raster raster,
+ unsigned char* pool_base,
+ unsigned long pool_size );
+
+#define FT_Raster_Reset_Func FT_Raster_ResetFunc
+
+
+ /*************************************************************************/
+ /* */
+ /* <FuncType> */
+ /* FT_Raster_SetModeFunc */
+ /* */
+ /* <Description> */
+ /* This function is a generic facility to change modes or attributes */
+ /* in a given raster. This can be used for debugging purposes, or */
+ /* simply to allow implementation-specific `features' in a given */
+ /* raster module. */
+ /* */
+ /* <Input> */
+ /* raster :: A handle to the new raster object. */
+ /* */
+ /* mode :: A 4-byte tag used to name the mode or property. */
+ /* */
+ /* args :: A pointer to the new mode/property to use. */
+ /* */
+ typedef int
+ (*FT_Raster_SetModeFunc)( FT_Raster raster,
+ unsigned long mode,
+ void* args );
+
+#define FT_Raster_Set_Mode_Func FT_Raster_SetModeFunc
+
+
+ /*************************************************************************/
+ /* */
+ /* <FuncType> */
+ /* FT_Raster_RenderFunc */
+ /* */
+ /* <Description> */
+ /* Invokes a given raster to scan-convert a given glyph image into a */
+ /* target bitmap. */
+ /* */
+ /* <Input> */
+ /* raster :: A handle to the raster object. */
+ /* */
+ /* params :: A pointer to an @FT_Raster_Params structure used to */
+ /* store the rendering parameters. */
+ /* */
+ /* <Return> */
+ /* Error code. 0 means success. */
+ /* */
+ /* <Note> */
+ /* The exact format of the source image depends on the raster's glyph */
+ /* format defined in its @FT_Raster_Funcs structure. It can be an */
+ /* @FT_Outline or anything else in order to support a large array of */
+ /* glyph formats. */
+ /* */
+ /* Note also that the render function can fail and return a */
+ /* `FT_Err_Unimplemented_Feature' error code if the raster used does */
+ /* not support direct composition. */
+ /* */
+ /* XXX: For now, the standard raster doesn't support direct */
+ /* composition but this should change for the final release (see */
+ /* the files `demos/src/ftgrays.c' and `demos/src/ftgrays2.c' */
+ /* for examples of distinct implementations which support direct */
+ /* composition). */
+ /* */
+ typedef int
+ (*FT_Raster_RenderFunc)( FT_Raster raster,
+ const FT_Raster_Params* params );
+
+#define FT_Raster_Render_Func FT_Raster_RenderFunc
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_Raster_Funcs */
+ /* */
+ /* <Description> */
+ /* A structure used to describe a given raster class to the library. */
+ /* */
+ /* <Fields> */
+ /* glyph_format :: The supported glyph format for this raster. */
+ /* */
+ /* raster_new :: The raster constructor. */
+ /* */
+ /* raster_reset :: Used to reset the render pool within the raster. */
+ /* */
+ /* raster_render :: A function to render a glyph into a given bitmap. */
+ /* */
+ /* raster_done :: The raster destructor. */
+ /* */
+ typedef struct FT_Raster_Funcs_
+ {
+ FT_Glyph_Format glyph_format;
+ FT_Raster_NewFunc raster_new;
+ FT_Raster_ResetFunc raster_reset;
+ FT_Raster_SetModeFunc raster_set_mode;
+ FT_Raster_RenderFunc raster_render;
+ FT_Raster_DoneFunc raster_done;
+
+ } FT_Raster_Funcs;
+
+
+ /* */
+
+
+FT_END_HEADER
+
+#endif /* __FTIMAGE_H__ */
+
+
+/* END */
+
+
+/* Local Variables: */
+/* coding: utf-8 */
+/* End: */
diff --git a/src/3rdparty/freetype/include/freetype/ftincrem.h b/src/3rdparty/freetype/include/freetype/ftincrem.h
new file mode 100644
index 0000000..6dd2f55
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/ftincrem.h
@@ -0,0 +1,349 @@
+/***************************************************************************/
+/* */
+/* ftincrem.h */
+/* */
+/* FreeType incremental loading (specification). */
+/* */
+/* Copyright 2002, 2003, 2006, 2007, 2008 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef __FTINCREM_H__
+#define __FTINCREM_H__
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+ /***************************************************************************
+ *
+ * @section:
+ * incremental
+ *
+ * @title:
+ * Incremental Loading
+ *
+ * @abstract:
+ * Custom Glyph Loading.
+ *
+ * @description:
+ * This section contains various functions used to perform so-called
+ * `incremental' glyph loading. This is a mode where all glyphs loaded
+ * from a given @FT_Face are provided by the client application,
+ *
+ * Apart from that, all other tables are loaded normally from the font
+ * file. This mode is useful when FreeType is used within another
+ * engine, e.g., a Postscript Imaging Processor.
+ *
+ * To enable this mode, you must use @FT_Open_Face, passing an
+ * @FT_Parameter with the @FT_PARAM_TAG_INCREMENTAL tag and an
+ * @FT_Incremental_Interface value. See the comments for
+ * @FT_Incremental_InterfaceRec for an example.
+ *
+ */
+
+
+ /***************************************************************************
+ *
+ * @type:
+ * FT_Incremental
+ *
+ * @description:
+ * An opaque type describing a user-provided object used to implement
+ * `incremental' glyph loading within FreeType. This is used to support
+ * embedded fonts in certain environments (e.g., Postscript interpreters),
+ * where the glyph data isn't in the font file, or must be overridden by
+ * different values.
+ *
+ * @note:
+ * It is up to client applications to create and implement @FT_Incremental
+ * objects, as long as they provide implementations for the methods
+ * @FT_Incremental_GetGlyphDataFunc, @FT_Incremental_FreeGlyphDataFunc
+ * and @FT_Incremental_GetGlyphMetricsFunc.
+ *
+ * See the description of @FT_Incremental_InterfaceRec to understand how
+ * to use incremental objects with FreeType.
+ *
+ */
+ typedef struct FT_IncrementalRec_* FT_Incremental;
+
+
+ /***************************************************************************
+ *
+ * @struct:
+ * FT_Incremental_MetricsRec
+ *
+ * @description:
+ * A small structure used to contain the basic glyph metrics returned
+ * by the @FT_Incremental_GetGlyphMetricsFunc method.
+ *
+ * @fields:
+ * bearing_x ::
+ * Left bearing, in font units.
+ *
+ * bearing_y ::
+ * Top bearing, in font units.
+ *
+ * advance ::
+ * Glyph advance, in font units.
+ *
+ * @note:
+ * These correspond to horizontal or vertical metrics depending on the
+ * value of the `vertical' argument to the function
+ * @FT_Incremental_GetGlyphMetricsFunc.
+ *
+ */
+ typedef struct FT_Incremental_MetricsRec_
+ {
+ FT_Long bearing_x;
+ FT_Long bearing_y;
+ FT_Long advance;
+
+ } FT_Incremental_MetricsRec;
+
+
+ /***************************************************************************
+ *
+ * @struct:
+ * FT_Incremental_Metrics
+ *
+ * @description:
+ * A handle to an @FT_Incremental_MetricsRec structure.
+ *
+ */
+ typedef struct FT_Incremental_MetricsRec_* FT_Incremental_Metrics;
+
+
+ /***************************************************************************
+ *
+ * @type:
+ * FT_Incremental_GetGlyphDataFunc
+ *
+ * @description:
+ * A function called by FreeType to access a given glyph's data bytes
+ * during @FT_Load_Glyph or @FT_Load_Char if incremental loading is
+ * enabled.
+ *
+ * Note that the format of the glyph's data bytes depends on the font
+ * file format. For TrueType, it must correspond to the raw bytes within
+ * the `glyf' table. For Postscript formats, it must correspond to the
+ * *unencrypted* charstring bytes, without any `lenIV' header. It is
+ * undefined for any other format.
+ *
+ * @input:
+ * incremental ::
+ * Handle to an opaque @FT_Incremental handle provided by the client
+ * application.
+ *
+ * glyph_index ::
+ * Index of relevant glyph.
+ *
+ * @output:
+ * adata ::
+ * A structure describing the returned glyph data bytes (which will be
+ * accessed as a read-only byte block).
+ *
+ * @return:
+ * FreeType error code. 0 means success.
+ *
+ * @note:
+ * If this function returns successfully the method
+ * @FT_Incremental_FreeGlyphDataFunc will be called later to release
+ * the data bytes.
+ *
+ * Nested calls to @FT_Incremental_GetGlyphDataFunc can happen for
+ * compound glyphs.
+ *
+ */
+ typedef FT_Error
+ (*FT_Incremental_GetGlyphDataFunc)( FT_Incremental incremental,
+ FT_UInt glyph_index,
+ FT_Data* adata );
+
+
+ /***************************************************************************
+ *
+ * @type:
+ * FT_Incremental_FreeGlyphDataFunc
+ *
+ * @description:
+ * A function used to release the glyph data bytes returned by a
+ * successful call to @FT_Incremental_GetGlyphDataFunc.
+ *
+ * @input:
+ * incremental ::
+ * A handle to an opaque @FT_Incremental handle provided by the client
+ * application.
+ *
+ * data ::
+ * A structure describing the glyph data bytes (which will be accessed
+ * as a read-only byte block).
+ *
+ */
+ typedef void
+ (*FT_Incremental_FreeGlyphDataFunc)( FT_Incremental incremental,
+ FT_Data* data );
+
+
+ /***************************************************************************
+ *
+ * @type:
+ * FT_Incremental_GetGlyphMetricsFunc
+ *
+ * @description:
+ * A function used to retrieve the basic metrics of a given glyph index
+ * before accessing its data. This is necessary because, in certain
+ * formats like TrueType, the metrics are stored in a different place from
+ * the glyph images proper.
+ *
+ * @input:
+ * incremental ::
+ * A handle to an opaque @FT_Incremental handle provided by the client
+ * application.
+ *
+ * glyph_index ::
+ * Index of relevant glyph.
+ *
+ * vertical ::
+ * If true, return vertical metrics.
+ *
+ * ametrics ::
+ * This parameter is used for both input and output.
+ * The original glyph metrics, if any, in font units. If metrics are
+ * not available all the values must be set to zero.
+ *
+ * @output:
+ * ametrics ::
+ * The replacement glyph metrics in font units.
+ *
+ */
+ typedef FT_Error
+ (*FT_Incremental_GetGlyphMetricsFunc)
+ ( FT_Incremental incremental,
+ FT_UInt glyph_index,
+ FT_Bool vertical,
+ FT_Incremental_MetricsRec *ametrics );
+
+
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_Incremental_FuncsRec
+ *
+ * @description:
+ * A table of functions for accessing fonts that load data
+ * incrementally. Used in @FT_Incremental_InterfaceRec.
+ *
+ * @fields:
+ * get_glyph_data ::
+ * The function to get glyph data. Must not be null.
+ *
+ * free_glyph_data ::
+ * The function to release glyph data. Must not be null.
+ *
+ * get_glyph_metrics ::
+ * The function to get glyph metrics. May be null if the font does
+ * not provide overriding glyph metrics.
+ *
+ */
+ typedef struct FT_Incremental_FuncsRec_
+ {
+ FT_Incremental_GetGlyphDataFunc get_glyph_data;
+ FT_Incremental_FreeGlyphDataFunc free_glyph_data;
+ FT_Incremental_GetGlyphMetricsFunc get_glyph_metrics;
+
+ } FT_Incremental_FuncsRec;
+
+
+ /***************************************************************************
+ *
+ * @struct:
+ * FT_Incremental_InterfaceRec
+ *
+ * @description:
+ * A structure to be used with @FT_Open_Face to indicate that the user
+ * wants to support incremental glyph loading. You should use it with
+ * @FT_PARAM_TAG_INCREMENTAL as in the following example:
+ *
+ * {
+ * FT_Incremental_InterfaceRec inc_int;
+ * FT_Parameter parameter;
+ * FT_Open_Args open_args;
+ *
+ *
+ * // set up incremental descriptor
+ * inc_int.funcs = my_funcs;
+ * inc_int.object = my_object;
+ *
+ * // set up optional parameter
+ * parameter.tag = FT_PARAM_TAG_INCREMENTAL;
+ * parameter.data = &inc_int;
+ *
+ * // set up FT_Open_Args structure
+ * open_args.flags = FT_OPEN_PATHNAME | FT_OPEN_PARAMS;
+ * open_args.pathname = my_font_pathname;
+ * open_args.num_params = 1;
+ * open_args.params = &parameter; // we use one optional argument
+ *
+ * // open the font
+ * error = FT_Open_Face( library, &open_args, index, &face );
+ * ...
+ * }
+ *
+ */
+ typedef struct FT_Incremental_InterfaceRec_
+ {
+ const FT_Incremental_FuncsRec* funcs;
+ FT_Incremental object;
+
+ } FT_Incremental_InterfaceRec;
+
+
+ /***************************************************************************
+ *
+ * @type:
+ * FT_Incremental_Interface
+ *
+ * @description:
+ * A pointer to an @FT_Incremental_InterfaceRec structure.
+ *
+ */
+ typedef FT_Incremental_InterfaceRec* FT_Incremental_Interface;
+
+
+ /***************************************************************************
+ *
+ * @constant:
+ * FT_PARAM_TAG_INCREMENTAL
+ *
+ * @description:
+ * A constant used as the tag of @FT_Parameter structures to indicate
+ * an incremental loading object to be used by FreeType.
+ *
+ */
+#define FT_PARAM_TAG_INCREMENTAL FT_MAKE_TAG( 'i', 'n', 'c', 'r' )
+
+ /* */
+
+FT_END_HEADER
+
+#endif /* __FTINCREM_H__ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/include/freetype/ftlcdfil.h b/src/3rdparty/freetype/include/freetype/ftlcdfil.h
new file mode 100644
index 0000000..01d9780
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/ftlcdfil.h
@@ -0,0 +1,166 @@
+/***************************************************************************/
+/* */
+/* ftlcdfil.h */
+/* */
+/* FreeType API for color filtering of subpixel bitmap glyphs */
+/* (specification). */
+/* */
+/* Copyright 2006, 2007, 2008 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef __FT_LCD_FILTER_H__
+#define __FT_LCD_FILTER_H__
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+
+
+FT_BEGIN_HEADER
+
+ /***************************************************************************
+ *
+ * @section:
+ * lcd_filtering
+ *
+ * @title:
+ * LCD Filtering
+ *
+ * @abstract:
+ * Reduce color fringes of LCD-optimized bitmaps.
+ *
+ * @description:
+ * The @FT_Library_SetLcdFilter API can be used to specify a low-pass
+ * filter which is then applied to LCD-optimized bitmaps generated
+ * through @FT_Render_Glyph. This is useful to reduce color fringes
+ * which would occur with unfiltered rendering.
+ *
+ * Note that no filter is active by default, and that this function is
+ * *not* implemented in default builds of the library. You need to
+ * #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING in your `ftoption.h' file
+ * in order to activate it.
+ */
+
+
+ /****************************************************************************
+ *
+ * @func:
+ * FT_LcdFilter
+ *
+ * @description:
+ * A list of values to identify various types of LCD filters.
+ *
+ * @values:
+ * FT_LCD_FILTER_NONE ::
+ * Do not perform filtering. When used with subpixel rendering, this
+ * results in sometimes severe color fringes.
+ *
+ * FT_LCD_FILTER_DEFAULT ::
+ * The default filter reduces color fringes considerably, at the cost
+ * of a slight blurriness in the output.
+ *
+ * FT_LCD_FILTER_LIGHT ::
+ * The light filter is a variant that produces less blurriness at the
+ * cost of slightly more color fringes than the default one. It might
+ * be better, depending on taste, your monitor, or your personal vision.
+ *
+ * FT_LCD_FILTER_LEGACY ::
+ * This filter corresponds to the original libXft color filter. It
+ * provides high contrast output but can exhibit really bad color
+ * fringes if glyphs are not extremely well hinted to the pixel grid.
+ * In other words, it only works well if the TrueType bytecode
+ * interpreter is enabled *and* high-quality hinted fonts are used.
+ *
+ * This filter is only provided for comparison purposes, and might be
+ * disabled or stay unsupported in the future.
+ *
+ * @since:
+ * 2.3.0
+ */
+ typedef enum FT_LcdFilter_
+ {
+ FT_LCD_FILTER_NONE = 0,
+ FT_LCD_FILTER_DEFAULT = 1,
+ FT_LCD_FILTER_LIGHT = 2,
+ FT_LCD_FILTER_LEGACY = 16,
+
+ FT_LCD_FILTER_MAX /* do not remove */
+
+ } FT_LcdFilter;
+
+
+ /**************************************************************************
+ *
+ * @func:
+ * FT_Library_SetLcdFilter
+ *
+ * @description:
+ * This function is used to apply color filtering to LCD decimated
+ * bitmaps, like the ones used when calling @FT_Render_Glyph with
+ * @FT_RENDER_MODE_LCD or @FT_RENDER_MODE_LCD_V.
+ *
+ * @input:
+ * library ::
+ * A handle to the target library instance.
+ *
+ * filter ::
+ * The filter type.
+ *
+ * You can use @FT_LCD_FILTER_NONE here to disable this feature, or
+ * @FT_LCD_FILTER_DEFAULT to use a default filter that should work
+ * well on most LCD screens.
+ *
+ * @return:
+ * FreeType error code. 0 means success.
+ *
+ * @note:
+ * This feature is always disabled by default. Clients must make an
+ * explicit call to this function with a `filter' value other than
+ * @FT_LCD_FILTER_NONE in order to enable it.
+ *
+ * Due to *PATENTS* covering subpixel rendering, this function doesn't
+ * do anything except returning `FT_Err_Unimplemented_Feature' if the
+ * configuration macro FT_CONFIG_OPTION_SUBPIXEL_RENDERING is not
+ * defined in your build of the library, which should correspond to all
+ * default builds of FreeType.
+ *
+ * The filter affects glyph bitmaps rendered through @FT_Render_Glyph,
+ * @FT_Outline_Get_Bitmap, @FT_Load_Glyph, and @FT_Load_Char.
+ *
+ * It does _not_ affect the output of @FT_Outline_Render and
+ * @FT_Outline_Get_Bitmap.
+ *
+ * If this feature is activated, the dimensions of LCD glyph bitmaps are
+ * either larger or taller than the dimensions of the corresponding
+ * outline with regards to the pixel grid. For example, for
+ * @FT_RENDER_MODE_LCD, the filter adds up to 3 pixels to the left, and
+ * up to 3 pixels to the right.
+ *
+ * The bitmap offset values are adjusted correctly, so clients shouldn't
+ * need to modify their layout and glyph positioning code when enabling
+ * the filter.
+ *
+ * @since:
+ * 2.3.0
+ */
+ FT_EXPORT( FT_Error )
+ FT_Library_SetLcdFilter( FT_Library library,
+ FT_LcdFilter filter );
+
+ /* */
+
+
+FT_END_HEADER
+
+#endif /* __FT_LCD_FILTER_H__ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/include/freetype/ftlist.h b/src/3rdparty/freetype/include/freetype/ftlist.h
new file mode 100644
index 0000000..f3223ee
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/ftlist.h
@@ -0,0 +1,273 @@
+/***************************************************************************/
+/* */
+/* ftlist.h */
+/* */
+/* Generic list support for FreeType (specification). */
+/* */
+/* Copyright 1996-2001, 2003, 2007 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* This file implements functions relative to list processing. Its */
+ /* data structures are defined in `freetype.h'. */
+ /* */
+ /*************************************************************************/
+
+
+#ifndef __FTLIST_H__
+#define __FTLIST_H__
+
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* list_processing */
+ /* */
+ /* <Title> */
+ /* List Processing */
+ /* */
+ /* <Abstract> */
+ /* Simple management of lists. */
+ /* */
+ /* <Description> */
+ /* This section contains various definitions related to list */
+ /* processing using doubly-linked nodes. */
+ /* */
+ /* <Order> */
+ /* FT_List */
+ /* FT_ListNode */
+ /* FT_ListRec */
+ /* FT_ListNodeRec */
+ /* */
+ /* FT_List_Add */
+ /* FT_List_Insert */
+ /* FT_List_Find */
+ /* FT_List_Remove */
+ /* FT_List_Up */
+ /* FT_List_Iterate */
+ /* FT_List_Iterator */
+ /* FT_List_Finalize */
+ /* FT_List_Destructor */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_List_Find */
+ /* */
+ /* <Description> */
+ /* Finds the list node for a given listed object. */
+ /* */
+ /* <Input> */
+ /* list :: A pointer to the parent list. */
+ /* data :: The address of the listed object. */
+ /* */
+ /* <Return> */
+ /* List node. NULL if it wasn't found. */
+ /* */
+ FT_EXPORT( FT_ListNode )
+ FT_List_Find( FT_List list,
+ void* data );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_List_Add */
+ /* */
+ /* <Description> */
+ /* Appends an element to the end of a list. */
+ /* */
+ /* <InOut> */
+ /* list :: A pointer to the parent list. */
+ /* node :: The node to append. */
+ /* */
+ FT_EXPORT( void )
+ FT_List_Add( FT_List list,
+ FT_ListNode node );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_List_Insert */
+ /* */
+ /* <Description> */
+ /* Inserts an element at the head of a list. */
+ /* */
+ /* <InOut> */
+ /* list :: A pointer to parent list. */
+ /* node :: The node to insert. */
+ /* */
+ FT_EXPORT( void )
+ FT_List_Insert( FT_List list,
+ FT_ListNode node );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_List_Remove */
+ /* */
+ /* <Description> */
+ /* Removes a node from a list. This function doesn't check whether */
+ /* the node is in the list! */
+ /* */
+ /* <Input> */
+ /* node :: The node to remove. */
+ /* */
+ /* <InOut> */
+ /* list :: A pointer to the parent list. */
+ /* */
+ FT_EXPORT( void )
+ FT_List_Remove( FT_List list,
+ FT_ListNode node );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_List_Up */
+ /* */
+ /* <Description> */
+ /* Moves a node to the head/top of a list. Used to maintain LRU */
+ /* lists. */
+ /* */
+ /* <InOut> */
+ /* list :: A pointer to the parent list. */
+ /* node :: The node to move. */
+ /* */
+ FT_EXPORT( void )
+ FT_List_Up( FT_List list,
+ FT_ListNode node );
+
+
+ /*************************************************************************/
+ /* */
+ /* <FuncType> */
+ /* FT_List_Iterator */
+ /* */
+ /* <Description> */
+ /* An FT_List iterator function which is called during a list parse */
+ /* by @FT_List_Iterate. */
+ /* */
+ /* <Input> */
+ /* node :: The current iteration list node. */
+ /* */
+ /* user :: A typeless pointer passed to @FT_List_Iterate. */
+ /* Can be used to point to the iteration's state. */
+ /* */
+ typedef FT_Error
+ (*FT_List_Iterator)( FT_ListNode node,
+ void* user );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_List_Iterate */
+ /* */
+ /* <Description> */
+ /* Parses a list and calls a given iterator function on each element. */
+ /* Note that parsing is stopped as soon as one of the iterator calls */
+ /* returns a non-zero value. */
+ /* */
+ /* <Input> */
+ /* list :: A handle to the list. */
+ /* iterator :: An iterator function, called on each node of the list. */
+ /* user :: A user-supplied field which is passed as the second */
+ /* argument to the iterator. */
+ /* */
+ /* <Return> */
+ /* The result (a FreeType error code) of the last iterator call. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_List_Iterate( FT_List list,
+ FT_List_Iterator iterator,
+ void* user );
+
+
+ /*************************************************************************/
+ /* */
+ /* <FuncType> */
+ /* FT_List_Destructor */
+ /* */
+ /* <Description> */
+ /* An @FT_List iterator function which is called during a list */
+ /* finalization by @FT_List_Finalize to destroy all elements in a */
+ /* given list. */
+ /* */
+ /* <Input> */
+ /* system :: The current system object. */
+ /* */
+ /* data :: The current object to destroy. */
+ /* */
+ /* user :: A typeless pointer passed to @FT_List_Iterate. It can */
+ /* be used to point to the iteration's state. */
+ /* */
+ typedef void
+ (*FT_List_Destructor)( FT_Memory memory,
+ void* data,
+ void* user );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_List_Finalize */
+ /* */
+ /* <Description> */
+ /* Destroys all elements in the list as well as the list itself. */
+ /* */
+ /* <Input> */
+ /* list :: A handle to the list. */
+ /* */
+ /* destroy :: A list destructor that will be applied to each element */
+ /* of the list. */
+ /* */
+ /* memory :: The current memory object which handles deallocation. */
+ /* */
+ /* user :: A user-supplied field which is passed as the last */
+ /* argument to the destructor. */
+ /* */
+ FT_EXPORT( void )
+ FT_List_Finalize( FT_List list,
+ FT_List_Destructor destroy,
+ FT_Memory memory,
+ void* user );
+
+
+ /* */
+
+
+FT_END_HEADER
+
+#endif /* __FTLIST_H__ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/include/freetype/ftlzw.h b/src/3rdparty/freetype/include/freetype/ftlzw.h
new file mode 100644
index 0000000..d950653
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/ftlzw.h
@@ -0,0 +1,99 @@
+/***************************************************************************/
+/* */
+/* ftlzw.h */
+/* */
+/* LZW-compressed stream support. */
+/* */
+/* Copyright 2004, 2006 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef __FTLZW_H__
+#define __FTLZW_H__
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* lzw */
+ /* */
+ /* <Title> */
+ /* LZW Streams */
+ /* */
+ /* <Abstract> */
+ /* Using LZW-compressed font files. */
+ /* */
+ /* <Description> */
+ /* This section contains the declaration of LZW-specific functions. */
+ /* */
+ /*************************************************************************/
+
+ /************************************************************************
+ *
+ * @function:
+ * FT_Stream_OpenLZW
+ *
+ * @description:
+ * Open a new stream to parse LZW-compressed font files. This is
+ * mainly used to support the compressed `*.pcf.Z' fonts that come
+ * with XFree86.
+ *
+ * @input:
+ * stream :: The target embedding stream.
+ *
+ * source :: The source stream.
+ *
+ * @return:
+ * FreeType error code. 0 means success.
+ *
+ * @note:
+ * The source stream must be opened _before_ calling this function.
+ *
+ * Calling the internal function `FT_Stream_Close' on the new stream will
+ * *not* call `FT_Stream_Close' on the source stream. None of the stream
+ * objects will be released to the heap.
+ *
+ * The stream implementation is very basic and resets the decompression
+ * process each time seeking backwards is needed within the stream
+ *
+ * In certain builds of the library, LZW compression recognition is
+ * automatically handled when calling @FT_New_Face or @FT_Open_Face.
+ * This means that if no font driver is capable of handling the raw
+ * compressed file, the library will try to open a LZW stream from it
+ * and re-open the face with it.
+ *
+ * This function may return `FT_Err_Unimplemented_Feature' if your build
+ * of FreeType was not compiled with LZW support.
+ */
+ FT_EXPORT( FT_Error )
+ FT_Stream_OpenLZW( FT_Stream stream,
+ FT_Stream source );
+
+ /* */
+
+
+FT_END_HEADER
+
+#endif /* __FTLZW_H__ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/include/freetype/ftmac.h b/src/3rdparty/freetype/include/freetype/ftmac.h
new file mode 100644
index 0000000..1752d13
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/ftmac.h
@@ -0,0 +1,274 @@
+/***************************************************************************/
+/* */
+/* ftmac.h */
+/* */
+/* Additional Mac-specific API. */
+/* */
+/* Copyright 1996-2001, 2004, 2006, 2007 by */
+/* Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+/***************************************************************************/
+/* */
+/* NOTE: Include this file after <freetype/freetype.h> and after any */
+/* Mac-specific headers (because this header uses Mac types such as */
+/* Handle, FSSpec, FSRef, etc.) */
+/* */
+/***************************************************************************/
+
+
+#ifndef __FTMAC_H__
+#define __FTMAC_H__
+
+
+#include <ft2build.h>
+
+
+FT_BEGIN_HEADER
+
+
+/* gcc-3.4.1 and later can warn about functions tagged as deprecated */
+#ifndef FT_DEPRECATED_ATTRIBUTE
+#if defined(__GNUC__) && \
+ ((__GNUC__ >= 4) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 1)))
+#define FT_DEPRECATED_ATTRIBUTE __attribute__((deprecated))
+#else
+#define FT_DEPRECATED_ATTRIBUTE
+#endif
+#endif
+
+
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* mac_specific */
+ /* */
+ /* <Title> */
+ /* Mac Specific Interface */
+ /* */
+ /* <Abstract> */
+ /* Only available on the Macintosh. */
+ /* */
+ /* <Description> */
+ /* The following definitions are only available if FreeType is */
+ /* compiled on a Macintosh. */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_New_Face_From_FOND */
+ /* */
+ /* <Description> */
+ /* Create a new face object from a FOND resource. */
+ /* */
+ /* <InOut> */
+ /* library :: A handle to the library resource. */
+ /* */
+ /* <Input> */
+ /* fond :: A FOND resource. */
+ /* */
+ /* face_index :: Only supported for the -1 `sanity check' special */
+ /* case. */
+ /* */
+ /* <Output> */
+ /* aface :: A handle to a new face object. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ /* <Notes> */
+ /* This function can be used to create @FT_Face objects from fonts */
+ /* that are installed in the system as follows. */
+ /* */
+ /* { */
+ /* fond = GetResource( 'FOND', fontName ); */
+ /* error = FT_New_Face_From_FOND( library, fond, 0, &face ); */
+ /* } */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_New_Face_From_FOND( FT_Library library,
+ Handle fond,
+ FT_Long face_index,
+ FT_Face *aface )
+ FT_DEPRECATED_ATTRIBUTE;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_GetFile_From_Mac_Name */
+ /* */
+ /* <Description> */
+ /* Return an FSSpec for the disk file containing the named font. */
+ /* */
+ /* <Input> */
+ /* fontName :: Mac OS name of the font (e.g., Times New Roman */
+ /* Bold). */
+ /* */
+ /* <Output> */
+ /* pathSpec :: FSSpec to the file. For passing to */
+ /* @FT_New_Face_From_FSSpec. */
+ /* */
+ /* face_index :: Index of the face. For passing to */
+ /* @FT_New_Face_From_FSSpec. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_GetFile_From_Mac_Name( const char* fontName,
+ FSSpec* pathSpec,
+ FT_Long* face_index )
+ FT_DEPRECATED_ATTRIBUTE;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_GetFile_From_Mac_ATS_Name */
+ /* */
+ /* <Description> */
+ /* Return an FSSpec for the disk file containing the named font. */
+ /* */
+ /* <Input> */
+ /* fontName :: Mac OS name of the font in ATS framework. */
+ /* */
+ /* <Output> */
+ /* pathSpec :: FSSpec to the file. For passing to */
+ /* @FT_New_Face_From_FSSpec. */
+ /* */
+ /* face_index :: Index of the face. For passing to */
+ /* @FT_New_Face_From_FSSpec. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_GetFile_From_Mac_ATS_Name( const char* fontName,
+ FSSpec* pathSpec,
+ FT_Long* face_index )
+ FT_DEPRECATED_ATTRIBUTE;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_GetFilePath_From_Mac_ATS_Name */
+ /* */
+ /* <Description> */
+ /* Return a pathname of the disk file and face index for given font */
+ /* name which is handled by ATS framework. */
+ /* */
+ /* <Input> */
+ /* fontName :: Mac OS name of the font in ATS framework. */
+ /* */
+ /* <Output> */
+ /* path :: Buffer to store pathname of the file. For passing */
+ /* to @FT_New_Face. The client must allocate this */
+ /* buffer before calling this function. */
+ /* */
+ /* maxPathSize :: Lengths of the buffer `path' that client allocated. */
+ /* */
+ /* face_index :: Index of the face. For passing to @FT_New_Face. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_GetFilePath_From_Mac_ATS_Name( const char* fontName,
+ UInt8* path,
+ UInt32 maxPathSize,
+ FT_Long* face_index )
+ FT_DEPRECATED_ATTRIBUTE;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_New_Face_From_FSSpec */
+ /* */
+ /* <Description> */
+ /* Create a new face object from a given resource and typeface index */
+ /* using an FSSpec to the font file. */
+ /* */
+ /* <InOut> */
+ /* library :: A handle to the library resource. */
+ /* */
+ /* <Input> */
+ /* spec :: FSSpec to the font file. */
+ /* */
+ /* face_index :: The index of the face within the resource. The */
+ /* first face has index 0. */
+ /* <Output> */
+ /* aface :: A handle to a new face object. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ /* <Note> */
+ /* @FT_New_Face_From_FSSpec is identical to @FT_New_Face except */
+ /* it accepts an FSSpec instead of a path. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_New_Face_From_FSSpec( FT_Library library,
+ const FSSpec *spec,
+ FT_Long face_index,
+ FT_Face *aface )
+ FT_DEPRECATED_ATTRIBUTE;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_New_Face_From_FSRef */
+ /* */
+ /* <Description> */
+ /* Create a new face object from a given resource and typeface index */
+ /* using an FSRef to the font file. */
+ /* */
+ /* <InOut> */
+ /* library :: A handle to the library resource. */
+ /* */
+ /* <Input> */
+ /* spec :: FSRef to the font file. */
+ /* */
+ /* face_index :: The index of the face within the resource. The */
+ /* first face has index 0. */
+ /* <Output> */
+ /* aface :: A handle to a new face object. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ /* <Note> */
+ /* @FT_New_Face_From_FSRef is identical to @FT_New_Face except */
+ /* it accepts an FSRef instead of a path. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_New_Face_From_FSRef( FT_Library library,
+ const FSRef *ref,
+ FT_Long face_index,
+ FT_Face *aface )
+ FT_DEPRECATED_ATTRIBUTE;
+
+ /* */
+
+
+FT_END_HEADER
+
+
+#endif /* __FTMAC_H__ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/include/freetype/ftmm.h b/src/3rdparty/freetype/include/freetype/ftmm.h
new file mode 100644
index 0000000..a9ccfe7
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/ftmm.h
@@ -0,0 +1,378 @@
+/***************************************************************************/
+/* */
+/* ftmm.h */
+/* */
+/* FreeType Multiple Master font interface (specification). */
+/* */
+/* Copyright 1996-2001, 2003, 2004, 2006 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef __FTMM_H__
+#define __FTMM_H__
+
+
+#include <ft2build.h>
+#include FT_TYPE1_TABLES_H
+
+
+FT_BEGIN_HEADER
+
+
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* multiple_masters */
+ /* */
+ /* <Title> */
+ /* Multiple Masters */
+ /* */
+ /* <Abstract> */
+ /* How to manage Multiple Masters fonts. */
+ /* */
+ /* <Description> */
+ /* The following types and functions are used to manage Multiple */
+ /* Master fonts, i.e., the selection of specific design instances by */
+ /* setting design axis coordinates. */
+ /* */
+ /* George Williams has extended this interface to make it work with */
+ /* both Type 1 Multiple Masters fonts and GX distortable (var) */
+ /* fonts. Some of these routines only work with MM fonts, others */
+ /* will work with both types. They are similar enough that a */
+ /* consistent interface makes sense. */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_MM_Axis */
+ /* */
+ /* <Description> */
+ /* A simple structure used to model a given axis in design space for */
+ /* Multiple Masters fonts. */
+ /* */
+ /* This structure can't be used for GX var fonts. */
+ /* */
+ /* <Fields> */
+ /* name :: The axis's name. */
+ /* */
+ /* minimum :: The axis's minimum design coordinate. */
+ /* */
+ /* maximum :: The axis's maximum design coordinate. */
+ /* */
+ typedef struct FT_MM_Axis_
+ {
+ FT_String* name;
+ FT_Long minimum;
+ FT_Long maximum;
+
+ } FT_MM_Axis;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_Multi_Master */
+ /* */
+ /* <Description> */
+ /* A structure used to model the axes and space of a Multiple Masters */
+ /* font. */
+ /* */
+ /* This structure can't be used for GX var fonts. */
+ /* */
+ /* <Fields> */
+ /* num_axis :: Number of axes. Cannot exceed 4. */
+ /* */
+ /* num_designs :: Number of designs; should be normally 2^num_axis */
+ /* even though the Type 1 specification strangely */
+ /* allows for intermediate designs to be present. This */
+ /* number cannot exceed 16. */
+ /* */
+ /* axis :: A table of axis descriptors. */
+ /* */
+ typedef struct FT_Multi_Master_
+ {
+ FT_UInt num_axis;
+ FT_UInt num_designs;
+ FT_MM_Axis axis[T1_MAX_MM_AXIS];
+
+ } FT_Multi_Master;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_Var_Axis */
+ /* */
+ /* <Description> */
+ /* A simple structure used to model a given axis in design space for */
+ /* Multiple Masters and GX var fonts. */
+ /* */
+ /* <Fields> */
+ /* name :: The axis's name. */
+ /* Not always meaningful for GX. */
+ /* */
+ /* minimum :: The axis's minimum design coordinate. */
+ /* */
+ /* def :: The axis's default design coordinate. */
+ /* FreeType computes meaningful default values for MM; it */
+ /* is then an integer value, not in 16.16 format. */
+ /* */
+ /* maximum :: The axis's maximum design coordinate. */
+ /* */
+ /* tag :: The axis's tag (the GX equivalent to `name'). */
+ /* FreeType provides default values for MM if possible. */
+ /* */
+ /* strid :: The entry in `name' table (another GX version of */
+ /* `name'). */
+ /* Not meaningful for MM. */
+ /* */
+ typedef struct FT_Var_Axis_
+ {
+ FT_String* name;
+
+ FT_Fixed minimum;
+ FT_Fixed def;
+ FT_Fixed maximum;
+
+ FT_ULong tag;
+ FT_UInt strid;
+
+ } FT_Var_Axis;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_Var_Named_Style */
+ /* */
+ /* <Description> */
+ /* A simple structure used to model a named style in a GX var font. */
+ /* */
+ /* This structure can't be used for MM fonts. */
+ /* */
+ /* <Fields> */
+ /* coords :: The design coordinates for this style. */
+ /* This is an array with one entry for each axis. */
+ /* */
+ /* strid :: The entry in `name' table identifying this style. */
+ /* */
+ typedef struct FT_Var_Named_Style_
+ {
+ FT_Fixed* coords;
+ FT_UInt strid;
+
+ } FT_Var_Named_Style;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_MM_Var */
+ /* */
+ /* <Description> */
+ /* A structure used to model the axes and space of a Multiple Masters */
+ /* or GX var distortable font. */
+ /* */
+ /* Some fields are specific to one format and not to the other. */
+ /* */
+ /* <Fields> */
+ /* num_axis :: The number of axes. The maximum value is 4 for */
+ /* MM; no limit in GX. */
+ /* */
+ /* num_designs :: The number of designs; should be normally */
+ /* 2^num_axis for MM fonts. Not meaningful for GX */
+ /* (where every glyph could have a different */
+ /* number of designs). */
+ /* */
+ /* num_namedstyles :: The number of named styles; only meaningful for */
+ /* GX which allows certain design coordinates to */
+ /* have a string ID (in the `name' table) */
+ /* associated with them. The font can tell the */
+ /* user that, for example, Weight=1.5 is `Bold'. */
+ /* */
+ /* axis :: A table of axis descriptors. */
+ /* GX fonts contain slightly more data than MM. */
+ /* */
+ /* namedstyles :: A table of named styles. */
+ /* Only meaningful with GX. */
+ /* */
+ typedef struct FT_MM_Var_
+ {
+ FT_UInt num_axis;
+ FT_UInt num_designs;
+ FT_UInt num_namedstyles;
+ FT_Var_Axis* axis;
+ FT_Var_Named_Style* namedstyle;
+
+ } FT_MM_Var;
+
+
+ /* */
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Get_Multi_Master */
+ /* */
+ /* <Description> */
+ /* Retrieves the Multiple Master descriptor of a given font. */
+ /* */
+ /* This function can't be used with GX fonts. */
+ /* */
+ /* <Input> */
+ /* face :: A handle to the source face. */
+ /* */
+ /* <Output> */
+ /* amaster :: The Multiple Masters descriptor. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Get_Multi_Master( FT_Face face,
+ FT_Multi_Master *amaster );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Get_MM_Var */
+ /* */
+ /* <Description> */
+ /* Retrieves the Multiple Master/GX var descriptor of a given font. */
+ /* */
+ /* <Input> */
+ /* face :: A handle to the source face. */
+ /* */
+ /* <Output> */
+ /* amaster :: The Multiple Masters descriptor. */
+ /* Allocates a data structure, which the user must free */
+ /* (a single call to FT_FREE will do it). */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Get_MM_Var( FT_Face face,
+ FT_MM_Var* *amaster );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Set_MM_Design_Coordinates */
+ /* */
+ /* <Description> */
+ /* For Multiple Masters fonts, choose an interpolated font design */
+ /* through design coordinates. */
+ /* */
+ /* This function can't be used with GX fonts. */
+ /* */
+ /* <InOut> */
+ /* face :: A handle to the source face. */
+ /* */
+ /* <Input> */
+ /* num_coords :: The number of design coordinates (must be equal to */
+ /* the number of axes in the font). */
+ /* */
+ /* coords :: An array of design coordinates. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Set_MM_Design_Coordinates( FT_Face face,
+ FT_UInt num_coords,
+ FT_Long* coords );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Set_Var_Design_Coordinates */
+ /* */
+ /* <Description> */
+ /* For Multiple Master or GX Var fonts, choose an interpolated font */
+ /* design through design coordinates. */
+ /* */
+ /* <InOut> */
+ /* face :: A handle to the source face. */
+ /* */
+ /* <Input> */
+ /* num_coords :: The number of design coordinates (must be equal to */
+ /* the number of axes in the font). */
+ /* */
+ /* coords :: An array of design coordinates. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Set_Var_Design_Coordinates( FT_Face face,
+ FT_UInt num_coords,
+ FT_Fixed* coords );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Set_MM_Blend_Coordinates */
+ /* */
+ /* <Description> */
+ /* For Multiple Masters and GX var fonts, choose an interpolated font */
+ /* design through normalized blend coordinates. */
+ /* */
+ /* <InOut> */
+ /* face :: A handle to the source face. */
+ /* */
+ /* <Input> */
+ /* num_coords :: The number of design coordinates (must be equal to */
+ /* the number of axes in the font). */
+ /* */
+ /* coords :: The design coordinates array (each element must be */
+ /* between 0 and 1.0). */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Set_MM_Blend_Coordinates( FT_Face face,
+ FT_UInt num_coords,
+ FT_Fixed* coords );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Set_Var_Blend_Coordinates */
+ /* */
+ /* <Description> */
+ /* This is another name of @FT_Set_MM_Blend_Coordinates. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Set_Var_Blend_Coordinates( FT_Face face,
+ FT_UInt num_coords,
+ FT_Fixed* coords );
+
+
+ /* */
+
+
+FT_END_HEADER
+
+#endif /* __FTMM_H__ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/include/freetype/ftmodapi.h b/src/3rdparty/freetype/include/freetype/ftmodapi.h
new file mode 100644
index 0000000..7d813eb
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/ftmodapi.h
@@ -0,0 +1,441 @@
+/***************************************************************************/
+/* */
+/* ftmodapi.h */
+/* */
+/* FreeType modules public interface (specification). */
+/* */
+/* Copyright 1996-2001, 2002, 2003, 2006, 2008 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef __FTMODAPI_H__
+#define __FTMODAPI_H__
+
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* module_management */
+ /* */
+ /* <Title> */
+ /* Module Management */
+ /* */
+ /* <Abstract> */
+ /* How to add, upgrade, and remove modules from FreeType. */
+ /* */
+ /* <Description> */
+ /* The definitions below are used to manage modules within FreeType. */
+ /* Modules can be added, upgraded, and removed at runtime. */
+ /* */
+ /*************************************************************************/
+
+
+ /* module bit flags */
+#define FT_MODULE_FONT_DRIVER 1 /* this module is a font driver */
+#define FT_MODULE_RENDERER 2 /* this module is a renderer */
+#define FT_MODULE_HINTER 4 /* this module is a glyph hinter */
+#define FT_MODULE_STYLER 8 /* this module is a styler */
+
+#define FT_MODULE_DRIVER_SCALABLE 0x100 /* the driver supports */
+ /* scalable fonts */
+#define FT_MODULE_DRIVER_NO_OUTLINES 0x200 /* the driver does not */
+ /* support vector outlines */
+#define FT_MODULE_DRIVER_HAS_HINTER 0x400 /* the driver provides its */
+ /* own hinter */
+
+
+ /* deprecated values */
+#define ft_module_font_driver FT_MODULE_FONT_DRIVER
+#define ft_module_renderer FT_MODULE_RENDERER
+#define ft_module_hinter FT_MODULE_HINTER
+#define ft_module_styler FT_MODULE_STYLER
+
+#define ft_module_driver_scalable FT_MODULE_DRIVER_SCALABLE
+#define ft_module_driver_no_outlines FT_MODULE_DRIVER_NO_OUTLINES
+#define ft_module_driver_has_hinter FT_MODULE_DRIVER_HAS_HINTER
+
+
+ typedef FT_Pointer FT_Module_Interface;
+
+
+ /*************************************************************************/
+ /* */
+ /* <FuncType> */
+ /* FT_Module_Constructor */
+ /* */
+ /* <Description> */
+ /* A function used to initialize (not create) a new module object. */
+ /* */
+ /* <Input> */
+ /* module :: The module to initialize. */
+ /* */
+ typedef FT_Error
+ (*FT_Module_Constructor)( FT_Module module );
+
+
+ /*************************************************************************/
+ /* */
+ /* <FuncType> */
+ /* FT_Module_Destructor */
+ /* */
+ /* <Description> */
+ /* A function used to finalize (not destroy) a given module object. */
+ /* */
+ /* <Input> */
+ /* module :: The module to finalize. */
+ /* */
+ typedef void
+ (*FT_Module_Destructor)( FT_Module module );
+
+
+ /*************************************************************************/
+ /* */
+ /* <FuncType> */
+ /* FT_Module_Requester */
+ /* */
+ /* <Description> */
+ /* A function used to query a given module for a specific interface. */
+ /* */
+ /* <Input> */
+ /* module :: The module to finalize. */
+ /* */
+ /* name :: The name of the interface in the module. */
+ /* */
+ typedef FT_Module_Interface
+ (*FT_Module_Requester)( FT_Module module,
+ const char* name );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_Module_Class */
+ /* */
+ /* <Description> */
+ /* The module class descriptor. */
+ /* */
+ /* <Fields> */
+ /* module_flags :: Bit flags describing the module. */
+ /* */
+ /* module_size :: The size of one module object/instance in */
+ /* bytes. */
+ /* */
+ /* module_name :: The name of the module. */
+ /* */
+ /* module_version :: The version, as a 16.16 fixed number */
+ /* (major.minor). */
+ /* */
+ /* module_requires :: The version of FreeType this module requires, */
+ /* as a 16.16 fixed number (major.minor). Starts */
+ /* at version 2.0, i.e., 0x20000. */
+ /* */
+ /* module_init :: The initializing function. */
+ /* */
+ /* module_done :: The finalizing function. */
+ /* */
+ /* get_interface :: The interface requesting function. */
+ /* */
+ typedef struct FT_Module_Class_
+ {
+ FT_ULong module_flags;
+ FT_Long module_size;
+ const FT_String* module_name;
+ FT_Fixed module_version;
+ FT_Fixed module_requires;
+
+ const void* module_interface;
+
+ FT_Module_Constructor module_init;
+ FT_Module_Destructor module_done;
+ FT_Module_Requester get_interface;
+
+ } FT_Module_Class;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Add_Module */
+ /* */
+ /* <Description> */
+ /* Adds a new module to a given library instance. */
+ /* */
+ /* <InOut> */
+ /* library :: A handle to the library object. */
+ /* */
+ /* <Input> */
+ /* clazz :: A pointer to class descriptor for the module. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ /* <Note> */
+ /* An error will be returned if a module already exists by that name, */
+ /* or if the module requires a version of FreeType that is too great. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Add_Module( FT_Library library,
+ const FT_Module_Class* clazz );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Get_Module */
+ /* */
+ /* <Description> */
+ /* Finds a module by its name. */
+ /* */
+ /* <Input> */
+ /* library :: A handle to the library object. */
+ /* */
+ /* module_name :: The module's name (as an ASCII string). */
+ /* */
+ /* <Return> */
+ /* A module handle. 0 if none was found. */
+ /* */
+ /* <Note> */
+ /* FreeType's internal modules aren't documented very well, and you */
+ /* should look up the source code for details. */
+ /* */
+ FT_EXPORT( FT_Module )
+ FT_Get_Module( FT_Library library,
+ const char* module_name );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Remove_Module */
+ /* */
+ /* <Description> */
+ /* Removes a given module from a library instance. */
+ /* */
+ /* <InOut> */
+ /* library :: A handle to a library object. */
+ /* */
+ /* <Input> */
+ /* module :: A handle to a module object. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ /* <Note> */
+ /* The module object is destroyed by the function in case of success. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Remove_Module( FT_Library library,
+ FT_Module module );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_New_Library */
+ /* */
+ /* <Description> */
+ /* This function is used to create a new FreeType library instance */
+ /* from a given memory object. It is thus possible to use libraries */
+ /* with distinct memory allocators within the same program. */
+ /* */
+ /* <Input> */
+ /* memory :: A handle to the original memory object. */
+ /* */
+ /* <Output> */
+ /* alibrary :: A pointer to handle of a new library object. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_New_Library( FT_Memory memory,
+ FT_Library *alibrary );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Done_Library */
+ /* */
+ /* <Description> */
+ /* Discards a given library object. This closes all drivers and */
+ /* discards all resource objects. */
+ /* */
+ /* <Input> */
+ /* library :: A handle to the target library. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Done_Library( FT_Library library );
+
+/* */
+
+ typedef void
+ (*FT_DebugHook_Func)( void* arg );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Set_Debug_Hook */
+ /* */
+ /* <Description> */
+ /* Sets a debug hook function for debugging the interpreter of a font */
+ /* format. */
+ /* */
+ /* <InOut> */
+ /* library :: A handle to the library object. */
+ /* */
+ /* <Input> */
+ /* hook_index :: The index of the debug hook. You should use the */
+ /* values defined in `ftobjs.h', e.g., */
+ /* `FT_DEBUG_HOOK_TRUETYPE'. */
+ /* */
+ /* debug_hook :: The function used to debug the interpreter. */
+ /* */
+ /* <Note> */
+ /* Currently, four debug hook slots are available, but only two (for */
+ /* the TrueType and the Type 1 interpreter) are defined. */
+ /* */
+ /* Since the internal headers of FreeType are no longer installed, */
+ /* the symbol `FT_DEBUG_HOOK_TRUETYPE' isn't available publicly. */
+ /* This is a bug and will be fixed in a forthcoming release. */
+ /* */
+ FT_EXPORT( void )
+ FT_Set_Debug_Hook( FT_Library library,
+ FT_UInt hook_index,
+ FT_DebugHook_Func debug_hook );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Add_Default_Modules */
+ /* */
+ /* <Description> */
+ /* Adds the set of default drivers to a given library object. */
+ /* This is only useful when you create a library object with */
+ /* @FT_New_Library (usually to plug a custom memory manager). */
+ /* */
+ /* <InOut> */
+ /* library :: A handle to a new library object. */
+ /* */
+ FT_EXPORT( void )
+ FT_Add_Default_Modules( FT_Library library );
+
+
+
+ /**************************************************************************
+ *
+ * @section:
+ * truetype_engine
+ *
+ * @title:
+ * The TrueType Engine
+ *
+ * @abstract:
+ * TrueType bytecode support.
+ *
+ * @description:
+ * This section contains a function used to query the level of TrueType
+ * bytecode support compiled in this version of the library.
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @enum:
+ * FT_TrueTypeEngineType
+ *
+ * @description:
+ * A list of values describing which kind of TrueType bytecode
+ * engine is implemented in a given FT_Library instance. It is used
+ * by the @FT_Get_TrueType_Engine_Type function.
+ *
+ * @values:
+ * FT_TRUETYPE_ENGINE_TYPE_NONE ::
+ * The library doesn't implement any kind of bytecode interpreter.
+ *
+ * FT_TRUETYPE_ENGINE_TYPE_UNPATENTED ::
+ * The library implements a bytecode interpreter that doesn't
+ * support the patented operations of the TrueType virtual machine.
+ *
+ * Its main use is to load certain Asian fonts which position and
+ * scale glyph components with bytecode instructions. It produces
+ * bad output for most other fonts.
+ *
+ * FT_TRUETYPE_ENGINE_TYPE_PATENTED ::
+ * The library implements a bytecode interpreter that covers
+ * the full instruction set of the TrueType virtual machine.
+ * See the file `docs/PATENTS' for legal aspects.
+ *
+ * @since:
+ * 2.2
+ *
+ */
+ typedef enum FT_TrueTypeEngineType_
+ {
+ FT_TRUETYPE_ENGINE_TYPE_NONE = 0,
+ FT_TRUETYPE_ENGINE_TYPE_UNPATENTED,
+ FT_TRUETYPE_ENGINE_TYPE_PATENTED
+
+ } FT_TrueTypeEngineType;
+
+
+ /**************************************************************************
+ *
+ * @func:
+ * FT_Get_TrueType_Engine_Type
+ *
+ * @description:
+ * Return a @FT_TrueTypeEngineType value to indicate which level of
+ * the TrueType virtual machine a given library instance supports.
+ *
+ * @input:
+ * library ::
+ * A library instance.
+ *
+ * @return:
+ * A value indicating which level is supported.
+ *
+ * @since:
+ * 2.2
+ *
+ */
+ FT_EXPORT( FT_TrueTypeEngineType )
+ FT_Get_TrueType_Engine_Type( FT_Library library );
+
+
+ /* */
+
+
+FT_END_HEADER
+
+#endif /* __FTMODAPI_H__ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/include/freetype/ftmoderr.h b/src/3rdparty/freetype/include/freetype/ftmoderr.h
new file mode 100644
index 0000000..b0115dd
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/ftmoderr.h
@@ -0,0 +1,155 @@
+/***************************************************************************/
+/* */
+/* ftmoderr.h */
+/* */
+/* FreeType module error offsets (specification). */
+/* */
+/* Copyright 2001, 2002, 2003, 2004, 2005 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* This file is used to define the FreeType module error offsets. */
+ /* */
+ /* The lower byte gives the error code, the higher byte gives the */
+ /* module. The base module has error offset 0. For example, the error */
+ /* `FT_Err_Invalid_File_Format' has value 0x003, the error */
+ /* `TT_Err_Invalid_File_Format' has value 0x1103, the error */
+ /* `T1_Err_Invalid_File_Format' has value 0x1203, etc. */
+ /* */
+ /* Undefine the macro FT_CONFIG_OPTION_USE_MODULE_ERRORS in ftoption.h */
+ /* to make the higher byte always zero (disabling the module error */
+ /* mechanism). */
+ /* */
+ /* It can also be used to create a module error message table easily */
+ /* with something like */
+ /* */
+ /* { */
+ /* #undef __FTMODERR_H__ */
+ /* #define FT_MODERRDEF( e, v, s ) { FT_Mod_Err_ ## e, s }, */
+ /* #define FT_MODERR_START_LIST { */
+ /* #define FT_MODERR_END_LIST { 0, 0 } }; */
+ /* */
+ /* const struct */
+ /* { */
+ /* int mod_err_offset; */
+ /* const char* mod_err_msg */
+ /* } ft_mod_errors[] = */
+ /* */
+ /* #include FT_MODULE_ERRORS_H */
+ /* } */
+ /* */
+ /* To use such a table, all errors must be ANDed with 0xFF00 to remove */
+ /* the error code. */
+ /* */
+ /*************************************************************************/
+
+
+#ifndef __FTMODERR_H__
+#define __FTMODERR_H__
+
+
+ /*******************************************************************/
+ /*******************************************************************/
+ /***** *****/
+ /***** SETUP MACROS *****/
+ /***** *****/
+ /*******************************************************************/
+ /*******************************************************************/
+
+
+#undef FT_NEED_EXTERN_C
+
+#ifndef FT_MODERRDEF
+
+#ifdef FT_CONFIG_OPTION_USE_MODULE_ERRORS
+#define FT_MODERRDEF( e, v, s ) FT_Mod_Err_ ## e = v,
+#else
+#define FT_MODERRDEF( e, v, s ) FT_Mod_Err_ ## e = 0,
+#endif
+
+#define FT_MODERR_START_LIST enum {
+#define FT_MODERR_END_LIST FT_Mod_Err_Max };
+
+#ifdef __cplusplus
+#define FT_NEED_EXTERN_C
+ extern "C" {
+#endif
+
+#endif /* !FT_MODERRDEF */
+
+
+ /*******************************************************************/
+ /*******************************************************************/
+ /***** *****/
+ /***** LIST MODULE ERROR BASES *****/
+ /***** *****/
+ /*******************************************************************/
+ /*******************************************************************/
+
+
+#ifdef FT_MODERR_START_LIST
+ FT_MODERR_START_LIST
+#endif
+
+
+ FT_MODERRDEF( Base, 0x000, "base module" )
+ FT_MODERRDEF( Autofit, 0x100, "autofitter module" )
+ FT_MODERRDEF( BDF, 0x200, "BDF module" )
+ FT_MODERRDEF( Cache, 0x300, "cache module" )
+ FT_MODERRDEF( CFF, 0x400, "CFF module" )
+ FT_MODERRDEF( CID, 0x500, "CID module" )
+ FT_MODERRDEF( Gzip, 0x600, "Gzip module" )
+ FT_MODERRDEF( LZW, 0x700, "LZW module" )
+ FT_MODERRDEF( OTvalid, 0x800, "OpenType validation module" )
+ FT_MODERRDEF( PCF, 0x900, "PCF module" )
+ FT_MODERRDEF( PFR, 0xA00, "PFR module" )
+ FT_MODERRDEF( PSaux, 0xB00, "PS auxiliary module" )
+ FT_MODERRDEF( PShinter, 0xC00, "PS hinter module" )
+ FT_MODERRDEF( PSnames, 0xD00, "PS names module" )
+ FT_MODERRDEF( Raster, 0xE00, "raster module" )
+ FT_MODERRDEF( SFNT, 0xF00, "SFNT module" )
+ FT_MODERRDEF( Smooth, 0x1000, "smooth raster module" )
+ FT_MODERRDEF( TrueType, 0x1100, "TrueType module" )
+ FT_MODERRDEF( Type1, 0x1200, "Type 1 module" )
+ FT_MODERRDEF( Type42, 0x1300, "Type 42 module" )
+ FT_MODERRDEF( Winfonts, 0x1400, "Windows FON/FNT module" )
+
+
+#ifdef FT_MODERR_END_LIST
+ FT_MODERR_END_LIST
+#endif
+
+
+ /*******************************************************************/
+ /*******************************************************************/
+ /***** *****/
+ /***** CLEANUP *****/
+ /***** *****/
+ /*******************************************************************/
+ /*******************************************************************/
+
+
+#ifdef FT_NEED_EXTERN_C
+ }
+#endif
+
+#undef FT_MODERR_START_LIST
+#undef FT_MODERR_END_LIST
+#undef FT_MODERRDEF
+#undef FT_NEED_EXTERN_C
+
+
+#endif /* __FTMODERR_H__ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/include/freetype/ftotval.h b/src/3rdparty/freetype/include/freetype/ftotval.h
new file mode 100644
index 0000000..8733882
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/ftotval.h
@@ -0,0 +1,203 @@
+/***************************************************************************/
+/* */
+/* ftotval.h */
+/* */
+/* FreeType API for validating OpenType tables (specification). */
+/* */
+/* Copyright 2004, 2005, 2006, 2007 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+/***************************************************************************/
+/* */
+/* */
+/* Warning: This module might be moved to a different library in the */
+/* future to avoid a tight dependency between FreeType and the */
+/* OpenType specification. */
+/* */
+/* */
+/***************************************************************************/
+
+
+#ifndef __FTOTVAL_H__
+#define __FTOTVAL_H__
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* ot_validation */
+ /* */
+ /* <Title> */
+ /* OpenType Validation */
+ /* */
+ /* <Abstract> */
+ /* An API to validate OpenType tables. */
+ /* */
+ /* <Description> */
+ /* This section contains the declaration of functions to validate */
+ /* some OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF, MATH). */
+ /* */
+ /*************************************************************************/
+
+
+ /**********************************************************************
+ *
+ * @enum:
+ * FT_VALIDATE_OTXXX
+ *
+ * @description:
+ * A list of bit-field constants used with @FT_OpenType_Validate to
+ * indicate which OpenType tables should be validated.
+ *
+ * @values:
+ * FT_VALIDATE_BASE ::
+ * Validate BASE table.
+ *
+ * FT_VALIDATE_GDEF ::
+ * Validate GDEF table.
+ *
+ * FT_VALIDATE_GPOS ::
+ * Validate GPOS table.
+ *
+ * FT_VALIDATE_GSUB ::
+ * Validate GSUB table.
+ *
+ * FT_VALIDATE_JSTF ::
+ * Validate JSTF table.
+ *
+ * FT_VALIDATE_MATH ::
+ * Validate MATH table.
+ *
+ * FT_VALIDATE_OT ::
+ * Validate all OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF, MATH).
+ *
+ */
+#define FT_VALIDATE_BASE 0x0100
+#define FT_VALIDATE_GDEF 0x0200
+#define FT_VALIDATE_GPOS 0x0400
+#define FT_VALIDATE_GSUB 0x0800
+#define FT_VALIDATE_JSTF 0x1000
+#define FT_VALIDATE_MATH 0x2000
+
+#define FT_VALIDATE_OT FT_VALIDATE_BASE | \
+ FT_VALIDATE_GDEF | \
+ FT_VALIDATE_GPOS | \
+ FT_VALIDATE_GSUB | \
+ FT_VALIDATE_JSTF | \
+ FT_VALIDATE_MATH
+
+ /* */
+
+ /**********************************************************************
+ *
+ * @function:
+ * FT_OpenType_Validate
+ *
+ * @description:
+ * Validate various OpenType tables to assure that all offsets and
+ * indices are valid. The idea is that a higher-level library which
+ * actually does the text layout can access those tables without
+ * error checking (which can be quite time consuming).
+ *
+ * @input:
+ * face ::
+ * A handle to the input face.
+ *
+ * validation_flags ::
+ * A bit field which specifies the tables to be validated. See
+ * @FT_VALIDATE_OTXXX for possible values.
+ *
+ * @output:
+ * BASE_table ::
+ * A pointer to the BASE table.
+ *
+ * GDEF_table ::
+ * A pointer to the GDEF table.
+ *
+ * GPOS_table ::
+ * A pointer to the GPOS table.
+ *
+ * GSUB_table ::
+ * A pointer to the GSUB table.
+ *
+ * JSTF_table ::
+ * A pointer to the JSTF table.
+ *
+ * @return:
+ * FreeType error code. 0 means success.
+ *
+ * @note:
+ * This function only works with OpenType fonts, returning an error
+ * otherwise.
+ *
+ * After use, the application should deallocate the five tables with
+ * @FT_OpenType_Free. A NULL value indicates that the table either
+ * doesn't exist in the font, or the application hasn't asked for
+ * validation.
+ */
+ FT_EXPORT( FT_Error )
+ FT_OpenType_Validate( FT_Face face,
+ FT_UInt validation_flags,
+ FT_Bytes *BASE_table,
+ FT_Bytes *GDEF_table,
+ FT_Bytes *GPOS_table,
+ FT_Bytes *GSUB_table,
+ FT_Bytes *JSTF_table );
+
+ /* */
+
+ /**********************************************************************
+ *
+ * @function:
+ * FT_OpenType_Free
+ *
+ * @description:
+ * Free the buffer allocated by OpenType validator.
+ *
+ * @input:
+ * face ::
+ * A handle to the input face.
+ *
+ * table ::
+ * The pointer to the buffer that is allocated by
+ * @FT_OpenType_Validate.
+ *
+ * @note:
+ * This function must be used to free the buffer allocated by
+ * @FT_OpenType_Validate only.
+ */
+ FT_EXPORT( void )
+ FT_OpenType_Free( FT_Face face,
+ FT_Bytes table );
+
+
+ /* */
+
+
+FT_END_HEADER
+
+#endif /* __FTOTVAL_H__ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/include/freetype/ftoutln.h b/src/3rdparty/freetype/include/freetype/ftoutln.h
new file mode 100644
index 0000000..d5b2389
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/ftoutln.h
@@ -0,0 +1,526 @@
+/***************************************************************************/
+/* */
+/* ftoutln.h */
+/* */
+/* Support for the FT_Outline type used to store glyph shapes of */
+/* most scalable font formats (specification). */
+/* */
+/* Copyright 1996-2001, 2002, 2003, 2005, 2006, 2007, 2008 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef __FTOUTLN_H__
+#define __FTOUTLN_H__
+
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* outline_processing */
+ /* */
+ /* <Title> */
+ /* Outline Processing */
+ /* */
+ /* <Abstract> */
+ /* Functions to create, transform, and render vectorial glyph images. */
+ /* */
+ /* <Description> */
+ /* This section contains routines used to create and destroy scalable */
+ /* glyph images known as `outlines'. These can also be measured, */
+ /* transformed, and converted into bitmaps and pixmaps. */
+ /* */
+ /* <Order> */
+ /* FT_Outline */
+ /* FT_OUTLINE_FLAGS */
+ /* FT_Outline_New */
+ /* FT_Outline_Done */
+ /* FT_Outline_Copy */
+ /* FT_Outline_Translate */
+ /* FT_Outline_Transform */
+ /* FT_Outline_Embolden */
+ /* FT_Outline_Reverse */
+ /* FT_Outline_Check */
+ /* */
+ /* FT_Outline_Get_CBox */
+ /* FT_Outline_Get_BBox */
+ /* */
+ /* FT_Outline_Get_Bitmap */
+ /* FT_Outline_Render */
+ /* */
+ /* FT_Outline_Decompose */
+ /* FT_Outline_Funcs */
+ /* FT_Outline_MoveTo_Func */
+ /* FT_Outline_LineTo_Func */
+ /* FT_Outline_ConicTo_Func */
+ /* FT_Outline_CubicTo_Func */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Outline_Decompose */
+ /* */
+ /* <Description> */
+ /* Walks over an outline's structure to decompose it into individual */
+ /* segments and Bezier arcs. This function is also able to emit */
+ /* `move to' and `close to' operations to indicate the start and end */
+ /* of new contours in the outline. */
+ /* */
+ /* <Input> */
+ /* outline :: A pointer to the source target. */
+ /* */
+ /* func_interface :: A table of `emitters', i.e,. function pointers */
+ /* called during decomposition to indicate path */
+ /* operations. */
+ /* */
+ /* <InOut> */
+ /* user :: A typeless pointer which is passed to each */
+ /* emitter during the decomposition. It can be */
+ /* used to store the state during the */
+ /* decomposition. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Outline_Decompose( FT_Outline* outline,
+ const FT_Outline_Funcs* func_interface,
+ void* user );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Outline_New */
+ /* */
+ /* <Description> */
+ /* Creates a new outline of a given size. */
+ /* */
+ /* <Input> */
+ /* library :: A handle to the library object from where the */
+ /* outline is allocated. Note however that the new */
+ /* outline will *not* necessarily be *freed*, when */
+ /* destroying the library, by @FT_Done_FreeType. */
+ /* */
+ /* numPoints :: The maximal number of points within the outline. */
+ /* */
+ /* numContours :: The maximal number of contours within the outline. */
+ /* */
+ /* <Output> */
+ /* anoutline :: A handle to the new outline. NULL in case of */
+ /* error. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ /* <Note> */
+ /* The reason why this function takes a `library' parameter is simply */
+ /* to use the library's memory allocator. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Outline_New( FT_Library library,
+ FT_UInt numPoints,
+ FT_Int numContours,
+ FT_Outline *anoutline );
+
+
+ FT_EXPORT( FT_Error )
+ FT_Outline_New_Internal( FT_Memory memory,
+ FT_UInt numPoints,
+ FT_Int numContours,
+ FT_Outline *anoutline );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Outline_Done */
+ /* */
+ /* <Description> */
+ /* Destroys an outline created with @FT_Outline_New. */
+ /* */
+ /* <Input> */
+ /* library :: A handle of the library object used to allocate the */
+ /* outline. */
+ /* */
+ /* outline :: A pointer to the outline object to be discarded. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ /* <Note> */
+ /* If the outline's `owner' field is not set, only the outline */
+ /* descriptor will be released. */
+ /* */
+ /* The reason why this function takes an `library' parameter is */
+ /* simply to use ft_mem_free(). */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Outline_Done( FT_Library library,
+ FT_Outline* outline );
+
+
+ FT_EXPORT( FT_Error )
+ FT_Outline_Done_Internal( FT_Memory memory,
+ FT_Outline* outline );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Outline_Check */
+ /* */
+ /* <Description> */
+ /* Check the contents of an outline descriptor. */
+ /* */
+ /* <Input> */
+ /* outline :: A handle to a source outline. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Outline_Check( FT_Outline* outline );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Outline_Get_CBox */
+ /* */
+ /* <Description> */
+ /* Returns an outline's `control box'. The control box encloses all */
+ /* the outline's points, including Bezier control points. Though it */
+ /* coincides with the exact bounding box for most glyphs, it can be */
+ /* slightly larger in some situations (like when rotating an outline */
+ /* which contains Bezier outside arcs). */
+ /* */
+ /* Computing the control box is very fast, while getting the bounding */
+ /* box can take much more time as it needs to walk over all segments */
+ /* and arcs in the outline. To get the latter, you can use the */
+ /* `ftbbox' component which is dedicated to this single task. */
+ /* */
+ /* <Input> */
+ /* outline :: A pointer to the source outline descriptor. */
+ /* */
+ /* <Output> */
+ /* acbox :: The outline's control box. */
+ /* */
+ FT_EXPORT( void )
+ FT_Outline_Get_CBox( const FT_Outline* outline,
+ FT_BBox *acbox );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Outline_Translate */
+ /* */
+ /* <Description> */
+ /* Applies a simple translation to the points of an outline. */
+ /* */
+ /* <InOut> */
+ /* outline :: A pointer to the target outline descriptor. */
+ /* */
+ /* <Input> */
+ /* xOffset :: The horizontal offset. */
+ /* */
+ /* yOffset :: The vertical offset. */
+ /* */
+ FT_EXPORT( void )
+ FT_Outline_Translate( const FT_Outline* outline,
+ FT_Pos xOffset,
+ FT_Pos yOffset );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Outline_Copy */
+ /* */
+ /* <Description> */
+ /* Copies an outline into another one. Both objects must have the */
+ /* same sizes (number of points & number of contours) when this */
+ /* function is called. */
+ /* */
+ /* <Input> */
+ /* source :: A handle to the source outline. */
+ /* */
+ /* <Output> */
+ /* target :: A handle to the target outline. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Outline_Copy( const FT_Outline* source,
+ FT_Outline *target );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Outline_Transform */
+ /* */
+ /* <Description> */
+ /* Applies a simple 2x2 matrix to all of an outline's points. Useful */
+ /* for applying rotations, slanting, flipping, etc. */
+ /* */
+ /* <InOut> */
+ /* outline :: A pointer to the target outline descriptor. */
+ /* */
+ /* <Input> */
+ /* matrix :: A pointer to the transformation matrix. */
+ /* */
+ /* <Note> */
+ /* You can use @FT_Outline_Translate if you need to translate the */
+ /* outline's points. */
+ /* */
+ FT_EXPORT( void )
+ FT_Outline_Transform( const FT_Outline* outline,
+ const FT_Matrix* matrix );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Outline_Embolden */
+ /* */
+ /* <Description> */
+ /* Emboldens an outline. The new outline will be at most 4 times */
+ /* `strength' pixels wider and higher. You may think of the left and */
+ /* bottom borders as unchanged. */
+ /* */
+ /* Negative `strength' values to reduce the outline thickness are */
+ /* possible also. */
+ /* */
+ /* <InOut> */
+ /* outline :: A handle to the target outline. */
+ /* */
+ /* <Input> */
+ /* strength :: How strong the glyph is emboldened. Expressed in */
+ /* 26.6 pixel format. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ /* <Note> */
+ /* The used algorithm to increase or decrease the thickness of the */
+ /* glyph doesn't change the number of points; this means that certain */
+ /* situations like acute angles or intersections are sometimes */
+ /* handled incorrectly. */
+ /* */
+ /* Example call: */
+ /* */
+ /* { */
+ /* FT_Load_Glyph( face, index, FT_LOAD_DEFAULT ); */
+ /* if ( face->slot->format == FT_GLYPH_FORMAT_OUTLINE ) */
+ /* FT_Outline_Embolden( &face->slot->outline, strength ); */
+ /* } */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Outline_Embolden( FT_Outline* outline,
+ FT_Pos strength );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Outline_Reverse */
+ /* */
+ /* <Description> */
+ /* Reverses the drawing direction of an outline. This is used to */
+ /* ensure consistent fill conventions for mirrored glyphs. */
+ /* */
+ /* <InOut> */
+ /* outline :: A pointer to the target outline descriptor. */
+ /* */
+ /* <Note> */
+ /* This functions toggles the bit flag @FT_OUTLINE_REVERSE_FILL in */
+ /* the outline's `flags' field. */
+ /* */
+ /* It shouldn't be used by a normal client application, unless it */
+ /* knows what it is doing. */
+ /* */
+ FT_EXPORT( void )
+ FT_Outline_Reverse( FT_Outline* outline );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Outline_Get_Bitmap */
+ /* */
+ /* <Description> */
+ /* Renders an outline within a bitmap. The outline's image is simply */
+ /* OR-ed to the target bitmap. */
+ /* */
+ /* <Input> */
+ /* library :: A handle to a FreeType library object. */
+ /* */
+ /* outline :: A pointer to the source outline descriptor. */
+ /* */
+ /* <InOut> */
+ /* abitmap :: A pointer to the target bitmap descriptor. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ /* <Note> */
+ /* This function does NOT CREATE the bitmap, it only renders an */
+ /* outline image within the one you pass to it! */
+ /* */
+ /* It will use the raster corresponding to the default glyph format. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Outline_Get_Bitmap( FT_Library library,
+ FT_Outline* outline,
+ const FT_Bitmap *abitmap );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Outline_Render */
+ /* */
+ /* <Description> */
+ /* Renders an outline within a bitmap using the current scan-convert. */
+ /* This functions uses an @FT_Raster_Params structure as an argument, */
+ /* allowing advanced features like direct composition, translucency, */
+ /* etc. */
+ /* */
+ /* <Input> */
+ /* library :: A handle to a FreeType library object. */
+ /* */
+ /* outline :: A pointer to the source outline descriptor. */
+ /* */
+ /* <InOut> */
+ /* params :: A pointer to an @FT_Raster_Params structure used to */
+ /* describe the rendering operation. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ /* <Note> */
+ /* You should know what you are doing and how @FT_Raster_Params works */
+ /* to use this function. */
+ /* */
+ /* The field `params.source' will be set to `outline' before the scan */
+ /* converter is called, which means that the value you give to it is */
+ /* actually ignored. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Outline_Render( FT_Library library,
+ FT_Outline* outline,
+ FT_Raster_Params* params );
+
+
+ /**************************************************************************
+ *
+ * @enum:
+ * FT_Orientation
+ *
+ * @description:
+ * A list of values used to describe an outline's contour orientation.
+ *
+ * The TrueType and Postscript specifications use different conventions
+ * to determine whether outline contours should be filled or unfilled.
+ *
+ * @values:
+ * FT_ORIENTATION_TRUETYPE ::
+ * According to the TrueType specification, clockwise contours must
+ * be filled, and counter-clockwise ones must be unfilled.
+ *
+ * FT_ORIENTATION_POSTSCRIPT ::
+ * According to the Postscript specification, counter-clockwise contours
+ * must be filled, and clockwise ones must be unfilled.
+ *
+ * FT_ORIENTATION_FILL_RIGHT ::
+ * This is identical to @FT_ORIENTATION_TRUETYPE, but is used to
+ * remember that in TrueType, everything that is to the right of
+ * the drawing direction of a contour must be filled.
+ *
+ * FT_ORIENTATION_FILL_LEFT ::
+ * This is identical to @FT_ORIENTATION_POSTSCRIPT, but is used to
+ * remember that in Postscript, everything that is to the left of
+ * the drawing direction of a contour must be filled.
+ *
+ * FT_ORIENTATION_NONE ::
+ * The orientation cannot be determined. That is, different parts of
+ * the glyph have different orientation.
+ *
+ */
+ typedef enum FT_Orientation_
+ {
+ FT_ORIENTATION_TRUETYPE = 0,
+ FT_ORIENTATION_POSTSCRIPT = 1,
+ FT_ORIENTATION_FILL_RIGHT = FT_ORIENTATION_TRUETYPE,
+ FT_ORIENTATION_FILL_LEFT = FT_ORIENTATION_POSTSCRIPT,
+ FT_ORIENTATION_NONE
+
+ } FT_Orientation;
+
+
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Outline_Get_Orientation
+ *
+ * @description:
+ * This function analyzes a glyph outline and tries to compute its
+ * fill orientation (see @FT_Orientation). This is done by computing
+ * the direction of each global horizontal and/or vertical extrema
+ * within the outline.
+ *
+ * Note that this will return @FT_ORIENTATION_TRUETYPE for empty
+ * outlines.
+ *
+ * @input:
+ * outline ::
+ * A handle to the source outline.
+ *
+ * @return:
+ * The orientation.
+ *
+ */
+ FT_EXPORT( FT_Orientation )
+ FT_Outline_Get_Orientation( FT_Outline* outline );
+
+
+ /* */
+
+
+FT_END_HEADER
+
+#endif /* __FTOUTLN_H__ */
+
+
+/* END */
+
+
+/* Local Variables: */
+/* coding: utf-8 */
+/* End: */
diff --git a/src/3rdparty/freetype/include/freetype/ftpfr.h b/src/3rdparty/freetype/include/freetype/ftpfr.h
new file mode 100644
index 0000000..e2801fd
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/ftpfr.h
@@ -0,0 +1,172 @@
+/***************************************************************************/
+/* */
+/* ftpfr.h */
+/* */
+/* FreeType API for accessing PFR-specific data (specification only). */
+/* */
+/* Copyright 2002, 2003, 2004, 2006 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef __FTPFR_H__
+#define __FTPFR_H__
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* pfr_fonts */
+ /* */
+ /* <Title> */
+ /* PFR Fonts */
+ /* */
+ /* <Abstract> */
+ /* PFR/TrueDoc specific API. */
+ /* */
+ /* <Description> */
+ /* This section contains the declaration of PFR-specific functions. */
+ /* */
+ /*************************************************************************/
+
+
+ /**********************************************************************
+ *
+ * @function:
+ * FT_Get_PFR_Metrics
+ *
+ * @description:
+ * Return the outline and metrics resolutions of a given PFR face.
+ *
+ * @input:
+ * face :: Handle to the input face. It can be a non-PFR face.
+ *
+ * @output:
+ * aoutline_resolution ::
+ * Outline resolution. This is equivalent to `face->units_per_EM'.
+ * Optional (parameter can be NULL).
+ *
+ * ametrics_resolution ::
+ * Metrics resolution. This is equivalent to `outline_resolution'
+ * for non-PFR fonts. Optional (parameter can be NULL).
+ *
+ * ametrics_x_scale ::
+ * A 16.16 fixed-point number used to scale distance expressed
+ * in metrics units to device sub-pixels. This is equivalent to
+ * `face->size->x_scale', but for metrics only. Optional (parameter
+ * can be NULL)
+ *
+ * ametrics_y_scale ::
+ * Same as `ametrics_x_scale' but for the vertical direction.
+ * optional (parameter can be NULL)
+ *
+ * @return:
+ * FreeType error code. 0 means success.
+ *
+ * @note:
+ * If the input face is not a PFR, this function will return an error.
+ * However, in all cases, it will return valid values.
+ */
+ FT_EXPORT( FT_Error )
+ FT_Get_PFR_Metrics( FT_Face face,
+ FT_UInt *aoutline_resolution,
+ FT_UInt *ametrics_resolution,
+ FT_Fixed *ametrics_x_scale,
+ FT_Fixed *ametrics_y_scale );
+
+
+ /**********************************************************************
+ *
+ * @function:
+ * FT_Get_PFR_Kerning
+ *
+ * @description:
+ * Return the kerning pair corresponding to two glyphs in a PFR face.
+ * The distance is expressed in metrics units, unlike the result of
+ * @FT_Get_Kerning.
+ *
+ * @input:
+ * face :: A handle to the input face.
+ *
+ * left :: Index of the left glyph.
+ *
+ * right :: Index of the right glyph.
+ *
+ * @output:
+ * avector :: A kerning vector.
+ *
+ * @return:
+ * FreeType error code. 0 means success.
+ *
+ * @note:
+ * This function always return distances in original PFR metrics
+ * units. This is unlike @FT_Get_Kerning with the @FT_KERNING_UNSCALED
+ * mode, which always returns distances converted to outline units.
+ *
+ * You can use the value of the `x_scale' and `y_scale' parameters
+ * returned by @FT_Get_PFR_Metrics to scale these to device sub-pixels.
+ */
+ FT_EXPORT( FT_Error )
+ FT_Get_PFR_Kerning( FT_Face face,
+ FT_UInt left,
+ FT_UInt right,
+ FT_Vector *avector );
+
+
+ /**********************************************************************
+ *
+ * @function:
+ * FT_Get_PFR_Advance
+ *
+ * @description:
+ * Return a given glyph advance, expressed in original metrics units,
+ * from a PFR font.
+ *
+ * @input:
+ * face :: A handle to the input face.
+ *
+ * gindex :: The glyph index.
+ *
+ * @output:
+ * aadvance :: The glyph advance in metrics units.
+ *
+ * @return:
+ * FreeType error code. 0 means success.
+ *
+ * @note:
+ * You can use the `x_scale' or `y_scale' results of @FT_Get_PFR_Metrics
+ * to convert the advance to device sub-pixels (i.e., 1/64th of pixels).
+ */
+ FT_EXPORT( FT_Error )
+ FT_Get_PFR_Advance( FT_Face face,
+ FT_UInt gindex,
+ FT_Pos *aadvance );
+
+ /* */
+
+
+FT_END_HEADER
+
+#endif /* __FTPFR_H__ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/include/freetype/ftrender.h b/src/3rdparty/freetype/include/freetype/ftrender.h
new file mode 100644
index 0000000..9ed828e
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/ftrender.h
@@ -0,0 +1,234 @@
+/***************************************************************************/
+/* */
+/* ftrender.h */
+/* */
+/* FreeType renderer modules public interface (specification). */
+/* */
+/* Copyright 1996-2001, 2005, 2006 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef __FTRENDER_H__
+#define __FTRENDER_H__
+
+
+#include <ft2build.h>
+#include FT_MODULE_H
+#include FT_GLYPH_H
+
+
+FT_BEGIN_HEADER
+
+
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* module_management */
+ /* */
+ /*************************************************************************/
+
+
+ /* create a new glyph object */
+ typedef FT_Error
+ (*FT_Glyph_InitFunc)( FT_Glyph glyph,
+ FT_GlyphSlot slot );
+
+ /* destroys a given glyph object */
+ typedef void
+ (*FT_Glyph_DoneFunc)( FT_Glyph glyph );
+
+ typedef void
+ (*FT_Glyph_TransformFunc)( FT_Glyph glyph,
+ const FT_Matrix* matrix,
+ const FT_Vector* delta );
+
+ typedef void
+ (*FT_Glyph_GetBBoxFunc)( FT_Glyph glyph,
+ FT_BBox* abbox );
+
+ typedef FT_Error
+ (*FT_Glyph_CopyFunc)( FT_Glyph source,
+ FT_Glyph target );
+
+ typedef FT_Error
+ (*FT_Glyph_PrepareFunc)( FT_Glyph glyph,
+ FT_GlyphSlot slot );
+
+/* deprecated */
+#define FT_Glyph_Init_Func FT_Glyph_InitFunc
+#define FT_Glyph_Done_Func FT_Glyph_DoneFunc
+#define FT_Glyph_Transform_Func FT_Glyph_TransformFunc
+#define FT_Glyph_BBox_Func FT_Glyph_GetBBoxFunc
+#define FT_Glyph_Copy_Func FT_Glyph_CopyFunc
+#define FT_Glyph_Prepare_Func FT_Glyph_PrepareFunc
+
+
+ struct FT_Glyph_Class_
+ {
+ FT_Long glyph_size;
+ FT_Glyph_Format glyph_format;
+ FT_Glyph_InitFunc glyph_init;
+ FT_Glyph_DoneFunc glyph_done;
+ FT_Glyph_CopyFunc glyph_copy;
+ FT_Glyph_TransformFunc glyph_transform;
+ FT_Glyph_GetBBoxFunc glyph_bbox;
+ FT_Glyph_PrepareFunc glyph_prepare;
+ };
+
+
+ typedef FT_Error
+ (*FT_Renderer_RenderFunc)( FT_Renderer renderer,
+ FT_GlyphSlot slot,
+ FT_UInt mode,
+ const FT_Vector* origin );
+
+ typedef FT_Error
+ (*FT_Renderer_TransformFunc)( FT_Renderer renderer,
+ FT_GlyphSlot slot,
+ const FT_Matrix* matrix,
+ const FT_Vector* delta );
+
+
+ typedef void
+ (*FT_Renderer_GetCBoxFunc)( FT_Renderer renderer,
+ FT_GlyphSlot slot,
+ FT_BBox* cbox );
+
+
+ typedef FT_Error
+ (*FT_Renderer_SetModeFunc)( FT_Renderer renderer,
+ FT_ULong mode_tag,
+ FT_Pointer mode_ptr );
+
+/* deprecated identifiers */
+#define FTRenderer_render FT_Renderer_RenderFunc
+#define FTRenderer_transform FT_Renderer_TransformFunc
+#define FTRenderer_getCBox FT_Renderer_GetCBoxFunc
+#define FTRenderer_setMode FT_Renderer_SetModeFunc
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_Renderer_Class */
+ /* */
+ /* <Description> */
+ /* The renderer module class descriptor. */
+ /* */
+ /* <Fields> */
+ /* root :: The root @FT_Module_Class fields. */
+ /* */
+ /* glyph_format :: The glyph image format this renderer handles. */
+ /* */
+ /* render_glyph :: A method used to render the image that is in a */
+ /* given glyph slot into a bitmap. */
+ /* */
+ /* transform_glyph :: A method used to transform the image that is in */
+ /* a given glyph slot. */
+ /* */
+ /* get_glyph_cbox :: A method used to access the glyph's cbox. */
+ /* */
+ /* set_mode :: A method used to pass additional parameters. */
+ /* */
+ /* raster_class :: For @FT_GLYPH_FORMAT_OUTLINE renderers only. */
+ /* This is a pointer to its raster's class. */
+ /* */
+ /* raster :: For @FT_GLYPH_FORMAT_OUTLINE renderers only. */
+ /* This is a pointer to the corresponding raster */
+ /* object, if any. */
+ /* */
+ typedef struct FT_Renderer_Class_
+ {
+ FT_Module_Class root;
+
+ FT_Glyph_Format glyph_format;
+
+ FT_Renderer_RenderFunc render_glyph;
+ FT_Renderer_TransformFunc transform_glyph;
+ FT_Renderer_GetCBoxFunc get_glyph_cbox;
+ FT_Renderer_SetModeFunc set_mode;
+
+ FT_Raster_Funcs* raster_class;
+
+ } FT_Renderer_Class;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Get_Renderer */
+ /* */
+ /* <Description> */
+ /* Retrieves the current renderer for a given glyph format. */
+ /* */
+ /* <Input> */
+ /* library :: A handle to the library object. */
+ /* */
+ /* format :: The glyph format. */
+ /* */
+ /* <Return> */
+ /* A renderer handle. 0 if none found. */
+ /* */
+ /* <Note> */
+ /* An error will be returned if a module already exists by that name, */
+ /* or if the module requires a version of FreeType that is too great. */
+ /* */
+ /* To add a new renderer, simply use @FT_Add_Module. To retrieve a */
+ /* renderer by its name, use @FT_Get_Module. */
+ /* */
+ FT_EXPORT( FT_Renderer )
+ FT_Get_Renderer( FT_Library library,
+ FT_Glyph_Format format );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Set_Renderer */
+ /* */
+ /* <Description> */
+ /* Sets the current renderer to use, and set additional mode. */
+ /* */
+ /* <InOut> */
+ /* library :: A handle to the library object. */
+ /* */
+ /* <Input> */
+ /* renderer :: A handle to the renderer object. */
+ /* */
+ /* num_params :: The number of additional parameters. */
+ /* */
+ /* parameters :: Additional parameters. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ /* <Note> */
+ /* In case of success, the renderer will be used to convert glyph */
+ /* images in the renderer's known format into bitmaps. */
+ /* */
+ /* This doesn't change the current renderer for other formats. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Set_Renderer( FT_Library library,
+ FT_Renderer renderer,
+ FT_UInt num_params,
+ FT_Parameter* parameters );
+
+
+ /* */
+
+
+FT_END_HEADER
+
+#endif /* __FTRENDER_H__ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/include/freetype/ftsizes.h b/src/3rdparty/freetype/include/freetype/ftsizes.h
new file mode 100644
index 0000000..622df16
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/ftsizes.h
@@ -0,0 +1,159 @@
+/***************************************************************************/
+/* */
+/* ftsizes.h */
+/* */
+/* FreeType size objects management (specification). */
+/* */
+/* Copyright 1996-2001, 2003, 2004, 2006 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* Typical application would normally not need to use these functions. */
+ /* However, they have been placed in a public API for the rare cases */
+ /* where they are needed. */
+ /* */
+ /*************************************************************************/
+
+
+#ifndef __FTSIZES_H__
+#define __FTSIZES_H__
+
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* sizes_management */
+ /* */
+ /* <Title> */
+ /* Size Management */
+ /* */
+ /* <Abstract> */
+ /* Managing multiple sizes per face. */
+ /* */
+ /* <Description> */
+ /* When creating a new face object (e.g., with @FT_New_Face), an */
+ /* @FT_Size object is automatically created and used to store all */
+ /* pixel-size dependent information, available in the `face->size' */
+ /* field. */
+ /* */
+ /* It is however possible to create more sizes for a given face, */
+ /* mostly in order to manage several character pixel sizes of the */
+ /* same font family and style. See @FT_New_Size and @FT_Done_Size. */
+ /* */
+ /* Note that @FT_Set_Pixel_Sizes and @FT_Set_Char_Size only */
+ /* modify the contents of the current `active' size; you thus need */
+ /* to use @FT_Activate_Size to change it. */
+ /* */
+ /* 99% of applications won't need the functions provided here, */
+ /* especially if they use the caching sub-system, so be cautious */
+ /* when using these. */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_New_Size */
+ /* */
+ /* <Description> */
+ /* Create a new size object from a given face object. */
+ /* */
+ /* <Input> */
+ /* face :: A handle to a parent face object. */
+ /* */
+ /* <Output> */
+ /* asize :: A handle to a new size object. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ /* <Note> */
+ /* You need to call @FT_Activate_Size in order to select the new size */
+ /* for upcoming calls to @FT_Set_Pixel_Sizes, @FT_Set_Char_Size, */
+ /* @FT_Load_Glyph, @FT_Load_Char, etc. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_New_Size( FT_Face face,
+ FT_Size* size );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Done_Size */
+ /* */
+ /* <Description> */
+ /* Discard a given size object. Note that @FT_Done_Face */
+ /* automatically discards all size objects allocated with */
+ /* @FT_New_Size. */
+ /* */
+ /* <Input> */
+ /* size :: A handle to a target size object. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Done_Size( FT_Size size );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Activate_Size */
+ /* */
+ /* <Description> */
+ /* Even though it is possible to create several size objects for a */
+ /* given face (see @FT_New_Size for details), functions like */
+ /* @FT_Load_Glyph or @FT_Load_Char only use the last-created one to */
+ /* determine the `current character pixel size'. */
+ /* */
+ /* This function can be used to `activate' a previously created size */
+ /* object. */
+ /* */
+ /* <Input> */
+ /* size :: A handle to a target size object. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ /* <Note> */
+ /* If `face' is the size's parent face object, this function changes */
+ /* the value of `face->size' to the input size handle. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Activate_Size( FT_Size size );
+
+ /* */
+
+
+FT_END_HEADER
+
+#endif /* __FTSIZES_H__ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/include/freetype/ftsnames.h b/src/3rdparty/freetype/include/freetype/ftsnames.h
new file mode 100644
index 0000000..003cbcd
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/ftsnames.h
@@ -0,0 +1,170 @@
+/***************************************************************************/
+/* */
+/* ftsnames.h */
+/* */
+/* Simple interface to access SFNT name tables (which are used */
+/* to hold font names, copyright info, notices, etc.) (specification). */
+/* */
+/* This is _not_ used to retrieve glyph names! */
+/* */
+/* Copyright 1996-2001, 2002, 2003, 2006 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef __FT_SFNT_NAMES_H__
+#define __FT_SFNT_NAMES_H__
+
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* sfnt_names */
+ /* */
+ /* <Title> */
+ /* SFNT Names */
+ /* */
+ /* <Abstract> */
+ /* Access the names embedded in TrueType and OpenType files. */
+ /* */
+ /* <Description> */
+ /* The TrueType and OpenType specification allow the inclusion of */
+ /* a special `names table' in font files. This table contains */
+ /* textual (and internationalized) information regarding the font, */
+ /* like family name, copyright, version, etc. */
+ /* */
+ /* The definitions below are used to access them if available. */
+ /* */
+ /* Note that this has nothing to do with glyph names! */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_SfntName */
+ /* */
+ /* <Description> */
+ /* A structure used to model an SFNT `name' table entry. */
+ /* */
+ /* <Fields> */
+ /* platform_id :: The platform ID for `string'. */
+ /* */
+ /* encoding_id :: The encoding ID for `string'. */
+ /* */
+ /* language_id :: The language ID for `string'. */
+ /* */
+ /* name_id :: An identifier for `string'. */
+ /* */
+ /* string :: The `name' string. Note that its format differs */
+ /* depending on the (platform,encoding) pair. It can */
+ /* be a Pascal String, a UTF-16 one, etc. */
+ /* */
+ /* Generally speaking, the string is not */
+ /* zero-terminated. Please refer to the TrueType */
+ /* specification for details. */
+ /* */
+ /* string_len :: The length of `string' in bytes. */
+ /* */
+ /* <Note> */
+ /* Possible values for `platform_id', `encoding_id', `language_id', */
+ /* and `name_id' are given in the file `ttnameid.h'. For details */
+ /* please refer to the TrueType or OpenType specification. */
+ /* */
+ /* See also @TT_PLATFORM_XXX, @TT_APPLE_ID_XXX, @TT_MAC_ID_XXX, */
+ /* @TT_ISO_ID_XXX, and @TT_MS_ID_XXX. */
+ /* */
+ typedef struct FT_SfntName_
+ {
+ FT_UShort platform_id;
+ FT_UShort encoding_id;
+ FT_UShort language_id;
+ FT_UShort name_id;
+
+ FT_Byte* string; /* this string is *not* null-terminated! */
+ FT_UInt string_len; /* in bytes */
+
+ } FT_SfntName;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Get_Sfnt_Name_Count */
+ /* */
+ /* <Description> */
+ /* Retrieves the number of name strings in the SFNT `name' table. */
+ /* */
+ /* <Input> */
+ /* face :: A handle to the source face. */
+ /* */
+ /* <Return> */
+ /* The number of strings in the `name' table. */
+ /* */
+ FT_EXPORT( FT_UInt )
+ FT_Get_Sfnt_Name_Count( FT_Face face );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Get_Sfnt_Name */
+ /* */
+ /* <Description> */
+ /* Retrieves a string of the SFNT `name' table for a given index. */
+ /* */
+ /* <Input> */
+ /* face :: A handle to the source face. */
+ /* */
+ /* idx :: The index of the `name' string. */
+ /* */
+ /* <Output> */
+ /* aname :: The indexed @FT_SfntName structure. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ /* <Note> */
+ /* The `string' array returned in the `aname' structure is not */
+ /* null-terminated. */
+ /* */
+ /* Use @FT_Get_Sfnt_Name_Count to get the total number of available */
+ /* `name' table entries, then do a loop until you get the right */
+ /* platform, encoding, and name ID. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Get_Sfnt_Name( FT_Face face,
+ FT_UInt idx,
+ FT_SfntName *aname );
+
+
+ /* */
+
+
+FT_END_HEADER
+
+#endif /* __FT_SFNT_NAMES_H__ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/include/freetype/ftstroke.h b/src/3rdparty/freetype/include/freetype/ftstroke.h
new file mode 100644
index 0000000..7d85288
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/ftstroke.h
@@ -0,0 +1,716 @@
+/***************************************************************************/
+/* */
+/* ftstroke.h */
+/* */
+/* FreeType path stroker (specification). */
+/* */
+/* Copyright 2002, 2003, 2004, 2005, 2006, 2008 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef __FT_STROKE_H__
+#define __FT_STROKE_H__
+
+#include <ft2build.h>
+#include FT_OUTLINE_H
+#include FT_GLYPH_H
+
+
+FT_BEGIN_HEADER
+
+
+ /************************************************************************
+ *
+ * @section:
+ * glyph_stroker
+ *
+ * @title:
+ * Glyph Stroker
+ *
+ * @abstract:
+ * Generating bordered and stroked glyphs.
+ *
+ * @description:
+ * This component generates stroked outlines of a given vectorial
+ * glyph. It also allows you to retrieve the `outside' and/or the
+ * `inside' borders of the stroke.
+ *
+ * This can be useful to generate `bordered' glyph, i.e., glyphs
+ * displayed with a coloured (and anti-aliased) border around their
+ * shape.
+ */
+
+
+ /**************************************************************
+ *
+ * @type:
+ * FT_Stroker
+ *
+ * @description:
+ * Opaque handler to a path stroker object.
+ */
+ typedef struct FT_StrokerRec_* FT_Stroker;
+
+
+ /**************************************************************
+ *
+ * @enum:
+ * FT_Stroker_LineJoin
+ *
+ * @description:
+ * These values determine how two joining lines are rendered
+ * in a stroker.
+ *
+ * @values:
+ * FT_STROKER_LINEJOIN_ROUND ::
+ * Used to render rounded line joins. Circular arcs are used
+ * to join two lines smoothly.
+ *
+ * FT_STROKER_LINEJOIN_BEVEL ::
+ * Used to render beveled line joins; i.e., the two joining lines
+ * are extended until they intersect.
+ *
+ * FT_STROKER_LINEJOIN_MITER ::
+ * Same as beveled rendering, except that an additional line
+ * break is added if the angle between the two joining lines
+ * is too closed (this is useful to avoid unpleasant spikes
+ * in beveled rendering).
+ */
+ typedef enum FT_Stroker_LineJoin_
+ {
+ FT_STROKER_LINEJOIN_ROUND = 0,
+ FT_STROKER_LINEJOIN_BEVEL,
+ FT_STROKER_LINEJOIN_MITER
+
+ } FT_Stroker_LineJoin;
+
+
+ /**************************************************************
+ *
+ * @enum:
+ * FT_Stroker_LineCap
+ *
+ * @description:
+ * These values determine how the end of opened sub-paths are
+ * rendered in a stroke.
+ *
+ * @values:
+ * FT_STROKER_LINECAP_BUTT ::
+ * The end of lines is rendered as a full stop on the last
+ * point itself.
+ *
+ * FT_STROKER_LINECAP_ROUND ::
+ * The end of lines is rendered as a half-circle around the
+ * last point.
+ *
+ * FT_STROKER_LINECAP_SQUARE ::
+ * The end of lines is rendered as a square around the
+ * last point.
+ */
+ typedef enum FT_Stroker_LineCap_
+ {
+ FT_STROKER_LINECAP_BUTT = 0,
+ FT_STROKER_LINECAP_ROUND,
+ FT_STROKER_LINECAP_SQUARE
+
+ } FT_Stroker_LineCap;
+
+
+ /**************************************************************
+ *
+ * @enum:
+ * FT_StrokerBorder
+ *
+ * @description:
+ * These values are used to select a given stroke border
+ * in @FT_Stroker_GetBorderCounts and @FT_Stroker_ExportBorder.
+ *
+ * @values:
+ * FT_STROKER_BORDER_LEFT ::
+ * Select the left border, relative to the drawing direction.
+ *
+ * FT_STROKER_BORDER_RIGHT ::
+ * Select the right border, relative to the drawing direction.
+ *
+ * @note:
+ * Applications are generally interested in the `inside' and `outside'
+ * borders. However, there is no direct mapping between these and the
+ * `left' and `right' ones, since this really depends on the glyph's
+ * drawing orientation, which varies between font formats.
+ *
+ * You can however use @FT_Outline_GetInsideBorder and
+ * @FT_Outline_GetOutsideBorder to get these.
+ */
+ typedef enum FT_StrokerBorder_
+ {
+ FT_STROKER_BORDER_LEFT = 0,
+ FT_STROKER_BORDER_RIGHT
+
+ } FT_StrokerBorder;
+
+
+ /**************************************************************
+ *
+ * @function:
+ * FT_Outline_GetInsideBorder
+ *
+ * @description:
+ * Retrieve the @FT_StrokerBorder value corresponding to the
+ * `inside' borders of a given outline.
+ *
+ * @input:
+ * outline ::
+ * The source outline handle.
+ *
+ * @return:
+ * The border index. @FT_STROKER_BORDER_LEFT for empty or invalid
+ * outlines.
+ */
+ FT_EXPORT( FT_StrokerBorder )
+ FT_Outline_GetInsideBorder( FT_Outline* outline );
+
+
+ /**************************************************************
+ *
+ * @function:
+ * FT_Outline_GetOutsideBorder
+ *
+ * @description:
+ * Retrieve the @FT_StrokerBorder value corresponding to the
+ * `outside' borders of a given outline.
+ *
+ * @input:
+ * outline ::
+ * The source outline handle.
+ *
+ * @return:
+ * The border index. @FT_STROKER_BORDER_LEFT for empty or invalid
+ * outlines.
+ */
+ FT_EXPORT( FT_StrokerBorder )
+ FT_Outline_GetOutsideBorder( FT_Outline* outline );
+
+
+ /**************************************************************
+ *
+ * @function:
+ * FT_Stroker_New
+ *
+ * @description:
+ * Create a new stroker object.
+ *
+ * @input:
+ * library ::
+ * FreeType library handle.
+ *
+ * @output:
+ * astroker ::
+ * A new stroker object handle. NULL in case of error.
+ *
+ * @return:
+ * FreeType error code. 0 means success.
+ */
+ FT_EXPORT( FT_Error )
+ FT_Stroker_New( FT_Library library,
+ FT_Stroker *astroker );
+
+
+ /**************************************************************
+ *
+ * @function:
+ * FT_Stroker_Set
+ *
+ * @description:
+ * Reset a stroker object's attributes.
+ *
+ * @input:
+ * stroker ::
+ * The target stroker handle.
+ *
+ * radius ::
+ * The border radius.
+ *
+ * line_cap ::
+ * The line cap style.
+ *
+ * line_join ::
+ * The line join style.
+ *
+ * miter_limit ::
+ * The miter limit for the FT_STROKER_LINEJOIN_MITER style,
+ * expressed as 16.16 fixed point value.
+ *
+ * @note:
+ * The radius is expressed in the same units that the outline
+ * coordinates.
+ */
+ FT_EXPORT( void )
+ FT_Stroker_Set( FT_Stroker stroker,
+ FT_Fixed radius,
+ FT_Stroker_LineCap line_cap,
+ FT_Stroker_LineJoin line_join,
+ FT_Fixed miter_limit );
+
+
+ /**************************************************************
+ *
+ * @function:
+ * FT_Stroker_Rewind
+ *
+ * @description:
+ * Reset a stroker object without changing its attributes.
+ * You should call this function before beginning a new
+ * series of calls to @FT_Stroker_BeginSubPath or
+ * @FT_Stroker_EndSubPath.
+ *
+ * @input:
+ * stroker ::
+ * The target stroker handle.
+ */
+ FT_EXPORT( void )
+ FT_Stroker_Rewind( FT_Stroker stroker );
+
+
+ /**************************************************************
+ *
+ * @function:
+ * FT_Stroker_ParseOutline
+ *
+ * @description:
+ * A convenience function used to parse a whole outline with
+ * the stroker. The resulting outline(s) can be retrieved
+ * later by functions like @FT_Stroker_GetCounts and @FT_Stroker_Export.
+ *
+ * @input:
+ * stroker ::
+ * The target stroker handle.
+ *
+ * outline ::
+ * The source outline.
+ *
+ * opened ::
+ * A boolean. If 1, the outline is treated as an open path instead
+ * of a closed one.
+ *
+ * @return:
+ * FreeType error code. 0 means success.
+ *
+ * @note:
+ * If `opened' is 0 (the default), the outline is treated as a closed
+ * path, and the stroker will generate two distinct `border' outlines.
+ *
+ * If `opened' is 1, the outline is processed as an open path, and the
+ * stroker will generate a single `stroke' outline.
+ *
+ * This function calls @FT_Stroker_Rewind automatically.
+ */
+ FT_EXPORT( FT_Error )
+ FT_Stroker_ParseOutline( FT_Stroker stroker,
+ FT_Outline* outline,
+ FT_Bool opened );
+
+
+ /**************************************************************
+ *
+ * @function:
+ * FT_Stroker_BeginSubPath
+ *
+ * @description:
+ * Start a new sub-path in the stroker.
+ *
+ * @input:
+ * stroker ::
+ * The target stroker handle.
+ *
+ * to ::
+ * A pointer to the start vector.
+ *
+ * open ::
+ * A boolean. If 1, the sub-path is treated as an open one.
+ *
+ * @return:
+ * FreeType error code. 0 means success.
+ *
+ * @note:
+ * This function is useful when you need to stroke a path that is
+ * not stored as an @FT_Outline object.
+ */
+ FT_EXPORT( FT_Error )
+ FT_Stroker_BeginSubPath( FT_Stroker stroker,
+ FT_Vector* to,
+ FT_Bool open );
+
+
+ /**************************************************************
+ *
+ * @function:
+ * FT_Stroker_EndSubPath
+ *
+ * @description:
+ * Close the current sub-path in the stroker.
+ *
+ * @input:
+ * stroker ::
+ * The target stroker handle.
+ *
+ * @return:
+ * FreeType error code. 0 means success.
+ *
+ * @note:
+ * You should call this function after @FT_Stroker_BeginSubPath.
+ * If the subpath was not `opened', this function will `draw' a
+ * single line segment to the start position when needed.
+ */
+ FT_EXPORT( FT_Error )
+ FT_Stroker_EndSubPath( FT_Stroker stroker );
+
+
+ /**************************************************************
+ *
+ * @function:
+ * FT_Stroker_LineTo
+ *
+ * @description:
+ * `Draw' a single line segment in the stroker's current sub-path,
+ * from the last position.
+ *
+ * @input:
+ * stroker ::
+ * The target stroker handle.
+ *
+ * to ::
+ * A pointer to the destination point.
+ *
+ * @return:
+ * FreeType error code. 0 means success.
+ *
+ * @note:
+ * You should call this function between @FT_Stroker_BeginSubPath and
+ * @FT_Stroker_EndSubPath.
+ */
+ FT_EXPORT( FT_Error )
+ FT_Stroker_LineTo( FT_Stroker stroker,
+ FT_Vector* to );
+
+
+ /**************************************************************
+ *
+ * @function:
+ * FT_Stroker_ConicTo
+ *
+ * @description:
+ * `Draw' a single quadratic Bezier in the stroker's current sub-path,
+ * from the last position.
+ *
+ * @input:
+ * stroker ::
+ * The target stroker handle.
+ *
+ * control ::
+ * A pointer to a Bezier control point.
+ *
+ * to ::
+ * A pointer to the destination point.
+ *
+ * @return:
+ * FreeType error code. 0 means success.
+ *
+ * @note:
+ * You should call this function between @FT_Stroker_BeginSubPath and
+ * @FT_Stroker_EndSubPath.
+ */
+ FT_EXPORT( FT_Error )
+ FT_Stroker_ConicTo( FT_Stroker stroker,
+ FT_Vector* control,
+ FT_Vector* to );
+
+
+ /**************************************************************
+ *
+ * @function:
+ * FT_Stroker_CubicTo
+ *
+ * @description:
+ * `Draw' a single cubic Bezier in the stroker's current sub-path,
+ * from the last position.
+ *
+ * @input:
+ * stroker ::
+ * The target stroker handle.
+ *
+ * control1 ::
+ * A pointer to the first Bezier control point.
+ *
+ * control2 ::
+ * A pointer to second Bezier control point.
+ *
+ * to ::
+ * A pointer to the destination point.
+ *
+ * @return:
+ * FreeType error code. 0 means success.
+ *
+ * @note:
+ * You should call this function between @FT_Stroker_BeginSubPath and
+ * @FT_Stroker_EndSubPath.
+ */
+ FT_EXPORT( FT_Error )
+ FT_Stroker_CubicTo( FT_Stroker stroker,
+ FT_Vector* control1,
+ FT_Vector* control2,
+ FT_Vector* to );
+
+
+ /**************************************************************
+ *
+ * @function:
+ * FT_Stroker_GetBorderCounts
+ *
+ * @description:
+ * Call this function once you have finished parsing your paths
+ * with the stroker. It will return the number of points and
+ * contours necessary to export one of the `border' or `stroke'
+ * outlines generated by the stroker.
+ *
+ * @input:
+ * stroker ::
+ * The target stroker handle.
+ *
+ * border ::
+ * The border index.
+ *
+ * @output:
+ * anum_points ::
+ * The number of points.
+ *
+ * anum_contours ::
+ * The number of contours.
+ *
+ * @return:
+ * FreeType error code. 0 means success.
+ *
+ * @note:
+ * When an outline, or a sub-path, is `closed', the stroker generates
+ * two independent `border' outlines, named `left' and `right'.
+ *
+ * When the outline, or a sub-path, is `opened', the stroker merges
+ * the `border' outlines with caps. The `left' border receives all
+ * points, while the `right' border becomes empty.
+ *
+ * Use the function @FT_Stroker_GetCounts instead if you want to
+ * retrieve the counts associated to both borders.
+ */
+ FT_EXPORT( FT_Error )
+ FT_Stroker_GetBorderCounts( FT_Stroker stroker,
+ FT_StrokerBorder border,
+ FT_UInt *anum_points,
+ FT_UInt *anum_contours );
+
+
+ /**************************************************************
+ *
+ * @function:
+ * FT_Stroker_ExportBorder
+ *
+ * @description:
+ * Call this function after @FT_Stroker_GetBorderCounts to
+ * export the corresponding border to your own @FT_Outline
+ * structure.
+ *
+ * Note that this function will append the border points and
+ * contours to your outline, but will not try to resize its
+ * arrays.
+ *
+ * @input:
+ * stroker ::
+ * The target stroker handle.
+ *
+ * border ::
+ * The border index.
+ *
+ * outline ::
+ * The target outline handle.
+ *
+ * @note:
+ * Always call this function after @FT_Stroker_GetBorderCounts to
+ * get sure that there is enough room in your @FT_Outline object to
+ * receive all new data.
+ *
+ * When an outline, or a sub-path, is `closed', the stroker generates
+ * two independent `border' outlines, named `left' and `right'
+ *
+ * When the outline, or a sub-path, is `opened', the stroker merges
+ * the `border' outlines with caps. The `left' border receives all
+ * points, while the `right' border becomes empty.
+ *
+ * Use the function @FT_Stroker_Export instead if you want to
+ * retrieve all borders at once.
+ */
+ FT_EXPORT( void )
+ FT_Stroker_ExportBorder( FT_Stroker stroker,
+ FT_StrokerBorder border,
+ FT_Outline* outline );
+
+
+ /**************************************************************
+ *
+ * @function:
+ * FT_Stroker_GetCounts
+ *
+ * @description:
+ * Call this function once you have finished parsing your paths
+ * with the stroker. It returns the number of points and
+ * contours necessary to export all points/borders from the stroked
+ * outline/path.
+ *
+ * @input:
+ * stroker ::
+ * The target stroker handle.
+ *
+ * @output:
+ * anum_points ::
+ * The number of points.
+ *
+ * anum_contours ::
+ * The number of contours.
+ *
+ * @return:
+ * FreeType error code. 0 means success.
+ */
+ FT_EXPORT( FT_Error )
+ FT_Stroker_GetCounts( FT_Stroker stroker,
+ FT_UInt *anum_points,
+ FT_UInt *anum_contours );
+
+
+ /**************************************************************
+ *
+ * @function:
+ * FT_Stroker_Export
+ *
+ * @description:
+ * Call this function after @FT_Stroker_GetBorderCounts to
+ * export the all borders to your own @FT_Outline structure.
+ *
+ * Note that this function will append the border points and
+ * contours to your outline, but will not try to resize its
+ * arrays.
+ *
+ * @input:
+ * stroker ::
+ * The target stroker handle.
+ *
+ * outline ::
+ * The target outline handle.
+ */
+ FT_EXPORT( void )
+ FT_Stroker_Export( FT_Stroker stroker,
+ FT_Outline* outline );
+
+
+ /**************************************************************
+ *
+ * @function:
+ * FT_Stroker_Done
+ *
+ * @description:
+ * Destroy a stroker object.
+ *
+ * @input:
+ * stroker ::
+ * A stroker handle. Can be NULL.
+ */
+ FT_EXPORT( void )
+ FT_Stroker_Done( FT_Stroker stroker );
+
+
+ /**************************************************************
+ *
+ * @function:
+ * FT_Glyph_Stroke
+ *
+ * @description:
+ * Stroke a given outline glyph object with a given stroker.
+ *
+ * @inout:
+ * pglyph ::
+ * Source glyph handle on input, new glyph handle on output.
+ *
+ * @input:
+ * stroker ::
+ * A stroker handle.
+ *
+ * destroy ::
+ * A Boolean. If 1, the source glyph object is destroyed
+ * on success.
+ *
+ * @return:
+ * FreeType error code. 0 means success.
+ *
+ * @note:
+ * The source glyph is untouched in case of error.
+ */
+ FT_EXPORT( FT_Error )
+ FT_Glyph_Stroke( FT_Glyph *pglyph,
+ FT_Stroker stroker,
+ FT_Bool destroy );
+
+
+ /**************************************************************
+ *
+ * @function:
+ * FT_Glyph_StrokeBorder
+ *
+ * @description:
+ * Stroke a given outline glyph object with a given stroker, but
+ * only return either its inside or outside border.
+ *
+ * @inout:
+ * pglyph ::
+ * Source glyph handle on input, new glyph handle on output.
+ *
+ * @input:
+ * stroker ::
+ * A stroker handle.
+ *
+ * inside ::
+ * A Boolean. If 1, return the inside border, otherwise
+ * the outside border.
+ *
+ * destroy ::
+ * A Boolean. If 1, the source glyph object is destroyed
+ * on success.
+ *
+ * @return:
+ * FreeType error code. 0 means success.
+ *
+ * @note:
+ * The source glyph is untouched in case of error.
+ */
+ FT_EXPORT( FT_Error )
+ FT_Glyph_StrokeBorder( FT_Glyph *pglyph,
+ FT_Stroker stroker,
+ FT_Bool inside,
+ FT_Bool destroy );
+
+ /* */
+
+FT_END_HEADER
+
+#endif /* __FT_STROKE_H__ */
+
+
+/* END */
+
+
+/* Local Variables: */
+/* coding: utf-8 */
+/* End: */
diff --git a/src/3rdparty/freetype/include/freetype/ftsynth.h b/src/3rdparty/freetype/include/freetype/ftsynth.h
new file mode 100644
index 0000000..36984bf
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/ftsynth.h
@@ -0,0 +1,73 @@
+/***************************************************************************/
+/* */
+/* ftsynth.h */
+/* */
+/* FreeType synthesizing code for emboldening and slanting */
+/* (specification). */
+/* */
+/* Copyright 2000-2001, 2003, 2006 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /*************************************************************************/
+ /*************************************************************************/
+ /*************************************************************************/
+ /********* *********/
+ /********* WARNING, THIS IS ALPHA CODE, THIS API *********/
+ /********* IS DUE TO CHANGE UNTIL STRICTLY NOTIFIED BY THE *********/
+ /********* FREETYPE DEVELOPMENT TEAM *********/
+ /********* *********/
+ /*************************************************************************/
+ /*************************************************************************/
+ /*************************************************************************/
+ /*************************************************************************/
+ /*************************************************************************/
+
+
+#ifndef __FTSYNTH_H__
+#define __FTSYNTH_H__
+
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+ /* Make sure slot owns slot->bitmap. */
+ FT_EXPORT( FT_Error )
+ FT_GlyphSlot_Own_Bitmap( FT_GlyphSlot slot );
+
+ /* Do not use this function directly! Copy the code to */
+ /* your application and modify it to suit your need. */
+ FT_EXPORT( void )
+ FT_GlyphSlot_Embolden( FT_GlyphSlot slot );
+
+
+ FT_EXPORT( void )
+ FT_GlyphSlot_Oblique( FT_GlyphSlot slot );
+
+ /* */
+
+FT_END_HEADER
+
+#endif /* __FTSYNTH_H__ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/include/freetype/ftsystem.h b/src/3rdparty/freetype/include/freetype/ftsystem.h
new file mode 100644
index 0000000..59cd019
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/ftsystem.h
@@ -0,0 +1,346 @@
+/***************************************************************************/
+/* */
+/* ftsystem.h */
+/* */
+/* FreeType low-level system interface definition (specification). */
+/* */
+/* Copyright 1996-2001, 2002, 2005 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef __FTSYSTEM_H__
+#define __FTSYSTEM_H__
+
+
+#include <ft2build.h>
+
+
+FT_BEGIN_HEADER
+
+
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* system_interface */
+ /* */
+ /* <Title> */
+ /* System Interface */
+ /* */
+ /* <Abstract> */
+ /* How FreeType manages memory and i/o. */
+ /* */
+ /* <Description> */
+ /* This section contains various definitions related to memory */
+ /* management and i/o access. You need to understand this */
+ /* information if you want to use a custom memory manager or you own */
+ /* i/o streams. */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* M E M O R Y M A N A G E M E N T */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************
+ *
+ * @type:
+ * FT_Memory
+ *
+ * @description:
+ * A handle to a given memory manager object, defined with an
+ * @FT_MemoryRec structure.
+ *
+ */
+ typedef struct FT_MemoryRec_* FT_Memory;
+
+
+ /*************************************************************************
+ *
+ * @functype:
+ * FT_Alloc_Func
+ *
+ * @description:
+ * A function used to allocate `size' bytes from `memory'.
+ *
+ * @input:
+ * memory ::
+ * A handle to the source memory manager.
+ *
+ * size ::
+ * The size in bytes to allocate.
+ *
+ * @return:
+ * Address of new memory block. 0 in case of failure.
+ *
+ */
+ typedef void*
+ (*FT_Alloc_Func)( FT_Memory memory,
+ long size );
+
+
+ /*************************************************************************
+ *
+ * @functype:
+ * FT_Free_Func
+ *
+ * @description:
+ * A function used to release a given block of memory.
+ *
+ * @input:
+ * memory ::
+ * A handle to the source memory manager.
+ *
+ * block ::
+ * The address of the target memory block.
+ *
+ */
+ typedef void
+ (*FT_Free_Func)( FT_Memory memory,
+ void* block );
+
+
+ /*************************************************************************
+ *
+ * @functype:
+ * FT_Realloc_Func
+ *
+ * @description:
+ * A function used to re-allocate a given block of memory.
+ *
+ * @input:
+ * memory ::
+ * A handle to the source memory manager.
+ *
+ * cur_size ::
+ * The block's current size in bytes.
+ *
+ * new_size ::
+ * The block's requested new size.
+ *
+ * block ::
+ * The block's current address.
+ *
+ * @return:
+ * New block address. 0 in case of memory shortage.
+ *
+ * @note:
+ * In case of error, the old block must still be available.
+ *
+ */
+ typedef void*
+ (*FT_Realloc_Func)( FT_Memory memory,
+ long cur_size,
+ long new_size,
+ void* block );
+
+
+ /*************************************************************************
+ *
+ * @struct:
+ * FT_MemoryRec
+ *
+ * @description:
+ * A structure used to describe a given memory manager to FreeType 2.
+ *
+ * @fields:
+ * user ::
+ * A generic typeless pointer for user data.
+ *
+ * alloc ::
+ * A pointer type to an allocation function.
+ *
+ * free ::
+ * A pointer type to an memory freeing function.
+ *
+ * realloc ::
+ * A pointer type to a reallocation function.
+ *
+ */
+ struct FT_MemoryRec_
+ {
+ void* user;
+ FT_Alloc_Func alloc;
+ FT_Free_Func free;
+ FT_Realloc_Func realloc;
+ };
+
+
+ /*************************************************************************/
+ /* */
+ /* I / O M A N A G E M E N T */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************
+ *
+ * @type:
+ * FT_Stream
+ *
+ * @description:
+ * A handle to an input stream.
+ *
+ */
+ typedef struct FT_StreamRec_* FT_Stream;
+
+
+ /*************************************************************************
+ *
+ * @struct:
+ * FT_StreamDesc
+ *
+ * @description:
+ * A union type used to store either a long or a pointer. This is used
+ * to store a file descriptor or a `FILE*' in an input stream.
+ *
+ */
+ typedef union FT_StreamDesc_
+ {
+ long value;
+ void* pointer;
+
+ } FT_StreamDesc;
+
+
+ /*************************************************************************
+ *
+ * @functype:
+ * FT_Stream_IoFunc
+ *
+ * @description:
+ * A function used to seek and read data from a given input stream.
+ *
+ * @input:
+ * stream ::
+ * A handle to the source stream.
+ *
+ * offset ::
+ * The offset of read in stream (always from start).
+ *
+ * buffer ::
+ * The address of the read buffer.
+ *
+ * count ::
+ * The number of bytes to read from the stream.
+ *
+ * @return:
+ * The number of bytes effectively read by the stream.
+ *
+ * @note:
+ * This function might be called to perform a seek or skip operation
+ * with a `count' of 0.
+ *
+ */
+ typedef unsigned long
+ (*FT_Stream_IoFunc)( FT_Stream stream,
+ unsigned long offset,
+ unsigned char* buffer,
+ unsigned long count );
+
+
+ /*************************************************************************
+ *
+ * @functype:
+ * FT_Stream_CloseFunc
+ *
+ * @description:
+ * A function used to close a given input stream.
+ *
+ * @input:
+ * stream ::
+ * A handle to the target stream.
+ *
+ */
+ typedef void
+ (*FT_Stream_CloseFunc)( FT_Stream stream );
+
+
+ /*************************************************************************
+ *
+ * @struct:
+ * FT_StreamRec
+ *
+ * @description:
+ * A structure used to describe an input stream.
+ *
+ * @input:
+ * base ::
+ * For memory-based streams, this is the address of the first stream
+ * byte in memory. This field should always be set to NULL for
+ * disk-based streams.
+ *
+ * size ::
+ * The stream size in bytes.
+ *
+ * pos ::
+ * The current position within the stream.
+ *
+ * descriptor ::
+ * This field is a union that can hold an integer or a pointer. It is
+ * used by stream implementations to store file descriptors or `FILE*'
+ * pointers.
+ *
+ * pathname ::
+ * This field is completely ignored by FreeType. However, it is often
+ * useful during debugging to use it to store the stream's filename
+ * (where available).
+ *
+ * read ::
+ * The stream's input function.
+ *
+ * close ::
+ * The stream;s close function.
+ *
+ * memory ::
+ * The memory manager to use to preload frames. This is set
+ * internally by FreeType and shouldn't be touched by stream
+ * implementations.
+ *
+ * cursor ::
+ * This field is set and used internally by FreeType when parsing
+ * frames.
+ *
+ * limit ::
+ * This field is set and used internally by FreeType when parsing
+ * frames.
+ *
+ */
+ typedef struct FT_StreamRec_
+ {
+ unsigned char* base;
+ unsigned long size;
+ unsigned long pos;
+
+ FT_StreamDesc descriptor;
+ FT_StreamDesc pathname;
+ FT_Stream_IoFunc read;
+ FT_Stream_CloseFunc close;
+
+ FT_Memory memory;
+ unsigned char* cursor;
+ unsigned char* limit;
+
+ } FT_StreamRec;
+
+
+ /* */
+
+
+FT_END_HEADER
+
+#endif /* __FTSYSTEM_H__ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/include/freetype/fttrigon.h b/src/3rdparty/freetype/include/freetype/fttrigon.h
new file mode 100644
index 0000000..6b77d2e
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/fttrigon.h
@@ -0,0 +1,350 @@
+/***************************************************************************/
+/* */
+/* fttrigon.h */
+/* */
+/* FreeType trigonometric functions (specification). */
+/* */
+/* Copyright 2001, 2003, 2005, 2007 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef __FTTRIGON_H__
+#define __FTTRIGON_H__
+
+#include FT_FREETYPE_H
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* computations */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************
+ *
+ * @type:
+ * FT_Angle
+ *
+ * @description:
+ * This type is used to model angle values in FreeType. Note that the
+ * angle is a 16.16 fixed float value expressed in degrees.
+ *
+ */
+ typedef FT_Fixed FT_Angle;
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_ANGLE_PI
+ *
+ * @description:
+ * The angle pi expressed in @FT_Angle units.
+ *
+ */
+#define FT_ANGLE_PI ( 180L << 16 )
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_ANGLE_2PI
+ *
+ * @description:
+ * The angle 2*pi expressed in @FT_Angle units.
+ *
+ */
+#define FT_ANGLE_2PI ( FT_ANGLE_PI * 2 )
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_ANGLE_PI2
+ *
+ * @description:
+ * The angle pi/2 expressed in @FT_Angle units.
+ *
+ */
+#define FT_ANGLE_PI2 ( FT_ANGLE_PI / 2 )
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_ANGLE_PI4
+ *
+ * @description:
+ * The angle pi/4 expressed in @FT_Angle units.
+ *
+ */
+#define FT_ANGLE_PI4 ( FT_ANGLE_PI / 4 )
+
+
+ /*************************************************************************
+ *
+ * @function:
+ * FT_Sin
+ *
+ * @description:
+ * Return the sinus of a given angle in fixed point format.
+ *
+ * @input:
+ * angle ::
+ * The input angle.
+ *
+ * @return:
+ * The sinus value.
+ *
+ * @note:
+ * If you need both the sinus and cosinus for a given angle, use the
+ * function @FT_Vector_Unit.
+ *
+ */
+ FT_EXPORT( FT_Fixed )
+ FT_Sin( FT_Angle angle );
+
+
+ /*************************************************************************
+ *
+ * @function:
+ * FT_Cos
+ *
+ * @description:
+ * Return the cosinus of a given angle in fixed point format.
+ *
+ * @input:
+ * angle ::
+ * The input angle.
+ *
+ * @return:
+ * The cosinus value.
+ *
+ * @note:
+ * If you need both the sinus and cosinus for a given angle, use the
+ * function @FT_Vector_Unit.
+ *
+ */
+ FT_EXPORT( FT_Fixed )
+ FT_Cos( FT_Angle angle );
+
+
+ /*************************************************************************
+ *
+ * @function:
+ * FT_Tan
+ *
+ * @description:
+ * Return the tangent of a given angle in fixed point format.
+ *
+ * @input:
+ * angle ::
+ * The input angle.
+ *
+ * @return:
+ * The tangent value.
+ *
+ */
+ FT_EXPORT( FT_Fixed )
+ FT_Tan( FT_Angle angle );
+
+
+ /*************************************************************************
+ *
+ * @function:
+ * FT_Atan2
+ *
+ * @description:
+ * Return the arc-tangent corresponding to a given vector (x,y) in
+ * the 2d plane.
+ *
+ * @input:
+ * x ::
+ * The horizontal vector coordinate.
+ *
+ * y ::
+ * The vertical vector coordinate.
+ *
+ * @return:
+ * The arc-tangent value (i.e. angle).
+ *
+ */
+ FT_EXPORT( FT_Angle )
+ FT_Atan2( FT_Fixed x,
+ FT_Fixed y );
+
+
+ /*************************************************************************
+ *
+ * @function:
+ * FT_Angle_Diff
+ *
+ * @description:
+ * Return the difference between two angles. The result is always
+ * constrained to the ]-PI..PI] interval.
+ *
+ * @input:
+ * angle1 ::
+ * First angle.
+ *
+ * angle2 ::
+ * Second angle.
+ *
+ * @return:
+ * Constrained value of `value2-value1'.
+ *
+ */
+ FT_EXPORT( FT_Angle )
+ FT_Angle_Diff( FT_Angle angle1,
+ FT_Angle angle2 );
+
+
+ /*************************************************************************
+ *
+ * @function:
+ * FT_Vector_Unit
+ *
+ * @description:
+ * Return the unit vector corresponding to a given angle. After the
+ * call, the value of `vec.x' will be `sin(angle)', and the value of
+ * `vec.y' will be `cos(angle)'.
+ *
+ * This function is useful to retrieve both the sinus and cosinus of a
+ * given angle quickly.
+ *
+ * @output:
+ * vec ::
+ * The address of target vector.
+ *
+ * @input:
+ * angle ::
+ * The address of angle.
+ *
+ */
+ FT_EXPORT( void )
+ FT_Vector_Unit( FT_Vector* vec,
+ FT_Angle angle );
+
+
+ /*************************************************************************
+ *
+ * @function:
+ * FT_Vector_Rotate
+ *
+ * @description:
+ * Rotate a vector by a given angle.
+ *
+ * @inout:
+ * vec ::
+ * The address of target vector.
+ *
+ * @input:
+ * angle ::
+ * The address of angle.
+ *
+ */
+ FT_EXPORT( void )
+ FT_Vector_Rotate( FT_Vector* vec,
+ FT_Angle angle );
+
+
+ /*************************************************************************
+ *
+ * @function:
+ * FT_Vector_Length
+ *
+ * @description:
+ * Return the length of a given vector.
+ *
+ * @input:
+ * vec ::
+ * The address of target vector.
+ *
+ * @return:
+ * The vector length, expressed in the same units that the original
+ * vector coordinates.
+ *
+ */
+ FT_EXPORT( FT_Fixed )
+ FT_Vector_Length( FT_Vector* vec );
+
+
+ /*************************************************************************
+ *
+ * @function:
+ * FT_Vector_Polarize
+ *
+ * @description:
+ * Compute both the length and angle of a given vector.
+ *
+ * @input:
+ * vec ::
+ * The address of source vector.
+ *
+ * @output:
+ * length ::
+ * The vector length.
+ *
+ * angle ::
+ * The vector angle.
+ *
+ */
+ FT_EXPORT( void )
+ FT_Vector_Polarize( FT_Vector* vec,
+ FT_Fixed *length,
+ FT_Angle *angle );
+
+
+ /*************************************************************************
+ *
+ * @function:
+ * FT_Vector_From_Polar
+ *
+ * @description:
+ * Compute vector coordinates from a length and angle.
+ *
+ * @output:
+ * vec ::
+ * The address of source vector.
+ *
+ * @input:
+ * length ::
+ * The vector length.
+ *
+ * angle ::
+ * The vector angle.
+ *
+ */
+ FT_EXPORT( void )
+ FT_Vector_From_Polar( FT_Vector* vec,
+ FT_Fixed length,
+ FT_Angle angle );
+
+ /* */
+
+
+FT_END_HEADER
+
+#endif /* __FTTRIGON_H__ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/include/freetype/fttypes.h b/src/3rdparty/freetype/include/freetype/fttypes.h
new file mode 100644
index 0000000..a60aa54
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/fttypes.h
@@ -0,0 +1,587 @@
+/***************************************************************************/
+/* */
+/* fttypes.h */
+/* */
+/* FreeType simple types definitions (specification only). */
+/* */
+/* Copyright 1996-2001, 2002, 2004, 2006, 2007, 2008 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef __FTTYPES_H__
+#define __FTTYPES_H__
+
+
+#include <ft2build.h>
+#include FT_CONFIG_CONFIG_H
+#include FT_SYSTEM_H
+#include FT_IMAGE_H
+
+#include <stddef.h>
+
+
+FT_BEGIN_HEADER
+
+
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* basic_types */
+ /* */
+ /* <Title> */
+ /* Basic Data Types */
+ /* */
+ /* <Abstract> */
+ /* The basic data types defined by the library. */
+ /* */
+ /* <Description> */
+ /* This section contains the basic data types defined by FreeType 2, */
+ /* ranging from simple scalar types to bitmap descriptors. More */
+ /* font-specific structures are defined in a different section. */
+ /* */
+ /* <Order> */
+ /* FT_Byte */
+ /* FT_Bytes */
+ /* FT_Char */
+ /* FT_Int */
+ /* FT_UInt */
+ /* FT_Int16 */
+ /* FT_UInt16 */
+ /* FT_Int32 */
+ /* FT_UInt32 */
+ /* FT_Short */
+ /* FT_UShort */
+ /* FT_Long */
+ /* FT_ULong */
+ /* FT_Bool */
+ /* FT_Offset */
+ /* FT_PtrDist */
+ /* FT_String */
+ /* FT_Tag */
+ /* FT_Error */
+ /* FT_Fixed */
+ /* FT_Pointer */
+ /* FT_Pos */
+ /* FT_Vector */
+ /* FT_BBox */
+ /* FT_Matrix */
+ /* FT_FWord */
+ /* FT_UFWord */
+ /* FT_F2Dot14 */
+ /* FT_UnitVector */
+ /* FT_F26Dot6 */
+ /* */
+ /* */
+ /* FT_Generic */
+ /* FT_Generic_Finalizer */
+ /* */
+ /* FT_Bitmap */
+ /* FT_Pixel_Mode */
+ /* FT_Palette_Mode */
+ /* FT_Glyph_Format */
+ /* FT_IMAGE_TAG */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_Bool */
+ /* */
+ /* <Description> */
+ /* A typedef of unsigned char, used for simple booleans. As usual, */
+ /* values 1 and 0 represent true and false, respectively. */
+ /* */
+ typedef unsigned char FT_Bool;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_FWord */
+ /* */
+ /* <Description> */
+ /* A signed 16-bit integer used to store a distance in original font */
+ /* units. */
+ /* */
+ typedef signed short FT_FWord; /* distance in FUnits */
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_UFWord */
+ /* */
+ /* <Description> */
+ /* An unsigned 16-bit integer used to store a distance in original */
+ /* font units. */
+ /* */
+ typedef unsigned short FT_UFWord; /* unsigned distance */
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_Char */
+ /* */
+ /* <Description> */
+ /* A simple typedef for the _signed_ char type. */
+ /* */
+ typedef signed char FT_Char;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_Byte */
+ /* */
+ /* <Description> */
+ /* A simple typedef for the _unsigned_ char type. */
+ /* */
+ typedef unsigned char FT_Byte;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_Bytes */
+ /* */
+ /* <Description> */
+ /* A typedef for constant memory areas. */
+ /* */
+ typedef const FT_Byte* FT_Bytes;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_Tag */
+ /* */
+ /* <Description> */
+ /* A typedef for 32bit tags (as used in the SFNT format). */
+ /* */
+ typedef FT_UInt32 FT_Tag;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_String */
+ /* */
+ /* <Description> */
+ /* A simple typedef for the char type, usually used for strings. */
+ /* */
+ typedef char FT_String;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_Short */
+ /* */
+ /* <Description> */
+ /* A typedef for signed short. */
+ /* */
+ typedef signed short FT_Short;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_UShort */
+ /* */
+ /* <Description> */
+ /* A typedef for unsigned short. */
+ /* */
+ typedef unsigned short FT_UShort;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_Int */
+ /* */
+ /* <Description> */
+ /* A typedef for the int type. */
+ /* */
+ typedef signed int FT_Int;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_UInt */
+ /* */
+ /* <Description> */
+ /* A typedef for the unsigned int type. */
+ /* */
+ typedef unsigned int FT_UInt;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_Long */
+ /* */
+ /* <Description> */
+ /* A typedef for signed long. */
+ /* */
+ typedef signed long FT_Long;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_ULong */
+ /* */
+ /* <Description> */
+ /* A typedef for unsigned long. */
+ /* */
+ typedef unsigned long FT_ULong;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_F2Dot14 */
+ /* */
+ /* <Description> */
+ /* A signed 2.14 fixed float type used for unit vectors. */
+ /* */
+ typedef signed short FT_F2Dot14;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_F26Dot6 */
+ /* */
+ /* <Description> */
+ /* A signed 26.6 fixed float type used for vectorial pixel */
+ /* coordinates. */
+ /* */
+ typedef signed long FT_F26Dot6;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_Fixed */
+ /* */
+ /* <Description> */
+ /* This type is used to store 16.16 fixed float values, like scaling */
+ /* values or matrix coefficients. */
+ /* */
+ typedef signed long FT_Fixed;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_Error */
+ /* */
+ /* <Description> */
+ /* The FreeType error code type. A value of 0 is always interpreted */
+ /* as a successful operation. */
+ /* */
+ typedef int FT_Error;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_Pointer */
+ /* */
+ /* <Description> */
+ /* A simple typedef for a typeless pointer. */
+ /* */
+ typedef void* FT_Pointer;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_Offset */
+ /* */
+ /* <Description> */
+ /* This is equivalent to the ANSI C `size_t' type, i.e., the largest */
+ /* _unsigned_ integer type used to express a file size or position, */
+ /* or a memory block size. */
+ /* */
+ typedef size_t FT_Offset;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_PtrDist */
+ /* */
+ /* <Description> */
+ /* This is equivalent to the ANSI C `ptrdiff_t' type, i.e., the */
+ /* largest _signed_ integer type used to express the distance */
+ /* between two pointers. */
+ /* */
+ typedef ft_ptrdiff_t FT_PtrDist;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_UnitVector */
+ /* */
+ /* <Description> */
+ /* A simple structure used to store a 2D vector unit vector. Uses */
+ /* FT_F2Dot14 types. */
+ /* */
+ /* <Fields> */
+ /* x :: Horizontal coordinate. */
+ /* */
+ /* y :: Vertical coordinate. */
+ /* */
+ typedef struct FT_UnitVector_
+ {
+ FT_F2Dot14 x;
+ FT_F2Dot14 y;
+
+ } FT_UnitVector;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_Matrix */
+ /* */
+ /* <Description> */
+ /* A simple structure used to store a 2x2 matrix. Coefficients are */
+ /* in 16.16 fixed float format. The computation performed is: */
+ /* */
+ /* { */
+ /* x' = x*xx + y*xy */
+ /* y' = x*yx + y*yy */
+ /* } */
+ /* */
+ /* <Fields> */
+ /* xx :: Matrix coefficient. */
+ /* */
+ /* xy :: Matrix coefficient. */
+ /* */
+ /* yx :: Matrix coefficient. */
+ /* */
+ /* yy :: Matrix coefficient. */
+ /* */
+ typedef struct FT_Matrix_
+ {
+ FT_Fixed xx, xy;
+ FT_Fixed yx, yy;
+
+ } FT_Matrix;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_Data */
+ /* */
+ /* <Description> */
+ /* Read-only binary data represented as a pointer and a length. */
+ /* */
+ /* <Fields> */
+ /* pointer :: The data. */
+ /* */
+ /* length :: The length of the data in bytes. */
+ /* */
+ typedef struct FT_Data_
+ {
+ const FT_Byte* pointer;
+ FT_Int length;
+
+ } FT_Data;
+
+
+ /*************************************************************************/
+ /* */
+ /* <FuncType> */
+ /* FT_Generic_Finalizer */
+ /* */
+ /* <Description> */
+ /* Describes a function used to destroy the `client' data of any */
+ /* FreeType object. See the description of the @FT_Generic type for */
+ /* details of usage. */
+ /* */
+ /* <Input> */
+ /* The address of the FreeType object which is under finalization. */
+ /* Its client data is accessed through its `generic' field. */
+ /* */
+ typedef void (*FT_Generic_Finalizer)(void* object);
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_Generic */
+ /* */
+ /* <Description> */
+ /* Client applications often need to associate their own data to a */
+ /* variety of FreeType core objects. For example, a text layout API */
+ /* might want to associate a glyph cache to a given size object. */
+ /* */
+ /* Most FreeType object contains a `generic' field, of type */
+ /* FT_Generic, which usage is left to client applications and font */
+ /* servers. */
+ /* */
+ /* It can be used to store a pointer to client-specific data, as well */
+ /* as the address of a `finalizer' function, which will be called by */
+ /* FreeType when the object is destroyed (for example, the previous */
+ /* client example would put the address of the glyph cache destructor */
+ /* in the `finalizer' field). */
+ /* */
+ /* <Fields> */
+ /* data :: A typeless pointer to any client-specified data. This */
+ /* field is completely ignored by the FreeType library. */
+ /* */
+ /* finalizer :: A pointer to a `generic finalizer' function, which */
+ /* will be called when the object is destroyed. If this */
+ /* field is set to NULL, no code will be called. */
+ /* */
+ typedef struct FT_Generic_
+ {
+ void* data;
+ FT_Generic_Finalizer finalizer;
+
+ } FT_Generic;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Macro> */
+ /* FT_MAKE_TAG */
+ /* */
+ /* <Description> */
+ /* This macro converts four-letter tags which are used to label */
+ /* TrueType tables into an unsigned long to be used within FreeType. */
+ /* */
+ /* <Note> */
+ /* The produced values *must* be 32bit integers. Don't redefine this */
+ /* macro. */
+ /* */
+#define FT_MAKE_TAG( _x1, _x2, _x3, _x4 ) \
+ ( ( (FT_ULong)_x1 << 24 ) | \
+ ( (FT_ULong)_x2 << 16 ) | \
+ ( (FT_ULong)_x3 << 8 ) | \
+ (FT_ULong)_x4 )
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /* */
+ /* L I S T M A N A G E M E N T */
+ /* */
+ /*************************************************************************/
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* list_processing */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_ListNode */
+ /* */
+ /* <Description> */
+ /* Many elements and objects in FreeType are listed through an */
+ /* @FT_List record (see @FT_ListRec). As its name suggests, an */
+ /* FT_ListNode is a handle to a single list element. */
+ /* */
+ typedef struct FT_ListNodeRec_* FT_ListNode;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* FT_List */
+ /* */
+ /* <Description> */
+ /* A handle to a list record (see @FT_ListRec). */
+ /* */
+ typedef struct FT_ListRec_* FT_List;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_ListNodeRec */
+ /* */
+ /* <Description> */
+ /* A structure used to hold a single list element. */
+ /* */
+ /* <Fields> */
+ /* prev :: The previous element in the list. NULL if first. */
+ /* */
+ /* next :: The next element in the list. NULL if last. */
+ /* */
+ /* data :: A typeless pointer to the listed object. */
+ /* */
+ typedef struct FT_ListNodeRec_
+ {
+ FT_ListNode prev;
+ FT_ListNode next;
+ void* data;
+
+ } FT_ListNodeRec;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_ListRec */
+ /* */
+ /* <Description> */
+ /* A structure used to hold a simple doubly-linked list. These are */
+ /* used in many parts of FreeType. */
+ /* */
+ /* <Fields> */
+ /* head :: The head (first element) of doubly-linked list. */
+ /* */
+ /* tail :: The tail (last element) of doubly-linked list. */
+ /* */
+ typedef struct FT_ListRec_
+ {
+ FT_ListNode head;
+ FT_ListNode tail;
+
+ } FT_ListRec;
+
+
+ /* */
+
+#define FT_IS_EMPTY( list ) ( (list).head == 0 )
+
+ /* return base error code (without module-specific prefix) */
+#define FT_ERROR_BASE( x ) ( (x) & 0xFF )
+
+ /* return module error code */
+#define FT_ERROR_MODULE( x ) ( (x) & 0xFF00U )
+
+#define FT_BOOL( x ) ( (FT_Bool)( x ) )
+
+FT_END_HEADER
+
+#endif /* __FTTYPES_H__ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/include/freetype/ftwinfnt.h b/src/3rdparty/freetype/include/freetype/ftwinfnt.h
new file mode 100644
index 0000000..3bcf20f
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/ftwinfnt.h
@@ -0,0 +1,274 @@
+/***************************************************************************/
+/* */
+/* ftwinfnt.h */
+/* */
+/* FreeType API for accessing Windows fnt-specific data. */
+/* */
+/* Copyright 2003, 2004, 2008 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef __FTWINFNT_H__
+#define __FTWINFNT_H__
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* winfnt_fonts */
+ /* */
+ /* <Title> */
+ /* Window FNT Files */
+ /* */
+ /* <Abstract> */
+ /* Windows FNT specific API. */
+ /* */
+ /* <Description> */
+ /* This section contains the declaration of Windows FNT specific */
+ /* functions. */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************
+ *
+ * @enum:
+ * FT_WinFNT_ID_XXX
+ *
+ * @description:
+ * A list of valid values for the `charset' byte in
+ * @FT_WinFNT_HeaderRec. Exact mapping tables for the various cpXXXX
+ * encodings (except for cp1361) can be found at ftp://ftp.unicode.org
+ * in the MAPPINGS/VENDORS/MICSFT/WINDOWS subdirectory. cp1361 is
+ * roughly a superset of MAPPINGS/OBSOLETE/EASTASIA/KSC/JOHAB.TXT.
+ *
+ * @values:
+ * FT_WinFNT_ID_DEFAULT ::
+ * This is used for font enumeration and font creation as a
+ * `don't care' value. Valid font files don't contain this value.
+ * When querying for information about the character set of the font
+ * that is currently selected into a specified device context, this
+ * return value (of the related Windows API) simply denotes failure.
+ *
+ * FT_WinFNT_ID_SYMBOL ::
+ * There is no known mapping table available.
+ *
+ * FT_WinFNT_ID_MAC ::
+ * Mac Roman encoding.
+ *
+ * FT_WinFNT_ID_OEM ::
+ * From Michael Poettgen <michael@poettgen.de>:
+ *
+ * The `Windows Font Mapping' article says that FT_WinFNT_ID_OEM
+ * is used for the charset of vector fonts, like `modern.fon',
+ * `roman.fon', and `script.fon' on Windows.
+ *
+ * The `CreateFont' documentation says: The FT_WinFNT_ID_OEM value
+ * specifies a character set that is operating-system dependent.
+ *
+ * The `IFIMETRICS' documentation from the `Windows Driver
+ * Development Kit' says: This font supports an OEM-specific
+ * character set. The OEM character set is system dependent.
+ *
+ * In general OEM, as opposed to ANSI (i.e., cp1252), denotes the
+ * second default codepage that most international versions of
+ * Windows have. It is one of the OEM codepages from
+ *
+ * http://www.microsoft.com/globaldev/reference/cphome.mspx,
+ *
+ * and is used for the `DOS boxes', to support legacy applications.
+ * A German Windows version for example usually uses ANSI codepage
+ * 1252 and OEM codepage 850.
+ *
+ * FT_WinFNT_ID_CP874 ::
+ * A superset of Thai TIS 620 and ISO 8859-11.
+ *
+ * FT_WinFNT_ID_CP932 ::
+ * A superset of Japanese Shift-JIS (with minor deviations).
+ *
+ * FT_WinFNT_ID_CP936 ::
+ * A superset of simplified Chinese GB 2312-1980 (with different
+ * ordering and minor deviations).
+ *
+ * FT_WinFNT_ID_CP949 ::
+ * A superset of Korean Hangul KS C 5601-1987 (with different
+ * ordering and minor deviations).
+ *
+ * FT_WinFNT_ID_CP950 ::
+ * A superset of traditional Chinese Big 5 ETen (with different
+ * ordering and minor deviations).
+ *
+ * FT_WinFNT_ID_CP1250 ::
+ * A superset of East European ISO 8859-2 (with slightly different
+ * ordering).
+ *
+ * FT_WinFNT_ID_CP1251 ::
+ * A superset of Russian ISO 8859-5 (with different ordering).
+ *
+ * FT_WinFNT_ID_CP1252 ::
+ * ANSI encoding. A superset of ISO 8859-1.
+ *
+ * FT_WinFNT_ID_CP1253 ::
+ * A superset of Greek ISO 8859-7 (with minor modifications).
+ *
+ * FT_WinFNT_ID_CP1254 ::
+ * A superset of Turkish ISO 8859-9.
+ *
+ * FT_WinFNT_ID_CP1255 ::
+ * A superset of Hebrew ISO 8859-8 (with some modifications).
+ *
+ * FT_WinFNT_ID_CP1256 ::
+ * A superset of Arabic ISO 8859-6 (with different ordering).
+ *
+ * FT_WinFNT_ID_CP1257 ::
+ * A superset of Baltic ISO 8859-13 (with some deviations).
+ *
+ * FT_WinFNT_ID_CP1258 ::
+ * For Vietnamese. This encoding doesn't cover all necessary
+ * characters.
+ *
+ * FT_WinFNT_ID_CP1361 ::
+ * Korean (Johab).
+ */
+
+#define FT_WinFNT_ID_CP1252 0
+#define FT_WinFNT_ID_DEFAULT 1
+#define FT_WinFNT_ID_SYMBOL 2
+#define FT_WinFNT_ID_MAC 77
+#define FT_WinFNT_ID_CP932 128
+#define FT_WinFNT_ID_CP949 129
+#define FT_WinFNT_ID_CP1361 130
+#define FT_WinFNT_ID_CP936 134
+#define FT_WinFNT_ID_CP950 136
+#define FT_WinFNT_ID_CP1253 161
+#define FT_WinFNT_ID_CP1254 162
+#define FT_WinFNT_ID_CP1258 163
+#define FT_WinFNT_ID_CP1255 177
+#define FT_WinFNT_ID_CP1256 178
+#define FT_WinFNT_ID_CP1257 186
+#define FT_WinFNT_ID_CP1251 204
+#define FT_WinFNT_ID_CP874 222
+#define FT_WinFNT_ID_CP1250 238
+#define FT_WinFNT_ID_OEM 255
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_WinFNT_HeaderRec */
+ /* */
+ /* <Description> */
+ /* Windows FNT Header info. */
+ /* */
+ typedef struct FT_WinFNT_HeaderRec_
+ {
+ FT_UShort version;
+ FT_ULong file_size;
+ FT_Byte copyright[60];
+ FT_UShort file_type;
+ FT_UShort nominal_point_size;
+ FT_UShort vertical_resolution;
+ FT_UShort horizontal_resolution;
+ FT_UShort ascent;
+ FT_UShort internal_leading;
+ FT_UShort external_leading;
+ FT_Byte italic;
+ FT_Byte underline;
+ FT_Byte strike_out;
+ FT_UShort weight;
+ FT_Byte charset;
+ FT_UShort pixel_width;
+ FT_UShort pixel_height;
+ FT_Byte pitch_and_family;
+ FT_UShort avg_width;
+ FT_UShort max_width;
+ FT_Byte first_char;
+ FT_Byte last_char;
+ FT_Byte default_char;
+ FT_Byte break_char;
+ FT_UShort bytes_per_row;
+ FT_ULong device_offset;
+ FT_ULong face_name_offset;
+ FT_ULong bits_pointer;
+ FT_ULong bits_offset;
+ FT_Byte reserved;
+ FT_ULong flags;
+ FT_UShort A_space;
+ FT_UShort B_space;
+ FT_UShort C_space;
+ FT_UShort color_table_offset;
+ FT_ULong reserved1[4];
+
+ } FT_WinFNT_HeaderRec;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_WinFNT_Header */
+ /* */
+ /* <Description> */
+ /* A handle to an @FT_WinFNT_HeaderRec structure. */
+ /* */
+ typedef struct FT_WinFNT_HeaderRec_* FT_WinFNT_Header;
+
+
+ /**********************************************************************
+ *
+ * @function:
+ * FT_Get_WinFNT_Header
+ *
+ * @description:
+ * Retrieve a Windows FNT font info header.
+ *
+ * @input:
+ * face :: A handle to the input face.
+ *
+ * @output:
+ * aheader :: The WinFNT header.
+ *
+ * @return:
+ * FreeType error code. 0 means success.
+ *
+ * @note:
+ * This function only works with Windows FNT faces, returning an error
+ * otherwise.
+ */
+ FT_EXPORT( FT_Error )
+ FT_Get_WinFNT_Header( FT_Face face,
+ FT_WinFNT_HeaderRec *aheader );
+
+
+ /* */
+
+FT_END_HEADER
+
+#endif /* __FTWINFNT_H__ */
+
+
+/* END */
+
+
+/* Local Variables: */
+/* coding: utf-8 */
+/* End: */
diff --git a/src/3rdparty/freetype/include/freetype/ftxf86.h b/src/3rdparty/freetype/include/freetype/ftxf86.h
new file mode 100644
index 0000000..ea82abb
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/ftxf86.h
@@ -0,0 +1,80 @@
+/***************************************************************************/
+/* */
+/* ftxf86.h */
+/* */
+/* Support functions for X11. */
+/* */
+/* Copyright 2002, 2003, 2004, 2006, 2007 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef __FTXF86_H__
+#define __FTXF86_H__
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* font_formats */
+ /* */
+ /* <Title> */
+ /* Font Formats */
+ /* */
+ /* <Abstract> */
+ /* Getting the font format. */
+ /* */
+ /* <Description> */
+ /* The single function in this section can be used to get the font */
+ /* format. Note that this information is not needed normally; */
+ /* however, there are special cases (like in PDF devices) where it is */
+ /* important to differentiate, in spite of FreeType's uniform API. */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Get_X11_Font_Format */
+ /* */
+ /* <Description> */
+ /* Return a string describing the format of a given face, using values */
+ /* which can be used as an X11 FONT_PROPERTY. Possible values are */
+ /* `TrueType', `Type 1', `BDF', `PCF', `Type 42', `CID Type 1', `CFF', */
+ /* `PFR', and `Windows FNT'. */
+ /* */
+ /* <Input> */
+ /* face :: */
+ /* Input face handle. */
+ /* */
+ /* <Return> */
+ /* Font format string. NULL in case of error. */
+ /* */
+ FT_EXPORT( const char* )
+ FT_Get_X11_Font_Format( FT_Face face );
+
+ /* */
+
+FT_END_HEADER
+
+#endif /* __FTXF86_H__ */
diff --git a/src/3rdparty/freetype/include/freetype/internal/autohint.h b/src/3rdparty/freetype/include/freetype/internal/autohint.h
new file mode 100644
index 0000000..ee00402
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/internal/autohint.h
@@ -0,0 +1,205 @@
+/***************************************************************************/
+/* */
+/* autohint.h */
+/* */
+/* High-level `autohint' module-specific interface (specification). */
+/* */
+/* Copyright 1996-2001, 2002, 2007 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* The auto-hinter is used to load and automatically hint glyphs if a */
+ /* format-specific hinter isn't available. */
+ /* */
+ /*************************************************************************/
+
+
+#ifndef __AUTOHINT_H__
+#define __AUTOHINT_H__
+
+
+ /*************************************************************************/
+ /* */
+ /* A small technical note regarding automatic hinting in order to */
+ /* clarify this module interface. */
+ /* */
+ /* An automatic hinter might compute two kinds of data for a given face: */
+ /* */
+ /* - global hints: Usually some metrics that describe global properties */
+ /* of the face. It is computed by scanning more or less */
+ /* aggressively the glyphs in the face, and thus can be */
+ /* very slow to compute (even if the size of global */
+ /* hints is really small). */
+ /* */
+ /* - glyph hints: These describe some important features of the glyph */
+ /* outline, as well as how to align them. They are */
+ /* generally much faster to compute than global hints. */
+ /* */
+ /* The current FreeType auto-hinter does a pretty good job while */
+ /* performing fast computations for both global and glyph hints. */
+ /* However, we might be interested in introducing more complex and */
+ /* powerful algorithms in the future, like the one described in the John */
+ /* D. Hobby paper, which unfortunately requires a lot more horsepower. */
+ /* */
+ /* Because a sufficiently sophisticated font management system would */
+ /* typically implement an LRU cache of opened face objects to reduce */
+ /* memory usage, it is a good idea to be able to avoid recomputing */
+ /* global hints every time the same face is re-opened. */
+ /* */
+ /* We thus provide the ability to cache global hints outside of the face */
+ /* object, in order to speed up font re-opening time. Of course, this */
+ /* feature is purely optional, so most client programs won't even notice */
+ /* it. */
+ /* */
+ /* I initially thought that it would be a good idea to cache the glyph */
+ /* hints too. However, my general idea now is that if you really need */
+ /* to cache these too, you are simply in need of a new font format, */
+ /* where all this information could be stored within the font file and */
+ /* decoded on the fly. */
+ /* */
+ /*************************************************************************/
+
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+
+
+FT_BEGIN_HEADER
+
+
+ typedef struct FT_AutoHinterRec_ *FT_AutoHinter;
+
+
+ /*************************************************************************/
+ /* */
+ /* <FuncType> */
+ /* FT_AutoHinter_GlobalGetFunc */
+ /* */
+ /* <Description> */
+ /* Retrieves the global hints computed for a given face object the */
+ /* resulting data is dissociated from the face and will survive a */
+ /* call to FT_Done_Face(). It must be discarded through the API */
+ /* FT_AutoHinter_GlobalDoneFunc(). */
+ /* */
+ /* <Input> */
+ /* hinter :: A handle to the source auto-hinter. */
+ /* */
+ /* face :: A handle to the source face object. */
+ /* */
+ /* <Output> */
+ /* global_hints :: A typeless pointer to the global hints. */
+ /* */
+ /* global_len :: The size in bytes of the global hints. */
+ /* */
+ typedef void
+ (*FT_AutoHinter_GlobalGetFunc)( FT_AutoHinter hinter,
+ FT_Face face,
+ void** global_hints,
+ long* global_len );
+
+
+ /*************************************************************************/
+ /* */
+ /* <FuncType> */
+ /* FT_AutoHinter_GlobalDoneFunc */
+ /* */
+ /* <Description> */
+ /* Discards the global hints retrieved through */
+ /* FT_AutoHinter_GlobalGetFunc(). This is the only way these hints */
+ /* are freed from memory. */
+ /* */
+ /* <Input> */
+ /* hinter :: A handle to the auto-hinter module. */
+ /* */
+ /* global :: A pointer to retrieved global hints to discard. */
+ /* */
+ typedef void
+ (*FT_AutoHinter_GlobalDoneFunc)( FT_AutoHinter hinter,
+ void* global );
+
+
+ /*************************************************************************/
+ /* */
+ /* <FuncType> */
+ /* FT_AutoHinter_GlobalResetFunc */
+ /* */
+ /* <Description> */
+ /* This function is used to recompute the global metrics in a given */
+ /* font. This is useful when global font data changes (e.g. Multiple */
+ /* Masters fonts where blend coordinates change). */
+ /* */
+ /* <Input> */
+ /* hinter :: A handle to the source auto-hinter. */
+ /* */
+ /* face :: A handle to the face. */
+ /* */
+ typedef void
+ (*FT_AutoHinter_GlobalResetFunc)( FT_AutoHinter hinter,
+ FT_Face face );
+
+
+ /*************************************************************************/
+ /* */
+ /* <FuncType> */
+ /* FT_AutoHinter_GlyphLoadFunc */
+ /* */
+ /* <Description> */
+ /* This function is used to load, scale, and automatically hint a */
+ /* glyph from a given face. */
+ /* */
+ /* <Input> */
+ /* face :: A handle to the face. */
+ /* */
+ /* glyph_index :: The glyph index. */
+ /* */
+ /* load_flags :: The load flags. */
+ /* */
+ /* <Note> */
+ /* This function is capable of loading composite glyphs by hinting */
+ /* each sub-glyph independently (which improves quality). */
+ /* */
+ /* It will call the font driver with FT_Load_Glyph(), with */
+ /* FT_LOAD_NO_SCALE set. */
+ /* */
+ typedef FT_Error
+ (*FT_AutoHinter_GlyphLoadFunc)( FT_AutoHinter hinter,
+ FT_GlyphSlot slot,
+ FT_Size size,
+ FT_UInt glyph_index,
+ FT_Int32 load_flags );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_AutoHinter_ServiceRec */
+ /* */
+ /* <Description> */
+ /* The auto-hinter module's interface. */
+ /* */
+ typedef struct FT_AutoHinter_ServiceRec_
+ {
+ FT_AutoHinter_GlobalResetFunc reset_face;
+ FT_AutoHinter_GlobalGetFunc get_global_hints;
+ FT_AutoHinter_GlobalDoneFunc done_global_hints;
+ FT_AutoHinter_GlyphLoadFunc load_glyph;
+
+ } FT_AutoHinter_ServiceRec, *FT_AutoHinter_Service;
+
+
+FT_END_HEADER
+
+#endif /* __AUTOHINT_H__ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/include/freetype/internal/ftcalc.h b/src/3rdparty/freetype/include/freetype/internal/ftcalc.h
new file mode 100644
index 0000000..58def34
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/internal/ftcalc.h
@@ -0,0 +1,178 @@
+/***************************************************************************/
+/* */
+/* ftcalc.h */
+/* */
+/* Arithmetic computations (specification). */
+/* */
+/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2008 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef __FTCALC_H__
+#define __FTCALC_H__
+
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+
+
+FT_BEGIN_HEADER
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_FixedSqrt */
+ /* */
+ /* <Description> */
+ /* Computes the square root of a 16.16 fixed point value. */
+ /* */
+ /* <Input> */
+ /* x :: The value to compute the root for. */
+ /* */
+ /* <Return> */
+ /* The result of `sqrt(x)'. */
+ /* */
+ /* <Note> */
+ /* This function is not very fast. */
+ /* */
+ FT_BASE( FT_Int32 )
+ FT_SqrtFixed( FT_Int32 x );
+
+
+#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Sqrt32 */
+ /* */
+ /* <Description> */
+ /* Computes the square root of an Int32 integer (which will be */
+ /* handled as an unsigned long value). */
+ /* */
+ /* <Input> */
+ /* x :: The value to compute the root for. */
+ /* */
+ /* <Return> */
+ /* The result of `sqrt(x)'. */
+ /* */
+ FT_EXPORT( FT_Int32 )
+ FT_Sqrt32( FT_Int32 x );
+
+#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
+
+
+ /*************************************************************************/
+ /* */
+ /* FT_MulDiv() and FT_MulFix() are declared in freetype.h. */
+ /* */
+ /*************************************************************************/
+
+
+#ifdef TT_USE_BYTECODE_INTERPRETER
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_MulDiv_No_Round */
+ /* */
+ /* <Description> */
+ /* A very simple function used to perform the computation `(a*b)/c' */
+ /* (without rounding) with maximal accuracy (it uses a 64-bit */
+ /* intermediate integer whenever necessary). */
+ /* */
+ /* This function isn't necessarily as fast as some processor specific */
+ /* operations, but is at least completely portable. */
+ /* */
+ /* <Input> */
+ /* a :: The first multiplier. */
+ /* b :: The second multiplier. */
+ /* c :: The divisor. */
+ /* */
+ /* <Return> */
+ /* The result of `(a*b)/c'. This function never traps when trying to */
+ /* divide by zero; it simply returns `MaxInt' or `MinInt' depending */
+ /* on the signs of `a' and `b'. */
+ /* */
+ FT_BASE( FT_Long )
+ FT_MulDiv_No_Round( FT_Long a,
+ FT_Long b,
+ FT_Long c );
+
+#endif /* TT_USE_BYTECODE_INTERPRETER */
+
+
+ /*
+ * A variant of FT_Matrix_Multiply which scales its result afterwards.
+ * The idea is that both `a' and `b' are scaled by factors of 10 so that
+ * the values are as precise as possible to get a correct result during
+ * the 64bit multiplication. Let `sa' and `sb' be the scaling factors of
+ * `a' and `b', respectively, then the scaling factor of the result is
+ * `sa*sb'.
+ */
+ FT_BASE( void )
+ FT_Matrix_Multiply_Scaled( const FT_Matrix* a,
+ FT_Matrix *b,
+ FT_Long scaling );
+
+
+ /*
+ * A variant of FT_Vector_Transform. See comments for
+ * FT_Matrix_Multiply_Scaled.
+ */
+
+ FT_BASE( void )
+ FT_Vector_Transform_Scaled( FT_Vector* vector,
+ const FT_Matrix* matrix,
+ FT_Long scaling );
+
+
+ /*
+ * Return -1, 0, or +1, depending on the orientation of a given corner.
+ * We use the Cartesian coordinate system, with positive vertical values
+ * going upwards. The function returns +1 if the corner turns to the
+ * left, -1 to the right, and 0 for undecidable cases.
+ */
+ FT_BASE( FT_Int )
+ ft_corner_orientation( FT_Pos in_x,
+ FT_Pos in_y,
+ FT_Pos out_x,
+ FT_Pos out_y );
+
+ /*
+ * Return TRUE if a corner is flat or nearly flat. This is equivalent to
+ * saying that the angle difference between the `in' and `out' vectors is
+ * very small.
+ */
+ FT_BASE( FT_Int )
+ ft_corner_is_flat( FT_Pos in_x,
+ FT_Pos in_y,
+ FT_Pos out_x,
+ FT_Pos out_y );
+
+
+#define INT_TO_F26DOT6( x ) ( (FT_Long)(x) << 6 )
+#define INT_TO_F2DOT14( x ) ( (FT_Long)(x) << 14 )
+#define INT_TO_FIXED( x ) ( (FT_Long)(x) << 16 )
+#define F2DOT14_TO_FIXED( x ) ( (FT_Long)(x) << 2 )
+#define FLOAT_TO_FIXED( x ) ( (FT_Long)( x * 65536.0 ) )
+
+#define ROUND_F26DOT6( x ) ( x >= 0 ? ( ( (x) + 32 ) & -64 ) \
+ : ( -( ( 32 - (x) ) & -64 ) ) )
+
+
+FT_END_HEADER
+
+#endif /* __FTCALC_H__ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/include/freetype/internal/ftdebug.h b/src/3rdparty/freetype/include/freetype/internal/ftdebug.h
new file mode 100644
index 0000000..d40af4f
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/internal/ftdebug.h
@@ -0,0 +1,250 @@
+/***************************************************************************/
+/* */
+/* ftdebug.h */
+/* */
+/* Debugging and logging component (specification). */
+/* */
+/* Copyright 1996-2001, 2002, 2004, 2006, 2007, 2008 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/* */
+/* IMPORTANT: A description of FreeType's debugging support can be */
+/* found in `docs/DEBUG.TXT'. Read it if you need to use or */
+/* understand this code. */
+/* */
+/***************************************************************************/
+
+
+#ifndef __FTDEBUG_H__
+#define __FTDEBUG_H__
+
+
+#include <ft2build.h>
+#include FT_CONFIG_CONFIG_H
+#include FT_FREETYPE_H
+
+
+FT_BEGIN_HEADER
+
+
+ /* force the definition of FT_DEBUG_LEVEL_ERROR if FT_DEBUG_LEVEL_TRACE */
+ /* is already defined; this simplifies the following #ifdefs */
+ /* */
+#ifdef FT_DEBUG_LEVEL_TRACE
+#undef FT_DEBUG_LEVEL_ERROR
+#define FT_DEBUG_LEVEL_ERROR
+#endif
+
+
+ /*************************************************************************/
+ /* */
+ /* Define the trace enums as well as the trace levels array when they */
+ /* are needed. */
+ /* */
+ /*************************************************************************/
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+
+#define FT_TRACE_DEF( x ) trace_ ## x ,
+
+ /* defining the enumeration */
+ typedef enum FT_Trace_
+ {
+#include FT_INTERNAL_TRACE_H
+ trace_count
+
+ } FT_Trace;
+
+
+ /* defining the array of trace levels, provided by `src/base/ftdebug.c' */
+ extern int ft_trace_levels[trace_count];
+
+#undef FT_TRACE_DEF
+
+#endif /* FT_DEBUG_LEVEL_TRACE */
+
+
+ /*************************************************************************/
+ /* */
+ /* Define the FT_TRACE macro */
+ /* */
+ /* IMPORTANT! */
+ /* */
+ /* Each component must define the macro FT_COMPONENT to a valid FT_Trace */
+ /* value before using any TRACE macro. */
+ /* */
+ /*************************************************************************/
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+
+#define FT_TRACE( level, varformat ) \
+ do \
+ { \
+ if ( ft_trace_levels[FT_COMPONENT] >= level ) \
+ FT_Message varformat; \
+ } while ( 0 )
+
+#else /* !FT_DEBUG_LEVEL_TRACE */
+
+#define FT_TRACE( level, varformat ) do ; while ( 0 ) /* nothing */
+
+#endif /* !FT_DEBUG_LEVEL_TRACE */
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Trace_Get_Count */
+ /* */
+ /* <Description> */
+ /* Return the number of available trace components. */
+ /* */
+ /* <Return> */
+ /* The number of trace components. 0 if FreeType 2 is not built with */
+ /* FT_DEBUG_LEVEL_TRACE definition. */
+ /* */
+ /* <Note> */
+ /* This function may be useful if you want to access elements of */
+ /* the internal `ft_trace_levels' array by an index. */
+ /* */
+ FT_BASE( FT_Int )
+ FT_Trace_Get_Count( void );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Trace_Get_Name */
+ /* */
+ /* <Description> */
+ /* Return the name of a trace component. */
+ /* */
+ /* <Input> */
+ /* The index of the trace component. */
+ /* */
+ /* <Return> */
+ /* The name of the trace component. This is a statically allocated */
+ /* C string, so do not free it after use. NULL if FreeType 2 is not */
+ /* built with FT_DEBUG_LEVEL_TRACE definition. */
+ /* */
+ /* <Note> */
+ /* Use @FT_Trace_Get_Count to get the number of available trace */
+ /* components. */
+ /* */
+ /* This function may be useful if you want to control FreeType 2's */
+ /* debug level in your application. */
+ /* */
+ FT_BASE( const char * )
+ FT_Trace_Get_Name( FT_Int idx );
+
+
+ /*************************************************************************/
+ /* */
+ /* You need two opening and closing parentheses! */
+ /* */
+ /* Example: FT_TRACE0(( "Value is %i", foo )) */
+ /* */
+ /* Output of the FT_TRACEX macros is sent to stderr. */
+ /* */
+ /*************************************************************************/
+
+#define FT_TRACE0( varformat ) FT_TRACE( 0, varformat )
+#define FT_TRACE1( varformat ) FT_TRACE( 1, varformat )
+#define FT_TRACE2( varformat ) FT_TRACE( 2, varformat )
+#define FT_TRACE3( varformat ) FT_TRACE( 3, varformat )
+#define FT_TRACE4( varformat ) FT_TRACE( 4, varformat )
+#define FT_TRACE5( varformat ) FT_TRACE( 5, varformat )
+#define FT_TRACE6( varformat ) FT_TRACE( 6, varformat )
+#define FT_TRACE7( varformat ) FT_TRACE( 7, varformat )
+
+
+ /*************************************************************************/
+ /* */
+ /* Define the FT_ERROR macro. */
+ /* */
+ /* Output of this macro is sent to stderr. */
+ /* */
+ /*************************************************************************/
+
+#ifdef FT_DEBUG_LEVEL_ERROR
+
+#define FT_ERROR( varformat ) FT_Message varformat
+
+#else /* !FT_DEBUG_LEVEL_ERROR */
+
+#define FT_ERROR( varformat ) do ; while ( 0 ) /* nothing */
+
+#endif /* !FT_DEBUG_LEVEL_ERROR */
+
+
+ /*************************************************************************/
+ /* */
+ /* Define the FT_ASSERT macro. */
+ /* */
+ /*************************************************************************/
+
+#ifdef FT_DEBUG_LEVEL_ERROR
+
+#define FT_ASSERT( condition ) \
+ do \
+ { \
+ if ( !( condition ) ) \
+ FT_Panic( "assertion failed on line %d of file %s\n", \
+ __LINE__, __FILE__ ); \
+ } while ( 0 )
+
+#else /* !FT_DEBUG_LEVEL_ERROR */
+
+#define FT_ASSERT( condition ) do ; while ( 0 )
+
+#endif /* !FT_DEBUG_LEVEL_ERROR */
+
+
+ /*************************************************************************/
+ /* */
+ /* Define `FT_Message' and `FT_Panic' when needed. */
+ /* */
+ /*************************************************************************/
+
+#ifdef FT_DEBUG_LEVEL_ERROR
+
+#include "stdio.h" /* for vfprintf() */
+
+ /* print a message */
+ FT_BASE( void )
+ FT_Message( const char* fmt,
+ ... );
+
+ /* print a message and exit */
+ FT_BASE( void )
+ FT_Panic( const char* fmt,
+ ... );
+
+#endif /* FT_DEBUG_LEVEL_ERROR */
+
+
+ FT_BASE( void )
+ ft_debug_init( void );
+
+
+#if defined( _MSC_VER ) /* Visual C++ (and Intel C++) */
+
+ /* We disable the warning `conditional expression is constant' here */
+ /* in order to compile cleanly with the maximum level of warnings. */
+#pragma warning( disable : 4127 )
+
+#endif /* _MSC_VER */
+
+
+FT_END_HEADER
+
+#endif /* __FTDEBUG_H__ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/include/freetype/internal/ftdriver.h b/src/3rdparty/freetype/include/freetype/internal/ftdriver.h
new file mode 100644
index 0000000..e433e78
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/internal/ftdriver.h
@@ -0,0 +1,248 @@
+/***************************************************************************/
+/* */
+/* ftdriver.h */
+/* */
+/* FreeType font driver interface (specification). */
+/* */
+/* Copyright 1996-2001, 2002, 2003, 2006, 2008 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef __FTDRIVER_H__
+#define __FTDRIVER_H__
+
+
+#include <ft2build.h>
+#include FT_MODULE_H
+
+
+FT_BEGIN_HEADER
+
+
+ typedef FT_Error
+ (*FT_Face_InitFunc)( FT_Stream stream,
+ FT_Face face,
+ FT_Int typeface_index,
+ FT_Int num_params,
+ FT_Parameter* parameters );
+
+ typedef void
+ (*FT_Face_DoneFunc)( FT_Face face );
+
+
+ typedef FT_Error
+ (*FT_Size_InitFunc)( FT_Size size );
+
+ typedef void
+ (*FT_Size_DoneFunc)( FT_Size size );
+
+
+ typedef FT_Error
+ (*FT_Slot_InitFunc)( FT_GlyphSlot slot );
+
+ typedef void
+ (*FT_Slot_DoneFunc)( FT_GlyphSlot slot );
+
+
+ typedef FT_Error
+ (*FT_Size_RequestFunc)( FT_Size size,
+ FT_Size_Request req );
+
+ typedef FT_Error
+ (*FT_Size_SelectFunc)( FT_Size size,
+ FT_ULong size_index );
+
+#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
+
+ typedef FT_Error
+ (*FT_Size_ResetPointsFunc)( FT_Size size,
+ FT_F26Dot6 char_width,
+ FT_F26Dot6 char_height,
+ FT_UInt horz_resolution,
+ FT_UInt vert_resolution );
+
+ typedef FT_Error
+ (*FT_Size_ResetPixelsFunc)( FT_Size size,
+ FT_UInt pixel_width,
+ FT_UInt pixel_height );
+
+#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
+
+ typedef FT_Error
+ (*FT_Slot_LoadFunc)( FT_GlyphSlot slot,
+ FT_Size size,
+ FT_UInt glyph_index,
+ FT_Int32 load_flags );
+
+
+ typedef FT_UInt
+ (*FT_CharMap_CharIndexFunc)( FT_CharMap charmap,
+ FT_Long charcode );
+
+ typedef FT_Long
+ (*FT_CharMap_CharNextFunc)( FT_CharMap charmap,
+ FT_Long charcode );
+
+ typedef FT_Error
+ (*FT_Face_GetKerningFunc)( FT_Face face,
+ FT_UInt left_glyph,
+ FT_UInt right_glyph,
+ FT_Vector* kerning );
+
+
+ typedef FT_Error
+ (*FT_Face_AttachFunc)( FT_Face face,
+ FT_Stream stream );
+
+
+ typedef FT_Error
+ (*FT_Face_GetAdvancesFunc)( FT_Face face,
+ FT_UInt first,
+ FT_UInt count,
+ FT_Bool vertical,
+ FT_UShort* advances );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_Driver_ClassRec */
+ /* */
+ /* <Description> */
+ /* The font driver class. This structure mostly contains pointers to */
+ /* driver methods. */
+ /* */
+ /* <Fields> */
+ /* root :: The parent module. */
+ /* */
+ /* face_object_size :: The size of a face object in bytes. */
+ /* */
+ /* size_object_size :: The size of a size object in bytes. */
+ /* */
+ /* slot_object_size :: The size of a glyph object in bytes. */
+ /* */
+ /* init_face :: The format-specific face constructor. */
+ /* */
+ /* done_face :: The format-specific face destructor. */
+ /* */
+ /* init_size :: The format-specific size constructor. */
+ /* */
+ /* done_size :: The format-specific size destructor. */
+ /* */
+ /* init_slot :: The format-specific slot constructor. */
+ /* */
+ /* done_slot :: The format-specific slot destructor. */
+ /* */
+ /* */
+ /* load_glyph :: A function handle to load a glyph to a slot. */
+ /* This field is mandatory! */
+ /* */
+ /* get_kerning :: A function handle to return the unscaled */
+ /* kerning for a given pair of glyphs. Can be */
+ /* set to 0 if the format doesn't support */
+ /* kerning. */
+ /* */
+ /* attach_file :: This function handle is used to read */
+ /* additional data for a face from another */
+ /* file/stream. For example, this can be used to */
+ /* add data from AFM or PFM files on a Type 1 */
+ /* face, or a CIDMap on a CID-keyed face. */
+ /* */
+ /* get_advances :: A function handle used to return advance */
+ /* widths of `count' glyphs (in font units), */
+ /* starting at `first'. The `vertical' flag must */
+ /* be set to get vertical advance heights. The */
+ /* `advances' buffer is caller-allocated. */
+ /* Currently not implemented. The idea of this */
+ /* function is to be able to perform */
+ /* device-independent text layout without loading */
+ /* a single glyph image. */
+ /* */
+ /* request_size :: A handle to a function used to request the new */
+ /* character size. Can be set to 0 if the */
+ /* scaling done in the base layer suffices. */
+ /* */
+ /* select_size :: A handle to a function used to select a new */
+ /* fixed size. It is used only if */
+ /* @FT_FACE_FLAG_FIXED_SIZES is set. Can be set */
+ /* to 0 if the scaling done in the base layer */
+ /* suffices. */
+ /* <Note> */
+ /* Most function pointers, with the exception of `load_glyph', can be */
+ /* set to 0 to indicate a default behaviour. */
+ /* */
+ typedef struct FT_Driver_ClassRec_
+ {
+ FT_Module_Class root;
+
+ FT_Long face_object_size;
+ FT_Long size_object_size;
+ FT_Long slot_object_size;
+
+ FT_Face_InitFunc init_face;
+ FT_Face_DoneFunc done_face;
+
+ FT_Size_InitFunc init_size;
+ FT_Size_DoneFunc done_size;
+
+ FT_Slot_InitFunc init_slot;
+ FT_Slot_DoneFunc done_slot;
+
+#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
+
+ FT_Size_ResetPointsFunc set_char_sizes;
+ FT_Size_ResetPixelsFunc set_pixel_sizes;
+
+#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
+
+ FT_Slot_LoadFunc load_glyph;
+
+ FT_Face_GetKerningFunc get_kerning;
+ FT_Face_AttachFunc attach_file;
+ FT_Face_GetAdvancesFunc get_advances;
+
+ /* since version 2.2 */
+ FT_Size_RequestFunc request_size;
+ FT_Size_SelectFunc select_size;
+
+ } FT_Driver_ClassRec, *FT_Driver_Class;
+
+
+ /*
+ * The following functions are used as stubs for `set_char_sizes' and
+ * `set_pixel_sizes'; the code uses `request_size' and `select_size'
+ * functions instead.
+ *
+ * Implementation is in `src/base/ftobjs.c'.
+ */
+#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
+
+ FT_BASE( FT_Error )
+ ft_stub_set_char_sizes( FT_Size size,
+ FT_F26Dot6 width,
+ FT_F26Dot6 height,
+ FT_UInt horz_res,
+ FT_UInt vert_res );
+
+ FT_BASE( FT_Error )
+ ft_stub_set_pixel_sizes( FT_Size size,
+ FT_UInt width,
+ FT_UInt height );
+
+#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
+
+
+FT_END_HEADER
+
+#endif /* __FTDRIVER_H__ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/include/freetype/internal/ftgloadr.h b/src/3rdparty/freetype/include/freetype/internal/ftgloadr.h
new file mode 100644
index 0000000..9f47c0b
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/internal/ftgloadr.h
@@ -0,0 +1,168 @@
+/***************************************************************************/
+/* */
+/* ftgloadr.h */
+/* */
+/* The FreeType glyph loader (specification). */
+/* */
+/* Copyright 2002, 2003, 2005, 2006 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef __FTGLOADR_H__
+#define __FTGLOADR_H__
+
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+
+
+FT_BEGIN_HEADER
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_GlyphLoader */
+ /* */
+ /* <Description> */
+ /* The glyph loader is an internal object used to load several glyphs */
+ /* together (for example, in the case of composites). */
+ /* */
+ /* <Note> */
+ /* The glyph loader implementation is not part of the high-level API, */
+ /* hence the forward structure declaration. */
+ /* */
+ typedef struct FT_GlyphLoaderRec_* FT_GlyphLoader ;
+
+
+#if 0 /* moved to freetype.h in version 2.2 */
+#define FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS 1
+#define FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES 2
+#define FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID 4
+#define FT_SUBGLYPH_FLAG_SCALE 8
+#define FT_SUBGLYPH_FLAG_XY_SCALE 0x40
+#define FT_SUBGLYPH_FLAG_2X2 0x80
+#define FT_SUBGLYPH_FLAG_USE_MY_METRICS 0x200
+#endif
+
+
+ typedef struct FT_SubGlyphRec_
+ {
+ FT_Int index;
+ FT_UShort flags;
+ FT_Int arg1;
+ FT_Int arg2;
+ FT_Matrix transform;
+
+ } FT_SubGlyphRec;
+
+
+ typedef struct FT_GlyphLoadRec_
+ {
+ FT_Outline outline; /* outline */
+ FT_Vector* extra_points; /* extra points table */
+ FT_Vector* extra_points2; /* second extra points table */
+ FT_UInt num_subglyphs; /* number of subglyphs */
+ FT_SubGlyph subglyphs; /* subglyphs */
+
+ } FT_GlyphLoadRec, *FT_GlyphLoad;
+
+
+ typedef struct FT_GlyphLoaderRec_
+ {
+ FT_Memory memory;
+ FT_UInt max_points;
+ FT_UInt max_contours;
+ FT_UInt max_subglyphs;
+ FT_Bool use_extra;
+
+ FT_GlyphLoadRec base;
+ FT_GlyphLoadRec current;
+
+ void* other; /* for possible future extension? */
+
+ } FT_GlyphLoaderRec;
+
+
+ /* create new empty glyph loader */
+ FT_BASE( FT_Error )
+ FT_GlyphLoader_New( FT_Memory memory,
+ FT_GlyphLoader *aloader );
+
+ /* add an extra points table to a glyph loader */
+ FT_BASE( FT_Error )
+ FT_GlyphLoader_CreateExtra( FT_GlyphLoader loader );
+
+ /* destroy a glyph loader */
+ FT_BASE( void )
+ FT_GlyphLoader_Done( FT_GlyphLoader loader );
+
+ /* reset a glyph loader (frees everything int it) */
+ FT_BASE( void )
+ FT_GlyphLoader_Reset( FT_GlyphLoader loader );
+
+ /* rewind a glyph loader */
+ FT_BASE( void )
+ FT_GlyphLoader_Rewind( FT_GlyphLoader loader );
+
+ /* check that there is enough space to add `n_points' and `n_contours' */
+ /* to the glyph loader */
+ FT_BASE( FT_Error )
+ FT_GlyphLoader_CheckPoints( FT_GlyphLoader loader,
+ FT_UInt n_points,
+ FT_UInt n_contours );
+
+
+#define FT_GLYPHLOADER_CHECK_P( _loader, _count ) \
+ ( (_count) == 0 || (int)((_loader)->base.outline.n_points + \
+ (_loader)->current.outline.n_points + \
+ (_count)) <= (int)(_loader)->max_points )
+
+#define FT_GLYPHLOADER_CHECK_C( _loader, _count ) \
+ ( (_count) == 0 || (int)((_loader)->base.outline.n_contours + \
+ (_loader)->current.outline.n_contours + \
+ (_count)) <= (int)(_loader)->max_contours )
+
+#define FT_GLYPHLOADER_CHECK_POINTS( _loader, _points,_contours ) \
+ ( ( FT_GLYPHLOADER_CHECK_P( _loader, _points ) && \
+ FT_GLYPHLOADER_CHECK_C( _loader, _contours ) ) \
+ ? 0 \
+ : FT_GlyphLoader_CheckPoints( (_loader), (_points), (_contours) ) )
+
+
+ /* check that there is enough space to add `n_subs' sub-glyphs to */
+ /* a glyph loader */
+ FT_BASE( FT_Error )
+ FT_GlyphLoader_CheckSubGlyphs( FT_GlyphLoader loader,
+ FT_UInt n_subs );
+
+ /* prepare a glyph loader, i.e. empty the current glyph */
+ FT_BASE( void )
+ FT_GlyphLoader_Prepare( FT_GlyphLoader loader );
+
+ /* add the current glyph to the base glyph */
+ FT_BASE( void )
+ FT_GlyphLoader_Add( FT_GlyphLoader loader );
+
+ /* copy points from one glyph loader to another */
+ FT_BASE( FT_Error )
+ FT_GlyphLoader_CopyPoints( FT_GlyphLoader target,
+ FT_GlyphLoader source );
+
+ /* */
+
+
+FT_END_HEADER
+
+#endif /* __FTGLOADR_H__ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/include/freetype/internal/ftmemory.h b/src/3rdparty/freetype/include/freetype/internal/ftmemory.h
new file mode 100644
index 0000000..2010ca9
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/internal/ftmemory.h
@@ -0,0 +1,368 @@
+/***************************************************************************/
+/* */
+/* ftmemory.h */
+/* */
+/* The FreeType memory management macros (specification). */
+/* */
+/* Copyright 1996-2001, 2002, 2004, 2005, 2006, 2007 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef __FTMEMORY_H__
+#define __FTMEMORY_H__
+
+
+#include <ft2build.h>
+#include FT_CONFIG_CONFIG_H
+#include FT_TYPES_H
+
+
+FT_BEGIN_HEADER
+
+
+ /*************************************************************************/
+ /* */
+ /* <Macro> */
+ /* FT_SET_ERROR */
+ /* */
+ /* <Description> */
+ /* This macro is used to set an implicit `error' variable to a given */
+ /* expression's value (usually a function call), and convert it to a */
+ /* boolean which is set whenever the value is != 0. */
+ /* */
+#undef FT_SET_ERROR
+#define FT_SET_ERROR( expression ) \
+ ( ( error = (expression) ) != 0 )
+
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /*************************************************************************/
+ /**** ****/
+ /**** ****/
+ /**** M E M O R Y ****/
+ /**** ****/
+ /**** ****/
+ /*************************************************************************/
+ /*************************************************************************/
+ /*************************************************************************/
+
+
+ /*
+ * C++ refuses to handle statements like p = (void*)anything; where `p'
+ * is a typed pointer. Since we don't have a `typeof' operator in
+ * standard C++, we have to use ugly casts.
+ */
+
+#ifdef __cplusplus
+#define FT_ASSIGNP( p, val ) *((void**)&(p)) = (val)
+#else
+#define FT_ASSIGNP( p, val ) (p) = (val)
+#endif
+
+
+
+#ifdef FT_DEBUG_MEMORY
+
+ FT_BASE( const char* ) _ft_debug_file;
+ FT_BASE( long ) _ft_debug_lineno;
+
+#define FT_DEBUG_INNER( exp ) ( _ft_debug_file = __FILE__, \
+ _ft_debug_lineno = __LINE__, \
+ (exp) )
+
+#define FT_ASSIGNP_INNER( p, exp ) ( _ft_debug_file = __FILE__, \
+ _ft_debug_lineno = __LINE__, \
+ FT_ASSIGNP( p, exp ) )
+
+#else /* !FT_DEBUG_MEMORY */
+
+#define FT_DEBUG_INNER( exp ) (exp)
+#define FT_ASSIGNP_INNER( p, exp ) FT_ASSIGNP( p, exp )
+
+#endif /* !FT_DEBUG_MEMORY */
+
+
+ /*
+ * The allocation functions return a pointer, and the error code
+ * is written to through the `p_error' parameter. See below for
+ * for documentation.
+ */
+
+ FT_BASE( FT_Pointer )
+ ft_mem_alloc( FT_Memory memory,
+ FT_Long size,
+ FT_Error *p_error );
+
+ FT_BASE( FT_Pointer )
+ ft_mem_qalloc( FT_Memory memory,
+ FT_Long size,
+ FT_Error *p_error );
+
+ FT_BASE( FT_Pointer )
+ ft_mem_realloc( FT_Memory memory,
+ FT_Long item_size,
+ FT_Long cur_count,
+ FT_Long new_count,
+ void* block,
+ FT_Error *p_error );
+
+ FT_BASE( FT_Pointer )
+ ft_mem_qrealloc( FT_Memory memory,
+ FT_Long item_size,
+ FT_Long cur_count,
+ FT_Long new_count,
+ void* block,
+ FT_Error *p_error );
+
+ FT_BASE( void )
+ ft_mem_free( FT_Memory memory,
+ const void* P );
+
+
+#define FT_MEM_ALLOC( ptr, size ) \
+ FT_ASSIGNP_INNER( ptr, ft_mem_alloc( memory, (size), &error ) )
+
+#define FT_MEM_FREE( ptr ) \
+ FT_BEGIN_STMNT \
+ ft_mem_free( memory, (ptr) ); \
+ (ptr) = NULL; \
+ FT_END_STMNT
+
+#define FT_MEM_NEW( ptr ) \
+ FT_MEM_ALLOC( ptr, sizeof ( *(ptr) ) )
+
+#define FT_MEM_REALLOC( ptr, cursz, newsz ) \
+ FT_ASSIGNP_INNER( ptr, ft_mem_realloc( memory, 1, \
+ (cursz), (newsz), \
+ (ptr), &error ) )
+
+#define FT_MEM_QALLOC( ptr, size ) \
+ FT_ASSIGNP_INNER( ptr, ft_mem_qalloc( memory, (size), &error ) )
+
+#define FT_MEM_QNEW( ptr ) \
+ FT_MEM_QALLOC( ptr, sizeof ( *(ptr) ) )
+
+#define FT_MEM_QREALLOC( ptr, cursz, newsz ) \
+ FT_ASSIGNP_INNER( ptr, ft_mem_qrealloc( memory, 1, \
+ (cursz), (newsz), \
+ (ptr), &error ) )
+
+#define FT_MEM_QRENEW_ARRAY( ptr, cursz, newsz ) \
+ FT_ASSIGNP_INNER( ptr, ft_mem_qrealloc( memory, sizeof ( *(ptr) ), \
+ (cursz), (newsz), \
+ (ptr), &error ) )
+
+#define FT_MEM_ALLOC_MULT( ptr, count, item_size ) \
+ FT_ASSIGNP_INNER( ptr, ft_mem_realloc( memory, (item_size), \
+ 0, (count), \
+ NULL, &error ) )
+
+#define FT_MEM_REALLOC_MULT( ptr, oldcnt, newcnt, itmsz ) \
+ FT_ASSIGNP_INNER( ptr, ft_mem_realloc( memory, (itmsz), \
+ (oldcnt), (newcnt), \
+ (ptr), &error ) )
+
+#define FT_MEM_QALLOC_MULT( ptr, count, item_size ) \
+ FT_ASSIGNP_INNER( ptr, ft_mem_qrealloc( memory, (item_size), \
+ 0, (count), \
+ NULL, &error ) )
+
+#define FT_MEM_QREALLOC_MULT( ptr, oldcnt, newcnt, itmsz) \
+ FT_ASSIGNP_INNER( ptr, ft_mem_qrealloc( memory, (itmsz), \
+ (oldcnt), (newcnt), \
+ (ptr), &error ) )
+
+
+#define FT_MEM_SET_ERROR( cond ) ( (cond), error != 0 )
+
+
+#define FT_MEM_SET( dest, byte, count ) ft_memset( dest, byte, count )
+
+#define FT_MEM_COPY( dest, source, count ) ft_memcpy( dest, source, count )
+
+#define FT_MEM_MOVE( dest, source, count ) ft_memmove( dest, source, count )
+
+
+#define FT_MEM_ZERO( dest, count ) FT_MEM_SET( dest, 0, count )
+
+#define FT_ZERO( p ) FT_MEM_ZERO( p, sizeof ( *(p) ) )
+
+
+#define FT_ARRAY_ZERO( dest, count ) \
+ FT_MEM_ZERO( dest, (count) * sizeof ( *(dest) ) )
+
+#define FT_ARRAY_COPY( dest, source, count ) \
+ FT_MEM_COPY( dest, source, (count) * sizeof ( *(dest) ) )
+
+#define FT_ARRAY_MOVE( dest, source, count ) \
+ FT_MEM_MOVE( dest, source, (count) * sizeof ( *(dest) ) )
+
+
+ /*
+ * Return the maximum number of addressable elements in an array.
+ * We limit ourselves to INT_MAX, rather than UINT_MAX, to avoid
+ * any problems.
+ */
+#define FT_ARRAY_MAX( ptr ) ( FT_INT_MAX / sizeof ( *(ptr) ) )
+
+#define FT_ARRAY_CHECK( ptr, count ) ( (count) <= FT_ARRAY_MAX( ptr ) )
+
+
+ /*************************************************************************/
+ /* */
+ /* The following functions macros expect that their pointer argument is */
+ /* _typed_ in order to automatically compute array element sizes. */
+ /* */
+
+#define FT_MEM_NEW_ARRAY( ptr, count ) \
+ FT_ASSIGNP_INNER( ptr, ft_mem_realloc( memory, sizeof ( *(ptr) ), \
+ 0, (count), \
+ NULL, &error ) )
+
+#define FT_MEM_RENEW_ARRAY( ptr, cursz, newsz ) \
+ FT_ASSIGNP_INNER( ptr, ft_mem_realloc( memory, sizeof ( *(ptr) ), \
+ (cursz), (newsz), \
+ (ptr), &error ) )
+
+#define FT_MEM_QNEW_ARRAY( ptr, count ) \
+ FT_ASSIGNP_INNER( ptr, ft_mem_qrealloc( memory, sizeof ( *(ptr) ), \
+ 0, (count), \
+ NULL, &error ) )
+
+#define FT_MEM_QRENEW_ARRAY( ptr, cursz, newsz ) \
+ FT_ASSIGNP_INNER( ptr, ft_mem_qrealloc( memory, sizeof ( *(ptr) ), \
+ (cursz), (newsz), \
+ (ptr), &error ) )
+
+
+#define FT_ALLOC( ptr, size ) \
+ FT_MEM_SET_ERROR( FT_MEM_ALLOC( ptr, size ) )
+
+#define FT_REALLOC( ptr, cursz, newsz ) \
+ FT_MEM_SET_ERROR( FT_MEM_REALLOC( ptr, cursz, newsz ) )
+
+#define FT_ALLOC_MULT( ptr, count, item_size ) \
+ FT_MEM_SET_ERROR( FT_MEM_ALLOC_MULT( ptr, count, item_size ) )
+
+#define FT_REALLOC_MULT( ptr, oldcnt, newcnt, itmsz ) \
+ FT_MEM_SET_ERROR( FT_MEM_REALLOC_MULT( ptr, oldcnt, \
+ newcnt, itmsz ) )
+
+#define FT_QALLOC( ptr, size ) \
+ FT_MEM_SET_ERROR( FT_MEM_QALLOC( ptr, size ) )
+
+#define FT_QREALLOC( ptr, cursz, newsz ) \
+ FT_MEM_SET_ERROR( FT_MEM_QREALLOC( ptr, cursz, newsz ) )
+
+#define FT_QALLOC_MULT( ptr, count, item_size ) \
+ FT_MEM_SET_ERROR( FT_MEM_QALLOC_MULT( ptr, count, item_size ) )
+
+#define FT_QREALLOC_MULT( ptr, oldcnt, newcnt, itmsz ) \
+ FT_MEM_SET_ERROR( FT_MEM_QREALLOC_MULT( ptr, oldcnt, \
+ newcnt, itmsz ) )
+
+#define FT_FREE( ptr ) FT_MEM_FREE( ptr )
+
+#define FT_NEW( ptr ) FT_MEM_SET_ERROR( FT_MEM_NEW( ptr ) )
+
+#define FT_NEW_ARRAY( ptr, count ) \
+ FT_MEM_SET_ERROR( FT_MEM_NEW_ARRAY( ptr, count ) )
+
+#define FT_RENEW_ARRAY( ptr, curcnt, newcnt ) \
+ FT_MEM_SET_ERROR( FT_MEM_RENEW_ARRAY( ptr, curcnt, newcnt ) )
+
+#define FT_QNEW( ptr ) \
+ FT_MEM_SET_ERROR( FT_MEM_QNEW( ptr ) )
+
+#define FT_QNEW_ARRAY( ptr, count ) \
+ FT_MEM_SET_ERROR( FT_MEM_NEW_ARRAY( ptr, count ) )
+
+#define FT_QRENEW_ARRAY( ptr, curcnt, newcnt ) \
+ FT_MEM_SET_ERROR( FT_MEM_RENEW_ARRAY( ptr, curcnt, newcnt ) )
+
+
+#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
+
+ FT_BASE( FT_Error )
+ FT_Alloc( FT_Memory memory,
+ FT_Long size,
+ void* *P );
+
+ FT_BASE( FT_Error )
+ FT_QAlloc( FT_Memory memory,
+ FT_Long size,
+ void* *p );
+
+ FT_BASE( FT_Error )
+ FT_Realloc( FT_Memory memory,
+ FT_Long current,
+ FT_Long size,
+ void* *P );
+
+ FT_BASE( FT_Error )
+ FT_QRealloc( FT_Memory memory,
+ FT_Long current,
+ FT_Long size,
+ void* *p );
+
+ FT_BASE( void )
+ FT_Free( FT_Memory memory,
+ void* *P );
+
+#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
+
+
+ FT_BASE( FT_Pointer )
+ ft_mem_strdup( FT_Memory memory,
+ const char* str,
+ FT_Error *p_error );
+
+ FT_BASE( FT_Pointer )
+ ft_mem_dup( FT_Memory memory,
+ const void* address,
+ FT_ULong size,
+ FT_Error *p_error );
+
+#define FT_MEM_STRDUP( dst, str ) \
+ (dst) = (char*)ft_mem_strdup( memory, (const char*)(str), &error )
+
+#define FT_STRDUP( dst, str ) \
+ FT_MEM_SET_ERROR( FT_MEM_STRDUP( dst, str ) )
+
+#define FT_MEM_DUP( dst, address, size ) \
+ (dst) = ft_mem_dup( memory, (address), (FT_ULong)(size), &error )
+
+#define FT_DUP( dst, address, size ) \
+ FT_MEM_SET_ERROR( FT_MEM_DUP( dst, address, size ) )
+
+
+ /* Return >= 1 if a truncation occurs. */
+ /* Return 0 if the source string fits the buffer. */
+ /* This is *not* the same as strlcpy(). */
+ FT_BASE( FT_Int )
+ ft_mem_strcpyn( char* dst,
+ const char* src,
+ FT_ULong size );
+
+#define FT_STRCPYN( dst, src, size ) \
+ ft_mem_strcpyn( (char*)dst, (const char*)(src), (FT_ULong)(size) )
+
+ /* */
+
+
+FT_END_HEADER
+
+#endif /* __FTMEMORY_H__ */
+
+
+/* END */
diff --git a/src/3rdparty/freetype/include/freetype/internal/ftobjs.h b/src/3rdparty/freetype/include/freetype/internal/ftobjs.h
new file mode 100644
index 0000000..1f22343
--- /dev/null
+++ b/src/3rdparty/freetype/include/freetype/internal/ftobjs.h